public void CreateAd_Should_Successfully_Add_To_Repository() { var ads = new List<Ad>(); var fakeUser = this.mocks.UserRepositoryMock.Object.All() .FirstOrDefault(); if (fakeUser == null) { Assert.Fail("Cannot perform test - no users available."); } this.mocks.AdRepositoryMock.Setup(r => r.Add(It.IsAny<Ad>())) .Callback((Ad ad) => { ad.Owner = fakeUser; ads.Add(ad); }); var mockContext = new Mock<IOnlineShopData>(); mockContext.Setup(c => c.Ads) .Returns(this.mocks.AdRepositoryMock.Object); mockContext.Setup(c => c.AdTypes) .Returns(this.mocks.AdTypeRepositoryMock.Object); mockContext.Setup(c => c.Users) .Returns(this.mocks.UserRepositoryMock.Object); mockContext.Setup(c => c.Categories) .Returns(this.mocks.CategoryRepositoryMock.Object); var mockIdProvider = new Mock<IUserIdProvider>(); mockIdProvider.Setup(ip => ip.GetUserId()) .Returns(fakeUser.Id); var adsController = new AdsController(mockContext.Object, mockIdProvider.Object); this.ConfigureController(adsController); var randomName = Guid.NewGuid().ToString(); var newAd = new AdBindingModel { Name = randomName, Price = 555, TypeId = mockContext.Object.AdTypes.All().FirstOrDefault().Id, Description = "Nothing much to say", Categories = new[] { 1, 2, 3 } }; var response = adsController.Create(newAd) .ExecuteAsync(CancellationToken.None).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); mockContext.Verify(c => c.SaveChanges(), Times.Once); Assert.AreEqual(1, ads.Count); Assert.AreEqual(randomName, ads[0].Name); }