public void DeleteProject_Calls_Repository_Delete()
        {
            int itemToDelete = 1;
            DonationManagementController controller = SetupControllerForTests(mockDonorRepo, mockDonationRepo,
                                                                              mockProjectRepo);

            controller.DeleteProject(itemToDelete);

            mockProjectRepo.Verify(x => x.DeleteProject(itemToDelete), Times.Once(),
                                   "Controller should have called Delete on repository");
        }
        public void The_PostProject_Action_returns_created_statuscode()
        {
            // Arrange
            DonationManagementController controller = SetupControllerForTests(mockDonorRepo, mockDonationRepo,
                                                                              mockProjectRepo);

            // Act
            HttpResponseMessage result = controller.Post(projects.SingleOrDefault(u => u.ProjectID == 1));

            // Assert
            Assert.IsNotNull(result, "Should have returned a HttpResponseMessage");
            Assert.IsTrue(result.IsSuccessStatusCode, "Status Code Should be success");
            Assert.AreEqual(HttpStatusCode.Created, result.StatusCode, "Invalid status code");
        }
        public void GetProject_Action_Returns_Valid_Project_Object()
        {
            // Arrange
            DonationManagementController controller = SetupControllerForTests(mockDonorRepo, mockDonationRepo,
                                                                              mockProjectRepo);

            // Act
            Project result = controller.GetProject(1);

            // Assert
            Assert.IsInstanceOfType(typeof(Project), result,
                                    "The Controller.GetProject(1) return is not of type Models.Project");
            Assert.IsNotNull(result, "The Controller.GetProject(1) return is null");
        }
        public void The_PutProject_Action_returns_Ok_statuscode_When_The_Project_Exists()
        {
            // Arrange
            DonationManagementController controller = SetupControllerForTests(mockDonorRepo, mockDonationRepo,
                                                                              mockProjectRepo);
            Project project = projects.SingleOrDefault(u => u.ProjectID == 2);

            // Act
            HttpResponseMessage result = controller.Put(2, project);

            // Assert
            Assert.IsNotNull(result, "Should have returned a HttpResponseMessage");
            Assert.IsTrue(result.IsSuccessStatusCode, "Status Code Should be success");
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode, "Invalid status code");
        }
        public void The_PutDonor_Action_returns_NotFound_statuscode_When_The_Donor_Does_NOT_Exists()
        {
            // Arrange
            DonationManagementController controller = SetupControllerForTests(mockDonorRepo, mockDonationRepo,
                                                                              mockProjectRepo);
            Donor donor  = donors.SingleOrDefault(u => u.DonorID == 2);
            int   fakeId = 345;
            // Act
            HttpResponseMessage result = controller.Put(fakeId, donor);

            // Assert
            Assert.IsInstanceOfType(typeof(HttpResponseMessage), result, "Should have returned an HttpResponseMessage");
            Assert.IsNotNull(result, "Should have returned a HttpResponseMessage");
            Assert.IsFalse(result.IsSuccessStatusCode, "Status Code Should be success");
            Assert.AreEqual(HttpStatusCode.NotModified, result.StatusCode, "Invalid status code");
        }
        public void GetProjects_Action_Returns_Valid_IEnumerable_Of_Projects()
        {
            // Arrange
            DonationManagementController controller = SetupControllerForTests(mockDonorRepo, mockDonationRepo,
                                                                              mockProjectRepo);

            // Act
            IEnumerable <Project> result = controller.GetProjects();
            List <Project>        res    = result.ToList();

            // Assert
            Assert.IsInstanceOfType(typeof(IEnumerable <Project>), result,
                                    "The Controller.GetProjects() return is not of type IEnumerable<Project>");
            Assert.IsNotNull(result, "The Controller.GetProjects() return is null");
            Assert.AreEqual(projects.Count(), res.Count(), string.Format(
                                "The Controller.GetProjects() return count is {0} it's supposed to be {1} (not correct)",
                                res.Count(), projects.Count()));
        }
        public DonationManagementController SetupControllerForTests(Mock <IDonorRepository> donorRepo,
                                                                    Mock <IDonationRepository> donationRepo,
                                                                    Mock <IProjectRepository> projectRepo)
        {
            var        config    = new HttpConfiguration();
            var        request   = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/donationmanagement");
            IHttpRoute route     = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
            var        routeData = new HttpRouteData(route, new HttpRouteValueDictionary {
                { "controller", "donationmanagement" }
            });
            var controller = new DonationManagementController(donorRepo.Object, donationRepo.Object, projectRepo.Object)
            {
                ControllerContext = new HttpControllerContext(config, routeData, request),
                Request           = request
            };

            controller.Request.Properties.Add(HttpPropertyKeys.HttpRouteDataKey, routeData);
            controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
            return(controller);
        }