/// <summary>
        /// Initializes a new instance of the <see cref="AuthenticationFlowTest"/> class.
        /// </summary>
        /// <param name="outputHelper">The test output helper.</param>
        public AuthenticationFlowTest(ITestOutputHelper outputHelper)
        {
            this.outputHelper             = outputHelper;
            this.testDatabase             = new TestDatabase(outputHelper);
            this.dbContext                = this.testDatabase.CreateContext();
            this.identityInstance         = IdentityTestHelper.CreateInstance(this.testDatabase, this.outputHelper);
            this.usedHttpContext          = new DefaultHttpContext();
            this.httpConctextAccessorMock = new Mock <IHttpContextAccessor>();
            this.jwtCrypoMock             = new Mock <IJwtCryptoProvider>();
            this.momentMock               = MomentTestHelper.CreateMomentMock();
            this.optionsMonitorMock       = OptionsTestHelper.CreateBackendOptionsMock();
            this.randomGenerator          = new SecureRandomGenerator();
            this.loggerFactory            = LoggingTestHelper.CreateLoggerFactory(this.outputHelper);

            this.httpConctextAccessorMock.SetupGet(m => m.HttpContext).Returns(this.usedHttpContext);

            this.jwtCrypoMock.SetupGet(c => c.Algorithm).Returns(SigningAlgorithm);
            this.jwtCrypoMock.SetupGet(c => c.SecurityKey).Returns(SigningKey);

            this.authenticationFlow = new AuthenticationFlow(
                this.httpConctextAccessorMock.Object,
                this.jwtCrypoMock.Object,
                this.identityInstance.UserManager,
                this.dbContext,
                this.randomGenerator,
                this.momentMock.Object,
                this.optionsMonitorMock.Object,
                this.loggerFactory.CreateLogger <AuthenticationFlow>());
        }
Example #2
0
        public async Task RetrieverReturnsNullManagerReturnsNullWithoutCallingResizingStrategy()
        {
            var imageRetrieverMock = new Mock <IMapImageRetriever>();
            var imageResizerMock   = new Mock <IImageResizingStrategy>();
            var optionsMock        = OptionsTestHelper.CreateBackendOptionsMock();
            var logger             = LoggingTestHelper.CreateLogger <GeoManager>(this.outputHelper);

            var manager = new GeoManager(imageRetrieverMock.Object, imageResizerMock.Object, optionsMock.Object, logger);

            var zipCode     = "1234AB";
            var houseNumber = 1;
            var zoomLevel   = ZoomLevel.CITY;

            imageRetrieverMock.Setup(x => x.GetMapImageAsync(
                                         zipCode,
                                         houseNumber,
                                         zoomLevel,
                                         It.IsAny <CancellationToken>()))
            .ReturnsAsync(null as Stream)
            .Verifiable();

            var imageStream = await manager.GetMapImageAsync(
                zipCode,
                houseNumber,
                zoomLevel,
        public async Task DoesNotEvictWithinCachePeriod()
        {
            var evictionPeriod  = TimeSpan.FromDays(14);
            var imageAccessTime = DateTimeOffset.UtcNow - (evictionPeriod - TimeSpan.FromDays(2));
            var postalCode      = "1234";
            var zoomLevel       = ZoomLevel.CITY;

            var optionsMock = OptionsTestHelper.CreateBackendOptionsMock(
                x => x.Geo.CacheTimesPerZoomLevel = ImmutableDictionary <ZoomLevel, TimeSpan> .Empty
                                                    .Add(zoomLevel, evictionPeriod));

            using var testDb = new TestDatabase(this.outputHelper);

            using (var ctx = await testDb.CreateContextAsync().ConfigureAwait(true))
            {
                ctx.MapImages.Add(
                    new MapImage
                {
                    ImageData        = new byte[] { 0x01 },
                    LastTimeAccessed = imageAccessTime,
                    PostalCode       = postalCode,
                    ZoomLevel        = zoomLevel,
                });
                await ctx.SaveChangesAsync().ConfigureAwait(true);
            }

            using (var ctx = await testDb.CreateContextAsync().ConfigureAwait(true))
            {
                var task = new GeoMapImageCacheCleaningTask(
                    ctx,
                    optionsMock.Object,
                    LoggingTestHelper.CreateLogger <GeoMapImageCacheCleaningTask>(this.outputHelper));

                await task.RunAsync(default).ConfigureAwait(true);
        public async Task GetEntitiesReturnsEntitiesFromDatabaseAsync()
        {
            using var database = new TestDatabase(this.outputHelper);

            var dummyLevels = CreateEntityCollection <Level>(this.AddLevelsWithQuestions).ToList();

            var expectedLevelNumbers = dummyLevels.Where(level => level.Number >= 1)
                                       .Select(level => level.Number);

            var expectedQuestionCount = dummyLevels.Where(level => level.Number >= 1)
                                        .Sum(question => question.Questions.Count());

            using (var context = await database.CreateContextAsync().ConfigureAwait(true))
            {
                context.Levels.AddRange(dummyLevels);

                await context.SaveChangesAsync().ConfigureAwait(true);
            }

            using (var context = await database.CreateContextAsync().ConfigureAwait(true))
            {
                var manager = new LevelManager(context, LoggingTestHelper.CreateLogger <LevelManager>(this.outputHelper));

                var levels = new List <Level>();

                // All levels except level 0 including Questions property, will expect to take 10 will debug log that this is 9
                foreach (var level in (await manager.GetPagedEntitiesPage(10, 0, default, new Func <IQueryable <Level>, IQueryable <Level> >(query => query.Where(level => level.Number >= 1).Include("Questions"))).ConfigureAwait(false)).Data)
 private MathManager CreateMathManager(FvectContext dbContext)
 => new MathManager(
     dbContext,
     LoggingTestHelper.CreateLogger <MathManager>(this.outputHelper));
        public async Task CachableImageWithinCacheRetrievesFromCache()
        {
            using var db = new TestDatabase(this.outputHelper);

            var zipCode           = "1234 AB";
            var zipCodeNormalized = "1234";
            var houseNumber       = 1;
            var zoomLevel         = ZoomLevel.CITY;
            var imageData         = new byte[] { 0, 1, 2, 3, };

            var optionsMock = OptionsTestHelper.CreateBackendOptionsMock(
                x => x.Geo.CacheTimesPerZoomLevel = ImmutableDictionary <ZoomLevel, TimeSpan> .Empty.Add(
                    zoomLevel,
                    TimeSpan.MaxValue));

            var innerMock = new Mock <IMapImageRetriever>();

            var logger = LoggingTestHelper.CreateLogger <CachedMapImageRetriever>(this.outputHelper);

            var imageInCache = new MapImage
            {
                PostalCode       = zipCodeNormalized,
                ImageData        = imageData,
                ZoomLevel        = zoomLevel,
                LastTimeAccessed = DateTimeOffset.UtcNow,
            };

            using (var ctx = await db.CreateContextAsync().ConfigureAwait(true))
            {
                ctx.MapImages.Add(imageInCache);
                await ctx.SaveChangesAsync().ConfigureAwait(true);
            }

            Stream?imageStream = default;

            using (var ctx = await db.CreateContextAsync().ConfigureAwait(true))
            {
                var retriever = new CachedMapImageRetriever(
                    ctx,
                    innerMock.Object,
                    optionsMock.Object,
                    logger);

                imageStream = await retriever.GetMapImageAsync(
                    zipCode,
                    houseNumber,
                    zoomLevel,
                    default)
                              .ConfigureAwait(true);
            }

            imageStream
            .Should()
            .NotBeNull(
                because: "the value should have been retrieved from the cache");

            using var ms           = new MemoryStream();
            imageStream !.Position = 0;
            await imageStream.CopyToAsync(ms).ConfigureAwait(true);

            ms.ToArray()
            .Should()
            .BeEquivalentTo(
                imageData,
                because: "the retrieved value should be equal to the data intially stored in the cache");

            innerMock.VerifyNoOtherCalls();
        }
 private DataConflictExceptionHandlerMiddleware CreateMiddleware(
     RequestDelegate @delegate)
 => new DataConflictExceptionHandlerMiddleware(
     @delegate,
     LoggingTestHelper.CreateLogger <DataConflictExceptionHandlerMiddleware>(this.outputHelper));