public async Task DeletePublisher_NegativeId_NotFoundResult()
        {
            // Arrange
            const int publisherIdToDelete = -10;

            InitializeInmemoryDatabase(out DbContextOptions <GameReviewsContext> options, GetFakeList());
            Publisher expectedPublisher = GetFakeList().Where(d => d.ID == publisherIdToDelete).FirstOrDefault();

            // Act
            using (var context = new GameReviewsContext(options))
            {
                PublishersController publishersController = new PublishersController(context);
                var actionResult = (await publishersController.DeletePublisher(publisherIdToDelete));
                var result       = actionResult.Result;

                // Assert
                Assert.IsType <NotFoundResult>(result);
            }
        }
        public async Task GetPublisher_ExistingId_TaskActionResultContainsPublisher()
        {
            // Arrange
            const int publisherId = 3;

            Publisher expectedPublisher = GetFakeList().Where(d => d.ID == publisherId).FirstOrDefault();

            InitializeInmemoryDatabase(out DbContextOptions <GameReviewsContext> options, GetFakeList());

            // Act
            using (var context = new GameReviewsContext(options))
            {
                PublishersController publishersController = new PublishersController(context);
                var          actionResult = (await publishersController.GetPublisher(publisherId));
                Publisher    publisher    = actionResult.Value;
                ActionResult result       = actionResult.Result;

                // Assert
                Assert.True(AreEqual(expectedPublisher, publisher));
                Assert.IsNotType <NotFoundResult>(result);
            }
        }
        public async Task PostPublisher_CorrectPublisherWithCorrectValuesAndIdNotSet_CreatedAtActionResult()
        {
            // Arrange
            InitializeInmemoryDatabase(out DbContextOptions <GameReviewsContext> options, GetFakeList());

            Publisher publisherToCreate = new Publisher()
            {
                Name    = "NewDevelope",
                Website = "NewWebsite"
            };

            // Act
            using (var context = new GameReviewsContext(options))
            {
                PublishersController publishersController = new PublishersController(context);
                var result = (await publishersController.PostPublisher(publisherToCreate)).Result;

                // Assert
                Assert.True(context.Publishers.Contains(publisherToCreate));
                Assert.IsType <CreatedAtActionResult>(result);
            }
        }
        public async Task GetPublishers_Void_TaskActionResultContainsIEnumerableOfPublisher()
        {
            // Arrange
            List <Publisher> expectedData = GetFakeList();

            InitializeInmemoryDatabase(out DbContextOptions <GameReviewsContext> options, GetFakeList());

            // Act
            using (var context = new GameReviewsContext(options))
            {
                PublishersController    publishersController = new PublishersController(context);
                IEnumerable <Publisher> publishers           = (await publishersController.GetPublishers()).Value;

                // Assert
                Assert.Equal(expectedData.Count, publishers.Count());

                for (int i = 0; i < expectedData.Count; ++i)
                {
                    Assert.True(AreEqual(expectedData[i], publishers.ElementAt(i)));
                }
            }
        }
        public async Task PutPublisher_ExistingIdCorrectPublisherWithIdChangedNegative_BadRequestResult()
        {
            // Arrange
            const int publisherId = 3, idChanged = -1;

            InitializeInmemoryDatabase(out DbContextOptions <GameReviewsContext> options, GetFakeList());

            Publisher publisherToUpdate = GetFakeList().Where(d => d.ID == publisherId).FirstOrDefault();

            // Act
            using (var context = new GameReviewsContext(options))
            {
                publisherToUpdate.ID = idChanged;

                PublishersController publishersController = new PublishersController(context);
                var result = (await publishersController.PutPublisher(publisherId, publisherToUpdate));

                Publisher actualPublisher = await context.Publishers.Where(d => d.ID == publisherId).FirstOrDefaultAsync();

                // Assert
                Assert.IsType <BadRequestResult>(result);
            }
        }
        public async Task PostPublisher_CorrectPublisherWithCorrectValuesAndNegativeIdSetted_BadRequestResult()
        {
            // Arrange
            const int idToSet = -1;

            InitializeInmemoryDatabase(out DbContextOptions <GameReviewsContext> options, GetFakeList());

            Publisher publisherToCreate = new Publisher()
            {
                Name    = "NewDevelope",
                Website = "NewWebsite",
                ID      = idToSet
            };

            // Act
            using (var context = new GameReviewsContext(options))
            {
                PublishersController publishersController = new PublishersController(context);
                var result = (await publishersController.PostPublisher(publisherToCreate)).Result;

                // Assert
                Assert.IsType <BadRequestResult>(result);
            }
        }