예제 #1
0
        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);
        }
예제 #2
0
        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);
        }