Skip to content

Commit

Permalink
Merge branch 'master' into DMP-4737
Browse files Browse the repository at this point in the history
  • Loading branch information
Ben-Edwards-cgi authored Feb 28, 2025
2 parents 54db0cc + 94fe4de commit 87f407b
Show file tree
Hide file tree
Showing 42 changed files with 2,330 additions and 450 deletions.
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -447,8 +447,8 @@ dependencies {

implementation 'uk.gov.service.notify:notifications-java-client:5.2.1-RELEASE'

implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.5.16'
implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.5.16'
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.5.17'
implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.5.17'

implementation group: 'io.vavr', name: 'vavr', version: '0.10.6'

Expand Down Expand Up @@ -502,7 +502,7 @@ dependencies {
dependencyManagement {
dependencies {
// Resolves CVE-2023-44487 - remove this block once azure-storage-blob pulls in latest version of netty
dependencySet(group: 'io.netty', version: '4.1.118.Final') {
dependencySet(group: 'io.netty', version: '4.1.119.Final') {
entry 'netty-buffer'
entry 'netty-codec'
entry 'netty-codec-dns'
Expand Down
18 changes: 9 additions & 9 deletions charts/darts-api/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@ appVersion: "1.0"
description: A Helm chart for darts-api App
name: darts-api
home: https://github.com/hmcts/darts-api
version: 0.0.99
version: 0.0.100
maintainers:
- name: HMCTS darts team
dependencies:
- name: java
version: 5.2.1
repository: 'https://hmctspublic.azurecr.io/helm/v1/repo/'
version: 5.3.0
repository: 'oci://hmctspublic.azurecr.io/helm'
- name: function
version: 2.5.3
repository: 'https://hmctspublic.azurecr.io/helm/v1/repo'
version: 2.6.0
repository: 'oci://hmctspublic.azurecr.io/helm'
- name: postgresql
version: 1.0.2
repository: 'https://hmctspublic.azurecr.io/helm/v1/repo/'
version: 1.1.0
repository: 'oci://hmctspublic.azurecr.io/helm'
condition: postgresql.enabled
- name: darts-portal
version: ~0.0.27
repository: 'https://sdshmctspublic.azurecr.io/helm/v1/repo/'
version: ~0.0.28
repository: 'oci://sdshmctspublic.azurecr.io/helm'
condition: darts-portal.enabled

Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,21 @@
import uk.gov.hmcts.darts.audio.model.AddAudioMetadataRequestWithStorageGUID;
import uk.gov.hmcts.darts.audio.model.Problem;
import uk.gov.hmcts.darts.audio.service.AudioAsyncService;
import uk.gov.hmcts.darts.audit.api.AuditActivity;
import uk.gov.hmcts.darts.authorisation.component.UserIdentity;
import uk.gov.hmcts.darts.common.entity.AuditEntity;
import uk.gov.hmcts.darts.common.entity.CourtroomEntity;
import uk.gov.hmcts.darts.common.entity.HearingEntity;
import uk.gov.hmcts.darts.common.entity.MediaEntity;
import uk.gov.hmcts.darts.common.entity.MediaLinkedCaseEntity;
import uk.gov.hmcts.darts.common.entity.ObjectAdminActionEntity;
import uk.gov.hmcts.darts.common.entity.UserAccountEntity;
import uk.gov.hmcts.darts.common.enums.SecurityRoleEnum;
import uk.gov.hmcts.darts.common.repository.AuditRepository;
import uk.gov.hmcts.darts.common.util.DateConverterUtil;
import uk.gov.hmcts.darts.test.common.DataGenerator;
import uk.gov.hmcts.darts.test.common.LogUtil;
import uk.gov.hmcts.darts.test.common.data.PersistableFactory;
import uk.gov.hmcts.darts.testutils.IntegrationBase;
import uk.gov.hmcts.darts.testutils.stubs.AuthorisationStub;
import uk.gov.hmcts.darts.testutils.stubs.EventStub;
Expand All @@ -53,6 +59,7 @@
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
Expand Down Expand Up @@ -92,6 +99,9 @@ class AudioControllerAddAudioMetadataIntTest extends IntegrationBase {
@Autowired
private SuperAdminUserStub superAdminUserStub;

@Autowired
private AuditRepository auditRepository;

private String guid = UUID.randomUUID().toString();

private static final long END_FILE_DURATION = 1440;
Expand Down Expand Up @@ -343,6 +353,158 @@ void addAudioReturnForbiddenError() throws Exception {
JSONAssert.assertEquals(expectedResponse, actualResponse, JSONCompareMode.NON_EXTENSIBLE);
}

@Test
void shouldHideIncomingMedia_whenIncomingMediaHasExistingVersionThatIsHiddenButHasNoExistingAdminAction() throws Exception {
// Given
superAdminUserStub.givenUserIsAuthorised(mockUserIdentity, SecurityRoleEnum.MID_TIER);

CourtroomEntity existingCourtroom = PersistableFactory.getCourtroomTestData().someMinimalBuilderHolder().getBuilder()
.courthouse(PersistableFactory.getCourthouseTestData().someMinimal())
.build()
.getEntity();
dartsPersistence.save(existingCourtroom);

final OffsetDateTime startAt = OffsetDateTime.parse("2024-10-10T10:00:00Z");
final OffsetDateTime endAt = OffsetDateTime.parse("2024-10-10T10:15:00Z");
MediaEntity initialMedia = PersistableFactory.getMediaTestData().someMinimalBuilderHolder()
.getBuilder()
.isHidden(true)
// The following attributes must align with the data that gets created by createAddAudioRequest(), so that we get a duplicate metadata scenario
.courtroom(existingCourtroom)
.channel(1)
.mediaFile("test")
.start(startAt)
.end(endAt)
.build()
.getEntity();
dartsPersistence.save(initialMedia);
String chronicleId = initialMedia.getId().toString();
initialMedia.setChronicleId(chronicleId);
dartsPersistence.save(initialMedia);

AddAudioMetadataRequest request = createAddAudioRequest(startAt,
endAt,
existingCourtroom.getCourthouse().getCourthouseName(),
existingCourtroom.getName(),
AUDIO_BINARY_PAYLOAD_1);

// When
mockMvc.perform(
post(ENDPOINT)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)))
.andExpect(status().isOk());

// Then, assert DB state
List<MediaEntity> allMedias = dartsDatabase.getMediaRepository().findAll();

List<MediaEntity> allVersions = allMedias.stream()
.filter(media -> chronicleId.equals(media.getChronicleId()))
.toList();
assertEquals(2, allVersions.size());
assertTrue(allVersions.stream().allMatch(MediaEntity::isHidden));

// Identify the newly added version
List<MediaEntity> newMediaVersions = allMedias.stream()
.filter(media -> String.valueOf(initialMedia.getId()).equals(media.getAntecedentId()))
.toList();
assertEquals(1, newMediaVersions.size());
MediaEntity newMediaVersion = newMediaVersions.getFirst();

Optional<ObjectAdminActionEntity> adminActionOptional = newMediaVersion.getObjectAdminAction();
assertTrue(adminActionOptional.isPresent());
ObjectAdminActionEntity adminAction = adminActionOptional.get();
assertNull(adminAction.getTicketReference());
assertEquals("Prior version had no admin action, so no details are available", adminAction.getComments());
assertNull(adminAction.getObjectHiddenReason());

List<AuditEntity> hideAudio = dartsDatabase.getAuditRepository().findAll().stream()
.filter(audit -> AuditActivity.HIDE_AUDIO.getId().equals(audit.getAuditActivity().getId()))
.toList();
assertEquals(1, hideAudio.size());
}

@Test
void shouldHideIncomingMediaAndCopyExistingAdminAction_whenIncomingMediaHasExistingVersionThatIsHiddenAndHasExistingAdminAction() throws Exception {
// Given
superAdminUserStub.givenUserIsAuthorised(mockUserIdentity, SecurityRoleEnum.MID_TIER);

CourtroomEntity existingCourtroom = PersistableFactory.getCourtroomTestData().someMinimalBuilderHolder().getBuilder()
.courthouse(PersistableFactory.getCourthouseTestData().someMinimal())
.build()
.getEntity();
dartsPersistence.save(existingCourtroom);

final OffsetDateTime startAt = OffsetDateTime.parse("2024-10-10T10:00:00Z");
final OffsetDateTime endAt = OffsetDateTime.parse("2024-10-10T10:15:00Z");
MediaEntity initialMedia = PersistableFactory.getMediaTestData().someMinimalBuilderHolder()
.getBuilder()
.isHidden(true)
// The following attributes must align with the data that gets created by createAddAudioRequest(), so that we get a duplicate metadata scenario
.courtroom(existingCourtroom)
.channel(1)
.mediaFile("test")
.start(startAt)
.end(endAt)
.build()
.getEntity();
dartsPersistence.save(initialMedia);

ObjectAdminActionEntity adminActionForInitialMedia = PersistableFactory.getObjectAdminActionTestData().someMinimalBuilderHolder()
.getBuilder()
.ticketReference("Some ticket ref")
.comments("Some comments")
.media(initialMedia)
.build()
.getEntity();
dartsPersistence.save(adminActionForInitialMedia);

String chronicleId = initialMedia.getId().toString();
initialMedia.setChronicleId(chronicleId);
initialMedia.setObjectAdminAction(adminActionForInitialMedia);
dartsPersistence.save(initialMedia);

AddAudioMetadataRequest request = createAddAudioRequest(startAt,
endAt,
existingCourtroom.getCourthouse().getCourthouseName(),
existingCourtroom.getName(),
AUDIO_BINARY_PAYLOAD_1);

// When
mockMvc.perform(
post(ENDPOINT)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)))
.andExpect(status().isOk());

// Then, assert DB state
List<MediaEntity> allMedias = dartsDatabase.getMediaRepository().findAll();

List<MediaEntity> allVersions = allMedias.stream()
.filter(media -> chronicleId.equals(media.getChronicleId()))
.toList();
assertEquals(2, allVersions.size());
assertTrue(allVersions.stream().allMatch(MediaEntity::isHidden));

// Identify the newly added version
List<MediaEntity> newMediaVersions = allMedias.stream()
.filter(media -> String.valueOf(initialMedia.getId()).equals(media.getAntecedentId()))
.toList();
assertEquals(1, newMediaVersions.size());
MediaEntity newMediaVersion = newMediaVersions.getFirst();

Optional<ObjectAdminActionEntity> adminActionOptional = newMediaVersion.getObjectAdminAction();
assertTrue(adminActionOptional.isPresent());
ObjectAdminActionEntity adminAction = adminActionOptional.get();
assertEquals(adminActionForInitialMedia.getTicketReference(), adminAction.getTicketReference());
assertEquals(adminActionForInitialMedia.getComments(), adminAction.getComments());

List<AuditEntity> hideAudio = dartsDatabase.getAuditRepository().findAll().stream()
.filter(audit -> AuditActivity.HIDE_AUDIO.getId().equals(audit.getAuditActivity().getId()))
.toList();
assertEquals(1, hideAudio.size());
}

private AddAudioMetadataRequestWithStorageGUID createAddAudioRequest(OffsetDateTime startedAt,
OffsetDateTime endedAt, String courthouse, String courtroom) throws IOException {
return createAddAudioRequest(startedAt, endedAt, courthouse, courtroom,
Expand Down
Loading

0 comments on commit 87f407b

Please sign in to comment.