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);
            }
        }