public async Task ShouldRetrieveRoverInformation() { var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var rovers = _fixture.CreateMany <Business.Models.Rover>().ToList(); var expectedResult = new GetAllRovers.Result { Rovers = rovers.Select(x => new GetAllRovers.Rover { Id = x.Id, Name = x.Name }).ToList() }; context.Rovers.AddRange(rovers); context.SaveChanges(); var handler = new GetAllRovers.Handler(context); var result = await handler.Handle(new GetAllRovers.Query(), CancellationToken.None); result.Should().BeEquivalentTo(expectedResult); } }
public async Task ShouldRetrievePhotosFromNasaApiNoSpecifiedCamera() { var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var rover = _fixture.Create <Business.Models.Rover>(); var camera = _fixture.Build <Business.Models.Camera>() .With(x => x.Rover, rover) .With(x => x.RoverId, rover.Id) .Create(); context.Rovers.Add(rover); context.Cameras.Add(camera); context.SaveChanges(); var query = _fixture.Build <GetPhotos.Query>() .With(x => x.RoverId, rover.Id) .Without(x => x.Camera) .Create(); var expectedPhotos = _fixture.Build <Business.Models.Photo>() .With(x => x.Camera, camera) .With(x => x.EarthDate, query.Date.Date) .CreateMany() .ToList(); var expectedResult = new GetPhotos.Result { Photos = expectedPhotos.Select(x => new GetPhotos.Photo { Id = x.Id, ImgSrc = x.ImgSrc }).ToList() }; _api.GetPhotos(Arg.Is <string>(x => x == rover.Name), Arg.Is <DateTime>(x => x == query.Date.Date)) .Returns(new PhotoResponse { Photos = expectedPhotos }); var handler = new GetPhotos.Handler(_api, context); var result = await handler.Handle(query, CancellationToken.None); //Check Result result.Should().BeEquivalentTo(expectedResult); //Check db to make sure they were inserted properly context.Photos.Should().NotBeEmpty(); foreach (var photo in expectedPhotos) { context.Photos.Should().Contain(photo); } //Make sure the api was actually hit await _api.Received().GetPhotos(Arg.Is <string>(x => x == rover.Name), Arg.Is <DateTime>(x => x == query.Date.Date)); } }
public IEnumerable <PixelCondition> GetAllPoints(int startPointX, int startPointY) { int length = 256; using (var ctx = new NasaContext()) { return(ctx.MapPoints.Where(point => point.X >= startPointX && point.X < startPointX + 256 && point.Y >= startPointY && point.Y <= startPointY + 256).ToList()); } }
public async Task ShouldReturnSavedPhotosInsteadOfCallingNasaApi() { var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var date = DateTime.Today.AddDays(-1); var rover = _fixture.Create <Business.Models.Rover>(); var camera = _fixture.Build <Business.Models.Camera>() .With(x => x.Rover, rover) .With(x => x.RoverId, rover.Id) .Create(); var photos = _fixture.Build <Business.Models.Photo>() .With(x => x.Camera, camera) .With(x => x.CameraId, camera.Id) .With(x => x.EarthDate, date) .CreateMany() .ToList(); context.Rovers.Add(rover); context.Cameras.Add(camera); context.Photos.AddRange(photos); context.SaveChanges(); var expectedResult = new GetPhotos.Result { Photos = photos.Select(x => new GetPhotos.Photo { Id = x.Id, ImgSrc = x.ImgSrc }).ToList() }; var query = _fixture.Build <GetPhotos.Query>() .With(x => x.RoverId, rover.Id) .With(x => x.Date, date) .Without(x => x.Camera) .Create(); var handler = new GetPhotos.Handler(_api, context); var result = await handler.Handle(query, CancellationToken.None); //Check Result result.Should().BeEquivalentTo(expectedResult); //Make sure api wasn't hit await _api.DidNotReceive().GetPhotos(Arg.Any <string>(), Arg.Any <DateTime>()); } }
public void InsertArrayOfPoints(PixelCondition[,] points) { using (var ctx = new NasaContext()) { int i = 0; foreach (var point in points) { ctx.MapPoints.Add(point); i++; if (i == 100000) { ctx.SaveChanges(); } } ctx.SaveChanges(); } }
public async Task ShouldThrowIfInvalidRoverId() { var expectedMessage = "Invalid rover Id"; var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var query = _fixture.Create <GetPhotos.Query>(); var handler = new GetPhotos.Handler(_api, context); Action action = () => handler.Handle(query, CancellationToken.None).Wait(); action.Should().Throw <Exception>().WithMessage(expectedMessage); await _api.DidNotReceive().GetPhotos(Arg.Any <string>(), Arg.Any <DateTime>()); } }
public async Task ShouldHandleNoRoversFound() { var expectedResult = new GetAllRovers.Result { Rovers = new List <GetAllRovers.Rover>() }; var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var handler = new GetAllRovers.Handler(context); var result = await handler.Handle(new GetAllRovers.Query(), CancellationToken.None); result.Should().BeEquivalentTo(expectedResult); } }
public async Task ShouldReturnEmptyListIfNoCamerasFound() { var expectedResult = new GetRoverCameras.Result { Cameras = new List <GetRoverCameras.Camera>() }; var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var query = _fixture.Create <GetRoverCameras.Query>(); var handler = new GetRoverCameras.Handler(context); var result = await handler.Handle(query, CancellationToken.None); result.Should().BeEquivalentTo(expectedResult); } }
public async Task ShouldReturnCameras() { var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var rover = _fixture.Create <Business.Models.Rover>(); var cameras = _fixture.Build <Business.Models.Camera>() .Without(x => x.Rover) .With(x => x.RoverId, rover.Id) .CreateMany() .ToList(); context.Rovers.Add(rover); context.Cameras.AddRange(cameras); context.SaveChanges(); var expectedResult = _fixture.Build <GetRoverCameras.Result>() .With(x => x.Cameras, cameras.Select(x => new GetRoverCameras.Camera { Name = x.Name, FullName = x.FullName }).ToList() ).Create(); var query = _fixture.Build <GetRoverCameras.Query>() .With(x => x.RoverId, rover.Id) .Create(); var handler = new GetRoverCameras.Handler(context); var result = await handler.Handle(query, CancellationToken.None); result.Should().BeEquivalentTo(expectedResult); } }
public async Task ShouldReturnEmptyListIfInvalidRoverId() { var options = new DbContextOptionsBuilder <NasaContext>() .UseInMemoryDatabase(databaseName: "Nasa") .Options; using (var context = new NasaContext(options)) { var rover = _fixture.Create <Business.Models.Rover>(); var cameras = _fixture.Build <Business.Models.Camera>() .Without(x => x.Rover) .With(x => x.RoverId, rover.Id) .CreateMany() .ToList(); context.Rovers.Add(rover); context.Cameras.AddRange(cameras); context.SaveChanges(); var expectedResult = _fixture.Build <GetRoverCameras.Result>() .With(x => x.Cameras, new List <GetRoverCameras.Camera>()) .Create(); var query = _fixture.Create <GetRoverCameras.Query>(); while (query.RoverId == rover.Id) { //I doubt this will ever be hit 1 in 2.147b chance, but there's a chance. query = _fixture.Create <GetRoverCameras.Query>(); } var handler = new GetRoverCameras.Handler(context); var result = await handler.Handle(query, CancellationToken.None); result.Should().BeEquivalentTo(expectedResult); } }
public static void InitializeDb(NasaContext context) { //This could probably be initialized using the /manifest/roverName endpoint, but I couldn't get a request to the endpoint to work :( var rovers = new List <Rover> { new Rover { Id = 5, Name = "Curiosity", LandingDate = new DateTime(2012, 8, 6), LaunchDate = new DateTime(2011, 11, 26), Status = "Active", MaxSol = 2540, MaxDate = new DateTime(2019, 9, 28), TotalPhotos = 366206 }, new Rover { Id = 6, Name = "Opportunity", LandingDate = new DateTime(2004, 1, 25), LaunchDate = new DateTime(2003, 7, 7), Status = "complete", MaxSol = 5111, MaxDate = new DateTime(2018, 6, 11), TotalPhotos = 198439 }, new Rover { Id = 7, Name = "Spirit", LandingDate = new DateTime(2004, 1, 4), LaunchDate = new DateTime(2003, 6, 10), Status = "complete", MaxSol = 2208, MaxDate = new DateTime(2010, 3, 21), TotalPhotos = 124550 } }; var cameras = new List <Camera> { new Camera { Id = 1, Name = "FHAZ", FullName = "Front Hazard Avoidance Camera", RoverId = 5 }, new Camera { Id = 2, Name = "NAVCAM", FullName = "Navigation Camera", RoverId = 5 }, new Camera { Id = 3, Name = "MAST", FullName = "Mast Camera", RoverId = 5 }, new Camera { Id = 4, Name = "CHEMCAM", FullName = "Chemistry and Camera Complex", RoverId = 5 }, new Camera { Id = 5, Name = "MAHLI", FullName = "Mars Hand Lens Imager", RoverId = 5 }, new Camera { Id = 6, Name = "MARDI", FullName = "Mars Descent Imager", RoverId = 5 }, new Camera { Id = 7, Name = "RHAZ", FullName = "Rear Hazard Avoidance Camera", RoverId = 5 }, new Camera { Id = 8, Name = "FHAZ", FullName = "Front Hazard Avoidance Camera", RoverId = 6 }, new Camera { Id = 9, Name = "NAVCAM", FullName = "Navigation Camera", RoverId = 6 }, new Camera { Id = 10, Name = "PANCAM", FullName = "Panoramic Camera", RoverId = 6 }, new Camera { Id = 11, Name = "MINITES", FullName = "Miniature Thermal Emission Spectrometer (Mini-TES)", RoverId = 6 }, new Camera { Id = 12, Name = "ENTRY", FullName = "Entry, Descent, and Landing Camera", RoverId = 6 }, new Camera { Id = 13, Name = "RHAZ", FullName = "Rear Hazard Avoidance Camera", RoverId = 6 }, new Camera { Id = 14, Name = "FHAZ", FullName = "Front Hazard Avoidance Camera", RoverId = 7 }, new Camera { Id = 15, Name = "NAVCAM", FullName = "Navigation Camera", RoverId = 7 }, new Camera { Id = 16, Name = "PANCAM", FullName = "Panoramic Camera", RoverId = 7 }, new Camera { Id = 17, Name = "MINITES", FullName = "Miniature Thermal Emission Spectrometer (Mini-TES)", RoverId = 7 }, new Camera { Id = 18, Name = "ENTRY", FullName = "Entry, Descent, and Landing Camera", RoverId = 7 }, new Camera { Id = 19, Name = "RHAZ", FullName = "Rear Hazard Avoidance Camera", RoverId = 7 } }; context.Rovers.AddRange(rovers); context.Cameras.AddRange(cameras); context.SaveChanges(); }
public Handler(NasaContext context) { _context = context; }
public Handler(INasaMarsRoversApi api, NasaContext context) { _api = api; _context = context; }