public void CreateAd_ShouldSuccessfullyAddToRepository() { var ads = new List<Ad>(); var fakeUser = this.mocks.ApplicationUserRepositoryMock.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.ApplicationUsers) .Returns(this.mocks.ApplicationUserRepositoryMock.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.SetupController(adsController); var randomName = Guid.NewGuid().ToString(); var newAd = new CreateAdBindingModel() { Name = randomName, Price = 555, TypeId = 1, Description = "Nothing much to say", Categories = new[] { 1, 2, 3 } }; var response = adsController.Post(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(newAd.Name, ads[0].Name); }
public void CanCallInsert() { var ad = new Ad() { Name = "20", Description = "20" }; var newAd = new Ad() { Id = 20, Name = "20", Description = "20" }; var mock = new Mock<IAdRepository>(); mock.Setup(c => c.Insert(It.IsAny<Ad>())).Returns(newAd); var controller = new AdsController(mock.Object); controller.Request = new HttpRequestMessage { RequestUri = new Uri("http://localhost/api/ads") }; controller.Configuration = new HttpConfiguration(); controller.Configuration.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }); controller.RequestContext.RouteData = new HttpRouteData( route: new HttpRoute(), values: new HttpRouteValueDictionary { { "controller", "ads" } }); var response = controller.Post(ad); var expectedUrl = "http://localhost/api/ads/" + newAd.Id; Assert.IsNotNull(response); Assert.AreEqual(expectedUrl, response.Headers.Location.AbsoluteUri); }