public void Close_Ad_As_NonOwner_Should_Return_400BadRequest()
        {
            var fakeAds = this.mocks.AdRepositoryMock.Object.All();
            var fakeUsers = this.mocks.UserRepositoryMock.Object.All();

            var openAd = fakeAds.FirstOrDefault(a => a.Status == AdStatus.Open);
            if (openAd == null)
            {
                Assert.Fail("Cannot perform test - no open ads exist.");
            }

            var openAdOwnerId = openAd.OwnerId;
            var fakeForeignUser = fakeUsers.FirstOrDefault(u => u.Id != openAdOwnerId);
            if (fakeForeignUser == null)
            {
                Assert.Fail("Cannot perform test - no foreign user available.");
            }

            var fakeForeignUserId = fakeForeignUser.Id;
            var openAdId = openAd.Id;

            var mockIdProvider = new Mock<IUserIdProvider>();
            mockIdProvider.Setup(ip => ip.GetUserId())
                .Returns(fakeForeignUserId);

            var mockContext = new Mock<IOnlineShopData>();
            mockContext.Setup(c => c.Ads).Returns(this.mocks.AdRepositoryMock.Object);

            var adsController = new AdsController(mockContext.Object, mockIdProvider.Object);
            this.ConfigureController(adsController);

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

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Never);
            Assert.AreEqual(AdStatus.Open, openAd.Status);
        }
        public void Closing_Ad_As_Owner_Should_Return_200OK()
        {
            var fakeAds = this.mocks.AdRepositoryMock.Object.All();
            var openAd = fakeAds.FirstOrDefault(ad => ad.Status == AdStatus.Open);

            if (openAd == null)
            {
                Assert.Fail("Cannot perform test - no open ads available.");
            }

            var openAdId = openAd.Id;

            var mockContext = new Mock<IOnlineShopData>();
            mockContext.Setup(c => c.Ads)
                .Returns(this.mocks.AdRepositoryMock.Object);

            var mockIdProvider = new Mock<IUserIdProvider>();
            mockIdProvider.Setup(p => p.GetUserId())
                .Returns(openAd.OwnerId);

            var adsController = new AdsController(mockContext.Object, mockIdProvider.Object);
            this.ConfigureController(adsController);

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

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreNotEqual(openAd.ClosedOn, null);
            Assert.AreEqual(openAd.Status, AdStatus.Closed);
        }