public void AddBewitGeneration_WithValidConfiguration_ShouldAddBewitTokenGeneratorForMyPayload()
        {
            //Arrange
            var services = new ServiceCollection();
            IConfigurationRoot configuration = new ConfigurationBuilder()
                                               .AddInMemoryCollection(new[]
            {
                new KeyValuePair <string, string>("Bewit:Secret", "123")
            })
                                               .Build();

            //Act
            services.AddBewitGeneration(configuration, b => b.AddPayload <Foo>());

            //Assert
            ServiceProvider serviceProvider = null;

            try
            {
                serviceProvider = services.BuildServiceProvider();
                IBewitTokenGenerator <Foo> bewitTokenGenerator =
                    serviceProvider.GetService <IBewitTokenGenerator <Foo> >();
                bewitTokenGenerator.Should().NotBeNull();
                bewitTokenGenerator.Should()
                .BeOfType <BewitTokenGenerator <Foo> >();
            }
            finally
            {
                serviceProvider?.Dispose();
            }
        }
        public void AddBewitGeneration_WithMyPayload_ShouldAddBewitTokenGeneratorForMyPayload()
        {
            //Arrange
            const string secret   = "112";
            var          services = new ServiceCollection();

            //Act
            services.AddBewitGeneration(new BewitOptions
            {
                Secret = secret
            }, b => b.AddPayload <Foo>());

            //Assert
            ServiceProvider serviceProvider = null;

            try
            {
                serviceProvider = services.BuildServiceProvider();
                IBewitTokenGenerator <Foo> bewitTokenGenerator =
                    serviceProvider.GetService <IBewitTokenGenerator <Foo> >();
                bewitTokenGenerator.Should().NotBeNull();
                bewitTokenGenerator.Should()
                .BeOfType <BewitTokenGenerator <Foo> >();
            }
            finally
            {
                serviceProvider?.Dispose();
            }
        }
        public void AddBewitGeneration_WithPersistance_ShouldAddPersistedBewitTokenGenerator()
        {
            //Arrange
            const string secret   = "112";
            var          services = new ServiceCollection();

            //Act
            services.AddSingleton <INonceRepository>(new Mock <INonceRepository>().Object);
            services.AddBewitGeneration(new BewitOptions
            {
                Secret = secret
            },
                                        builder =>
            {
                builder.AddPayload <Foo>();
            });

            //Assert
            ServiceProvider serviceProvider = null;

            try
            {
                serviceProvider = services.BuildServiceProvider();
                IBewitTokenGenerator <Foo> bewitTokenGenerator =
                    serviceProvider.GetService <IBewitTokenGenerator <Foo> >();
                bewitTokenGenerator.Should().NotBeNull();
                bewitTokenGenerator.Should()
                .BeOfType <BewitTokenGenerator <Foo> >();
            }
            finally
            {
                serviceProvider?.Dispose();
            }
        }