diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index e07efb192..a9fba9638 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -151,8 +151,12 @@ "version": "1.2" }, { - "id": "settings", - "version": "1.2" + "id": "locale", + "version": "1.0" + }, + { + "id": "tenant-addresses", + "version": "1.0" } ], "optional": [ diff --git a/pom.xml b/pom.xml index 7de867cad..dd574224e 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,8 @@ 2.27.2 1.20.5 2.9.1 - 1.17.6 + 2.0.3 + 1.21.4 2.40.2 3.0.0-SNAPSHOT 1.3 @@ -262,14 +263,14 @@ org.testcontainers junit-jupiter - ${testcontainers.version} + ${testcontainers.extensions.version} test org.testcontainers postgresql - ${testcontainers.version} + ${testcontainers.extensions.version} test diff --git a/src/main/java/org/folio/dew/batch/acquisitions/services/ConfigurationService.java b/src/main/java/org/folio/dew/batch/acquisitions/services/ConfigurationService.java index 4045a212b..9552b6748 100644 --- a/src/main/java/org/folio/dew/batch/acquisitions/services/ConfigurationService.java +++ b/src/main/java/org/folio/dew/batch/acquisitions/services/ConfigurationService.java @@ -3,12 +3,12 @@ import java.util.UUID; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.folio.dew.client.SettingsClient; +import org.folio.dew.client.TenantAddressesClient; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -17,9 +17,11 @@ public class ConfigurationService { private static final Logger logger = LogManager.getLogger(); + private static final String ADDRESSES = "addresses"; + private static final String ID = "id"; + private static final String ADDRESS = "address"; - private final SettingsClient settingsClient; - private final ObjectMapper objectMapper; + private final TenantAddressesClient tenantAddressesClient; @Cacheable(cacheNames = "addressConfiguration") public String getAddressConfig(UUID shipToConfigId) { @@ -28,18 +30,30 @@ public String getAddressConfig(UUID shipToConfigId) { return ""; } try { - var settingEntry = settingsClient.getSettingById(shipToConfigId.toString()); + JsonNode addressesResponse = tenantAddressesClient.getTenantAddresses(); - if (settingEntry == null || !settingEntry.containsKey("value")) { - logger.warn("getAddressConfig:: Address on the config with id '{}' is not found", shipToConfigId); + if (addressesResponse == null || !addressesResponse.has(ADDRESSES)) { + logger.warn("getAddressConfig:: No addresses found in tenant-addresses response"); return ""; } - var value = settingEntry.get("value"); - JsonNode valueJsonObject = objectMapper.valueToTree(value); - return valueJsonObject.has("address") ? valueJsonObject.get("address").asText() : ""; + JsonNode addressesList = addressesResponse.get(ADDRESSES); + if (!addressesList.isArray() || addressesList.isEmpty()) { + logger.warn("getAddressConfig:: Addresses list is empty"); + return ""; + } + + for (JsonNode addressEntry : addressesList) { + String addressId = addressEntry.path(ID).asText(null); + if (StringUtils.equals(shipToConfigId.toString(), addressId)) { + logger.info("getAddressConfig:: Found address with id '{}'", shipToConfigId); + return addressEntry.path(ADDRESS).asText(""); + } + } + + return ""; } catch (Exception e) { - logger.warn("getAddressConfig:: Cannot find config by id: '{}'", shipToConfigId, e); + logger.warn("getAddressConfig:: Cannot find address by id: '{}'", shipToConfigId, e); return ""; } } diff --git a/src/main/java/org/folio/dew/batch/circulationlog/CirculationLogItemProcessor.java b/src/main/java/org/folio/dew/batch/circulationlog/CirculationLogItemProcessor.java index e69e3d530..21650ae05 100644 --- a/src/main/java/org/folio/dew/batch/circulationlog/CirculationLogItemProcessor.java +++ b/src/main/java/org/folio/dew/batch/circulationlog/CirculationLogItemProcessor.java @@ -1,12 +1,11 @@ package org.folio.dew.batch.circulationlog; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.JsonNode; import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; +import org.folio.dew.client.LocaleClient; import org.folio.dew.client.ServicePointClient; -import org.folio.dew.client.SettingsClient; import org.folio.dew.domain.dto.CirculationLogExportFormat; import org.folio.dew.domain.dto.LogRecord; import org.folio.dew.domain.dto.LogRecordItemsInner; @@ -19,7 +18,6 @@ import java.text.SimpleDateFormat; import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.TimeZone; import java.util.stream.Collectors; @@ -31,8 +29,7 @@ public class CirculationLogItemProcessor implements ItemProcessor { private final ServicePointClient servicePointClient; - private final SettingsClient settingsClient; - private final ObjectMapper objectMapper; + private final LocaleClient localeClient; private Map servicePointMap; private SimpleDateFormat format; @@ -75,32 +72,16 @@ private void initTenantSpecificDateFormat() { format = dateFormat; } - @SneakyThrows - @SuppressWarnings("unchecked") private String fetchTimezone() { try { - final Map tenantLocaleSettings = - settingsClient.getSettings("scope==stripes-core.prefs.manage and key==tenantLocaleSettings"); - - var resultInfo = (Map) tenantLocaleSettings.get("resultInfo"); - var totalRecords = (Integer) resultInfo.get("totalRecords"); - - if (totalRecords > 0) { - var items = (List>) tenantLocaleSettings.get("items"); - var settingsEntry = items.get(0); - var value = settingsEntry.get("value"); - - if (value instanceof String valueStr) { - return valueStr; - } else { - var jsonObject = objectMapper.valueToTree(value); - if (jsonObject.has("timezone")) { - return jsonObject.get("timezone").asText(); - } - } + JsonNode localeSettings = localeClient.getLocale(); + + if (localeSettings != null && localeSettings.has("timezone")) { + return localeSettings.get("timezone").asText("UTC"); } + log.warn("Timezone not found in locale settings, using default UTC"); } catch (Exception e) { - log.warn("Failed to fetch timezone from mod-settings: {}", e.getMessage()); + log.warn("Failed to fetch timezone from locale endpoint: {}", e.getMessage()); } return "UTC"; diff --git a/src/main/java/org/folio/dew/client/LocaleClient.java b/src/main/java/org/folio/dew/client/LocaleClient.java new file mode 100644 index 000000000..ac627e7ce --- /dev/null +++ b/src/main/java/org/folio/dew/client/LocaleClient.java @@ -0,0 +1,15 @@ +package org.folio.dew.client; + +import com.fasterxml.jackson.databind.JsonNode; +import org.folio.dew.config.feign.FeignClientConfiguration; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; + + +@FeignClient(name = "locale", configuration = FeignClientConfiguration.class) +public interface LocaleClient { + + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + JsonNode getLocale(); +} diff --git a/src/main/java/org/folio/dew/client/SettingsClient.java b/src/main/java/org/folio/dew/client/SettingsClient.java deleted file mode 100644 index 6070bccc9..000000000 --- a/src/main/java/org/folio/dew/client/SettingsClient.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.folio.dew.client; - -import org.folio.dew.config.feign.FeignClientConfiguration; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; - -import java.util.Map; - - -@FeignClient(name = "settings/entries", configuration = FeignClientConfiguration.class) -public interface SettingsClient { - - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - Map getSettings(@RequestParam("query") String query); - - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - Map getSettings(@RequestParam("query") String query, - @RequestParam("userId") String userId); - - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE, path = "/{entryId}") - Map getSettingById(@PathVariable String entryId); - - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE, path = "/{entryId}") - Map getSettingById(@PathVariable String entryId, - @RequestParam("userId") String userId); -} diff --git a/src/main/java/org/folio/dew/client/TenantAddressesClient.java b/src/main/java/org/folio/dew/client/TenantAddressesClient.java new file mode 100644 index 000000000..2e474f43f --- /dev/null +++ b/src/main/java/org/folio/dew/client/TenantAddressesClient.java @@ -0,0 +1,15 @@ +package org.folio.dew.client; + +import com.fasterxml.jackson.databind.JsonNode; +import org.folio.dew.config.feign.FeignClientConfiguration; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; + + +@FeignClient(name = "tenant-addresses", configuration = FeignClientConfiguration.class) +public interface TenantAddressesClient { + + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + JsonNode getTenantAddresses(); +} diff --git a/src/test/java/org/folio/dew/AuthorityControlConsortiumTest.java b/src/test/java/org/folio/dew/AuthorityControlConsortiumTest.java index 302529b6c..426197910 100644 --- a/src/test/java/org/folio/dew/AuthorityControlConsortiumTest.java +++ b/src/test/java/org/folio/dew/AuthorityControlConsortiumTest.java @@ -17,6 +17,7 @@ import java.time.LocalDate; import java.util.UUID; import lombok.SneakyThrows; +import org.apache.commons.io.FileUtils; import org.folio.de.entity.JobCommand; import org.folio.dew.config.kafka.KafkaService; import org.folio.dew.domain.dto.JobParameterNames; @@ -36,7 +37,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; -import org.testcontainers.shaded.org.apache.commons.io.FileUtils; class AuthorityControlConsortiumTest extends BaseBatchTest { diff --git a/src/test/java/org/folio/dew/AuthorityControlTest.java b/src/test/java/org/folio/dew/AuthorityControlTest.java index 02ba88bb3..966d88292 100644 --- a/src/test/java/org/folio/dew/AuthorityControlTest.java +++ b/src/test/java/org/folio/dew/AuthorityControlTest.java @@ -19,6 +19,7 @@ import java.util.UUID; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; +import org.apache.commons.io.FileUtils; import org.folio.de.entity.JobCommand; import org.folio.dew.config.kafka.KafkaService; import org.folio.dew.domain.dto.ExportType; @@ -41,7 +42,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; -import org.testcontainers.shaded.org.apache.commons.io.FileUtils; @Log4j2 class AuthorityControlTest extends BaseBatchTest { diff --git a/src/test/java/org/folio/dew/batch/acquisitions/services/ConfigurationServiceTest.java b/src/test/java/org/folio/dew/batch/acquisitions/services/ConfigurationServiceTest.java index 5cef73f20..1f0e95dcd 100644 --- a/src/test/java/org/folio/dew/batch/acquisitions/services/ConfigurationServiceTest.java +++ b/src/test/java/org/folio/dew/batch/acquisitions/services/ConfigurationServiceTest.java @@ -1,40 +1,87 @@ package org.folio.dew.batch.acquisitions.services; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; import java.util.UUID; -import java.util.stream.Stream; -import org.folio.dew.BaseBatchTest; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.beans.factory.annotation.Autowired; -class ConfigurationServiceTest extends BaseBatchTest { +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; - @Autowired +import org.folio.dew.client.TenantAddressesClient; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class ConfigurationServiceTest { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final UUID CONFIG_ID = UUID.fromString("1947e709-8d60-42e2-8dde-7566ae446d24"); + private static final String EXPECTED_ADDRESS = "Address 123"; + + @Mock + private TenantAddressesClient tenantAddressesClient; + + @InjectMocks private ConfigurationService configurationService; - @BeforeAll - static void beforeAll() { - setUpTenant(NON_CONSORTIUM_TENANT); + @Test + void getAddressConfig_nullId_returnsEmpty() { + assertThat(configurationService.getAddressConfig(null)).isEmpty(); + } + + @Test + void getAddressConfig_matchingAddress_returnsAddress() { + when(tenantAddressesClient.getTenantAddresses()) + .thenReturn(createResponse(CONFIG_ID.toString(), EXPECTED_ADDRESS)); + + assertThat(configurationService.getAddressConfig(CONFIG_ID)).isEqualTo(EXPECTED_ADDRESS); + } + + @Test + void getAddressConfig_noMatchingId_returnsEmpty() { + when(tenantAddressesClient.getTenantAddresses()) + .thenReturn(createResponse("other-id", "Other Address")); + + assertThat(configurationService.getAddressConfig(CONFIG_ID)).isEmpty(); } - static Stream testGetAddressConfigArgs() { - return Stream.of( - Arguments.of(null, ""), // No config id - Arguments.of("1947e709-8d60-42e2-8dde-7566ae446d24", "Address 123"), // Config with address - Arguments.of("8ea92aa2-7b11-4f0e-9ed2-ab8fe281f37f", ""), // Config without address - Arguments.of("116a38c2-cac3-4f08-816b-afebfebe453d", ""), // Config without a body - Arguments.of("c5cefe49-e4d4-433e-b286-24ffd935b043", "") // No config - ); + @Test + void getAddressConfig_nullResponse_returnsEmpty() { + when(tenantAddressesClient.getTenantAddresses()).thenReturn(null); + + assertThat(configurationService.getAddressConfig(CONFIG_ID)).isEmpty(); + } + + @Test + void getAddressConfig_emptyAddressArray_returnsEmpty() { + ObjectNode response = MAPPER.createObjectNode(); + response.putArray("addresses"); + when(tenantAddressesClient.getTenantAddresses()).thenReturn(response); + + assertThat(configurationService.getAddressConfig(CONFIG_ID)).isEmpty(); } - @ParameterizedTest - @MethodSource("testGetAddressConfigArgs") - void testGetAddressConfig(String addressConfigId, String expectedAddress) { - var configId = addressConfigId != null ? UUID.fromString(addressConfigId) : null; - assertEquals(expectedAddress, configurationService.getAddressConfig(configId)); + @Test + void getAddressConfig_clientThrowsException_returnsEmpty() { + when(tenantAddressesClient.getTenantAddresses()) + .thenThrow(new RuntimeException("Connection error")); + + assertThat(configurationService.getAddressConfig(CONFIG_ID)).isEmpty(); + } + + // -- Helper -- + + private static ObjectNode createResponse(String id, String address) { + ObjectNode response = MAPPER.createObjectNode(); + ArrayNode addresses = response.putArray("addresses"); + ObjectNode entry = addresses.addObject(); + entry.put("id", id); + entry.put("address", address); + return response; } -} +} \ No newline at end of file diff --git a/src/test/java/org/folio/dew/batch/circulationlog/CirculationLogItemProcessorTest.java b/src/test/java/org/folio/dew/batch/circulationlog/CirculationLogItemProcessorTest.java new file mode 100644 index 000000000..910b083b0 --- /dev/null +++ b/src/test/java/org/folio/dew/batch/circulationlog/CirculationLogItemProcessorTest.java @@ -0,0 +1,126 @@ +package org.folio.dew.batch.circulationlog; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +import org.folio.dew.client.LocaleClient; +import org.folio.dew.client.ServicePointClient; +import org.folio.dew.domain.dto.ActionType; +import org.folio.dew.domain.dto.CirculationLogExportFormat; +import org.folio.dew.domain.dto.LogRecord; +import org.folio.dew.domain.dto.LogRecordItemsInner; +import org.folio.dew.domain.dto.LoggedObjectType; +import org.folio.dew.domain.dto.ServicePoint; +import org.folio.dew.domain.dto.Servicepoints; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.batch.test.MetaDataInstanceFactory; + +@ExtendWith(MockitoExtension.class) +class CirculationLogItemProcessorTest { + + private static final String SP_ID = "sp-001"; + private static final String SP_NAME = "Main Circ Desk"; + private static final String USER_BARCODE = "1234567890"; + private static final Date EVENT_DATE = new Date(1700000000000L); + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + @Mock + private ServicePointClient servicePointClient; + @Mock + private LocaleClient localeClient; + + @InjectMocks + private CirculationLogItemProcessor processor; + + @Test + void process_allFields_returnsMappedFormat() { + initProcessor("UTC"); + + LogRecord rec = createLogRecord(List.of( + new LogRecordItemsInner().itemBarcode("ITEM-1"), + new LogRecordItemsInner().itemBarcode("ITEM-2"))); + + CirculationLogExportFormat result = processor.process(rec); + + assertThat(result.getUserBarcode()).isEqualTo(USER_BARCODE); + assertThat(result.getAction()).isEqualTo(ActionType.CHECK_OUT.getValue()); + assertThat(result.getObjectField()).isEqualTo(LoggedObjectType.LOAN.getValue()); + assertThat(result.getServicePointId()).isEqualTo(SP_NAME); + assertThat(result.getItems()).isEqualTo("ITEM-1,ITEM-2"); + assertThat(result.getDate()).isEqualTo(formatDate(EVENT_DATE, "UTC")); + } + + @Test + void process_nullAndBlankBarcodes_filteredOut() { + initProcessor("UTC"); + + List items = new java.util.ArrayList<>(); + items.add(new LogRecordItemsInner().itemBarcode("VALID")); + items.add(new LogRecordItemsInner().itemBarcode(" ")); + items.add(new LogRecordItemsInner().itemBarcode(null)); + items.add(null); + + CirculationLogExportFormat result = processor.process(createLogRecord(items)); + + assertThat(result.getItems()).isEqualTo("VALID"); + } + + @Test + void initStep_localeFetchFails_defaultsToUtc() { + when(servicePointClient.get("name<>null", 1000)).thenReturn(createServicepoints()); + when(localeClient.getLocale()).thenThrow(new RuntimeException("Connection refused")); + + processor.initStep(MetaDataInstanceFactory.createStepExecution()); + + CirculationLogExportFormat result = processor.process(createLogRecord(List.of())); + + assertThat(result.getDate()).isEqualTo(formatDate(EVENT_DATE, "UTC")); + } + + // -- Helpers -- + + private void initProcessor(String timezoneId) { + ObjectNode locale = MAPPER.createObjectNode().put("timezone", timezoneId); + when(servicePointClient.get("name<>null", 1000)).thenReturn(createServicepoints()); + when(localeClient.getLocale()).thenReturn(locale); + processor.initStep(MetaDataInstanceFactory.createStepExecution()); + } + + private static Servicepoints createServicepoints() { + ServicePoint sp = new ServicePoint(); + sp.setId(SP_ID); + sp.setName(SP_NAME); + return new Servicepoints().servicepoints(List.of(sp)).totalRecords(1); + } + + private static LogRecord createLogRecord(List items) { + return new LogRecord() + .userBarcode(USER_BARCODE) + .date(EVENT_DATE) + .servicePointId(SP_ID) + .action(ActionType.CHECK_OUT) + ._object(LoggedObjectType.LOAN) + .source("System") + .description("Test") + .items(items); + } + + private static String formatDate(Date date, String tz) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + sdf.setTimeZone(TimeZone.getTimeZone(tz)); + return sdf.format(date); + } +} diff --git a/src/test/java/org/folio/dew/bursarfeesfines/NoFeeFineMatchingAggregateCriteriaAggregateTest.java b/src/test/java/org/folio/dew/bursarfeesfines/NoFeeFineMatchingAggregateCriteriaAggregateTest.java index 218c6b04a..8bcf4db76 100644 --- a/src/test/java/org/folio/dew/bursarfeesfines/NoFeeFineMatchingAggregateCriteriaAggregateTest.java +++ b/src/test/java/org/folio/dew/bursarfeesfines/NoFeeFineMatchingAggregateCriteriaAggregateTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; +import org.apache.commons.io.FileUtils; import org.folio.dew.BaseBatchTest; import org.folio.dew.error.BursarNoAccountsToTransferException; import org.folio.dew.helpers.bursarfeesfines.BursarFeesFinesTestUtils; @@ -27,7 +28,6 @@ import org.springframework.batch.test.JobLauncherTestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; -import org.testcontainers.shaded.org.apache.commons.io.FileUtils; class NoFeeFineMatchingAggregateCriteriaAggregateTest extends BaseBatchTest { diff --git a/src/test/resources/mappings/configurations.json b/src/test/resources/mappings/configurations.json index 002e29fc2..679c6f0e7 100644 --- a/src/test/resources/mappings/configurations.json +++ b/src/test/resources/mappings/configurations.json @@ -3,50 +3,11 @@ { "request": { "method": "GET", - "url": "/settings/entries/1947e709-8d60-42e2-8dde-7566ae446d24" + "url": "/tenant-addresses" }, "response": { "status": 200, - "body": "{\n \"id\": \"1947e709-8d60-42e2-8dde-7566ae446d24\",\n \"scope\": \"ui-tenant-settings.addresses.manage\",\n \"key\": \"ADDRESS_1723093000876\",\n \"value\": {\n \"name\": \"Name 1\",\n \"address\": \"Address 123\"\n },\n \"metadata\": {\n \"createdDate\": \"2024-08-08T04:56:41.232+00:00\",\n \"createdByUserId\": \"0c79340d-ad6e-4c9a-8384-bac681d24f8c\",\n \"updatedDate\": \"2024-08-08T04:56:51.654+00:00\",\n \"updatedByUserId\": \"0c79340d-ad6e-4c9a-8384-bac681d24f8c\"\n }\n}\n", - "headers": { - "Content-Type": "application/json" - } - } - }, - { - "request": { - "method": "GET", - "url": "/settings/entries/116a38c2-cac3-4f08-816b-afebfebe453d" - }, - "response": { - "status": 200, - "body": "{}", - "headers": { - "Content-Type": "application/json" - } - } - }, - { - "request": { - "method": "GET", - "url": "/settings/entries/c5cefe49-e4d4-433e-b286-24ffd935b043" - }, - "response": { - "status": 404, - "body": "{}", - "headers": { - "Content-Type": "application/json" - } - } - }, - { - "request": { - "method": "GET", - "url": "/settings/entries/8ea92aa2-7b11-4f0e-9ed2-ab8fe281f37f" - }, - "response": { - "status": 200, - "body": "{\n \"id\": \"8ea92aa2-7b11-4f0e-9ed2-ab8fe281f37f\",\n \"scope\": \"ui-tenant-settings.addresses.manage\",\n \"key\": \"ADDRESS_1723093000876\",\n \"value\": {\n \"name\": \"Name 1\"\n },\n \"metadata\": {\n \"createdDate\": \"2024-08-08T04:56:41.232+00:00\",\n \"createdByUserId\": \"0c79340d-ad6e-4c9a-8384-bac681d24f8c\",\n \"updatedDate\": \"2024-08-08T04:56:51.654+00:00\",\n \"updatedByUserId\": \"0c79340d-ad6e-4c9a-8384-bac681d24f8c\"\n }\n}\n", + "body": "{\n \"addresses\": [\n {\n \"id\": \"1947e709-8d60-42e2-8dde-7566ae446d24\",\n \"name\": \"Name 1\",\n \"address\": \"Address 123\"\n },\n {\n \"id\": \"8ea92aa2-7b11-4f0e-9ed2-ab8fe281f37f\",\n \"name\": \"Name 2\"\n }\n ]\n}\n", "headers": { "Content-Type": "application/json" } diff --git a/src/test/resources/mappings/locale.json b/src/test/resources/mappings/locale.json new file mode 100644 index 000000000..7f0735bfd --- /dev/null +++ b/src/test/resources/mappings/locale.json @@ -0,0 +1,17 @@ +{ + "mappings": [ + { + "request": { + "method": "GET", + "url": "/locale" + }, + "response": { + "status": 200, + "body": "{\n \"locale\": \"en-US\",\n \"timezone\": \"Pacific/Yap\",\n \"currency\": \"USD\"\n}", + "headers": { + "Content-Type": "application/json" + } + } + } + ] +}