diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..e72416e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,8 @@ +repos: +- repo: local + hooks: + - id: local-dotnet-test + name: 'Run unit tests' + entry: test.sh + language: 'script' + description: "Run unit tests" diff --git a/Examples/Yoti.Auth.Sandbox.Examples/DocScanSandboxExample.cs b/Examples/Yoti.Auth.Sandbox.Examples/DocScanSandboxExample.cs index 9c4157f..0de4435 100644 --- a/Examples/Yoti.Auth.Sandbox.Examples/DocScanSandboxExample.cs +++ b/Examples/Yoti.Auth.Sandbox.Examples/DocScanSandboxExample.cs @@ -22,7 +22,7 @@ public void TestDocScan() var responseConfig = new ResponseConfigBuilder() .WithCheckReports( - (new SandboxCheckReportsBuilder()) + new SandboxCheckReportsBuilder() .WithAsyncReportDelay(10) .WithDocumentAuthenticityCheck( new SandboxDocumentAuthenticityCheckBuilder() @@ -62,7 +62,6 @@ public void TestDocScan() .WithDocumentFields( new Dictionary { - { "full_name", "John Doe" }, { "full_name", "John Doe"}, { "nationality", "GBR"}, { "date_of_birth", "1986-06-01"}, @@ -75,22 +74,22 @@ public void TestDocScan() .Build() ) .WithRecommendation( - (new SandboxRecommendationBuilder()) + new SandboxRecommendationBuilder() .WithValue("APPROVE") .Build() ) .Build() ) .WithLivenessCheck( - (new SandboxZoomLivenessCheckBuilder()) + new SandboxZoomLivenessCheckBuilder() .WithBreakdown( - (new SandboxBreakdownBuilder()) + new SandboxBreakdownBuilder() .WithSubCheck("security_features") .WithResult("PASS") .Build() ) .WithRecommendation( - (new SandboxRecommendationBuilder()) + new SandboxRecommendationBuilder() .WithValue("APPROVE") .Build() ) @@ -99,13 +98,12 @@ public void TestDocScan() .Build() ) .WithTaskResults( - (new SandboxTaskResultsBuilder()) + new SandboxTaskResultsBuilder() .WithDocumentTextDataExtractionTask( new SandboxDocumentTextDataExtractionTaskBuilder() .WithDocumentFields( new Dictionary { - { "full_name", "John Doe" }, { "full_name", "John Doe"}, { "nationality", "GBR"}, { "date_of_birth", "1986-06-01"}, diff --git a/Examples/Yoti.Auth.Sandbox.Examples/ProfileSandboxExample.cs b/Examples/Yoti.Auth.Sandbox.Examples/ProfileSandboxExample.cs index 2827b0e..32dc0d8 100644 --- a/Examples/Yoti.Auth.Sandbox.Examples/ProfileSandboxExample.cs +++ b/Examples/Yoti.Auth.Sandbox.Examples/ProfileSandboxExample.cs @@ -92,4 +92,4 @@ public void TestProfile() Assert.AreEqual("some@email", activityDetails.Profile.EmailAddress.GetValue()); } } -} +} \ No newline at end of file diff --git a/Examples/Yoti.Auth.Sandbox.Examples/Yoti.Auth.Sandbox.Examples.csproj b/Examples/Yoti.Auth.Sandbox.Examples/Yoti.Auth.Sandbox.Examples.csproj index 19dc2d4..ff621fa 100644 --- a/Examples/Yoti.Auth.Sandbox.Examples/Yoti.Auth.Sandbox.Examples.csproj +++ b/Examples/Yoti.Auth.Sandbox.Examples/Yoti.Auth.Sandbox.Examples.csproj @@ -7,7 +7,7 @@ - + @@ -19,5 +19,4 @@ - - + \ No newline at end of file diff --git a/Yoti.Auth.Sandbox.Tests/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilderTests.cs b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilderTests.cs index 9203e8d..0eaeede 100644 --- a/Yoti.Auth.Sandbox.Tests/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilderTests.cs +++ b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilderTests.cs @@ -45,6 +45,19 @@ public void ShouldBuildWithDocumentField() Assert.Equal(_someValue, result.Value); } + [Fact] + public void ShouldBuildWithoutDocumentFields() + { + var check = new SandboxDocumentTextDataCheckBuilder() + .WithBreakdown(_someBreakDown) + .WithRecommendation(_someRecommendation) + .Build(); + + var sandboxTextDataCheckResult = (SandboxDocumentTextDataCheckResult)check.Result; + + Assert.Null(sandboxTextDataCheckResult.DocumentFields); + } + [Fact] public void ShouldBuildWithDocumentFields() { diff --git a/Yoti.Auth.Sandbox.Tests/DocScan/Request/Check/SandboxIdDocumentComparisonCheckBuilderTests.cs b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Check/SandboxIdDocumentComparisonCheckBuilderTests.cs new file mode 100644 index 0000000..2169378 --- /dev/null +++ b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Check/SandboxIdDocumentComparisonCheckBuilderTests.cs @@ -0,0 +1,41 @@ +using System.Linq; +using Xunit; +using Yoti.Auth.Sandbox.DocScan.Request.Check; +using Yoti.Auth.Sandbox.DocScan.Request.Check.Report; +using Yoti.Auth.Sandbox.DocScan.Request.Task; + +namespace Yoti.Auth.Sandbox.Tests.DocScan.Request.Check +{ + public class SandboxIdDocumentComparisonCheckBuilderTests + { + [Fact] + public void ShouldBuildWithOnlyRecommendation() + { + var idDocComparisonCheck = new SandboxIdDocumentComparisonCheckBuilder() + .WithRecommendation( + new SandboxRecommendationBuilder() + .WithValue("APPROVE") + .Build()) + .Build(); + + Assert.Equal("APPROVE", idDocComparisonCheck.Result.Report.Recommendation.Value); + } + + [Fact] + public void ShouldBuildWithSecondaryDocumentFilter() + { + var idDocComparisonCheck = new SandboxIdDocumentComparisonCheckBuilder() + .WithRecommendation( + new SandboxRecommendationBuilder() + .WithValue("APPROVE") + .Build()) + .WithSecondaryDocumentFilter( + new SandboxDocumentFilterBuilder() + .WithCountryCode("GBR") + .Build()) + .Build(); + + Assert.Equal("GBR", idDocComparisonCheck.SecondaryDocumentFilter.CountryCodes.Single()); + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox.Tests/DocScan/Request/Task/SandboxDocumentFilterBuilderTests.cs b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Task/SandboxDocumentFilterBuilderTests.cs new file mode 100644 index 0000000..3a058be --- /dev/null +++ b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Task/SandboxDocumentFilterBuilderTests.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using System.Linq; +using Xunit; +using Yoti.Auth.Sandbox.DocScan.Request.Task; + +namespace Yoti.Auth.Sandbox.Tests.DocScan.Request.Task +{ + public class SandboxDocumentFilterBuilderTests + { + private readonly string _country1 = "CR1"; + private readonly string _country2 = "CR2"; + private readonly string _documentType1 = "DOCUMENT_TYPE_1"; + private readonly string _documentType2 = "DOCUMENT_TYPE_2"; + + [Fact] + public void ShouldBuildSandboxDocumentFilterWithCountryCode() + { + var filter = new SandboxDocumentFilterBuilder() + .WithCountryCode(_country1) + .Build(); + + Assert.Equal(_country1, filter.CountryCodes.Single()); + } + + [Fact] + public void ShouldBuildSandboxDocumentFilteMultipleWithCountryCodes() + { + var filter = new SandboxDocumentFilterBuilder() + .WithCountryCode(_country1) + .WithCountryCode(_country2) + .Build(); + + Assert.Equal(new List { _country1, _country2 }, filter.CountryCodes); + } + + [Fact] + public void ShouldBuildSandboxDocumentFilterWithCountryCodes() + { + var countryCodes = new List { _country1, _country2 }; + + var filter = new SandboxDocumentFilterBuilder() + .WithCountryCodes(countryCodes) + .Build(); + + Assert.Equal(countryCodes, filter.CountryCodes); + } + + [Fact] + public void ShouldBuildSandboxDocumentFilterWithDocumentType() + { + var filter = new SandboxDocumentFilterBuilder() + .WithDocumentType(_country1) + .Build(); + + Assert.Equal(_country1, filter.DocumentTypes.Single()); + } + + [Fact] + public void ShouldBuildSandboxDocumentFilterMultipleWithDocumentTypes() + { + var filter = new SandboxDocumentFilterBuilder() + .WithDocumentType(_documentType1) + .WithDocumentType(_documentType2) + .Build(); + + Assert.Equal(new List { _documentType1, _documentType2 }, filter.DocumentTypes); + } + + [Fact] + public void ShouldBuildSandboxDocumentFilterWithDocumentTypes() + { + var documentTypes = new List { _documentType1, _documentType2 }; + + var filter = new SandboxDocumentFilterBuilder() + .WithDocumentTypes(documentTypes) + .Build(); + + Assert.Equal(documentTypes, filter.DocumentTypes); + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox.Tests/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskBuilderTest.cs b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskBuilderTest.cs new file mode 100644 index 0000000..bd859c0 --- /dev/null +++ b/Yoti.Auth.Sandbox.Tests/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskBuilderTest.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; +using Yoti.Auth.Sandbox.DocScan.Request.Task; + +namespace Yoti.Auth.Sandbox.Tests.DocScan.Request.Task +{ + public class SandboxDocumentTextDataExtractionTaskBuilderTest + { + private readonly string _someKey = "someKey"; + private readonly string _someValue = "someValue"; + private readonly string _someOtherKey = "someOtherKey"; + private readonly string _someOtherValue = "someOtherValue"; + + [Fact] + public void ShouldBuildWithDocumentField() + { + var task = new SandboxDocumentTextDataExtractionTaskBuilder() + .WithDocumentField(_someKey, _someValue) + .Build(); + + Assert.Equal(_someValue, task.Result.DocumentFields[_someKey]); + } + + [Fact] + public void ShouldBuildWithDocumentFieldMultiple() + { + var task = new SandboxDocumentTextDataExtractionTaskBuilder() + .WithDocumentField(_someKey, _someValue) + .WithDocumentField(_someOtherKey, _someOtherValue) + .Build(); + + Assert.Equal(_someValue, task.Result.DocumentFields[_someKey]); + Assert.Equal(_someOtherValue, task.Result.DocumentFields[_someOtherKey]); + } + + [Fact] + public void ShouldBuildWithDocumentFields() + { + var documentFields = new Dictionary + { + { _someKey, _someValue }, + { _someOtherKey, _someOtherValue } + }; + + var task = new SandboxDocumentTextDataExtractionTaskBuilder() + .WithDocumentFields(documentFields) + .Build(); + + Assert.Equal(_someValue, task.Result.DocumentFields[_someKey]); + Assert.Equal(_someOtherValue, task.Result.DocumentFields[_someOtherKey]); + } + + [Fact] + public void ShouldBuildWithoutMethods() + { + var task = new SandboxDocumentTextDataExtractionTaskBuilder().Build(); + + Assert.Null(task.Result.DocumentFields); + Assert.Null(task.Result.DocumentIdPhoto); + } + + [Fact] + public void ShouldBuildWithDocumentIdPhoto() + { + byte[] imageBytes = Encoding.UTF8.GetBytes("someImage"); + string contentType = "image/jpeg"; + + var task = new SandboxDocumentTextDataExtractionTaskBuilder() + .WithDocumentIdPhoto(contentType, imageBytes) + .Build(); + + Assert.Equal(contentType, task.Result.DocumentIdPhoto.ContentType); + Assert.Equal(Convert.ToBase64String(imageBytes), task.Result.DocumentIdPhoto.Base64Data); + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox.Tests/DocScan/SandboxCheckReportsBuilderTests.cs b/Yoti.Auth.Sandbox.Tests/DocScan/SandboxCheckReportsBuilderTests.cs new file mode 100644 index 0000000..5b4d489 --- /dev/null +++ b/Yoti.Auth.Sandbox.Tests/DocScan/SandboxCheckReportsBuilderTests.cs @@ -0,0 +1,63 @@ +using System.Linq; +using Xunit; +using Yoti.Auth.Sandbox.DocScan.Request; +using Yoti.Auth.Sandbox.DocScan.Request.Check; +using Yoti.Auth.Sandbox.DocScan.Request.Check.Report; + +namespace Yoti.Auth.Sandbox.Tests.DocScan +{ + public static class SandboxCheckReportsBuilderTests + { + [Fact] + public static void BuilderShouldBuildWithAllArguments() + { + var sandboxCheckReport = new SandboxCheckReportsBuilder() + .WithAsyncReportDelay(10) + .WithDocumentAuthenticityCheck( + new SandboxDocumentAuthenticityCheckBuilder() + .WithRecommendation( + new SandboxRecommendationBuilder() + .WithValue("NOT_AVAILABLE") + .WithReason("PICTURE_TOO_DARK") + .WithRecoverySuggestion("BETTER_LIGHTING") + .Build()) + .Build()) + .WithDocumentFaceMatchCheck( + new SandboxDocumentFaceMatchCheckBuilder() + .WithRecommendation( + new SandboxRecommendationBuilder() + .WithValue("APPROVE") + .Build()) + .Build()) + .WithDocumentTextDataCheck( + new SandboxDocumentTextDataCheckBuilder() + .WithRecommendation( + new SandboxRecommendationBuilder() + .WithValue("APPROVE") + .Build()) + .Build()) + .WithLivenessCheck( + new SandboxZoomLivenessCheckBuilder() + .WithRecommendation( + new SandboxRecommendationBuilder() + .WithValue("APPROVE") + .Build()) + .Build()) + .WithIdDocumentComparisonCheck( + new SandboxIdDocumentComparisonCheckBuilder() + .WithRecommendation( + new SandboxRecommendationBuilder() + .WithValue("APPROVE") + .Build()) + .Build()) + .Build(); + + Assert.Equal(10, sandboxCheckReport.AsyncReportDelay); + Assert.NotNull(sandboxCheckReport.DocumentAuthenticityCheck); + Assert.NotNull(sandboxCheckReport.DocumentFaceMatchCheck); + Assert.NotNull(sandboxCheckReport.TextDataCheck); + Assert.Equal("ZOOM", sandboxCheckReport.LivenessChecks.Single().LivenessType); + Assert.NotNull(sandboxCheckReport.IdDocumentComparisonChecks); + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox.Tests/DocScan/SandboxCheckReportsTests.cs b/Yoti.Auth.Sandbox.Tests/DocScan/SandboxCheckReportsTests.cs new file mode 100644 index 0000000..6732c62 --- /dev/null +++ b/Yoti.Auth.Sandbox.Tests/DocScan/SandboxCheckReportsTests.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; +using Xunit; +using Yoti.Auth.Sandbox.DocScan.Request; +using Yoti.Auth.Sandbox.DocScan.Request.Check; + +namespace Yoti.Auth.Sandbox.Tests.DocScan +{ + public static class SandboxCheckReportTests + { + [Fact] + public static void ShouldCreateWithAllArgs() + { + var sandboxCheckReport = new SandboxCheckReports( + new List(), + new List(), + new List(), + new List(), + 10, + new List()); + + Assert.NotNull(sandboxCheckReport.TextDataCheck); + Assert.NotNull(sandboxCheckReport.DocumentAuthenticityCheck); + Assert.NotNull(sandboxCheckReport.LivenessChecks); + Assert.NotNull(sandboxCheckReport.DocumentFaceMatchCheck); + Assert.Equal(10, sandboxCheckReport.AsyncReportDelay); + Assert.NotNull(sandboxCheckReport.IdDocumentComparisonChecks); + } + + [Fact] + public static void ShouldCreateWithoutIdDocumentComparison() + { + var sandboxCheckReport = new SandboxCheckReports( + new List(), + new List(), + new List(), + new List(), + 10); + + Assert.NotNull(sandboxCheckReport.TextDataCheck); + Assert.NotNull(sandboxCheckReport.DocumentAuthenticityCheck); + Assert.NotNull(sandboxCheckReport.LivenessChecks); + Assert.NotNull(sandboxCheckReport.DocumentFaceMatchCheck); + Assert.Equal(10, sandboxCheckReport.AsyncReportDelay); + Assert.NotNull(sandboxCheckReport.IdDocumentComparisonChecks); + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox.Tests/Yoti.Auth.Sandbox.Tests.csproj b/Yoti.Auth.Sandbox.Tests/Yoti.Auth.Sandbox.Tests.csproj index 88119ae..473a573 100644 --- a/Yoti.Auth.Sandbox.Tests/Yoti.Auth.Sandbox.Tests.csproj +++ b/Yoti.Auth.Sandbox.Tests/Yoti.Auth.Sandbox.Tests.csproj @@ -20,15 +20,15 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilder.cs b/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilder.cs index 3a06510..de483c2 100644 --- a/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilder.cs +++ b/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxDocumentTextDataCheckBuilder.cs @@ -5,10 +5,14 @@ namespace Yoti.Auth.Sandbox.DocScan.Request.Check public class SandboxDocumentTextDataCheckBuilder : SandboxDocumentCheckBuilder { - private Dictionary _documentFields = new Dictionary(); + private Dictionary _documentFields; public SandboxDocumentTextDataCheckBuilder WithDocumentField(string key, object value) { + if (_documentFields == null) + { + _documentFields = new Dictionary(); + } _documentFields.Add(key, value); return this; } diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxIdDocumentComparisonCheck.cs b/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxIdDocumentComparisonCheck.cs new file mode 100644 index 0000000..9c80b80 --- /dev/null +++ b/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxIdDocumentComparisonCheck.cs @@ -0,0 +1,17 @@ +using Newtonsoft.Json; +using Yoti.Auth.Sandbox.DocScan.Request.Task; + +namespace Yoti.Auth.Sandbox.DocScan.Request.Check +{ + public class SandboxIdDocumentComparisonCheck : SandboxCheck + { + [JsonProperty(PropertyName = "secondary_document_filter")] + public SandboxDocumentFilter SecondaryDocumentFilter { get; } + + public SandboxIdDocumentComparisonCheck(SandboxCheckResult result, SandboxDocumentFilter secondaryDocumentFilter) + : base(result) + { + SecondaryDocumentFilter = secondaryDocumentFilter; + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxIdDocumentComparisonCheckBuilder.cs b/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxIdDocumentComparisonCheckBuilder.cs new file mode 100644 index 0000000..e91ee39 --- /dev/null +++ b/Yoti.Auth.Sandbox/DocScan/Request/Check/SandboxIdDocumentComparisonCheckBuilder.cs @@ -0,0 +1,26 @@ +using Yoti.Auth.Sandbox.DocScan.Request.Task; + +namespace Yoti.Auth.Sandbox.DocScan.Request.Check +{ + public class SandboxIdDocumentComparisonCheckBuilder + : SandboxCheckBuilder + { + private SandboxDocumentFilter _secondaryDocumentFilter; + + public SandboxIdDocumentComparisonCheckBuilder WithSecondaryDocumentFilter(SandboxDocumentFilter documentFilter) + { + _secondaryDocumentFilter = documentFilter; + return this; + } + + public override SandboxIdDocumentComparisonCheck Build() + { + Validation.NotNull(Recommendation, nameof(Recommendation)); + + SandboxCheckReport report = new SandboxCheckReport(Recommendation, Breakdown); + SandboxCheckResult result = new SandboxCheckResult(report); + + return new SandboxIdDocumentComparisonCheck(result, _secondaryDocumentFilter); + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReports.cs b/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReports.cs index 7fdb337..7ff5a76 100644 --- a/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReports.cs +++ b/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReports.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Newtonsoft.Json; -using Yoti.Auth.Constants; using Yoti.Auth.Sandbox.DocScan.Request.Check; namespace Yoti.Auth.Sandbox.DocScan.Request @@ -12,27 +11,37 @@ public SandboxCheckReports( List documentAuthenticityChecks, List livenessChecks, List documentFaceMatchChecks, - int? asyncReportDelay) + int? asyncReportDelay, + List idDocumentComparisonChecks = null) { + if (idDocumentComparisonChecks == null) + { + idDocumentComparisonChecks = new List(); + } + TextDataCheck = textDataChecks; DocumentAuthenticityCheck = documentAuthenticityChecks; LivenessChecks = livenessChecks; DocumentFaceMatchCheck = documentFaceMatchChecks; + IdDocumentComparisonChecks = idDocumentComparisonChecks; AsyncReportDelay = asyncReportDelay; } - [JsonProperty(PropertyName = DocScanConstants.IdDocumentTextDataCheck)] + [JsonProperty(PropertyName = "ID_DOCUMENT_TEXT_DATA_CHECK")] public List TextDataCheck { get; } - [JsonProperty(PropertyName = DocScanConstants.IdDocumentAuthenticity)] + [JsonProperty(PropertyName = "ID_DOCUMENT_AUTHENTICITY")] public List DocumentAuthenticityCheck { get; } - [JsonProperty(PropertyName = DocScanConstants.Liveness)] + [JsonProperty(PropertyName = "LIVENESS")] public List LivenessChecks { get; } - [JsonProperty(PropertyName = DocScanConstants.IdDocumentFaceMatch)] + [JsonProperty(PropertyName = "ID_DOCUMENT_FACE_MATCH")] public List DocumentFaceMatchCheck { get; } + [JsonProperty(PropertyName = "ID_DOCUMENT_COMPARISON")] + public List IdDocumentComparisonChecks { get; } + [JsonProperty(PropertyName = "async_report_delay")] public int? AsyncReportDelay { get; } } diff --git a/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReportsBuilder.cs b/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReportsBuilder.cs index da602a7..d3b2ead 100644 --- a/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReportsBuilder.cs +++ b/Yoti.Auth.Sandbox/DocScan/Request/SandboxCheckReportsBuilder.cs @@ -9,6 +9,7 @@ public class SandboxCheckReportsBuilder private readonly List _documentAuthenticityChecks; private readonly List _livenessChecks; private readonly List _documentFaceMatchChecks; + private readonly List _idDocumentComparisonChecks; private int? _asyncReportDelay; public SandboxCheckReportsBuilder() @@ -18,6 +19,7 @@ public SandboxCheckReportsBuilder() _documentAuthenticityChecks = new List(); _livenessChecks = new List(); _documentFaceMatchChecks = new List(); + _idDocumentComparisonChecks = new List(); } public SandboxCheckReportsBuilder WithDocumentTextDataCheck(SandboxDocumentTextDataCheck textDataCheckReport) @@ -44,6 +46,12 @@ public SandboxCheckReportsBuilder WithDocumentFaceMatchCheck(SandboxDocumentFace return this; } + public SandboxCheckReportsBuilder WithIdDocumentComparisonCheck(SandboxIdDocumentComparisonCheck sandboxIDDocumentComparisonCheck) + { + _idDocumentComparisonChecks.Add(sandboxIDDocumentComparisonCheck); + return this; + } + public SandboxCheckReportsBuilder WithAsyncReportDelay(int asyncReportDelay) { _asyncReportDelay = asyncReportDelay; @@ -52,7 +60,13 @@ public SandboxCheckReportsBuilder WithAsyncReportDelay(int asyncReportDelay) public SandboxCheckReports Build() { - return new SandboxCheckReports(_textDataChecks, _documentAuthenticityChecks, _livenessChecks, _documentFaceMatchChecks, _asyncReportDelay); + return new SandboxCheckReports( + _textDataChecks, + _documentAuthenticityChecks, + _livenessChecks, + _documentFaceMatchChecks, + _asyncReportDelay, + _idDocumentComparisonChecks); } } } \ No newline at end of file diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentFilter.cs b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentFilter.cs index 50badbe..ad6a7f3 100644 --- a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentFilter.cs +++ b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentFilter.cs @@ -1,6 +1,20 @@ -namespace Yoti.Auth.Sandbox.DocScan.Request.Task +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace Yoti.Auth.Sandbox.DocScan.Request.Task { public class SandboxDocumentFilter { + public SandboxDocumentFilter(List documentTypes, List countryCodes) + { + DocumentTypes = documentTypes; + CountryCodes = countryCodes; + } + + [JsonProperty(PropertyName = "document_types")] + public List DocumentTypes { get; } + + [JsonProperty(PropertyName = "country_codes")] + public List CountryCodes { get; } } } \ No newline at end of file diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentFilterBuilder.cs b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentFilterBuilder.cs new file mode 100644 index 0000000..e49abfb --- /dev/null +++ b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentFilterBuilder.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; + +namespace Yoti.Auth.Sandbox.DocScan.Request.Task +{ + public class SandboxDocumentFilterBuilder + { + private List _documentTypes; + private List _countryCodes; + + public SandboxDocumentFilterBuilder WithDocumentType(string documentType) + { + if (_documentTypes == null) + { + _documentTypes = new List(); + } + + _documentTypes.Add(documentType); + return this; + } + + public SandboxDocumentFilterBuilder WithDocumentTypes(List documentTypes) + { + _documentTypes = documentTypes; + return this; + } + + public SandboxDocumentFilterBuilder WithCountryCode(string countryCode) + { + if (_countryCodes == null) + { + _countryCodes = new List(); + } + + _countryCodes.Add(countryCode); + return this; + } + + public SandboxDocumentFilterBuilder WithCountryCodes(List countryCodes) + { + _countryCodes = countryCodes; + return this; + } + + public SandboxDocumentFilter Build() + { + return new SandboxDocumentFilter(_documentTypes, _countryCodes); + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentIdPhoto.cs b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentIdPhoto.cs new file mode 100644 index 0000000..6b92966 --- /dev/null +++ b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentIdPhoto.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; + +namespace Yoti.Auth.Sandbox.DocScan.Request.Task +{ + public class SandboxDocumentIdPhoto + { + [JsonProperty(PropertyName = "content_type")] + public string ContentType { get; } + + [JsonProperty(PropertyName = "data")] + public string Base64Data { get; } + + public SandboxDocumentIdPhoto(string contentType, string base64Data) + { + ContentType = contentType; + Base64Data = base64Data; + } + } +} \ No newline at end of file diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskBuilder.cs b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskBuilder.cs index 3c986eb..12b04bd 100644 --- a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskBuilder.cs +++ b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskBuilder.cs @@ -1,14 +1,20 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace Yoti.Auth.Sandbox.DocScan.Request.Task { public class SandboxDocumentTextDataExtractionTaskBuilder : SandboxTaskResult { - private Dictionary _documentFields = new Dictionary(); + private Dictionary _documentFields; private SandboxDocumentFilter _documentFilter; + private SandboxDocumentIdPhoto _documentIdPhoto; public SandboxDocumentTextDataExtractionTaskBuilder WithDocumentField(string key, object value) { + if (_documentFields == null) + { + _documentFields = new Dictionary(); + } _documentFields.Add(key, value); return this; } @@ -25,9 +31,16 @@ public SandboxDocumentTextDataExtractionTaskBuilder WithDocumentFilter(SandboxDo return this; } + public SandboxDocumentTextDataExtractionTaskBuilder WithDocumentIdPhoto(string contentType, byte[] documentIdPhoto) + { + string base64DocumentIdPhoto = Convert.ToBase64String(documentIdPhoto); + _documentIdPhoto = new SandboxDocumentIdPhoto(contentType, base64DocumentIdPhoto); + return this; + } + public SandboxDocumentTextDataExtractionTask Build() { - SandboxDocumentTextDataExtractionTaskResult result = new SandboxDocumentTextDataExtractionTaskResult(_documentFields); + SandboxDocumentTextDataExtractionTaskResult result = new SandboxDocumentTextDataExtractionTaskResult(_documentFields, _documentIdPhoto); return new SandboxDocumentTextDataExtractionTask(result, _documentFilter); } } diff --git a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskResult.cs b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskResult.cs index 177cf3e..eabf1f2 100644 --- a/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskResult.cs +++ b/Yoti.Auth.Sandbox/DocScan/Request/Task/SandboxDocumentTextDataExtractionTaskResult.cs @@ -8,9 +8,15 @@ public class SandboxDocumentTextDataExtractionTaskResult [JsonProperty(PropertyName = "document_fields")] public Dictionary DocumentFields { get; } - public SandboxDocumentTextDataExtractionTaskResult(Dictionary documentFields) + [JsonProperty(PropertyName = "document_id_photo")] + public SandboxDocumentIdPhoto DocumentIdPhoto { get; } + + public SandboxDocumentTextDataExtractionTaskResult( + Dictionary documentFields, + SandboxDocumentIdPhoto sandboxDocumentIdPhoto = null) { DocumentFields = documentFields; + DocumentIdPhoto = sandboxDocumentIdPhoto; } } } \ No newline at end of file diff --git a/Yoti.Auth.Sandbox/Yoti.Auth.Sandbox.csproj b/Yoti.Auth.Sandbox/Yoti.Auth.Sandbox.csproj index b0fb61d..7696657 100644 --- a/Yoti.Auth.Sandbox/Yoti.Auth.Sandbox.csproj +++ b/Yoti.Auth.Sandbox/Yoti.Auth.Sandbox.csproj @@ -12,7 +12,7 @@ Yoti.Sandbox https://developers.yoti.com/yoti-app/web-integration false - 1.3.0 + 1.4.0 @@ -29,16 +29,16 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/azure-pipelines.yml b/azure-pipelines.yml index f21b490..e1cadc7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -27,7 +27,7 @@ steps: scannerMode: 'MSBuild' projectKey: 'getyoti:dotnet-sandbox' projectName: '.NET SDK Sandbox' - projectVersion: '1.3.0' + projectVersion: '1.4.0' extraProperties: | sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" sonar.links.scm = https://github.com/getyoti/yoti-dotnet-sdk-sandbox diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..5801b5b --- /dev/null +++ b/test.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +exec dotnet test Yoti.Auth.Sandbox.Tests/Yoti.Auth.Sandbox.Tests.csproj -c Release --verbosity minimal