public async Task SubtextMustNotBeLongerThanText()
        {
            // setup mock factory for dependency injection
            var mockFactory = new Mock <IMatchingAlgorithmFactory>();
            var dto         = new FindMatchCommandDto {
                Text = "AAAA", Subtext = "XXXXXXXX", MatchingAlgorithmType = MatchingAlgorithmType.OffsetBased
            };
            var command = new FindMatchCommand(dto);
            var handler = new FindMatchCommand.FindMatchCommandHandler(mockFactory.Object);

            // execute use case
            await handler.Handle(command, new CancellationToken());
        }
        public async Task Success_RegexBasedMatching()
        {
            // setup mock factory for dependency injection
            // this will use RegexBased matching algorithm
            var mockFactory = new Mock <IMatchingAlgorithmFactory>();

            mockFactory.Setup(o => o.CreateInstance(It.IsAny <MatchingAlgorithmType>()))
            .Returns <MatchingAlgorithmType>((type) => new RegexBasedMatchng());

            // execute use case
            var dto = new FindMatchCommandDto {
                Text = "AAAA", Subtext = "a", MatchingAlgorithmType = MatchingAlgorithmType.RegexBased
            };
            var command = new FindMatchCommand(dto);
            var handler = new FindMatchCommand.FindMatchCommandHandler(mockFactory.Object);
            var result  = await handler.Handle(command, new CancellationToken());

            // assert returned result contain valida data
            Assert.AreEqual(result.Positions.Count, 4);
            Assert.IsTrue(result.SelectedMatchingAlgorithmType == "RegexBased");
        }
        public async Task SubtextMatchIsNotFound()
        {
            // setup mock algorithm to
            // return an empty list of positions
            var mockAlogirthm = new Mock <IMatchingAlgorithm>();

            mockAlogirthm.Setup(o => o.FindAllOccurencesOfSubtext(It.IsAny <string>(), It.IsAny <string>()))
            .Returns <string, string>((text, subtext) => Task.FromResult(new List <POSITION>()));

            // setup mock factory for dependency injection
            var mockFactory = new Mock <IMatchingAlgorithmFactory>();

            mockFactory.Setup(o => o.CreateInstance(It.IsAny <MatchingAlgorithmType>()))
            .Returns <MatchingAlgorithmType>((type) => mockAlogirthm.Object);

            // execute use case
            var dto = new FindMatchCommandDto {
                Text = "AAAA", Subtext = "xxxx", MatchingAlgorithmType = MatchingAlgorithmType.OffsetBased
            };
            var command = new FindMatchCommand(dto);
            var handler = new FindMatchCommand.FindMatchCommandHandler(mockFactory.Object);
            await handler.Handle(command, new CancellationToken());
        }