예제 #1
0
        public async Task GetSortedBridgesReturnsSortedBridgesCollection()
        {
            // Arrange
            var options = new DbContextOptionsBuilder <GeojamDbContext>()
                          .UseInMemoryDatabase(nameof(GetSortedBridgesReturnsSortedBridgesCollection))
                          .Options;
            var dbContext = new GeojamDbContext(options);

            GenerateDbContext(dbContext);
            var hikerProvider   = new HikerProvider(dbContext, null, mapper);
            var bridgesProvider = new BridgesProvider(dbContext, null, mapper, hikerProvider, null);
            var bridges         = await bridgesProvider.GetBridgesAsync();

            // Act
            var actual = await bridgesProvider.GetSortedBridgesAsync(bridges.Bridges.ToArray());

            Assert.True(actual.IsSuccess);
            Assert.Null(actual.ErrorMessage);
            Assert.True(actual.SortedBridges.Any());
            Assert.Equal(actual.SortedBridges.Count(), dbContext.Bridges.Count());
            for (int i = 1; i < actual.SortedBridges.Count; i++)
            {
                Assert.True(actual.SortedBridges.Keys[i - 1] <= actual.SortedBridges.Keys[i]);
            }
        }
예제 #2
0
 public BridgesProvider(GeojamDbContext dbContext, ILogger <BridgesProvider> logger, IMapper mapper, IHikerProvider hikerProvider, IWebHostEnvironment env)
 {
     this.dbContext     = dbContext;
     this.logger        = logger;
     this.mapper        = mapper;
     this.hikerProvider = hikerProvider;
     SeedData(env);
 }
예제 #3
0
        public async Task CrossBridgesReturnsTimeToCrossAllBridgesByAllHikers(int dbContextUniqueIndex, int[] includeBridgeIds, double expected)
        {
            // Arrange
            var dbName  = $"{nameof(CrossBridgesReturnsTimeToCrossAllBridgesByAllHikers)}{dbContextUniqueIndex}";
            var options = new DbContextOptionsBuilder <GeojamDbContext>()
                          .UseInMemoryDatabase(dbName)
                          .Options;
            var dbContext = new GeojamDbContext(options);

            GenerateDbContext(dbContext, includeBridgeIds);
            var hikerProvider   = new HikerProvider(dbContext, null, mapper);
            var bridgesProvider = new BridgesProvider(dbContext, null, mapper, hikerProvider, null);

            // Act
            var actual = await bridgesProvider.CrossBridgesAsync();

            Assert.True(actual.IsSuccess);
            Assert.Null(actual.ErrorMessage);
            Assert.True(actual.CrossingTime == expected);
        }
예제 #4
0
        public async Task GetBridgesReturnsAllBridges()
        {
            // Arrange
            var options = new DbContextOptionsBuilder <GeojamDbContext>()
                          .UseInMemoryDatabase(nameof(GetBridgesReturnsAllBridges))
                          .Options;
            var dbContext = new GeojamDbContext(options);

            GenerateDbContext(dbContext);

            var hikerProvider   = new HikerProvider(dbContext, null, mapper);
            var bridgesProvider = new BridgesProvider(dbContext, null, mapper, hikerProvider, null);

            // Act
            var actual = await bridgesProvider.GetBridgesAsync();

            // Assert
            Assert.True(actual.IsSuccess);
            Assert.Null(actual.ErrorMessage);
            Assert.True(actual.Bridges.Any());
            Assert.Equal(actual.Bridges.Count(), dbContext.Bridges.Count());
            Assert.IsType <Models.Bridge>(actual.Bridges.First());
        }
예제 #5
0
        private void GenerateDbContext(GeojamDbContext dbContext, int[] includeBridgeIds = null)
        {
            if (includeBridgeIds == null || !includeBridgeIds.Any())
            {
                includeBridgeIds = bridges.Select(b => b.Id).ToArray();
            }

            foreach (var bridge in bridges.Where(b => includeBridgeIds.Contains(b.Id)))
            {
                dbContext.Bridges.Add(bridge);
            }
            foreach (var hiker in hikers.Where(h => includeBridgeIds.Contains(h.BridgeId)))
            {
                dbContext.Hikers.Add(hiker);
            }

            foreach (var bridge in dbContext.Bridges)
            {
                bridge.Hikers = new List <Db.Hiker>();
                bridge.Hikers = dbContext.Hikers.Where(h => h.BridgeId == bridge.Id);
            }
            dbContext.SaveChanges();
        }
예제 #6
0
 public HikerProvider(GeojamDbContext dbContext, ILogger <BridgesProvider> logger, IMapper mapper)
 {
     this.dbContext = dbContext;
     this.logger    = logger;
     this.mapper    = mapper;
 }