public void Ctor_LogsWarning_WhenOptionsAreInconsistent()
        {
            var logger  = new TestCaptureLogger <ShortCodeFactory>();
            var options = new ShortCodeOptions
            {
                CharacterSpace = Encoder.LettersAndDigits,
                FixedLength    = 20,
            };
            var encoder = new Encoder(options.CharacterSpace);

            _ = new ShortCodeFactory(new Mock <IShortCodeGenerator>().Object, encoder, options, logger);

            logger.Logs.Count.ShouldBe(1);
            Console.WriteLine(logger.Logs[0].FormattedMessage);
            logger.Logs[0].LogLevel.ShouldBe(LogLevel.Warning);
            logger.Logs[0].FormattedMessage.ShouldStartWith("The Short Code generator will always produce codes with padding");
        }
        public void GetCodes_ShouldReturnRequiredNumberOfCodes(int numberOfCodes)
        {
            var options = new ShortCodeOptions
            {
                CharacterSpace = Encoder.LettersAndDigits,
                FixedLength    = 5,
            };
            var factory = new ShortCodeFactory(
                new GuidCodeGenerator(),
                new Encoder(Encoder.ReducedAmbiguity),
                options,
                new NullLogger <ShortCodeFactory>());

            var result = factory.GetCodes(numberOfCodes).ToArray();

            result.Length.ShouldBe(numberOfCodes);
            result.Distinct().Count().ShouldBe(numberOfCodes);
        }
        public void GetNextCode_ShouldReturnCode()
        {
            var options = new ShortCodeOptions
            {
                CharacterSpace = Encoder.LettersAndDigits,
                FixedLength    = 5,
            };
            var factory = new ShortCodeFactory(
                new GuidCodeGenerator(),
                new Encoder(Encoder.ReducedAmbiguity),
                options,
                new NullLogger <ShortCodeFactory>());

            var result = factory.GetNextCode();

            Console.WriteLine(result);
            result.Length.ShouldBe(5);
        }