public void ShouldSerialiseAndDeserialiseForYotiAccountWithCorrectConfigPropertyTypes()
        {
            bool removeDeceased = true;
            bool shareUrl       = false;

            List <string> sourcesTypesList = new List <string> {
                "type1", "type2"
            };
            RequestedCaSources          sources          = new RequestedTypeListSources(sourcesTypesList);
            RequestedCaMatchingStrategy matchingStrategy = new RequestedExactMatchingStrategy();

            RequestedWatchlistAdvancedCaCheck check =
                new RequestedWatchlistAdvancedCaCheckBuilderYotiAccount()
                .WithRemoveDeceased(removeDeceased)
                .WithShareUrl(shareUrl)
                .WithSources(sources)
                .WithMatchingStrategy(matchingStrategy)
                .Build();

            string jsonData         = JsonConvert.SerializeObject(check);
            var    jsonRoundTripObj = JsonConvert.DeserializeObject <RequestedWatchlistAdvancedCaCheck>(jsonData);


            Assert.AreEqual(DocScanConstants.WatchlistAdvancedCa, check.Type);
            Assert.AreEqual(removeDeceased, jsonRoundTripObj.Config.RemoveDeceased);
            Assert.AreEqual(shareUrl, jsonRoundTripObj.Config.ShareUrl);
            Assert.IsInstanceOfType(check.Config.Sources, typeof(RequestedTypeListSources));
            Assert.IsInstanceOfType(check.Config.MatchingStrategy, typeof(RequestedExactMatchingStrategy));
            Assert.AreEqual(DocScanConstants.TypeList, jsonRoundTripObj.Config.Sources.Type);
            Assert.AreEqual(DocScanConstants.Exact, jsonRoundTripObj.Config.MatchingStrategy.Type);
            CollectionAssert.AreEqual(sourcesTypesList, ((RequestedTypeListSources)jsonRoundTripObj.Config.Sources).Types);
            Assert.IsTrue(((RequestedExactMatchingStrategy)jsonRoundTripObj.Config.MatchingStrategy).ExactMatch);
            Assert.AreEqual(DocScanConstants.WithYotiAccount, jsonRoundTripObj.Config.Type);
        }
        public void ShouldBuildForYotiAccountWithCorrectProperties()
        {
            bool removeDeceased = true;
            bool shareUrl       = false;

            List <string> sourcesTypesList = new List <string> {
                "type1", "type2"
            };
            RequestedCaSources          sources          = new RequestedTypeListSources(sourcesTypesList);
            RequestedCaMatchingStrategy matchingStrategy = new RequestedExactMatchingStrategy();

            RequestedWatchlistAdvancedCaCheck check =
                new RequestedWatchlistAdvancedCaCheckBuilderYotiAccount()
                .WithRemoveDeceased(removeDeceased)
                .WithShareUrl(shareUrl)
                .WithSources(sources)
                .WithMatchingStrategy(matchingStrategy)
                .Build();

            Assert.IsNotNull(check);
            Assert.AreEqual(DocScanConstants.WatchlistAdvancedCa, check.Type);
            Assert.AreEqual(removeDeceased, check.Config.RemoveDeceased);
            Assert.AreEqual(shareUrl, check.Config.ShareUrl);
            Assert.IsInstanceOfType(check.Config.Sources, typeof(RequestedTypeListSources));
            Assert.IsInstanceOfType(check.Config.MatchingStrategy, typeof(RequestedExactMatchingStrategy));
            Assert.AreEqual(DocScanConstants.WithYotiAccount, check.Config.Type);
        }
        public void ShouldSerialiseAndDeserialiseForYotiAccountWithCorrectConfigPropertyTypesVariation()
        {
            bool removeDeceased = false;
            bool shareUrl       = true;

            string                      searchProfile    = "someOtherSearchProfile";
            RequestedCaSources          sources          = new RequestedSearchProfileSources(searchProfile);
            double                      someFuzziness    = 0.8;
            RequestedCaMatchingStrategy matchingStrategy = new RequestedFuzzyMatchingStrategy(someFuzziness);

            RequestedWatchlistAdvancedCaCheck check =
                new RequestedWatchlistAdvancedCaCheckBuilderYotiAccount()
                .WithRemoveDeceased(removeDeceased)
                .WithShareUrl(shareUrl)
                .WithSources(sources)
                .WithMatchingStrategy(matchingStrategy)
                .Build();

            string jsonData         = JsonConvert.SerializeObject(check);
            var    jsonRoundTripObj = JsonConvert.DeserializeObject <RequestedWatchlistAdvancedCaCheck>(jsonData);

            Assert.AreEqual(DocScanConstants.WatchlistAdvancedCa, check.Type);
            Assert.AreEqual(removeDeceased, jsonRoundTripObj.Config.RemoveDeceased);
            Assert.AreEqual(shareUrl, jsonRoundTripObj.Config.ShareUrl);
            Assert.IsInstanceOfType(check.Config.Sources, typeof(RequestedSearchProfileSources));
            Assert.IsInstanceOfType(check.Config.MatchingStrategy, typeof(RequestedFuzzyMatchingStrategy));
            Assert.AreEqual(DocScanConstants.Profile, jsonRoundTripObj.Config.Sources.Type);
            Assert.AreEqual(DocScanConstants.Fuzzy, jsonRoundTripObj.Config.MatchingStrategy.Type);
            Assert.AreEqual(searchProfile, ((RequestedSearchProfileSources)jsonRoundTripObj.Config.Sources).SearchProfile);
            Assert.AreEqual(someFuzziness, ((RequestedFuzzyMatchingStrategy)jsonRoundTripObj.Config.MatchingStrategy).Fuzziness);
            Assert.AreEqual(DocScanConstants.WithYotiAccount, jsonRoundTripObj.Config.Type);
        }
        public void ShouldBuildForYotiAccount()
        {
            RequestedWatchlistAdvancedCaCheck check =
                new RequestedWatchlistAdvancedCaCheckBuilderYotiAccount()
                .Build();

            Assert.AreEqual(DocScanConstants.WatchlistAdvancedCa, check.Type);
            Assert.IsNotNull(check.Config);
        }