Using Gmail for most use cases (#2126)

* Using Gmail for most use cases
This commit is contained in:
Weimin Yu 2023-08-28 11:11:59 -04:00 committed by GitHub
parent 7b59c4abbf
commit e6f9b1c7e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 58 additions and 57 deletions

View file

@ -31,6 +31,7 @@ import com.google.common.flogger.FluentLogger;
import com.google.common.net.MediaType;
import google.registry.config.RegistryConfig.Config;
import google.registry.flows.certs.CertificateChecker;
import google.registry.groups.GmailClient;
import google.registry.model.registrar.Registrar;
import google.registry.model.registrar.RegistrarPoc;
import google.registry.model.registrar.RegistrarPoc.Type;
@ -38,7 +39,6 @@ import google.registry.request.Action;
import google.registry.request.Response;
import google.registry.request.auth.Auth;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.Date;
import java.util.Optional;
import javax.inject.Inject;
@ -72,7 +72,7 @@ public class SendExpiringCertificateNotificationEmailAction implements Runnable
private final CertificateChecker certificateChecker;
private final String expirationWarningEmailBodyText;
private final SendEmailService sendEmailService;
private final GmailClient gmailClient;
private final String expirationWarningEmailSubjectText;
private final InternetAddress gSuiteOutgoingEmailAddress;
private final Response response;
@ -82,12 +82,12 @@ public class SendExpiringCertificateNotificationEmailAction implements Runnable
@Config("expirationWarningEmailBodyText") String expirationWarningEmailBodyText,
@Config("expirationWarningEmailSubjectText") String expirationWarningEmailSubjectText,
@Config("gSuiteOutgoingEmailAddress") InternetAddress gSuiteOutgoingEmailAddress,
SendEmailService sendEmailService,
GmailClient gmailClient,
CertificateChecker certificateChecker,
Response response) {
this.certificateChecker = certificateChecker;
this.expirationWarningEmailSubjectText = expirationWarningEmailSubjectText;
this.sendEmailService = sendEmailService;
this.gmailClient = gmailClient;
this.gSuiteOutgoingEmailAddress = gSuiteOutgoingEmailAddress;
this.expirationWarningEmailBodyText = expirationWarningEmailBodyText;
this.response = response;
@ -173,7 +173,7 @@ public class SendExpiringCertificateNotificationEmailAction implements Runnable
registrar.getRegistrarName());
return false;
}
sendEmailService.sendEmail(
gmailClient.sendEmail(
EmailMessage.newBuilder()
.setFrom(gSuiteOutgoingEmailAddress)
.setSubject(expirationWarningEmailSubjectText)

View file

@ -45,6 +45,7 @@ import google.registry.dns.DnsMetrics.ActionStatus;
import google.registry.dns.DnsMetrics.CommitStatus;
import google.registry.dns.DnsMetrics.PublishStatus;
import google.registry.dns.writer.DnsWriter;
import google.registry.groups.GmailClient;
import google.registry.model.domain.Domain;
import google.registry.model.host.Host;
import google.registry.model.registrar.Registrar;
@ -61,7 +62,6 @@ import google.registry.request.lock.LockHandler;
import google.registry.util.Clock;
import google.registry.util.DomainNameUtils;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Callable;
@ -112,7 +112,7 @@ public final class PublishDnsUpdatesAction implements Runnable, Callable<Void> {
private final Clock clock;
private final CloudTasksUtils cloudTasksUtils;
private final Response response;
private final SendEmailService sendEmailService;
private final GmailClient gmailClient;
private final String dnsUpdateFailEmailSubjectText;
private final String dnsUpdateFailEmailBodyText;
private final String dnsUpdateFailRegistryName;
@ -143,12 +143,12 @@ public final class PublishDnsUpdatesAction implements Runnable, Callable<Void> {
LockHandler lockHandler,
Clock clock,
CloudTasksUtils cloudTasksUtils,
SendEmailService sendEmailService,
GmailClient gmailClient,
Response response) {
this.dnsWriterProxy = dnsWriterProxy;
this.dnsMetrics = dnsMetrics;
this.timeout = timeout;
this.sendEmailService = sendEmailService;
this.gmailClient = gmailClient;
this.retryCount = retryCount;
this.dnsWriter = dnsWriter;
this.enqueuedTime = enqueuedTime;
@ -303,7 +303,7 @@ public final class PublishDnsUpdatesAction implements Runnable, Callable<Void> {
.map(PublishDnsUpdatesAction::emailToInternetAddress)
.collect(toImmutableList());
sendEmailService.sendEmail(
gmailClient.sendEmail(
EmailMessage.newBuilder()
.setBody(body)
.setSubject(dnsUpdateFailEmailSubjectText)

View file

@ -23,6 +23,7 @@ import com.google.api.services.gmail.model.Message;
import com.google.common.collect.ImmutableSet;
import com.google.common.flogger.FluentLogger;
import com.google.common.net.MediaType;
import dagger.Lazy;
import google.registry.config.RegistryConfig.Config;
import google.registry.util.EmailMessage;
import google.registry.util.EmailMessage.Attachment;
@ -49,7 +50,7 @@ public final class GmailClient {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private final Gmail gmail;
private final Lazy<Gmail> gmail;
private final Retrier retrier;
private final boolean isEmailSendingEnabled;
private final InternetAddress outgoingEmailAddressWithUsername;
@ -57,7 +58,7 @@ public final class GmailClient {
@Inject
GmailClient(
Gmail gmail,
Lazy<Gmail> gmail,
Retrier retrier,
@Config("isEmailSendingEnabled") boolean isEmailSendingEnabled,
@Config("gSuiteNewOutgoingEmailAddress") String gSuiteOutgoingEmailAddress,
@ -99,7 +100,7 @@ public final class GmailClient {
// Unlike other Cloud APIs such as GCS and SecretManager, Gmail does not retry on errors.
retrier.callWithRetry(
// "me" is reserved word for the authorized user of the Gmail API.
() -> this.gmail.users().messages().send("me", message).execute(),
() -> this.gmail.get().users().messages().send("me", message).execute(),
RetriableGmailExceptionPredicate.INSTANCE);
}

View file

@ -20,8 +20,8 @@ import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.flogger.FluentLogger;
import google.registry.config.RegistryConfig.Config;
import google.registry.groups.GmailClient;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Stream;
@ -38,7 +38,7 @@ public class SendEmailUtils {
private final InternetAddress gSuiteOutgoingEmailAddress;
private final String gSuiteOutgoingEmailDisplayName;
private final SendEmailService emailService;
private final GmailClient gmailClient;
private final ImmutableList<String> registrarChangesNotificationEmailAddresses;
@Inject
@ -47,10 +47,10 @@ public class SendEmailUtils {
@Config("gSuiteOutgoingEmailDisplayName") String gSuiteOutgoingEmailDisplayName,
@Config("registrarChangesNotificationEmailAddresses")
ImmutableList<String> registrarChangesNotificationEmailAddresses,
SendEmailService emailService) {
GmailClient gmailClient) {
this.gSuiteOutgoingEmailAddress = gSuiteOutgoingEmailAddress;
this.gSuiteOutgoingEmailDisplayName = gSuiteOutgoingEmailDisplayName;
this.emailService = emailService;
this.gmailClient = gmailClient;
this.registrarChangesNotificationEmailAddresses = registrarChangesNotificationEmailAddresses;
}
@ -109,7 +109,7 @@ public class SendEmailUtils {
"Could not send email to %s with subject '%s'.", bcc, subject);
}
}
emailService.sendEmail(emailMessage.build());
gmailClient.sendEmail(emailMessage.build());
return true;
} catch (Throwable t) {
logger.atSevere().withCause(t).log(

View file

@ -28,6 +28,7 @@ import static org.mockito.Mockito.verifyNoInteractions;
import com.google.common.collect.ImmutableList;
import com.google.common.testing.TestLogHandler;
import google.registry.groups.GmailClient;
import google.registry.model.billing.BillingBase.RenewalPriceBehavior;
import google.registry.model.contact.Contact;
import google.registry.model.domain.token.AllocationToken;
@ -39,7 +40,6 @@ import google.registry.testing.DatabaseHelper;
import google.registry.testing.FakeClock;
import google.registry.ui.server.SendEmailUtils;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.internet.InternetAddress;
@ -77,7 +77,7 @@ public class CheckBulkComplianceActionTest {
private final TestLogHandler logHandler = new TestLogHandler();
private final Logger loggerToIntercept =
Logger.getLogger(CheckBulkComplianceAction.class.getCanonicalName());
private final SendEmailService emailService = mock(SendEmailService.class);
private final GmailClient gmailClient = mock(GmailClient.class);
private Contact contact;
private BulkPricingPackage bulkPricingPackage;
private SendEmailUtils sendEmailUtils;
@ -91,7 +91,7 @@ public class CheckBulkComplianceActionTest {
new InternetAddress("outgoing@registry.example"),
"UnitTest Registry",
ImmutableList.of("notification@test.example", "notification2@test.example"),
emailService);
gmailClient);
createTld("tld");
action =
new CheckBulkComplianceAction(
@ -143,7 +143,7 @@ public class CheckBulkComplianceActionTest {
.build());
action.run();
verifyNoInteractions(emailService);
verifyNoInteractions(gmailClient);
assertAboutLogs()
.that(logHandler)
.hasLogAtLevelWithMessage(
@ -176,7 +176,7 @@ public class CheckBulkComplianceActionTest {
Level.INFO,
"Bulk pricing package with bulk token abc123 has exceeded their max domain creation"
+ " limit by 1 name(s).");
verify(emailService).sendEmail(emailCaptor.capture());
verify(gmailClient).sendEmail(emailCaptor.capture());
EmailMessage emailMessage = emailCaptor.getValue();
assertThat(emailMessage.subject()).isEqualTo(CREATE_LIMIT_EMAIL_SUBJECT);
assertThat(emailMessage.body())
@ -248,7 +248,7 @@ public class CheckBulkComplianceActionTest {
Level.INFO,
"Bulk pricing package with bulk token token has exceeded their max domain creation"
+ " limit by 1 name(s).");
verify(emailService, times(2)).sendEmail(any(EmailMessage.class));
verify(gmailClient, times(2)).sendEmail(any(EmailMessage.class));
}
@Test
@ -292,7 +292,7 @@ public class CheckBulkComplianceActionTest {
.that(logHandler)
.hasLogAtLevelWithMessage(
Level.INFO, "Found no bulk pricing packages over their create limit.");
verifyNoInteractions(emailService);
verifyNoInteractions(gmailClient);
}
@Test
@ -305,7 +305,7 @@ public class CheckBulkComplianceActionTest {
.build());
action.run();
verifyNoInteractions(emailService);
verifyNoInteractions(gmailClient);
assertAboutLogs()
.that(logHandler)
.hasLogAtLevelWithMessage(
@ -365,7 +365,7 @@ public class CheckBulkComplianceActionTest {
Level.INFO,
"Bulk pricing package with bulk token abc123 has exceed their max active domains limit"
+ " by 1 name(s).");
verify(emailService).sendEmail(emailCaptor.capture());
verify(gmailClient).sendEmail(emailCaptor.capture());
EmailMessage emailMessage = emailCaptor.getValue();
assertThat(emailMessage.subject()).isEqualTo(DOMAIN_LIMIT_WARNING_EMAIL_SUBJECT);
assertThat(emailMessage.body())
@ -442,7 +442,7 @@ public class CheckBulkComplianceActionTest {
Level.INFO,
"Bulk pricing package with bulk token token has exceed their max active domains limit"
+ " by 1 name(s).");
verify(emailService, times(2)).sendEmail(any(EmailMessage.class));
verify(gmailClient, times(2)).sendEmail(any(EmailMessage.class));
}
@Test
@ -479,7 +479,7 @@ public class CheckBulkComplianceActionTest {
Level.INFO,
"Bulk pricing package with bulk token abc123 has exceed their max active domains limit"
+ " by 1 name(s).");
verifyNoInteractions(emailService);
verifyNoInteractions(gmailClient);
BulkPricingPackage packageAfterCheck =
tm().transact(() -> BulkPricingPackage.loadByTokenString(token.getToken()).get());
assertThat(packageAfterCheck.getLastNotificationSent().get())
@ -520,7 +520,7 @@ public class CheckBulkComplianceActionTest {
Level.INFO,
"Bulk pricing package with bulk token abc123 has exceed their max active domains limit"
+ " by 1 name(s).");
verify(emailService).sendEmail(emailCaptor.capture());
verify(gmailClient).sendEmail(emailCaptor.capture());
EmailMessage emailMessage = emailCaptor.getValue();
assertThat(emailMessage.subject()).isEqualTo(DOMAIN_LIMIT_WARNING_EMAIL_SUBJECT);
assertThat(emailMessage.body())
@ -565,7 +565,7 @@ public class CheckBulkComplianceActionTest {
Level.INFO,
"Bulk pricing package with bulk token abc123 has exceed their max active domains limit"
+ " by 1 name(s).");
verify(emailService).sendEmail(emailCaptor.capture());
verify(gmailClient).sendEmail(emailCaptor.capture());
EmailMessage emailMessage = emailCaptor.getValue();
assertThat(emailMessage.subject()).isEqualTo(DOMAIN_LIMIT_UPGRADE_EMAIL_SUBJECT);
assertThat(emailMessage.body())

View file

@ -32,6 +32,7 @@ import com.google.common.collect.ImmutableSortedMap;
import google.registry.batch.SendExpiringCertificateNotificationEmailAction.CertificateType;
import google.registry.batch.SendExpiringCertificateNotificationEmailAction.RegistrarInfo;
import google.registry.flows.certs.CertificateChecker;
import google.registry.groups.GmailClient;
import google.registry.model.registrar.Registrar;
import google.registry.model.registrar.RegistrarAddress;
import google.registry.model.registrar.RegistrarPoc;
@ -41,7 +42,6 @@ import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationT
import google.registry.testing.FakeClock;
import google.registry.testing.FakeResponse;
import google.registry.util.SelfSignedCaCertificate;
import google.registry.util.SendEmailService;
import java.security.cert.X509Certificate;
import java.util.Optional;
import javax.annotation.Nullable;
@ -75,7 +75,7 @@ class SendExpiringCertificateNotificationEmailActionTest {
new JpaTestExtensions.Builder().buildIntegrationTestExtension();
private final FakeClock clock = new FakeClock(DateTime.parse("2021-05-24T20:21:22Z"));
private final SendEmailService sendEmailService = mock(SendEmailService.class);
private final GmailClient sendEmailService = mock(GmailClient.class);
private CertificateChecker certificateChecker;
private SendExpiringCertificateNotificationEmailAction action;
private Registrar sampleRegistrar;

View file

@ -50,6 +50,7 @@ import google.registry.dns.DnsMetrics.ActionStatus;
import google.registry.dns.DnsMetrics.CommitStatus;
import google.registry.dns.DnsMetrics.PublishStatus;
import google.registry.dns.writer.DnsWriter;
import google.registry.groups.GmailClient;
import google.registry.model.domain.Domain;
import google.registry.model.tld.Tld;
import google.registry.persistence.transaction.JpaTestExtensions;
@ -63,7 +64,6 @@ import google.registry.testing.FakeLockHandler;
import google.registry.testing.FakeResponse;
import google.registry.testing.Lazies;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.Set;
import javax.mail.internet.InternetAddress;
import org.joda.time.DateTime;
@ -90,7 +90,7 @@ public class PublishDnsUpdatesActionTest {
private InternetAddress outgoingRegistry;
private Lazy<InternetAddress> registrySupportEmail;
private Lazy<InternetAddress> registryCcEmail;
private final SendEmailService emailService = mock(SendEmailService.class);
private final GmailClient emailService = mock(GmailClient.class);
@BeforeEach
void beforeEach() throws Exception {

View file

@ -61,7 +61,7 @@ public class GmailClientTest {
private GmailClient getGmailClient(boolean isExternalEmailAllowed) throws Exception {
return new GmailClient(
gmail,
() -> gmail,
new Retrier(new SystemSleeper(), 3),
isExternalEmailAllowed,
"from@example.com",

View file

@ -22,8 +22,8 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import com.google.common.collect.ImmutableList;
import google.registry.groups.GmailClient;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.Optional;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
@ -33,7 +33,7 @@ import org.mockito.ArgumentCaptor;
/** Unit tests for {@link SendEmailUtils}. */
class SendEmailUtilsTest {
private final SendEmailService emailService = mock(SendEmailService.class);
private final GmailClient gmailClient = mock(GmailClient.class);
private SendEmailUtils sendEmailUtils;
private void setRecipients(ImmutableList<String> recipients) throws Exception {
@ -42,7 +42,7 @@ class SendEmailUtilsTest {
new InternetAddress("outgoing@registry.example"),
"outgoing display name",
recipients,
emailService);
gmailClient);
}
@Test
@ -90,7 +90,7 @@ class SendEmailUtilsTest {
"Welcome to the Internet",
"It is a dark and scary place."))
.isFalse();
verify(emailService, never()).sendEmail(any());
verify(gmailClient, never()).sendEmail(any());
}
@Test
@ -102,7 +102,7 @@ class SendEmailUtilsTest {
"Welcome to the Internet",
"It is a dark and scary place."))
.isFalse();
verify(emailService, never()).sendEmail(any());
verify(gmailClient, never()).sendEmail(any());
}
@Test
@ -110,7 +110,7 @@ class SendEmailUtilsTest {
setRecipients(ImmutableList.of("foo@example.com"));
assertThat(sendEmailUtils.hasRecipients()).isTrue();
doThrow(new RuntimeException(new MessagingException("expected")))
.when(emailService)
.when(gmailClient)
.sendEmail(any());
assertThat(
sendEmailUtils.sendEmail(
@ -131,7 +131,7 @@ class SendEmailUtilsTest {
ImmutableList.of("baz@example.com"));
ArgumentCaptor<EmailMessage> contentCaptor = ArgumentCaptor.forClass(EmailMessage.class);
verify(emailService).sendEmail(contentCaptor.capture());
verify(gmailClient).sendEmail(contentCaptor.capture());
EmailMessage emailMessage = contentCaptor.getValue();
ImmutableList.Builder<InternetAddress> recipientBuilder = ImmutableList.builder();
for (String expectedRecipient : ImmutableList.of("johnny@fakesite.tld", "baz@example.com")) {
@ -176,7 +176,7 @@ class SendEmailUtilsTest {
private void verifyMessageSent(String... expectedRecipients) throws Exception {
ArgumentCaptor<EmailMessage> contentCaptor = ArgumentCaptor.forClass(EmailMessage.class);
verify(emailService).sendEmail(contentCaptor.capture());
verify(gmailClient).sendEmail(contentCaptor.capture());
EmailMessage emailMessage = contentCaptor.getValue();
ImmutableList.Builder<InternetAddress> recipientBuilder = ImmutableList.builder();
for (String expectedRecipient : expectedRecipients) {

View file

@ -31,6 +31,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSetMultimap;
import google.registry.config.RegistryEnvironment;
import google.registry.groups.GmailClient;
import google.registry.model.tld.Tld;
import google.registry.persistence.transaction.JpaTestExtensions;
import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension;
@ -47,7 +48,6 @@ import google.registry.testing.SystemPropertyExtension;
import google.registry.testing.UserServiceExtension;
import google.registry.ui.server.SendEmailUtils;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.Optional;
import javax.mail.internet.InternetAddress;
import javax.servlet.http.HttpServletRequest;
@ -79,7 +79,7 @@ public final class ConsoleOteSetupActionTest {
private final User user = new User("marla.singer@example.com", "gmail.com", "12345");
@Mock HttpServletRequest request;
@Mock SendEmailService emailService;
@Mock GmailClient gmailClient;
@BeforeEach
void beforeEach() throws Exception {
@ -99,7 +99,7 @@ public final class ConsoleOteSetupActionTest {
new InternetAddress("outgoing@registry.example"),
"UnitTest Registry",
ImmutableList.of("notification@test.example", "notification2@test.example"),
emailService);
gmailClient);
action.logoFilename = "logo.png";
action.productName = "Nomulus";
action.clientId = Optional.empty();
@ -158,7 +158,7 @@ public final class ConsoleOteSetupActionTest {
assertThat(response.getPayload())
.contains("<h1>OT&E successfully created for registrar myclientid!</h1>");
ArgumentCaptor<EmailMessage> contentCaptor = ArgumentCaptor.forClass(EmailMessage.class);
verify(emailService).sendEmail(contentCaptor.capture());
verify(gmailClient).sendEmail(contentCaptor.capture());
EmailMessage emailMessage = contentCaptor.getValue();
assertThat(emailMessage.subject())
.isEqualTo("OT&E for registrar myclientid created in unittest");

View file

@ -29,6 +29,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSetMultimap;
import google.registry.config.RegistryEnvironment;
import google.registry.groups.GmailClient;
import google.registry.model.registrar.Registrar;
import google.registry.model.registrar.RegistrarAddress;
import google.registry.model.registrar.RegistrarPoc;
@ -47,7 +48,6 @@ import google.registry.testing.SystemPropertyExtension;
import google.registry.testing.UserServiceExtension;
import google.registry.ui.server.SendEmailUtils;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.util.Optional;
import javax.mail.internet.InternetAddress;
import javax.servlet.http.HttpServletRequest;
@ -79,7 +79,7 @@ final class ConsoleRegistrarCreatorActionTest {
private final User user = new User("marla.singer@example.com", "gmail.com", "12345");
@Mock HttpServletRequest request;
@Mock SendEmailService emailService;
@Mock GmailClient gmailClient;
@BeforeEach
void beforeEach() throws Exception {
@ -99,7 +99,7 @@ final class ConsoleRegistrarCreatorActionTest {
new InternetAddress("outgoing@registry.example"),
"UnitTest Registry",
ImmutableList.of("notification@test.example", "notification2@test.example"),
emailService);
gmailClient);
action.logoFilename = "logo.png";
action.productName = "Nomulus";
@ -183,7 +183,7 @@ final class ConsoleRegistrarCreatorActionTest {
.contains("<h1>Successfully created Registrar myclientid</h1>");
ArgumentCaptor<EmailMessage> contentCaptor = ArgumentCaptor.forClass(EmailMessage.class);
verify(emailService).sendEmail(contentCaptor.capture());
verify(gmailClient).sendEmail(contentCaptor.capture());
EmailMessage emailMessage = contentCaptor.getValue();
assertThat(emailMessage.subject()).isEqualTo("Registrar myclientid created in unittest");
assertThat(emailMessage.body())

View file

@ -65,7 +65,7 @@ class RegistrarSettingsActionTest extends RegistrarSettingsActionTestCase {
verify(rsp, never()).setStatus(anyInt());
verifyNotificationEmailsSent();
ArgumentCaptor<EmailMessage> contentCaptor = ArgumentCaptor.forClass(EmailMessage.class);
verify(emailService).sendEmail(contentCaptor.capture());
verify(gmailClient).sendEmail(contentCaptor.capture());
assertThat(contentCaptor.getValue().body()).isEqualTo(expectedEmailBody);
cloudTasksHelper.assertTasksEnqueued(
"sheet",

View file

@ -36,6 +36,7 @@ import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.truth.Truth;
import google.registry.flows.certs.CertificateChecker;
import google.registry.groups.GmailClient;
import google.registry.model.registrar.RegistrarPoc;
import google.registry.persistence.transaction.JpaTestExtensions;
import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension;
@ -50,7 +51,6 @@ import google.registry.testing.CloudTasksHelper;
import google.registry.testing.FakeClock;
import google.registry.ui.server.SendEmailUtils;
import google.registry.util.EmailMessage;
import google.registry.util.SendEmailService;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.mail.internet.InternetAddress;
@ -82,7 +82,7 @@ public abstract class RegistrarSettingsActionTestCase {
@Mock HttpServletRequest req;
@Mock HttpServletResponse rsp;
@Mock SendEmailService emailService;
@Mock GmailClient gmailClient;
final RegistrarSettingsAction action = new RegistrarSettingsAction();
private final StringWriter writer = new StringWriter();
@ -110,7 +110,7 @@ public abstract class RegistrarSettingsActionTestCase {
getGSuiteOutgoingEmailAddress(),
getGSuiteOutgoingEmailDisplayName(),
ImmutableList.of("notification@test.example", "notification2@test.example"),
emailService);
gmailClient);
action.registrarConsoleMetrics = new RegistrarConsoleMetrics();
action.authResult =
AuthResult.create(
@ -172,7 +172,7 @@ public abstract class RegistrarSettingsActionTestCase {
/** Verifies that the original contact of TheRegistrar is among those notified of a change. */
void verifyNotificationEmailsSent() throws Exception {
ArgumentCaptor<EmailMessage> captor = ArgumentCaptor.forClass(EmailMessage.class);
verify(emailService).sendEmail(captor.capture());
verify(gmailClient).sendEmail(captor.capture());
Truth.assertThat(captor.getValue().recipients())
.containsExactly(
new InternetAddress("notification@test.example"),