Skip to content

Commit 9f592ca

Browse files
committed
DMP-5252-ARM-5-2-Upgrade
Added no sonar to fix sonar complaint of duplicate code
1 parent 18dbbda commit 9f592ca

File tree

3 files changed

+215
-6
lines changed

3 files changed

+215
-6
lines changed
Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
package uk.gov.hmcts.darts.arm.service;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.test.context.TestPropertySource;
8+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
9+
import uk.gov.hmcts.darts.arm.client.model.ArmTokenRequest;
10+
import uk.gov.hmcts.darts.arm.client.model.ArmTokenResponse;
11+
import uk.gov.hmcts.darts.arm.client.model.AvailableEntitlementProfile;
12+
import uk.gov.hmcts.darts.arm.client.model.UpdateMetadataRequest;
13+
import uk.gov.hmcts.darts.arm.client.model.UpdateMetadataResponse;
14+
import uk.gov.hmcts.darts.arm.client.model.rpo.EmptyRpoRequest;
15+
import uk.gov.hmcts.darts.arm.client.version.fivetwo.ArmApiBaseClient;
16+
import uk.gov.hmcts.darts.arm.client.version.fivetwo.ArmAuthClient;
17+
import uk.gov.hmcts.darts.common.datamanagement.component.impl.DownloadResponseMetaData;
18+
import uk.gov.hmcts.darts.datamanagement.exception.FileNotDownloadedException;
19+
import uk.gov.hmcts.darts.retention.enums.RetentionConfidenceScoreEnum;
20+
import uk.gov.hmcts.darts.testutils.IntegrationBase;
21+
22+
import java.io.IOException;
23+
import java.time.OffsetDateTime;
24+
import java.time.format.DateTimeFormatter;
25+
import java.util.List;
26+
import java.util.UUID;
27+
28+
import static org.assertj.core.api.Assertions.assertThat;
29+
import static org.junit.jupiter.api.Assertions.assertEquals;
30+
import static org.mockito.ArgumentMatchers.any;
31+
import static org.mockito.Mockito.verify;
32+
import static org.mockito.Mockito.when;
33+
34+
@TestPropertySource(properties = {
35+
"darts.storage.arm-api.enable-arm-v5-2-upgrade=true"
36+
})
37+
class ArmApiServiceVersionFiveTwoIntTest extends IntegrationBase {
38+
39+
private static final String EXTERNAL_RECORD_ID = "7683ee65-c7a7-7343-be80-018b8ac13602";
40+
private static final String EXTERNAL_FILE_ID = "075987ea-b34d-49c7-b8db-439bfbe2496c";
41+
private static final String CABINET_ID = "100";
42+
private static final String ARM_ERROR_BODY = """
43+
{ "itemId": "00000000-0000-0000-0000-000000000000", "cabinetId": 0, ...}
44+
""";
45+
private static final String BINARY_CONTENT = "some binary content";
46+
47+
@Value("${darts.storage.arm-api.version5-2.api.download-data-path}")
48+
private String downloadPath;
49+
50+
@Value("${darts.storage.arm-api.version5-2.api.update-metadata-path}")
51+
private String uploadPath;
52+
53+
@Autowired
54+
private ArmApiService armApiService;
55+
56+
@MockitoBean
57+
private ArmAuthClient armAuthClient;
58+
@MockitoBean
59+
private ArmApiBaseClient armApiBaseClient;
60+
61+
@BeforeEach
62+
void setup() {
63+
ArmTokenRequest armTokenRequest = ArmTokenRequest.builder()
64+
.username("some-username")
65+
.password("some-password")
66+
.build();
67+
ArmTokenResponse armTokenResponse = getArmTokenResponse();
68+
String bearerToken = String.format("Bearer %s", armTokenResponse.getAccessToken());
69+
when(armAuthClient.getToken(armTokenRequest))
70+
.thenReturn(armTokenResponse);
71+
EmptyRpoRequest emptyRpoRequest = EmptyRpoRequest.builder().build();
72+
when(armApiBaseClient.availableEntitlementProfiles(bearerToken, emptyRpoRequest))
73+
.thenReturn(getAvailableEntitlementProfile());
74+
when(armApiBaseClient.selectEntitlementProfile(bearerToken, "some-profile-id", emptyRpoRequest))
75+
.thenReturn(armTokenResponse);
76+
}
77+
78+
@Test
79+
void updateMetadata_WithNanoSeconds() {
80+
// Given
81+
var eventTimestamp = OffsetDateTime.parse("2024-01-31T11:29:56.101701Z").plusYears(7);
82+
83+
var bearerAuth = "Bearer some-token";
84+
var reasonConf = "reason";
85+
var scoreConfId = RetentionConfidenceScoreEnum.CASE_PERFECTLY_CLOSED;
86+
var updateMetadataRequest = UpdateMetadataRequest.builder()
87+
.itemId(EXTERNAL_RECORD_ID)
88+
.manifest(UpdateMetadataRequest.Manifest.builder()
89+
.eventDate(formatDateTime(eventTimestamp))
90+
.retConfScore(scoreConfId.getId())
91+
.retConfReason(reasonConf)
92+
.build())
93+
.useGuidsForFields(false)
94+
.build();
95+
var updateMetadataResponse = UpdateMetadataResponse.builder()
96+
.itemId(UUID.fromString(EXTERNAL_RECORD_ID))
97+
.cabinetId(101)
98+
.objectId(UUID.fromString("4bfe4fc7-4e2f-4086-8a0e-146cc4556260"))
99+
.objectType(1)
100+
.fileName("UpdateMetadata-20241801-122819.json")
101+
.isError(false)
102+
.responseStatus(0)
103+
.responseStatusMessages(null)
104+
.build();
105+
106+
when(armApiBaseClient.updateMetadata(bearerAuth, updateMetadataRequest)).thenReturn(updateMetadataResponse);
107+
108+
// when
109+
var responseToTest = armApiService.updateMetadata(EXTERNAL_RECORD_ID, eventTimestamp, scoreConfId, reasonConf);
110+
111+
// then
112+
verify(armAuthClient).getToken(any());
113+
114+
assertEquals(updateMetadataResponse, responseToTest);
115+
}
116+
117+
@Test
118+
void updateMetadata_WithZeroTimes() {
119+
120+
// Given
121+
var eventTimestamp = OffsetDateTime.parse("2024-01-31T00:00:00.00Z").plusYears(7);
122+
123+
var bearerAuth = "Bearer some-token";
124+
var reasonConf = "reason";
125+
var scoreConfId = RetentionConfidenceScoreEnum.CASE_PERFECTLY_CLOSED;
126+
var updateMetadataRequest = UpdateMetadataRequest.builder()
127+
.itemId(EXTERNAL_RECORD_ID)
128+
.manifest(UpdateMetadataRequest.Manifest.builder()
129+
.eventDate(formatDateTime(eventTimestamp))
130+
.retConfScore(scoreConfId.getId())
131+
.retConfReason(reasonConf)
132+
.build())
133+
.useGuidsForFields(false)
134+
.build();
135+
var updateMetadataResponse = UpdateMetadataResponse.builder()
136+
.itemId(UUID.fromString(EXTERNAL_RECORD_ID))
137+
.cabinetId(101)
138+
.objectId(UUID.fromString("4bfe4fc7-4e2f-4086-8a0e-146cc4556260"))
139+
.objectType(1)
140+
.fileName("UpdateMetadata-20241801-122819.json")
141+
.isError(false)
142+
.responseStatus(0)
143+
.responseStatusMessages(null)
144+
.build();
145+
146+
when(armApiBaseClient.updateMetadata(bearerAuth, updateMetadataRequest)).thenReturn(updateMetadataResponse);
147+
148+
// When
149+
var responseToTest = armApiService.updateMetadata(EXTERNAL_RECORD_ID, eventTimestamp, scoreConfId, reasonConf);
150+
151+
// Then
152+
verify(armAuthClient).getToken(any());
153+
154+
assertEquals(updateMetadataResponse, responseToTest);
155+
}
156+
157+
@Test
158+
void downloadArmData_ShouldDownloadData() throws FileNotDownloadedException, IOException {
159+
// Given
160+
byte[] binaryData = BINARY_CONTENT.getBytes();
161+
162+
when(armApiBaseClient.downloadArmData(any(), any(), any(), any())).thenReturn(
163+
feign.Response.builder()
164+
.status(200)
165+
.reason("OK")
166+
.headers(java.util.Collections.emptyMap()) // Fix: use empty map instead of null
167+
.body(binaryData)
168+
.request(feign.Request.create(
169+
feign.Request.HttpMethod.GET,
170+
"some-url", java.util.Collections.emptyMap(), null, null, null))
171+
.build());
172+
173+
// When
174+
try (DownloadResponseMetaData downloadResponseMetaData = armApiService.downloadArmData(EXTERNAL_RECORD_ID, EXTERNAL_FILE_ID)) {
175+
176+
// Then
177+
verify(armAuthClient).getToken(any());
178+
179+
assertThat(downloadResponseMetaData.getResource().getInputStream().readAllBytes()).isEqualTo(binaryData);
180+
}
181+
}
182+
183+
private AvailableEntitlementProfile getAvailableEntitlementProfile() {
184+
List<AvailableEntitlementProfile.Profiles> profiles = List.of(AvailableEntitlementProfile.Profiles.builder()
185+
.profileName("some-profile-name")
186+
.profileId("some-profile-id")
187+
.build());
188+
189+
return AvailableEntitlementProfile.builder()
190+
.profiles(profiles)
191+
.isError(false)
192+
.build();
193+
}
194+
195+
private ArmTokenResponse getArmTokenResponse() {
196+
return ArmTokenResponse.builder()
197+
.accessToken("some-token")
198+
.tokenType("Bearer")
199+
.expiresIn("3600")
200+
.build();
201+
}
202+
203+
private String getDownloadPath(String downloadPath, String cabinetId, String recordId, String fileId) {
204+
return downloadPath.replace("{cabinet_id}", cabinetId).replace("{record_id}", recordId).replace("{file_id}", fileId);
205+
}
206+
207+
private String formatDateTime(OffsetDateTime offsetDateTime) {
208+
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
209+
return offsetDateTime.format(dateTimeFormatter);
210+
}
211+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import uk.gov.hmcts.darts.common.entity.ArmRpoExecutionDetailEntity;
3131
import uk.gov.hmcts.darts.common.entity.UserAccountEntity;
3232
import uk.gov.hmcts.darts.test.common.TestUtils;
33-
import uk.gov.hmcts.darts.testutils.PostgresIntegrationBase;
33+
import uk.gov.hmcts.darts.testutils.IntegrationBase;
3434

3535
import java.io.File;
3636
import java.io.IOException;
@@ -63,7 +63,7 @@
6363
"""
6464
})
6565
@Slf4j
66-
class ArmRpoPollServiceUpgradeFiveTwoIntTest extends PostgresIntegrationBase {
66+
class ArmRpoPollServiceVersionFiveTwoIntTest extends IntegrationBase {
6767

6868
private static final String PRODUCTIONEXPORTFILE_CSV = "tests/arm/service/ArmRpoPollServiceTest/productionexportfile.csv";
6969
private static final String PRODUCTION_NAME = "DARTS_RPO_2024-08-13";
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package uk.gov.hmcts.darts.arm.service.impl;
22

3-
import lombok.extern.slf4j.Slf4j;
43
import org.jetbrains.annotations.NotNull;
54
import org.junit.jupiter.api.BeforeEach;
65
import org.junit.jupiter.api.Test;
@@ -23,7 +22,7 @@
2322
import uk.gov.hmcts.darts.authorisation.component.UserIdentity;
2423
import uk.gov.hmcts.darts.common.entity.ArmRpoExecutionDetailEntity;
2524
import uk.gov.hmcts.darts.common.entity.UserAccountEntity;
26-
import uk.gov.hmcts.darts.testutils.PostgresIntegrationBase;
25+
import uk.gov.hmcts.darts.testutils.IntegrationBase;
2726

2827
import java.time.Duration;
2928
import java.time.temporal.ChronoUnit;
@@ -35,11 +34,10 @@
3534
import static org.mockito.Mockito.lenient;
3635
import static org.mockito.Mockito.when;
3736

38-
@Slf4j
3937
@TestPropertySource(properties = {
4038
"darts.storage.arm-api.enable-arm-v5-2-upgrade=true"
4139
})
42-
class TriggerArmRpoSearchServiceImplUpgradeFiveTwoIntTest extends PostgresIntegrationBase {
40+
class TriggerArmRpoSearchServiceImplVersionFiveTwoIntTest extends IntegrationBase {
4341

4442
@MockitoBean
4543
private UserIdentity userIdentity;

0 commit comments

Comments
 (0)