Exemplo n.º 1
0
 protected static void ResetDatabase(DbContextOptions <MiniURLDbContext> dbOptions, IDateTime dateTime)
 {
     using (var ctx = new MiniURLDbContext(dbOptions, dateTime))
     {
         ctx.Database.EnsureDeleted();
     }
 }
        public async Task Handle_RequestKnownShortURL_ReturnsCorrectly()
        {
            var originalURL = "https://github.com/MathiasLorenz";
            var shortURL    = "iodfetry";

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                ctx.PersistedURLs.Add(new PersistedURL
                {
                    URL      = originalURL,
                    ShortURL = shortURL,
                });
                await ctx.SaveChangesAsync();
            }

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                var handler = new GetPersistedURLQueryHandler(ctx);
                var query   = new GetPersistedURLQuery {
                    ShortURL = shortURL
                };

                var result = await handler.Handle(query, new System.Threading.CancellationToken());

                result.ShouldNotBeNull();
                result.ShouldBeOfType <PersistedURLVm>();
                result.URL.ShouldBe(originalURL);
                result.ShortURL.ShouldBe(shortURL);
            }
        }
Exemplo n.º 3
0
        private async Task RunUserQuery(List <User> users,
                                        List <PersistedURL> persistedURLs,
                                        MiniURLDbContext ctx)
        {
            for (int i = 0; i < 2; i++)
            {
                bool includedDeleted = i == 0 ? true : false;
                foreach (var user in users)
                {
                    var query = new GetURLsForUserQuery
                    {
                        UserId         = user.Id,
                        IncludeDeleted = includedDeleted
                    };
                    var handler = new GetURLsForUserQueryHandler(ctx);

                    var result = await handler.Handle(query, new System.Threading.CancellationToken());

                    result.ShouldNotBeNull();
                    result.ShouldBeOfType <URLsForUserVm>();
                    result.UserId.ShouldBe(user.Id);
                    result.URLs.ShouldBeOfType <List <URLsForUserDto> >();

                    int relevantPersistedURLsCount = includedDeleted
                        ? persistedURLs.Where(x => x.UserId == user.Id).Count()
                        : persistedURLs.Where(x => x.UserId == user.Id && x.Deleted == false).Count();
                    result.URLs.Count.ShouldBe(relevantPersistedURLsCount);
                }
            }
        }
Exemplo n.º 4
0
        private async Task <int> SetupHandlerAndHandle(string mockedShortURL,
                                                       string originalURL,
                                                       int?userId             = null,
                                                       string?desiredShortURL = null)
        {
            var mockTokenGenerator = new Mock <ITokenGenerator>();

            mockTokenGenerator.Setup(x => x.GetUniqueKey()).Returns(mockedShortURL);

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                var request = new CreatePersistedURLCommand
                {
                    URL             = originalURL,
                    UserId          = userId ?? null,
                    DesiredShortURL = desiredShortURL ?? null
                };
                var handler = new CreatePersistedURLCommandHandler(ctx, mockTokenGenerator.Object);

                var result = await handler.Handle(request, new System.Threading.CancellationToken());

                result.ShouldNotBeNull();
                result.ShouldBeGreaterThan(0);

                return(result);
            }
        }
Exemplo n.º 5
0
        protected static async Task <int> CreateAUser(DbContextOptions <MiniURLDbContext> dbOptions, IDateTime dateTime)
        {
            using (var ctx = new MiniURLDbContext(dbOptions, dateTime))
            {
                var entity = SeedData.Users()[0];
                ctx.Users.Add(entity);
                await ctx.SaveChangesAsync();

                return(entity.Id);
            }
        }
Exemplo n.º 6
0
        public async Task GetURLsForUser_SeededDb_ReturnsCorrect()
        {
            ResetDatabase(DbOptions, DateTimeService);
            await SeedDb(DbOptions, DateTimeService);

            var users         = SeedData.Users();
            var persistedURLs = SeedData.PersistedURLs();

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                await RunUserQuery(users, persistedURLs, ctx);
            }
        }
Exemplo n.º 7
0
        protected static async Task SeedDb(DbContextOptions <MiniURLDbContext> dbOptions, IDateTime dateTime)
        {
            using (var ctx = new MiniURLDbContext(dbOptions, dateTime))
            {
                var seeder = new MiniURLDbContextSeeder(ctx);

                try
                {
                    await seeder.SeedAllAsync(new System.Threading.CancellationToken());
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
Exemplo n.º 8
0
        public async Task GetURLsForUser_InvalidUser_ThrowsException()
        {
            ResetDatabase(DbOptions, DateTimeService);
            var userId = await CreateAUser(DbOptions, DateTimeService);

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                var query = new GetURLsForUserQuery {
                    UserId = userId + 1
                };
                var handler = new GetURLsForUserQueryHandler(ctx);

                await Should.ThrowAsync <NotFoundException>(
                    handler.Handle(query, new System.Threading.CancellationToken()));
            }
        }
        public async Task Handle_RequestUnknownShortURL_ThrowsException()
        {
            var unknwnShortURL = "ThisShortURLIsNotKnown";

            await SeedDb(DbOptions, DateTimeService);

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                var handler = new GetPersistedURLQueryHandler(ctx);

                await Should.ThrowAsync <NotFoundException>(
                    handler.Handle(new GetPersistedURLQuery {
                    ShortURL = unknwnShortURL
                },
                                   new System.Threading.CancellationToken()));
            }
        }
Exemplo n.º 10
0
        public async Task CreatePersistedURL_NoUser()
        {
            ResetDatabase(DbOptions, DateTimeService);
            var mockedShortURL = "xyz";
            var originalURL    = "www.averyknownwebsite.com";

            var persistedURLId = await SetupHandlerAndHandle(mockedShortURL, originalURL);

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                var persistedURL = await ctx.PersistedURLs.SingleAsync(x => x.ShortURL == mockedShortURL);

                persistedURL.ShortURL.ShouldBe(mockedShortURL);
                persistedURL.URL.ShouldBe(originalURL);
                persistedURL.UserId.ShouldBeNull();
            }
        }
Exemplo n.º 11
0
        public async Task CreatePersistedURL_WithDesiredURL_ReturnsCorrectly()
        {
            ResetDatabase(DbOptions, DateTimeService);
            var mockedShortURL  = "a";
            var desiredShortURL = "b";
            var originalURL     = "www.someotherwebsite.com";

            var persistedURLId = await SetupHandlerAndHandle(mockedShortURL, originalURL, desiredShortURL : desiredShortURL);

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                var persistedURL = await ctx.PersistedURLs
                                   .SingleAsync(x => x.ShortURL == desiredShortURL);

                persistedURL.Id.ShouldBe(persistedURLId);
                persistedURL.ShortURL.ShouldBe(desiredShortURL);
            }
        }
Exemplo n.º 12
0
        public async Task CreatePersistedURL_WithUser()
        {
            ResetDatabase(DbOptions, DateTimeService);
            var mockedShortURL = "abcdefgh";
            var originalURL    = "www.somewebsite.com";

            var userId = await CreateAUser(DbOptions, DateTimeService);

            var persistedURLId = await SetupHandlerAndHandle(mockedShortURL, originalURL, userId);

            using (var ctx = new MiniURLDbContext(DbOptions, DateTimeService))
            {
                var persistedURL = await ctx.PersistedURLs
                                   .Include(x => x.User)
                                   .SingleAsync(x => x.ShortURL == mockedShortURL);

                persistedURL.ShortURL.ShouldBe(mockedShortURL);
                persistedURL.URL.ShouldBe(originalURL);
                persistedURL.User.ShouldNotBeNull();
                persistedURL.User.ShouldBeOfType <User>();
                persistedURL.UserId.ShouldNotBeNull();
                persistedURL.UserId.ShouldBe(userId);
            }
        }