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);
        }
        public void Create(CreateEventViewModel model)
        {
            var eventureEvent = new EventuresEvent()
            {
                Name         = model.Name,
                Place        = model.Place,
                Start        = model.Start,
                End          = model.End,
                TotalTickets = model.TotalTickets,
                TicketPrice  = model.PricePerTicket
            };

            this.dbContext.Add(eventureEvent);
            this.dbContext.SaveChanges();
        }
        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);
        }
Beispiel #4
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();
        }
Beispiel #5
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);
        }
        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);
        }