public void MatchAlgorithmNoMatchFound()
        {
            //  Arrange
            var searchValue = "Test3";

            //  Set up the mock conditions: Dice return 1 for Test1, first case so no need to set up other return values
            _mockCoefficientAlgorithm.Setup(r => r.Match(It.IsAny<string>(), It.IsAny<string>())).Returns(0.0f);    // No Match

            _mockSimilarityAlgorithm.Setup(r => r.Match(It.IsAny<string>(), It.IsAny<string>())).Returns(0.0f); //  No Match

            _mockEditDistanceAlgorithm.Setup(r => r.Match(It.IsAny<string>(), It.IsAny<string>())).Returns(10); //  No Match

            _mockPreProcessor.Setup(p => p.ApplyPreProcess("Test1", It.IsAny<PreProcessTypesEnum>())).Returns("Test1");
            _mockPreProcessor.Setup(p => p.ApplyPreProcess("Test2", It.IsAny<PreProcessTypesEnum>())).Returns("Test2");

            var algorithm = new MatchingAlgorithm(_mockCoefficientAlgorithm.Object, CoefficientLimit,
                                                  _mockSimilarityAlgorithm.Object, SimilarityLimit,
                                                  _mockEditDistanceAlgorithm.Object, EditDistanceLimit,
                                                  _mockPreProcessor.Object);

            //  Act
            var result = algorithm.Match(searchValue, _aggregates);

            //  Assert
            Assert.AreEqual(-1, result, "Expected the match to return -1, no match found");
        }
        public void MatchWithDiceCoefficientReturnsAggregateNumber2()
        {
            //  Arrange
            var searchValue = "Test2";

            //  Set up the mock conditions: Dice returns 1 for "Test2 to show an exact match
            _mockCoefficientAlgorithm.Setup(r => r.Match(searchValue, "Test1")).Returns(0.0f);      //  No Match
            _mockCoefficientAlgorithm.Setup(r => r.Match(searchValue, "Test2")).Returns(1.0f);      //  Match

            _mockSimilarityAlgorithm.Setup(r => r.Match(It.IsAny<string>(), It.IsAny<string>())).Returns(0.0f); //  No Match

            _mockEditDistanceAlgorithm.Setup(r => r.Match(It.IsAny<string>(), It.IsAny<string>())).Returns(10); //  No Match

            _mockPreProcessor.Setup(p => p.ApplyPreProcess("Test1", It.IsAny<PreProcessTypesEnum>())).Returns("Test1");
            _mockPreProcessor.Setup(p => p.ApplyPreProcess("Test2", It.IsAny<PreProcessTypesEnum>())).Returns("Test2");

            var algorithm = new MatchingAlgorithm(_mockCoefficientAlgorithm.Object, CoefficientLimit,
                                                  _mockSimilarityAlgorithm.Object, SimilarityLimit,
                                                  _mockEditDistanceAlgorithm.Object, EditDistanceLimit,
                                                  _mockPreProcessor.Object);

            //  Act
            var result = algorithm.Match(searchValue, _aggregates);

            //  Assert
            Assert.AreEqual(2, result, "Expected the match to return the first instance: Aggregate Id of 2");
        }