public void GetAllAds_Should_Return_Total_Ads_Sorted_By_TypeIndex()
        {
            // Arrange
            var fakeAds = this.mocks.AdRepositoryMock.Object.All();

            var mockContext = new Mock<IOnlineShopData>();
            var mockUserIdProvider = new Mock<IUserIdProvider>();
            mockContext.Setup(c => c.Ads.All())
                .Returns(fakeAds);

            var adsController = new AdsController(mockContext.Object, mockUserIdProvider.Object);
            this.SetupController(adsController);

            // Act
            var response = adsController.GetAds()
                .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            var adsResponse = response.Content
                .ReadAsAsync<IEnumerable<AdViewModel>>()
                .Result.Select(a => a.Id)
                .ToList();

            var orderedFakeAds = fakeAds
                .OrderByDescending(a => a.Type.Index)
                .ThenBy(a => a.PostedOn)
                .Select(a => a.Id)
                .ToList();

            CollectionAssert.AreEqual(orderedFakeAds, adsResponse);
        }
        public void TestGetAdsShouldReturnAllAdsSortedByType()
        {
            var mockedContext = new Mock<IOnlineShopData>();
            mockedContext.Setup(c => c.Ads).Returns(this.mocks.AdRepositoryMock.Object);
            var adsController = new AdsController(mockedContext.Object);

            adsController.Request = new HttpRequestMessage();
            adsController.Configuration = new HttpConfiguration();
            var response = adsController.GetAds().ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            var responseAds = response.Content
                .ReadAsAsync<IEnumerable<AdViewModel>>()
                .Result
                .Select(a => a.Id)
                .ToList();
            var fakeAds = this.mocks.AdRepositoryMock.Object.All()
                .Select(AdViewModel.Create)
                .OrderBy(a => a.Type)
                .ThenBy(a => a.PostedOn)
                .Select(a => a.Id)
                .ToList();
            CollectionAssert.AreEqual(fakeAds, responseAds);
        }
        public void GetAllAds_Should_Return_All_Ads_Sorted_By_TypeIndex()
        {
            var fakeAds = this.mocks.AdRepositoryMock.Object.All();
            var fakeUser = this.mocks.UserRepositoryMock.Object.All().FirstOrDefault();
            if (fakeUser == null)
            {
                Assert.Fail("Cannot perform test - no users available.");
            }

            var mockContext = new Mock<IOnlineShopData>();
            mockContext.Setup(c => c.Ads.All()).Returns(fakeAds);
            var fakeUsers = this.mocks.UserRepositoryMock.Object.All();
            mockContext.Setup(c => c.Users.All()).Returns(fakeUsers);
            
            var mockIdProvider = new Mock<IUserIdProvider>();
            mockIdProvider.Setup(ip => ip.GetUserId()).Returns(fakeUser.Id);
            var adsController = new AdsController(mockContext.Object, mockIdProvider.Object);

            adsController.Request = new HttpRequestMessage();
            adsController.Configuration = new HttpConfiguration();

            var response = adsController.GetAds().ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            var adsResponse = response.Content
                .ReadAsAsync<IEnumerable<AdViewModel>>()
                .Result.Select(a => a.Id)
                .ToList();

            var orderedFakeAds = fakeAds
                .OrderByDescending(a => a.Type.Index)
                .ThenByDescending(a => a.PostedOn)
                .Select(a => a.Id)
                .ToList();

            CollectionAssert.AreEqual(orderedFakeAds, adsResponse);
        }
        public void GetAllAds_Should_Return_Total_Ads_Sorted_By_TypeIndex()
        {
            //Arrange
            var fakeAds = this.mocks.AdRepositoryMock.Object.All();

            var mockContext = new Mock<IOnlineShopData>();
            var mockUserIdProvider = new Mock<IUserIdProvider>();
            mockContext.Setup(c => c.Ads.All())
                .Returns(fakeAds);

            var adsController = new AdsController(mockContext.Object,
                mockUserIdProvider.Object);
            this.SetupController(adsController);

            //Act- invoke the GetAllAds() method from the controller.
            var response = adsController.GetAds()
                .ExecuteAsync(CancellationToken.None).Result;

            //Assert that the response status code is 200 OK
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            //Deserialize the response data with ReadAsAsync<T>(). Select only the IDs.
            var adsResponse = response.Content.ReadAsAsync<IEnumerable<AdViewModel>>()
                .Result.Select(a => a.Id)
                .ToList();

            //Order the fake ads collection just like the controller does the ordering.
            //Select only the IDs.
            var orderedFakeAds = fakeAds
                .OrderBy(a => a.Type.Index)
                .ThenBy(a => a.PostedOn)
                .Select(a => a.Id)
                .ToList();

            //Assert that the two collections have the same elements
            CollectionAssert.AreEqual(orderedFakeAds, adsResponse);
        }
        public void TestGetAllAds_ShouldReturnAllAdsSortedByIndex()
        {
            var fakeAds = mockContainer.AdRepositoryMock.Object.All();

            var mockContext = new Mock<IOnlineShopData>();
            mockContext.Setup(r => r.Ads.All()).Returns(fakeAds.AsQueryable());

            var adsController = new AdsController(mockContext.Object);
            this.SetupController(adsController);

            var result = adsController.GetAds().ExecuteAsync(CancellationToken.None).Result;
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            var adResponse = result.Content.ReadAsAsync<IEnumerable<AdsViewModel>>()
                .Result
                .OrderByDescending(a => a.Type)
                .ThenByDescending(a => a.PostedOn)
                .Select(a => new {a.Id})
                .ToList();
            var fa = fakeAds
                .OrderByDescending(a => a.Type.Index)
                .ThenByDescending(a => a.PostedOn)
                .Select(a => new { a.Id })
                .ToList();
            Assert.AreEqual(2, adResponse.Count);
            Assert.AreEqual(2, fa.Count);
            CollectionAssert.AreEqual(fa, adResponse);
        }