Example #1
0
 public TicketService(ApplicationDbContext dbContext, IMainEventProvider mainEventProvider)
 {
     _dbContext         = dbContext;
     _mainEventProvider = mainEventProvider;
 }
Example #2
0
        private void CreateInMemoryDatabase()
        {
            _connection = new SqliteConnection("DataSource=:memory:");
            _connection.Open();

            _options = new DbContextOptionsBuilder <ApplicationDbContext>()
                       .UseSqlite(_connection)
                       .Options;

            _dbContext = new ApplicationDbContext(_options, Options.Create <OperationalStoreOptions>(new OperationalStoreOptions()), _mainEventProvider);
            _dbContext.Database.EnsureDeleted();
            _dbContext.Database.EnsureCreated();

            // Now we have nothing in _mainEventProvider
            // Let's create user first
            _createdUser1 = _dbContext.ApplicationUsers.Add(
                new ApplicationUser
            {
                FirstName       = "Ola",
                MiddleName      = "",
                LastName        = "Testesen",
                UserName        = "******",
                Address         = "Oslo gate 123",
                ZipCode         = "1234",
                Team            = "Team 1",
                DateOfBirth     = DateTime.Now.AddYears(-20),
                IsAllergic      = false,
                Gender          = "Gutt",
                Email           = "*****@*****.**",
                NormalizedEmail = "*****@*****.**",     // Actually used by UserManager.FindByEmailAsync()
                PhoneNumber     = "12345678"
            }
                );
            _dbContext.SaveChanges();

            // Now we need to create identity for the user
            _identity1 = new ClaimsIdentity("someAuthTypeName");
            _identity1.AddClaims(new[]
            {
                new Claim(ClaimTypes.NameIdentifier, _createdUser1.Entity.Id),
                new Claim("CurrentMainEventId", "1")  // TODO: Always 1 for test purposes
            });
            _currentUser = new ClaimsPrincipal(_identity1);

            // Now we need to put the user into httpContext
            // Then httpContext into httpContextAccessor
            // Finally httpContextAccessor into mainEventProvider
            _httpContext = new DefaultHttpContext()
            {
                User = _currentUser
            };
            _httpContextAccessor = new HttpContextAccessor()
            {
                HttpContext = _httpContext
            };
            _mainEventProvider = new MainEventProvider(_httpContextAccessor);

            // The problem is that we don't have setter for mainEventProvider in dbContext
            // So we have to recreate dbContext with new mainEventProvider
            _dbContext = new ApplicationDbContext(_options, Options.Create <OperationalStoreOptions>(new OperationalStoreOptions()), _mainEventProvider);

            // Now we can proceed with creating test data
            _dbContext.Organizers.Add(
                new Organizer
            {
                Name        = "Organizer 1",
                OrgNumber   = "123456",
                Description = "Description"
            }
                );
            _dbContext.SaveChanges();

            _dbContext.Venues.Add(
                new Venue
            {
                Name         = "Venue 1",
                Address      = "Venue gate 123",
                PostalCode   = "1236",
                ContactPhone = "12345678",
                ContactEMail = "*****@*****.**",
                OrganizerId  = 1
            }
                );
            _dbContext.SaveChanges();

            _dbContext.MainEvents.Add(
                new MainEvent
            {
                Name          = "Event 1",
                StartDateTime = DateTime.Now,
                EndDateTime   = DateTime.Now,
                OrganizerId   = 1,
                VenueId       = 1
            }
                );
            _dbContext.SaveChanges();

            _dbContext.Crews.Add(
                new Crew()
            {
                Name        = "Test crew 1",
                MainEventId = 1
            }
                );
            _dbContext.SaveChanges();

            // Add existing user to the crew
            _dbContext.CrewUsers.Add(
                new CrewUser
            {
                ApplicationUserId = _createdUser1.Entity.Id,
                IsLeader          = false,
                CrewId            = 1
            }
                );
            _dbContext.SaveChanges();

            // Create another application user to be Leader in the crew
            _createdUser2 = _dbContext.ApplicationUsers.Add(
                new ApplicationUser
            {
                FirstName          = "Line",
                MiddleName         = "",
                LastName           = "Evensen",
                UserName           = "******",
                Address            = "Osloveien 123",
                ZipCode            = "1234",
                Team               = "Team 1",
                DateOfBirth        = DateTime.Now.AddYears(-20),
                IsAllergic         = true,
                AllergyDescription = "Sitroner",
                Gender             = "Jente",
                Email              = "*****@*****.**",
                NormalizedEmail    = "*****@*****.**",  // Actually used by UserManager.FindByEmailAsync()
                PhoneNumber        = "98765432"
            }
                );
            _dbContext.SaveChanges();

            // Add
            _dbContext.CrewUsers.Add(
                new CrewUser
            {
                ApplicationUserId = _createdUser2.Entity.Id,
                IsLeader          = true,
                CrewId            = 1
            }
                );
            _dbContext.SaveChanges();

            _dbContext.Rows.Add(
                new Row
            {
                Name        = "Test row name",
                MainEventId = 1,
            }
                );
            _dbContext.SaveChanges();

            _dbContext.Seats.Add(
                new Seat
            {
                SeatNumber = 1,
                RowId      = 1
            }
                );
            _dbContext.SaveChanges();

            _dbContext.TicketTypes.Add(
                new TicketType
            {
                DescriptionName = "Test ticket type",
                BasePrice       = 10,
                AmountAvailable = 20,
                MainEventId     = 1
            }
                );
            _dbContext.SaveChanges();

            // This is workaround because it seems that many-to-many doesn't work good for in-memory DB
            _dbContext.Database.ExecuteSqlRaw("INSERT INTO [TicketTypeRows] VALUES (1, 1)");

            _dbContext.Tickets.Add(
                new Ticket
            {
                Price             = 15,
                IsCheckedIn       = false,
                IsPaid            = true,
                TicketTypeId      = 1,
                MainEventId       = 1,
                ApplicationUserId = _createdUser1.Entity.Id,
                SeatId            = 1
            }
                );
            _dbContext.SaveChanges();

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

            var roleAdmin = _dbContext.Roles.Add(
                new IdentityRole
            {
                Name           = "Admin",
                NormalizedName = "Admin"
            }
                );

            _dbContext.SaveChanges();

            // This is workaround because it seems that many-to-many doesn't work good for in-memory DB
            // Setting role Admin for _createdUser2
            _dbContext.Database.ExecuteSqlRaw("INSERT INTO [AspNetUserRoles] VALUES ({0}, {1})", _createdUser2.Entity.Id, roleAdmin.Entity.Id);
        }