public void ConfirmDelete_WithID_Redirects()
        {
            // Given
            Report ReturnReport = new Report()
            {
                Active = true
            };
            // Adjust Mocked Components
            var _svc = new Mock <IReportService>();

            _svc.Setup(m => m.GetById(1))
            .Returns(ReturnReport);
            _svc.Setup(m => m.Delete(ReturnReport))
            .Returns(true);
            var _Controller = new ReportController(_db, _svc.Object);

            _Controller.TempData =
                new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>());

            // When
            var Result = (RedirectToActionResult)_Controller.ConfirmDelete(1);

            // Then
            Assert.Equal("ViewReports", Result.ActionName);
            Assert.Equal("Report", Result.ControllerName);
        }
        public void ConfirmDelete_WithID_CallsService()
        {
            // Given
            Report ReturnReport = new Report()
            {
                Active = true
            };
            // Adjust Mocked Components
            var _svc = new Mock <IReportService>();

            _svc.Setup(m => m.GetById(1))
            .Returns(ReturnReport);
            _svc.Setup(m => m.Delete(ReturnReport))
            .Returns(true);
            var _Controller = new ReportController(_db, _svc.Object);

            _Controller.TempData =
                new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>());

            // When
            var Result = _Controller.ConfirmDelete(1) as ViewResult;

            // Then
            // Ensure Service is called
            _svc.Verify(r => r.Delete(It.IsAny <Report>()), Times.Once());
        }
        public void Integration_DeleteAReport_Success()
        {
            // Given: Seed
            _Seeder.Seed();
            _ReportController.TempData =
                new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>());

            // Call Contoller to get report
            var ViewReport = _ReportController.ViewReport(1) as ViewResult;

            // From that page Load for delete
            var RetrievedReport = (Report)ViewReport.ViewData.Model;

            // Call Controller to Delete
            var Result =
                _ReportController.Delete(RetrievedReport.CityID) as ViewResult;

            // Check The Page Contains Report to be deleted
            var Report           = (Report)Result.ViewData.Model;
            var ExpectedToDelete = _db.Reports.First(e => e.CityID == 1);

            Assert.Equal(ExpectedToDelete, Report);

            // Now Confirm Delete is hit
            var Return = (RedirectToActionResult)_ReportController
                         .ConfirmDelete(Report.CityID);

            // Check Redirect
            Assert.Equal("ViewReports", Return.ActionName);
            Assert.Equal("Report", Return.ControllerName);

            // Check Report is removed from Database
            var Deleted = _db.Reports.FirstOrDefault(e =>
                                                     e.ThreeWordAddress == ExpectedToDelete.ThreeWordAddress);

            Assert.Null(Deleted);
        }