Skip to content

Commit

Permalink
Merge pull request #68 from DEFRA/feature/cdms-145-worst-case-scenari…
Browse files Browse the repository at this point in the history
…o-outcome

Feature/cdms 145 worst case scenario outcome
  • Loading branch information
limsim authored Jan 27, 2025
2 parents 726cf7b + a096d12 commit fb0a672
Show file tree
Hide file tree
Showing 103 changed files with 22,543 additions and 388 deletions.
Original file line number Diff line number Diff line change
@@ -1,85 +0,0 @@
using Btms.Model;
using FluentAssertions;
using TestDataGenerator.Scenarios.SpecificFiles;
using TestGenerator.IntegrationTesting.Backend;
using TestGenerator.IntegrationTesting.Backend.Fixtures;
using Xunit;
using Xunit.Abstractions;

namespace Btms.Backend.IntegrationTests.DecisionTests;

[Trait("Category", "Integration")]
public class BasicDecisionCodeTests
{
public class SingleChedH01Tests(ITestOutputHelper output)
: ScenarioGeneratorBaseTest<AllChedsH01DecisionGenerator>(output)
{
[Fact]
public void SingleChed_ShouldHaveH01DecisionCode()
{
CheckDecisionCode("H01", Client);
}
}

public class SingleChedH02Tests(ITestOutputHelper output)
: ScenarioGeneratorBaseTest<AllChedsH02DecisionGenerator>(output)
{
[Fact]
public void SingleChed_ShouldHaveH02DecisionCode()
{
CheckDecisionCode("H02", Client);
}
}

[Trait("Category", "Integration")]
public class SingleChedDecisionTests(ITestOutputHelper output)
: ScenarioGeneratorBaseTest<AllChedsC03DecisionGenerator>(output)
{
[Fact]
public void SingleChed_ShouldHaveC03DecisionCode()
{
CheckDecisionCode("C03", Client);
}
}

[Trait("Category", "Integration")]
public class MultiChedDecisionTest(ITestOutputHelper output)
: ScenarioGeneratorBaseTest<MultiChedPMatchScenarioGenerator>(output)
{
[Fact]
public void MultiChed_ShouldHaveH02DecisionCode()
{
string decisionCode = "";
var expectedDecision = "H02";
Client.AsJsonApiClient().Get("api/movements").GetResourceObjects<Movement>().Single().Decisions
.OrderBy(x => x.ServiceHeader?.ServiceCalled).Last().Items!
.All(i =>
{
decisionCode = i.Checks!.First().DecisionCode!;

return decisionCode.Equals(expectedDecision);
}).Should().BeTrue($"Expected {expectedDecision}. Actually {{0}}", decisionCode);
}
}

private static void CheckDecisionCode(string expectedDecisionCode, BtmsClient client)
{
string decisionCode;
string mrn;

var movements = client.AsJsonApiClient().Get("api/movements").GetResourceObjects<Movement>();
movements.Should().AllSatisfy(m =>
{
mrn = m.EntryReference;
m.Decisions.OrderBy(x => x.ServiceHeader?.ServiceCalled).Last().Items.Should().AllSatisfy(i =>
{
i.Checks.Should().AllSatisfy(c =>
{
decisionCode = c.DecisionCode!;
decisionCode.Should().Be(expectedDecisionCode,
$"Expected {expectedDecisionCode}. Actually {{0}}. MRN: {{1}}", decisionCode, mrn);
});
});
});
}
}
47 changes: 35 additions & 12 deletions Btms.Backend.IntegrationTests/DecisionTests/DecisionCodeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,43 @@ namespace Btms.Backend.IntegrationTests.DecisionTests;
public class DecisionCodeTests(ITestOutputHelper output) : MultipleScenarioGeneratorBaseTest(output)
{
[Theory]
[InlineData(typeof(ChedAh01ScenarioScenarioGenerator), "H01")]
[InlineData(typeof(ChedPh01ScenarioScenarioGenerator), "H01")]
[InlineData(typeof(ChedDh01ScenarioScenarioGenerator), "H01")]
[InlineData(typeof(ChedAh02ScenarioScenarioGenerator), "H02")]
[InlineData(typeof(ChedPh02ScenarioScenarioGenerator), "H02")]
[InlineData(typeof(ChedDh02ScenarioScenarioGenerator), "H02")]
[InlineData(typeof(ChedAc03ScenarioScenarioGenerator), "C03")]
[InlineData(typeof(ChedPc03ScenarioScenarioGenerator), "C03")]
[InlineData(typeof(ChedDc03ScenarioScenarioGenerator), "C03")]
public void ShouldHaveCorrectDecisionCode(Type generatorType, string decisionCode)
[InlineData(typeof(ChedAh01ScenarioGenerator1), "H01")]
[InlineData(typeof(ChedAh01ScenarioGenerator2), "H01")]
[InlineData(typeof(ChedAh01ScenarioGenerator3), "H01")]
[InlineData(typeof(ChedAh01ScenarioGenerator4), "H01")]
[InlineData(typeof(ChedDh01ScenarioGenerator1), "H01")]
[InlineData(typeof(ChedDh01ScenarioGenerator2), "H01")]
[InlineData(typeof(ChedDh01ScenarioGenerator3), "H01")]
[InlineData(typeof(ChedDh01ScenarioGenerator4), "H01")]
[InlineData(typeof(ChedPh01ScenarioGenerator1), "H01")]
[InlineData(typeof(ChedPh01ScenarioGenerator2), "H01")]
[InlineData(typeof(ChedPh01ScenarioGenerator3), "H01")]
[InlineData(typeof(ChedPh01ScenarioGenerator4), "H01")]
[InlineData(typeof(ChedAh02ScenarioGenerator1), "H02")]
[InlineData(typeof(ChedAh02ScenarioGenerator2), "H02")]
[InlineData(typeof(ChedDh02ScenarioGenerator1), "H02")]
[InlineData(typeof(ChedDh02ScenarioGenerator2), "H02")]
[InlineData(typeof(ChedPh02ScenarioGenerator1), "H02")]
[InlineData(typeof(ChedPh02ScenarioGenerator2), "H02")]
[InlineData(typeof(ChedAc03ScenarioGenerator), "C03")]
[InlineData(typeof(ChedPc03ScenarioGenerator), "C03")]
[InlineData(typeof(ChedDc03ScenarioGenerator), "C03")]
[InlineData(typeof(ChedAc05ScenarioGenerator), "C05")]
[InlineData(typeof(ChedAc06ScenarioGenerator), "C06")]
[InlineData(typeof(ChedPc06ScenarioGenerator), "C06")]
[InlineData(typeof(ChedAn02ScenarioGenerator), "N02")]
[InlineData(typeof(ChedAn04ScenarioGenerator), "N04")]
[InlineData(typeof(ChedDn02ScenarioGenerator), "N02")]
[InlineData(typeof(ChedDn04ScenarioGenerator), "N04")]
[InlineData(typeof(ChedPn02ScenarioGenerator), "N02")]
[InlineData(typeof(ChedPn03ScenarioGenerator), "N03")]
[InlineData(typeof(ChedPn04ScenarioGenerator), "N04")]
[InlineData(typeof(ChedPn07ScenarioGenerator), "N07")]
public void ShouldHaveCorrectDecisionCode(Type generatorType, string expectedDecisionCode)
{
base.TestOutputHelper.WriteLine("Generator : {0}, Decision Code : {1}", generatorType!.FullName, decisionCode);
base.TestOutputHelper.WriteLine("Generator : {0}, Decision Code : {1}", generatorType!.FullName, expectedDecisionCode);
EnsureEnvironmentInitialised(generatorType);
CheckDecisionCode(decisionCode);
CheckDecisionCode(expectedDecisionCode);
}

private void CheckDecisionCode(string expectedDecisionCode)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using Btms.Model;
using FluentAssertions;
using TestDataGenerator.Scenarios.SpecificFiles;
using TestGenerator.IntegrationTesting.Backend;
using Xunit;
using Xunit.Abstractions;

namespace Btms.Backend.IntegrationTests.DecisionTests;

[Trait("Category", "Integration")]
public class MultiChedDecisionTest(ITestOutputHelper output)
: MultipleScenarioGeneratorBaseTest(output)
{
[Theory]
[InlineData(typeof(MultiChedPMatchScenarioGenerator), "H02")]
[InlineData(typeof(MultiChedAMatchScenarioGenerator), "C03")]
[InlineData(typeof(MultiChedDMatchScenarioGenerator), "C03")]
public void MultiChed_DecisionCode(Type generatorType, string expectedDecision)
{
base.TestOutputHelper.WriteLine("Generator : {0}, Decision Code : {1}", generatorType!.FullName, expectedDecision);
EnsureEnvironmentInitialised(generatorType);
CheckDecisionCode(expectedDecision);
}

[Theory (Skip = "Need to update data")]
[InlineData(typeof(MultiChedPWorstCaseMatchScenarioGenerator), "N07")]
[InlineData(typeof(MultiChedAWorstCaseMatchScenarioGenerator), "H02")]
[InlineData(typeof(MultiChedDWorstCaseMatchScenarioGenerator), "N02")]
public void MultiChed_WorstCaseDecisionCode(Type generatorType, string expectedDecision)
{
base.TestOutputHelper.WriteLine("Generator : {0}, Decision Code : {1}", generatorType!.FullName, expectedDecision);
EnsureEnvironmentInitialised(generatorType);
CheckDecisionCode(expectedDecision);
}

private void CheckDecisionCode(string expectedDecision)
{
var decision = "";
Client.AsJsonApiClient().Get("api/movements").GetResourceObjects<Movement>().Single().Decisions
.OrderBy(x => x.ServiceHeader?.ServiceCalled).Last().Items!
.All(i =>
{
decision = i.Checks!.First().DecisionCode!;

return decision.Equals(expectedDecision);
}).Should().BeTrue($"Expected {expectedDecision}. Actually {{0}}", decision);
}
}
1 change: 0 additions & 1 deletion TestDataGenerator.Tests/ImportNotificationBuilderTests.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using Btms.Types.Ipaffs;
using Btms.Common.Extensions;
using FluentAssertions;
using MongoDB.Bson;
using Xunit;

namespace TestDataGenerator.Tests;
Expand Down
2 changes: 0 additions & 2 deletions TestDataGenerator.Tests/ScenarioTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using Btms.BlobService;
using Btms.BlobService.Extensions;
using FluentAssertions;
using Microsoft.Extensions.DependencyInjection;
using TestDataGenerator.Extensions;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Btms.BlobService;
using Btms.Common.Extensions;
using FluentAssertions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Abstractions;
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,79 @@
{"serviceHeader":{"sourceSystem":"CDS","destinationSystem":"ALVS","correlationId":"1315562","serviceCallTimestamp":1733315286000},"header":{"entryReference":"24GBDFPIYGN8YKQAR3","entryVersionNumber":1,"previousVersionNumber":null,"declarationUCR":"4GB279214189000-CL7238","declarationPartNumber":null,"declarationType":"S","arrivalDateTime":null,"submitterTURN":null,"declarantId":"GB279214189000","declarantName":"GB279214189000","dispatchCountryCode":"AE","goodsLocationCode":"LHRLHRLHR","masterUCR":"HARC17602480634"},"items":[{"itemNumber":1,"customsProcedureCode":"4000000","taricCommodityCode":"0106190000","goodsDescription":"11 LIVE CATS","consigneeId":"GB279214189000","consigneeName":"GB279214189000","itemNetMass":112,"itemSupplementaryUnits":0,"itemThirdQuantity":null,"itemOriginCountryCode":"AE","documents":[{"documentCode":"C640","documentReference":"GBCHD2024.5252413","documentStatus":"AE","documentControl":"P","documentQuantity":null}],"checks":[{"checkCode":"H221","departmentCode":"AHVLA"}]},{"itemNumber":2,"customsProcedureCode":"4000000","taricCommodityCode":"0106190000","goodsDescription":"11 LIVE CATS","consigneeId":"GB279214189000","consigneeName":"GB279214189000","itemNetMass":112,"itemSupplementaryUnits":0,"itemThirdQuantity":null,"itemOriginCountryCode":"AE","documents":[{"documentCode":"C640","documentReference":"GBCHD2024.5252370","documentStatus":"AE","documentControl":"P","documentQuantity":null}],"checks":[{"checkCode":"H221","departmentCode":"AHVLA"}]}]}
{
"serviceHeader": {
"sourceSystem": "CDS",
"destinationSystem": "ALVS",
"correlationId": "1315562",
"serviceCallTimestamp": 1733315286000
},
"header": {
"entryReference": "24GBDFPIYGN8YKQAR3",
"entryVersionNumber": 1,
"previousVersionNumber": null,
"declarationUCR": "4GB279214189000-CL7238",
"declarationPartNumber": null,
"declarationType": "S",
"arrivalDateTime": null,
"submitterTURN": null,
"declarantId": "GB279214189000",
"declarantName": "GB279214189000",
"dispatchCountryCode": "AE",
"goodsLocationCode": "LHRLHRLHR",
"masterUCR": "HARC17602480634"
},
"items": [
{
"itemNumber": 1,
"customsProcedureCode": "4000000",
"taricCommodityCode": "0106190000",
"goodsDescription": "11 LIVE CATS",
"consigneeId": "GB279214189000",
"consigneeName": "GB279214189000",
"itemNetMass": 112,
"itemSupplementaryUnits": 0,
"itemThirdQuantity": null,
"itemOriginCountryCode": "AE",
"documents": [
{
"documentCode": "C640",
"documentReference": "GBCHD2024.5252413",
"documentStatus": "AE",
"documentControl": "P",
"documentQuantity": null
}
],
"checks": [
{
"checkCode": "H221",
"departmentCode": "AHVLA"
}
]
},
{
"itemNumber": 2,
"customsProcedureCode": "4000000",
"taricCommodityCode": "0106190000",
"goodsDescription": "11 LIVE CATS",
"consigneeId": "GB279214189000",
"consigneeName": "GB279214189000",
"itemNetMass": 112,
"itemSupplementaryUnits": 0,
"itemThirdQuantity": null,
"itemOriginCountryCode": "AE",
"documents": [
{
"documentCode": "C640",
"documentReference": "GBCHD2024.5252370",
"documentStatus": "AE",
"documentControl": "P",
"documentQuantity": null
}
],
"checks": [
{
"checkCode": "H221",
"departmentCode": "AHVLA"
}
]
}
]
}
Loading

0 comments on commit fb0a672

Please sign in to comment.