コード例 #1
0
        public async Task GetAllOrderedByStart_ShouldReturnOrderedByStartList()
        {
            var context = new EventuresDbContext(this.Options);

            var events = new List <Event>
            {
                new Event
                {
                    Start = DateTime.UtcNow.AddDays(1)
                },
                new Event
                {
                    Start = DateTime.UtcNow.AddDays(3)
                },
                new Event
                {
                    Start = DateTime.UtcNow.AddDays(2)
                },
            };
            await context.Events.AddRangeAsync(events);

            await context.SaveChangesAsync();

            var eventsService = new EventsService(context);

            var serviceResult = eventsService.GetAllOrderedByStart();

            var expected = events.OrderBy(e => e.Start);

            Assert.Equal(expected, serviceResult);
        }
コード例 #2
0
        public async Task Create_WithNonExistentEvent_ShouldNotChangeAnything()
        {
            // Arrange
            var context = new EventuresDbContext(new DbContextOptionsBuilder <EventuresDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);
            var ordersService = new OrdersService(context);

            var user = new EventuresUser
            {
                UserName = "******"
            };
            await context.Users.AddAsync(user);

            await context.SaveChangesAsync();

            var model = new OrderServiceModel
            {
                EventId      = Guid.NewGuid().ToString(),
                TicketsCount = 2
            };

            // Act
            var result = await ordersService.Create(model, user.UserName);

            // Assert
            Assert.False(result);

            var count = await context.Orders.CountAsync();

            Assert.Equal(0, count);
        }
コード例 #3
0
        //[AdminCreateLoggerFilter]
        public async Task <IActionResult> Create(EventCreateBindingModel model)
        {
            if (ModelState.IsValid)
            {
                var @event = new Event
                {
                    Name           = model.Name,
                    Place          = model.Place,
                    Start          = model.Start,
                    End            = model.End,
                    TotalTickets   = model.TotalTickets,
                    PricePerTicket = model.PricePerTicket,
                };
                _context.Add(@event);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(All)));
            }
            return(View(model));
        }
コード例 #4
0
        public async Task Create_WithValidModel_ShouldWorkCorrectly()
        {
            // Arrange
            const int ticketsCount = 10;

            var context = new EventuresDbContext(new DbContextOptionsBuilder <EventuresDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);
            var ordersService = new OrdersService(context);

            var user = new EventuresUser
            {
                UserName = "******"
            };
            await context.Users.AddAsync(user);

            var eventModel = new EventuresEvent
            {
                Name         = "TestEvent",
                TotalTickets = ticketsCount
            };
            await context.Events.AddAsync(eventModel);

            await context.SaveChangesAsync();

            var model = new OrderServiceModel
            {
                OrderedOn    = DateTime.UtcNow,
                EventId      = eventModel.Id,
                TicketsCount = 2
            };

            // Act
            var result = await ordersService.Create(model, user.UserName);

            // Assert
            Assert.True(result);

            var remainingTickets = (await context.Events.SingleAsync()).TotalTickets;

            Assert.Equal(ticketsCount - model.TicketsCount, remainingTickets);

            var count = await context.Orders.CountAsync();

            Assert.Equal(1, count);

            var orderUserId = (await context.Orders.SingleAsync()).UserId;

            Assert.Equal(user.Id, orderUserId);
        }
コード例 #5
0
        public async Task GetAll_WithNoOrdersInDbShouldReturnEmptyList()
        {
            var context = new EventuresDbContext(this.Options);

            var orders = new List <Order>
            {
            };

            await context.Orders.AddRangeAsync(orders);

            await context.SaveChangesAsync();

            var ordersService = new OrdersService(context);

            var resultOrders = ordersService.GetAll();

            Assert.Empty(resultOrders);
        }
コード例 #6
0
        public async Task GetAllOrderedByStart_EmptyDbSetShouldReturnEmptyList()
        {
            var context = new EventuresDbContext(this.Options);

            var events = new List <Event>
            {
            };
            await context.Events.AddRangeAsync(events);

            await context.SaveChangesAsync();

            var eventsService = new EventsService(context);

            var serviceResult = eventsService.GetAllOrderedByStart();

            var expected = events.OrderBy(e => e.Start);

            Assert.Equal(expected, serviceResult);
        }
コード例 #7
0
        public async Task Seed()
        {
            if (!context.Roles.Any())
            {
                context.Roles.Add(new IdentityRole
                {
                    Name           = "Admin",
                    NormalizedName = "ADMIN"
                });

                context.Roles.Add(new IdentityRole
                {
                    Name           = "User",
                    NormalizedName = "USER"
                });
            }

            await context.SaveChangesAsync();
        }
コード例 #8
0
        public async Task GetAll_ShouldReturnAllOrdersWithLoadedEventAndCustomer()
        {
            var context = new EventuresDbContext(this.Options);

            var @event = new Event {
                TotalTickets = 100, Name = "UnitTesting"
            };
            var customer = new User {
                FirstName = "Pesho"
            };

            var orders = new List <Order>
            {
                new Order {
                    Event = @event, TicketsCount = 5, Customer = customer
                },
                new Order {
                    Event = @event, TicketsCount = 5, Customer = customer
                },
                new Order {
                    Event = @event, TicketsCount = 5, Customer = customer
                },
                new Order {
                    Event = @event, TicketsCount = 5, Customer = customer
                },
                new Order {
                    Event = @event, TicketsCount = 5, Customer = customer
                },
            };

            await context.Orders.AddRangeAsync(orders);

            await context.SaveChangesAsync();

            var ordersService = new OrdersService(context);

            var resultOrders = ordersService.GetAll();

            Assert.Equal(5, resultOrders.Count);
            Assert.Equal(customer.FirstName, resultOrders[0].Customer.FirstName);
            Assert.Equal(@event.Name, resultOrders[0].Event.Name);
        }
コード例 #9
0
        public async Task GetAll_WithTickets_ShouldReturnCorrectValue()
        {
            // Arrange
            var options = new DbContextOptionsBuilder <EventuresDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;
            var context       = new EventuresDbContext(options);
            var eventsService = new EventsService(context);

            object[] models =
            {
                new EventuresEvent
                {
                    Name           = "Test Event 1",
                    Place          = "Test Place 1",
                    StartDate      = DateTime.UtcNow,
                    EndDate        = DateTime.UtcNow,
                    TotalTickets   = 2,
                    PricePerTicket = 2
                },
                new EventuresEvent
                {
                    Name           = "Test Event 2",
                    Place          = "Test Place 2",
                    StartDate      = DateTime.UtcNow,
                    EndDate        = DateTime.UtcNow,
                    TotalTickets   = 3,
                    PricePerTicket = 3
                }
            };
            await context.AddRangeAsync(models);

            await context.SaveChangesAsync();

            // Act
            var count = (await eventsService.GetAll()).Count();

            // Assert
            Assert.Equal(2, count);
        }
コード例 #10
0
        public async Task Create_WithNullUser_ShouldNotChangeAnything()
        {
            // Arrange
            const int ticketsCount = 10;

            var context = new EventuresDbContext(new DbContextOptionsBuilder <EventuresDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);
            var ordersService = new OrdersService(context);

            var eventModel = new EventuresEvent
            {
                Name         = "TestEvent",
                TotalTickets = ticketsCount
            };
            await context.Events.AddAsync(eventModel);

            await context.SaveChangesAsync();

            var model = new OrderServiceModel
            {
                OrderedOn    = DateTime.UtcNow,
                EventId      = eventModel.Id,
                TicketsCount = 2
            };

            // Act
            var result = await ordersService.Create(model, null);

            // Assert
            Assert.False(result);

            var remainingTickets = (await context.Events.SingleAsync()).TotalTickets;

            Assert.Equal(ticketsCount, remainingTickets);

            var count = await context.Orders.CountAsync();

            Assert.Equal(0, count);
        }
コード例 #11
0
        private async Task SeedEvents(EventuresDbContext context)
        {
            var sampleEvents = new List <EventuresEvent>();

            for (var i = 0; i < 10; i++)
            {
                var sampleEvent = new EventuresEvent
                {
                    Name           = $"Event number {i}",
                    Place          = $"Place number {i}",
                    Start          = DateTime.Now.AddDays(i),
                    End            = DateTime.Now.AddMonths(i),
                    PricePerTicket = 10 * i,
                    TotalTickets   = 1000 * i
                };

                sampleEvents.Add(sampleEvent);
            }

            await context.Events.AddRangeAsync(sampleEvents);

            await context.SaveChangesAsync();
        }
コード例 #12
0
        public async Task InvokeAsync(HttpContext httpContext,
                                      EventuresDbContext dbContext,
                                      UserManager <EventuresUser> userManager,
                                      RoleManager <IdentityRole> roleManager)
        {
            if (!this.executed)
            {
                this.executed = true;

                dbContext.Database.EnsureCreated();

                if (!await roleManager.RoleExistsAsync(GlobalConstants.AdminRoleName))
                {
                    await roleManager.CreateAsync(new IdentityRole(GlobalConstants.AdminRoleName));
                }

                if (await dbContext.Events.CountAsync() < 35)
                {
                    var currTime = DateTime.Now;

                    var random = new Random();


                    var events = new EventuresEvent[35];

                    for (int i = 0; i < 35; i++)
                    {
                        var startDate = currTime.AddDays(random.NextDouble() * 300 - 150);
                        var endDate   = startDate.AddDays(random.NextDouble() * 15 + 5);

                        events[i] = new EventuresEvent
                        {
                            Name           = "Seeded Event " + (i + 1),
                            Place          = "Seeded Place " + (i % 10 + 1),
                            StartDate      = startDate,
                            EndDate        = endDate,
                            TotalTickets   = random.Next(5, 500),
                            PricePerTicket = (decimal)random.NextDouble() * 150 + 50,
                        };
                    }

                    await dbContext.Events.AddRangeAsync(events);

                    await dbContext.SaveChangesAsync();
                }

                if (!userManager.Users.Any(u => u.UserName == "admin"))
                {
                    var user = new EventuresUser
                    {
                        UserName            = "******",
                        Email               = "*****@*****.**",
                        FirstName           = "admin",
                        LastName            = "admin",
                        UniqueCitizenNumber = "0000000000"
                    };

                    await userManager.CreateAsync(user, "admin");

                    await userManager.AddToRoleAsync(user, GlobalConstants.AdminRoleName);
                }
            }

            await this.next(httpContext);
        }
コード例 #13
0
        public async Task GetAllForUser_WithNoOrders_ShouldWorkCorrectly()
        {
            // Arrange
            var context = new EventuresDbContext(new DbContextOptionsBuilder <EventuresDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);
            var ordersService = new OrdersService(context);

            var eventModel = new EventuresEvent
            {
                Name           = "Test Event",
                TotalTickets   = 30,
                StartDate      = DateTime.UtcNow,
                EndDate        = DateTime.UtcNow,
                Place          = "Test Place",
                PricePerTicket = 30
            };
            await context.Events.AddAsync(eventModel);

            var user = new EventuresUser
            {
                UserName = "******"
            };
            await context.Users.AddAsync(user);

            var otherUser = new EventuresUser
            {
                UserName = "******"
            };
            await context.Users.AddAsync(otherUser);

            var orders = new[]
            {
                new Order
                {
                    OrderedOn    = DateTime.UtcNow,
                    TicketsCount = 1,
                    Event        = eventModel,
                    User         = otherUser
                },
                new Order
                {
                    OrderedOn    = DateTime.UtcNow,
                    TicketsCount = 2,
                    Event        = eventModel,
                    User         = otherUser
                },
                new Order
                {
                    OrderedOn    = DateTime.UtcNow,
                    TicketsCount = 3,
                    Event        = eventModel,
                    User         = otherUser
                }
            };
            await context.Orders.AddRangeAsync(orders);

            await context.SaveChangesAsync();

            // Act
            var all = await ordersService.GetAllForUser(user.UserName);

            // Assert
            var count = all.Count();

            Assert.Equal(0, count);
        }