Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ public class CompliancePaymentRequest
{
public required string ApplicationReferenceNumber { get; set; }

public string? FileId { get; set; }

public required string Regulator { get; set; }

public DateTime SubmissionDate { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ public class OfflinePaymentRequest

public required string Description { get; set; }

public Guid? FileId { get; set; }

public DateTime? PaymentDate { get; set; }

public string? Comments { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ public class ProducerPaymentRequest
{
public required string ApplicationReferenceNumber { get; set; }

public string? FileId { get; set; }

public int NoOfSubsidiariesOnlineMarketplace { get; set; }

public int NumberOfSubsidiaries { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2375,7 +2375,7 @@ public async Task ConfirmOfflinePaymentSubmission_RedirectsTo_ServiceNotAvailabl
// Veryify the redirect URL
result.RouteName.Should().Be("ServiceNotAvailable");
result.RouteValues.First().Value.Should().Be($"{PagePath.RegistrationSubmissionDetails}/{submissionId}");
_paymentFacadeServiceMock.Verify(r => r.SubmitOfflinePaymentAsync(It.IsAny<OfflinePaymentRequest>()), Times.AtMostOnce);
_paymentFacadeServiceMock.Verify(r => r.SubmitOfflinePaymentAsync(It.Is<OfflinePaymentRequest>(c=>c.FileId.ToString() == submissionDetails.ResubmissionFileId)), Times.AtMostOnce);
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ protected static RegistrationSubmissionDetailsViewModel GenerateTestSubmissionDe
Files =
[
],
ResubmissionFileId = Guid.NewGuid().ToString()
},
ProducerComments = "producer comment",
RegulatorComments = "regulator comment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public async Task InvokeAsync_Returns_CorrectView_With_Model(bool isResubmission
_paymentFacadeServiceMock.Setup(x => x.GetCompliancePaymentDetailsAsync(It.IsAny<CompliancePaymentRequest>()))
.ReturnsAsync(new CompliancePaymentResponse // all values in pence
{
ApplicationProcessingFee = 100.00M,
ApplicationProcessingFee = 100.00M,
TotalChargeableItems = 1000.00M,
PreviousPaymentsReceived = 500.00M,
TotalOutstanding = 500.00M,
Expand All @@ -102,7 +102,9 @@ public async Task InvokeAsync_Returns_CorrectView_With_Model(bool isResubmission
model.LateProducerCount.Should().Be(0);
model.OnlineMarketPlaceCount.Should().Be(0);
model.SubsidiariesCompanyCount.Should().Be(0);
_paymentFacadeServiceMock.Verify(r => r.GetCompliancePaymentDetailsAsync(It.IsAny<CompliancePaymentRequest>()), Times.AtMostOnce);
_paymentFacadeServiceMock.Verify(
r => r.GetCompliancePaymentDetailsAsync(It.Is<CompliancePaymentRequest>(c =>
c.FileId == _registrationSumissionDetailsViewModel.ResubmissionFileId)), Times.AtMostOnce);
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public async Task InvokeAsync_Returns_CorrectView_With_DefaultModel_When_Service
var model = result.ViewData.Model as ProducerPaymentResponse;
model.Should().BeNull();
_paymentFacadeServiceMock.Verify(r => r.GetProducerPaymentDetailsAsync(
It.IsAny<ProducerPaymentRequest>()), Times.AtMostOnce);
It.Is<ProducerPaymentRequest>(c=>c.FileId == _registrationSumissionDetailsViewModel.ResubmissionFileId)), Times.AtMostOnce);
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -912,7 +912,8 @@ private async Task<IActionResult> ProcessOfflinePaymentAsync(RegistrationSubmiss
Description = "Registration fee",
Reference = existingModel.ReferenceNumber,
Regulator = regulator,
UserId = (Guid)_currentSession.UserData.Id
UserId = (Guid)_currentSession.UserData.Id,
FileId = existingModel.IsResubmission && Guid.TryParse(existingModel.ResubmissionFileId, out var fileId) ? fileId : null
});

if (response == EndpointResponseStatus.Fail)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public async Task<ViewViewComponentResult> InvokeAsync(RegistrationSubmissionDet
new CompliancePaymentRequest
{
ApplicationReferenceNumber = viewModel.ReferenceNumber,
FileId = viewModel.IsResubmission ? viewModel.ResubmissionFileId : null,
Regulator = viewModel.NationCode,
ComplianceSchemeMembers = viewModel.CSOMembershipDetails.Select(x => (ComplianceSchemeMemberRequest)x),
SubmissionDate = TimeZoneInfo.ConvertTimeToUtc(viewModel.IsResubmission
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public async Task<ViewViewComponentResult> InvokeAsync(RegistrationSubmissionDet
var producerPaymentResponse = await paymentFacadeService.GetProducerPaymentDetailsAsync(new ProducerPaymentRequest
{
ApplicationReferenceNumber = viewModel.ReferenceNumber,
FileId = viewModel.IsResubmission ? viewModel.ResubmissionFileId : null,
NoOfSubsidiariesOnlineMarketplace = viewModel.ProducerDetails.NoOfSubsidiariesOnlineMarketPlace,
NumberOfSubsidiaries = viewModel.ProducerDetails.NoOfSubsidiaries,
IsLateFeeApplicable = viewModel.ProducerDetails.IsLateFeeApplicable,
Expand Down
58 changes: 58 additions & 0 deletions src/IntegrationTests/Builders/ProducerPaymentResponseBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
namespace IntegrationTests.Builders;

public class ProducerPaymentResponseBuilder
{
private int _producerRegistrationFee = 165800;
private readonly int _producerOnlineMarketPlaceFee = 0;
private readonly int _producerLateRegistrationFee = 0;
private int _totalFee = 165800;
private int _previousPayment = 0;
private int _outstandingPayment = 165800;
private readonly int _subsidiariesFee = 0;

private ProducerPaymentResponseBuilder()
{
}

public static ProducerPaymentResponseBuilder Default() => new();

public ProducerPaymentResponseBuilder WithProducerRegistrationFee(int feeInPence)
{
_producerRegistrationFee = feeInPence;
return this;
}

public ProducerPaymentResponseBuilder WithTotalFee(int feeInPence)
{
_totalFee = feeInPence;
return this;
}

public ProducerPaymentResponseBuilder WithPreviousPayment(int amountInPence)
{
_previousPayment = amountInPence;
return this;
}

public ProducerPaymentResponseBuilder WithOutstandingPayment(int amountInPence)
{
_outstandingPayment = amountInPence;
return this;
}

public object Build() => new
{
producerRegistrationFee = _producerRegistrationFee,
producerOnlineMarketPlaceFee = _producerOnlineMarketPlaceFee,
producerLateRegistrationFee = _producerLateRegistrationFee,
totalFee = _totalFee,
previousPayment = _previousPayment,
outstandingPayment = _outstandingPayment,
subsidiariesFee = _subsidiariesFee,
subsidiariesFeeBreakdown = new
{
totalSubsidiariesOMPFees = 0,
countOfOMPSubsidiaries = 0
}
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ public class RegistrationSubmissionDetailsBuilder
private int _relevantYear = 2025;
private string _submissionDate = "2025-01-10T09:30:00Z";
private string _submissionStatus = "Pending";
private bool _isResubmission = false;
private string? _resubmissionFileId = null;
private string? _resubmissionDate = null;
private bool _isComplianceScheme = true;
private string _registrationJourneyType = "CsoLargeProducer";
private string? _organisationSize = null;

private RegistrationSubmissionDetailsBuilder(Guid submissionId)
{
Expand Down Expand Up @@ -46,23 +52,39 @@ public RegistrationSubmissionDetailsBuilder WithSubmissionStatus(string submissi
return this;
}

public RegistrationSubmissionDetailsBuilder WithIsResubmission(bool isResubmission, string? resubmissionFileId = null, string? resubmissionDate = null)
{
_isResubmission = isResubmission;
_resubmissionFileId = resubmissionFileId;
_resubmissionDate = resubmissionDate ?? "2025-06-15T10:00:00Z";
return this;
}

public RegistrationSubmissionDetailsBuilder AsProducer(string organisationSize = "Large")
{
_isComplianceScheme = false;
_registrationJourneyType = organisationSize == "Small" ? "DirectSmallProducer" : "DirectLargeProducer";
_organisationSize = organisationSize;
return this;
}

public object Build() => new
{
submissionId = SubmissionId,
organisationId = Guid.NewGuid().ToString(),
organisationReference = "100001",
organisationName = _organisationName,
organisationType = _organisationType,
registrationJourneyType = "CsoLargeProducer",
registrationJourneyType = _registrationJourneyType,
nationId = 1,
nationCode = "GB-ENG",
relevantYear = _relevantYear,
submissionDate = _submissionDate,
submissionStatus = _submissionStatus,
resubmissionStatus = "Pending",
resubmissionDate = (string?)null,
resubmissionStatus = _isResubmission ? "Pending" : (string?)null,
resubmissionDate = _resubmissionDate,
statusPendingDate = (string?)null,
isResubmission = false,
isResubmission = _isResubmission,
registrationDate = (string?)null,
regulatorComments = "",
producerComments = "Test comment",
Expand All @@ -86,6 +108,7 @@ public RegistrationSubmissionDetailsBuilder WithSubmissionStatus(string submissi
resubmissionDecisionDate = (string?)null,
statusPendingDate = (string?)null,
timeAndDateOfSubmission = _submissionDate,
timeAndDateOfResubmission = _resubmissionDate,
submittedOnTime = false,
submittedByUserId = "A1B2C3D4-E5F6-7890-ABCD-EF1234567890",
accountRole = "Approved Person",
Expand All @@ -106,11 +129,11 @@ public RegistrationSubmissionDetailsBuilder WithSubmissionStatus(string submissi
submissionPeriod = $"January to December {_relevantYear}",
accountRoleId = 1,
submittedBy = "Test User",
resubmissionStatus = (string?)null,
resubmissionStatus = _isResubmission ? "Pending" : (string?)null,
registrationDate = (string?)null,
resubmissionDate = (string?)null,
isResubmission = false,
resubmissionFileId = (string?)null
resubmissionDate = _resubmissionDate,
isResubmission = _isResubmission,
resubmissionFileId = _resubmissionFileId
},
regulatorDecisionDate = (string?)null,
regulatorResubmissionDecisionDate = (string?)null,
Expand All @@ -120,10 +143,10 @@ public RegistrationSubmissionDetailsBuilder WithSubmissionStatus(string submissi
numberOfSubsidiaries = 0,
numberOfOnlineSubsidiaries = 0,
isLateSubmission = true,
organisationSize = (string?)null,
isComplianceScheme = true,
organisationSize = _organisationSize,
isComplianceScheme = _isComplianceScheme,
submissionPeriod = $"January to December {_relevantYear}",
csoMembershipDetails = new[]
csoMembershipDetails = _isComplianceScheme ? new[]
{
new
{
Expand All @@ -137,7 +160,7 @@ public RegistrationSubmissionDetailsBuilder WithSubmissionStatus(string submissi
submittedDate = _submissionDate,
submissionPeriodDescription = $"January to December {_relevantYear}"
}
},
resubmissionFileId = (string?)null
} : Array.Empty<object>(),
resubmissionFileId = _resubmissionFileId
};
}
Loading