Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,13 @@ public DissolutionCreateResponse submitDissolutionRequest(
})
@GetMapping
@ResponseStatus(HttpStatus.OK)
public DissolutionGetResponse getDissolutionApplication(@PathVariable("company-number") final String companyNumber) {
public DissolutionGetResponse getDissolutionApplication(@RequestHeader("ERIC-identity") String userId,
@PathVariable("company-number") final String companyNumber) {
DissolutionGetResponse dissolutionGetResponse = dissolutionService
.getByCompanyNumber(companyNumber)
.or(() -> dissolutionService.getPendingOrDraftDissolution(userId, companyNumber))
.orElseThrow(NotFoundException::new);

String paymentRef = dissolutionGetResponse.getPaymentReference();
if (paymentRef != null && !paymentRef.isEmpty() && dissolutionGetResponse.getApplicationStatus().equals(ApplicationStatus.PENDING_PAYMENT)) {
// payment could be complete, we need to get up-to-date status to be sure
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package uk.gov.companieshouse.mapper;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import uk.gov.companieshouse.model.db.dissolution.Dissolution;
import uk.gov.companieshouse.model.db.dissolution.DissolutionCertificate;
Expand Down Expand Up @@ -56,6 +57,11 @@ public DissolutionGetResponse mapToDissolutionGetResponse(Dissolution dissolutio
.ofNullable(dissolution.getPaymentInformation().getReference())
.ifPresent(paymentReference -> setPaymentReference(response, paymentReference));
}

if (!StringUtils.isEmpty(dissolution.getTransactionId())) {
response.setTransactionId(dissolution.getTransactionId());
response.setDissolutionStatus(dissolution.getStatus());
}
return response;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import uk.gov.companieshouse.model.db.payment.PaymentInformation;
import uk.gov.companieshouse.model.enums.DissolutionStatus;

import java.time.LocalDateTime;

Expand Down Expand Up @@ -32,6 +33,10 @@ public class Dissolution {
private DissolutionVerdict verdict;

boolean active;

private DissolutionStatus status;

private String transactionId;

public boolean getActive() {
return active;
Expand Down Expand Up @@ -112,4 +117,20 @@ public DissolutionVerdict getVerdict() {
public void setVerdict(DissolutionVerdict verdict) {
this.verdict = verdict;
}

public DissolutionStatus getStatus() {
return status;
}

public void setStatus(DissolutionStatus status) {
this.status = status;
}

public String getTransactionId() {
return transactionId;
}

public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import uk.gov.companieshouse.model.enums.ApplicationStatus;
import uk.gov.companieshouse.model.enums.ApplicationType;
import uk.gov.companieshouse.model.enums.DissolutionStatus;

import java.sql.Timestamp;
import java.util.List;
Expand All @@ -18,6 +19,12 @@ public class DissolutionGetResponse {
@JsonProperty("application_status")
private ApplicationStatus applicationStatus;

@JsonProperty("dissolution_status")
private DissolutionStatus dissolutionStatus;

@JsonProperty("transaction_id")
private String transactionId;

@JsonProperty("application_reference")
private String applicationReference;

Expand Down Expand Up @@ -159,4 +166,20 @@ public String getPaymentReference() {
public void setPaymentReference(String paymentReference) {
this.paymentReference = paymentReference;
}

public DissolutionStatus getDissolutionStatus() {
return dissolutionStatus;
}

public void setDissolutionStatus(DissolutionStatus dissolutionStatus) {
this.dissolutionStatus = dissolutionStatus;
}

public String getTransactionId() {
return transactionId;
}

public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package uk.gov.companieshouse.model.enums;

import com.fasterxml.jackson.annotation.JsonValue;

public enum DissolutionStatus {
DRAFT("draft"),
PENDING("pending"),
PROCESSED("processed");

private final String value;

DissolutionStatus(String value) {
this.value = value;
}

@JsonValue
public String getValue() {
return value;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,10 @@ public interface DissolutionRepository extends MongoRepository<Dissolution, Stri

@Query("{'submission.status': 'PENDING', $or : [{'submission.date_time': {'$lte' : ?0}}, {'submission.date_time': null}]}")
List<Dissolution> findPendingDissolutions(LocalDateTime dateTime, Pageable limit);

@Query("{'company.number': ?0, 'status' : 'PENDING'}")
Optional<Dissolution> findPendingDissolutionByCompanyNumber(String companyNumber);

@Query("{'company.number': ?0, 'status' : 'DRAFT', 'created_by.user_id': ?1}")
Optional<Dissolution> findDraftDissolutionForUserAndCompany(String userId, String companyNumber);
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ private boolean isDirectorPendingApprovalForDissolution(String officerId, Dissol
.anyMatch(director -> director.getOfficerId().equals(officerId) && !director.hasDirectorApproval());
}

public Optional<DissolutionGetResponse> getById(String id) {
public Optional<DissolutionGetResponse> getPendingOrDraftDissolution(String userId, String companyNumber) {
return repository
.findById(id)
.findPendingDissolutionByCompanyNumber(companyNumber)
.or(() -> repository.findDraftDissolutionForUserAndCompany(userId, companyNumber))
.map(responseMapper::mapToDissolutionGetResponse);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ public boolean isDirectorPendingApproval(String companyNumber, String officerId)
return getter.isDirectorPendingApproval(companyNumber, officerId);
}

public Optional<DissolutionGetResponse> getPendingOrDraftDissolution(String userId, String companyNumber) {
return getter.getPendingOrDraftDissolution(userId, companyNumber);
}

public Optional<Dissolution> getDissolutionById(String dissolutionId) {
return repository.findById(dissolutionId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import uk.gov.companieshouse.model.dto.dissolution.DissolutionGetResponse;
import uk.gov.companieshouse.model.dto.dissolution.DissolutionPatchRequest;
import uk.gov.companieshouse.model.dto.dissolution.DissolutionPatchResponse;
import uk.gov.companieshouse.model.enums.DissolutionStatus;
import uk.gov.companieshouse.service.CompanyOfficerService;
import uk.gov.companieshouse.service.CompanyProfileService;
import uk.gov.companieshouse.service.TransactionService;
Expand All @@ -34,6 +35,8 @@

import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
Expand All @@ -49,6 +52,7 @@
import static uk.gov.companieshouse.fixtures.DissolutionFixtures.generateDissolutionGetResponse;
import static uk.gov.companieshouse.fixtures.DissolutionFixtures.generateDissolutionPatchRequest;
import static uk.gov.companieshouse.fixtures.DissolutionFixtures.generateDissolutionPatchResponse;
import static uk.gov.companieshouse.fixtures.TransactionFixtures.TRANSACTION_ID;

@SuppressWarnings({"unchecked", "UastIncorrectHttpHeaderInspection"})
@WebMvcTest(DissolutionController.class)
Expand Down Expand Up @@ -319,13 +323,17 @@ void getDissolutionRequest_returnsUnauthorised_ifCompanyNumberTokenPermissionDoe
@Test
void getDissolutionRequest_returnsNotFound_ifDissolutionDoesntExist() throws Exception {
when(service.getByCompanyNumber(COMPANY_NUMBER)).thenReturn(Optional.empty());
when(service.getPendingOrDraftDissolution(USER_ID, COMPANY_NUMBER)).thenReturn(Optional.empty());

mockMvc
.perform(
get(DISSOLUTION_URI, COMPANY_NUMBER)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.headers(createHttpHeaders()))
.andExpect(status().isNotFound());

verify(service, times(1)).getByCompanyNumber(COMPANY_NUMBER);
verify(service, times(1)).getPendingOrDraftDissolution(USER_ID, COMPANY_NUMBER);
}

@Test
Expand All @@ -341,6 +349,28 @@ void getDissolutionRequest_returnsDissolutionInfo_ifDissolutionExists() throws E
.headers(createHttpHeaders()))
.andExpect(status().isOk())
.andExpect(content().json(asJsonString(response)));

verify(service, times(1)).getByCompanyNumber(COMPANY_NUMBER);
verify(service, never()).getPendingOrDraftDissolution(USER_ID, COMPANY_NUMBER);
}

@Test
void getDissolutionRequest_returnsDraftOrPendingDissolutionInfo_ifTransactionModelDissolutionExists() throws Exception {
final DissolutionGetResponse response = generateDissolutionGetResponse(TRANSACTION_ID, DissolutionStatus.DRAFT);

when(service.getByCompanyNumber(COMPANY_NUMBER)).thenReturn(Optional.empty());
when(service.getPendingOrDraftDissolution(USER_ID, COMPANY_NUMBER)).thenReturn(Optional.of(response));

mockMvc
.perform(
get(DISSOLUTION_URI, COMPANY_NUMBER)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.headers(createHttpHeaders()))
.andExpect(status().isOk())
.andExpect(content().json(asJsonString(response)));

verify(service, times(1)).getPendingOrDraftDissolution(USER_ID, COMPANY_NUMBER);
verify(service, times(1)).getByCompanyNumber(COMPANY_NUMBER);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import uk.gov.companieshouse.model.dto.documentrender.DissolutionCertificateDirector;
import uk.gov.companieshouse.model.enums.ApplicationStatus;
import uk.gov.companieshouse.model.enums.ApplicationType;
import uk.gov.companieshouse.model.enums.DissolutionStatus;
import uk.gov.companieshouse.model.enums.SubmissionStatus;
import uk.gov.companieshouse.model.enums.VerdictResult;

Expand Down Expand Up @@ -76,6 +77,21 @@ public static DissolutionGetResponse generateDissolutionGetResponse() {
return new DissolutionGetResponse();
}

public static DissolutionGetResponse generateDissolutionGetResponse(String transactionId, DissolutionStatus status) {
var response = new DissolutionGetResponse();
response.setTransactionId(transactionId);
response.setDissolutionStatus(status);
return response;
}

public static Dissolution generateDraftDissolution(String transactionId) {
return DissolutionTestDataBuilder.aDissolution().withTransactionId(transactionId).withStatus(DissolutionStatus.DRAFT).build();
}

public static Dissolution generatePendingDissolution(String transactionId) {
return DissolutionTestDataBuilder.aDissolution().withTransactionId(transactionId).withStatus(DissolutionStatus.PENDING).build();
}

public static Dissolution generateDissolution() {
return DissolutionTestDataBuilder.aDissolution().build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import uk.gov.companieshouse.model.db.dissolution.DissolutionSubmission;
import uk.gov.companieshouse.model.db.dissolution.DissolutionVerdict;
import uk.gov.companieshouse.model.db.payment.PaymentInformation;
import uk.gov.companieshouse.model.enums.DissolutionStatus;

import java.time.LocalDateTime;
import java.util.ArrayList;
Expand All @@ -25,6 +26,8 @@ public class DissolutionTestDataBuilder {
private PaymentInformation paymentInformation = new PaymentInformation();
private DissolutionVerdict verdict = new DissolutionVerdict();
private boolean active = true;
private String transactionId = "";
private DissolutionStatus status = DissolutionStatus.DRAFT;

public static DissolutionTestDataBuilder aDissolution() {
return new DissolutionTestDataBuilder();
Expand Down Expand Up @@ -128,6 +131,16 @@ public DissolutionTestDataBuilder withActive(boolean active) {
return this;
}

public DissolutionTestDataBuilder withTransactionId(String id) {
this.transactionId = id;
return this;
}

public DissolutionTestDataBuilder withStatus(DissolutionStatus status) {
this.status = status;
return this;
}

public Dissolution build() {
final Dissolution dissolution = new Dissolution();
dissolution.setModifiedDateTime(modifiedDateTime);
Expand All @@ -138,6 +151,11 @@ public Dissolution build() {
dissolution.setPaymentInformation(paymentInformation);
dissolution.setVerdict(verdict);
dissolution.setActive(active);

if (transactionId != null && !transactionId.isEmpty()) {
dissolution.setTransactionId(transactionId);
dissolution.setStatus(status);
}
return dissolution;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import uk.gov.companieshouse.model.dto.dissolution.DissolutionPatchResponse;
import uk.gov.companieshouse.model.enums.ApplicationStatus;
import uk.gov.companieshouse.model.enums.ApplicationType;
import uk.gov.companieshouse.model.enums.DissolutionStatus;

import java.sql.Timestamp;
import java.time.LocalDateTime;
Expand All @@ -20,6 +21,7 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static uk.gov.companieshouse.fixtures.DissolutionFixtures.generateDissolutionCertificate;
import static uk.gov.companieshouse.fixtures.TransactionFixtures.TRANSACTION_ID;
import static uk.gov.companieshouse.model.Constants.DISSOLUTION_KIND;

class DissolutionResponseMapperTest {
Expand Down Expand Up @@ -169,4 +171,22 @@ void mapToDissolutionPatchResponse_mapsCompanyNumberAndReferenceToDissolutionLin
assertEquals(String.format("/dissolution-request/%s", COMPANY_NUMBER), links.getSelf());
assertEquals(String.format("/dissolution-request/%s/payment", REFERENCE), links.getPayment());
}

@Test
void mapToDissolutionGetResponse_setsTransactionIdAndStatus_ifTransactionIdExists() {
final Dissolution dissolution = DissolutionFixtures.generateDraftDissolution(TRANSACTION_ID);
final DissolutionGetResponse result = mapper.mapToDissolutionGetResponse(dissolution);

assertEquals(TRANSACTION_ID, result.getTransactionId());
assertEquals(DissolutionStatus.DRAFT, result.getDissolutionStatus());
}

@Test
void mapToDissolutionGetResponse_doesNotSetTransactionIdAndStatus_ifTransactionIdDoesNotExist() {
final Dissolution dissolution = DissolutionFixtures.generateDissolution();
final DissolutionGetResponse result = mapper.mapToDissolutionGetResponse(dissolution);

assertNull(result.getTransactionId());
assertNull(result.getDissolutionStatus());
}
}
Loading