Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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());
            }
        }
Exemple #4
0
        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();
     }
 }
Exemple #6
0
        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>());
            }
        }
Exemple #7
0
        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);
            }
        }
Exemple #11
0
        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();
        }
Exemple #12
0
 public Handler(NasaContext context)
 {
     _context = context;
 }
Exemple #13
0
 public Handler(INasaMarsRoversApi api, NasaContext context)
 {
     _api     = api;
     _context = context;
 }