diff --git a/core/src/main/java/google/registry/rde/RdeStagingMapper.java b/core/src/main/java/google/registry/rde/RdeStagingMapper.java index 78e46bb54..30d3c30c6 100644 --- a/core/src/main/java/google/registry/rde/RdeStagingMapper.java +++ b/core/src/main/java/google/registry/rde/RdeStagingMapper.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.googlecode.objectify.Result; import google.registry.model.EppResource; import google.registry.model.contact.ContactResource; @@ -44,6 +45,11 @@ public final class RdeStagingMapper extends Mapper IGNORED_REGISTRAR_TYPES = + Sets.immutableEnumSet(Registrar.Type.MONITORING, Registrar.Type.TEST); + private final RdeMarshaller marshaller; private final ImmutableSetMultimap pendings; @@ -64,6 +70,9 @@ public final class RdeStagingMapper extends Mapper(.*)"); + + @Mock PendingDeposit pendingDeposit; + + @Mock MapperContext context; + + ArgumentCaptor depositFragmentCaptor = + ArgumentCaptor.forClass(DepositFragment.class); + + @RegisterExtension + AppEngineRule appEngineRule = AppEngineRule.builder().withDatastoreAndCloudSql().build(); + + private RdeStagingMapper rdeStagingMapper; + + @BeforeEach + void beforeEach() { + // Two real registrars have been created by AppEngineRule, named "New Registrar" and "The + // Registrar". Create one included registrar (external_monitoring) and two excluded ones. + Registrar monitoringRegistrar = + persistNewRegistrar("monitoring", "monitoring", Registrar.Type.MONITORING, null); + Registrar testRegistrar = persistNewRegistrar("test", "test", Registrar.Type.TEST, null); + Registrar externalMonitoringRegistrar = + persistNewRegistrar( + "externalmonitor", "external_monitoring", Registrar.Type.EXTERNAL_MONITORING, 9997L); + + // Set Registrar states which are required for reporting. + tm().transact( + () -> + tm().saveNewOrUpdateAll( + ImmutableList.of( + externalMonitoringRegistrar.asBuilder().setState(State.ACTIVE).build(), + testRegistrar.asBuilder().setState(State.ACTIVE).build(), + monitoringRegistrar.asBuilder().setState(State.ACTIVE).build()))); + + rdeStagingMapper = + new RdeStagingMapper(ValidationMode.STRICT, ImmutableSetMultimap.of("1", pendingDeposit)); + rdeStagingMapper.setContext(context); + } + + @Test + void registrars_ignoreMonitoringAndTestTypes() { + rdeStagingMapper.map(null); + verify(context, Mockito.times(3)) + .emit(any(PendingDeposit.class), depositFragmentCaptor.capture()); + assertThat( + depositFragmentCaptor.getAllValues().stream() + .map(RdeStagingMapperTest::findRegistrarName)) + .containsExactly("New Registrar", "The Registrar", "external_monitoring"); + } + + private static String findRegistrarName(DepositFragment fragment) { + Matcher matcher = REGISTRAR_NAME_PATTERN.matcher(fragment.xml()); + checkState(matcher.find(), "Missing registarName in xml."); + return matcher.group(1); + } +}