Exemplo n.º 1
0
        public void TestInitialize()
        {
            IParser  parser  = new XmlParser();
            IService service = new ExpenseService(parser);

            this.expenseController = new ExpenseController(service);
        }
Exemplo n.º 2
0
        public void GetById()
        {
            // Arrange
            var httpConfiguration = new HttpConfiguration();

            WebApiConfig.Register(httpConfiguration);
            var httpRouteData = new System.Web.Http.Routing.HttpRouteData(httpConfiguration.Routes["DefaultApi"],
                                                                          new System.Web.Http.Routing.HttpRouteValueDictionary {
                { "controller", "Expense" }
            });
            ExpenseController controller = new ExpenseController()
            {
                Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:53852/api/Expense/")
                {
                    Properties =
                    {
                        { System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey, httpConfiguration },
                        { System.Web.Http.Hosting.HttpPropertyKeys.HttpRouteDataKey,     httpRouteData     }
                    }
                }
            };

            LoadTestData(controller);
            // Act
            var result = controller.Get(0);

            // Assert
            Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode);
        }
Exemplo n.º 3
0
        public void ThrowsInvalidOperationExceptionWhenTryingToAddRecordThatAlreadyExists()
        {
            var testRecord     = this.CreateTestData().First();
            var repositoryMock = new Mock <IExpenseRepository>();

            repositoryMock.Setup(x => x.Create(testRecord)).Throws(new InvalidOperationException($"An expense record with ID {testRecord.Id} already exists in the database!"));
            var subject = new ExpenseController(repositoryMock.Object);

            IActionResult result = null;

            subject
            .Invoking(x => result = x.Post(testRecord))
            .ShouldNotThrow();

            repositoryMock
            .Invoking(mock => mock.Verify(x => x.Create(testRecord)))
            .ShouldNotThrow();

            result
            .Should()
            .BeOfType <StatusCodeResult>();
            var statusCodeResult = result as StatusCodeResult;

            statusCodeResult.StatusCode
            .Should()
            .Be((int)HttpStatusCode.Conflict);
        }
Exemplo n.º 4
0
        public void CanAddRecord()
        {
            var testRecord     = this.CreateTestData().First();
            var repositoryMock = new Mock <IExpenseRepository>();
            var subject        = new ExpenseController(repositoryMock.Object);

            IActionResult result = null;

            subject
            .Invoking(x => result = x.Post(testRecord))
            .ShouldNotThrow();

            repositoryMock
            .Invoking(mock => mock.Verify(x => x.Create(testRecord)))
            .ShouldNotThrow();

            result
            .Should()
            .BeOfType <CreatedResult>();

            var createdResult = result as CreatedResult;

            createdResult
            .Location
            .Should()
            .Be($"api/expenses/{testRecord.Id}");
        }
Exemplo n.º 5
0
        public void CanDeliverAllExpenseRecords()
        {
            var testData       = this.CreateTestData();
            var repositoryMock = new Mock <IExpenseRepository>();

            repositoryMock.Setup(x => x.All()).Returns(testData);
            var subject = new ExpenseController(repositoryMock.Object);

            IActionResult result = null;

            subject.Invoking(x => { result = x.Get(); }).ShouldNotThrow();
            result
            .Should()
            .BeOfType <OkObjectResult>();

            var okResult = result as OkObjectResult;

            okResult.Value
            .Should()
            .BeOfType <ExpenseRecord[]>();

            var resultValue = okResult.Value as IEnumerable <ExpenseRecord>;

            resultValue
            .Should()
            .HaveCount(5);
        }
Exemplo n.º 6
0
        public void CanDeliverASingleExpeseRecord(string recordId)
        {
            var testRecord     = this.CreateTestData().FirstOrDefault(x => x.Id.Equals(Guid.Parse(recordId)));
            var repositoryMock = new Mock <IExpenseRepository>();

            repositoryMock.Setup(x => x.FindById(testRecord.Id)).Returns(testRecord);
            var subject = new ExpenseController(repositoryMock.Object);

            IActionResult result = null;

            subject
            .Invoking(x => { result = x.GetById(testRecord.Id); })
            .ShouldNotThrow();

            result
            .Should()
            .BeOfType <OkObjectResult>();

            var okResult = result as OkObjectResult;

            okResult.Value
            .Should()
            .BeOfType <ExpenseRecord>();

            var resultValue = okResult.Value as ExpenseRecord;

            resultValue
            .ShouldBeEquivalentTo(testRecord);
        }
Exemplo n.º 7
0
        public void GetStaffExpenses_Can_Retrieve_A_Staffs_Expenses()
        {
            var controller   = new ExpenseController(_mockExpenseService.Object);
            var apiCallValue = controller.GetStaffExpenses(sampleEmployee.Id);

            Assert.IsInstanceOfType(apiCallValue, typeof(OkNegotiatedContentResult <List <Expense> >));
        }
Exemplo n.º 8
0
        public void GetYearlyExpenses_API_Call_Works_Correctly()
        {
            var controller    = new ExpenseController(_mockExpenseService.Object);
            var apiCallResult = controller.GetYearlyExpenses();

            Assert.IsInstanceOfType(apiCallResult, typeof(OkNegotiatedContentResult <Dictionary <string, int> >));
        }
Exemplo n.º 9
0
        public void Index_NormalRequest_Returns_Index_With_Expense_List()
        {
            // Arrange
            Mock <HttpRequestBase>  request  = new Mock <HttpRequestBase>();
            Mock <HttpResponseBase> response = new Mock <HttpResponseBase>();
            Mock <HttpContextBase>  context  = new Mock <HttpContextBase>();

            context.Setup(c => c.Request).Returns(request.Object);
            context.Setup(c => c.Response).Returns(response.Object);

            IEnumerable <Expense> fakeExpenses = GetMockExpenses();

            expenseRepository.Setup(x => x.GetMany(It.IsAny <Expression <Func <Expense, bool> > >())).Returns(fakeExpenses);
            ExpenseController controller = new ExpenseController(commandBus.Object, categoryRepository.Object, expenseRepository.Object);

            controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
            // Act
            var result = controller.Index(null, null) as ViewResult;

            // Assert
            Assert.AreEqual("Index", result.ViewName);
            Assert.IsNotNull(result, "View Result is null");
            Assert.IsInstanceOf(typeof(IEnumerable <Expense>),
                                result.ViewData.Model, "Wrong View Model");
            var expenses = result.ViewData.Model as IEnumerable <Expense>;

            Assert.AreEqual(3, expenses.Count(), "Got wrong number of Categories");
        }
        public void ExpenseService_ShouldCreateExpenseOnce_WhenCraetePostIsCalled()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);
            var model             = new ExpenseViewModel()
            {
                Name         = "_",
                AssignedUser = "******",
                Category     = new Guid().ToString(),
                ExpectedCost = 1M,
                Comment      = "_"
            };

            // Act
            expenseController.Create(model);

            // Assert
            this.expenseServiceMock.Verify(x => x.CreateExpense(
                                               It.IsAny <string>(),
                                               It.IsAny <string>(),
                                               It.IsAny <Guid>(),
                                               It.IsAny <Guid>(),
                                               It.IsAny <decimal>(),
                                               It.IsAny <DateTime>(),
                                               It.IsAny <string>(),
                                               It.IsAny <string>()),
                                           Times.Once);
        }
Exemplo n.º 11
0
        public void CallController()
        {
            // Arrange
            ExpenseController controller = new ExpenseController();
            string            sampleText =
                @"Hi Yvaine,
Please create an expense claim for the below.Relevant details are marked up as
requested…
<expense><cost_centre>DEV002</cost_centre>
<total>1024.01</total><payment_method>personal card</payment_method>
</expense>
From: Ivan Castle
Sent: Friday, 16 February 2018 10:32 AM
To: Antoine Lloyd <Antoine.Lloyd @example.com>
Subject: test
Hi Antoine,
Please create a reservation at the <vendor>Viaduct Steakhouse</vendor> our
<description> development team’s project end celebration dinner</description> on
<date>Thursday 27 April 2017</date>. We expect to arrive around
7.15pm.Approximately 12 people but I’ll confirm exact numbers closer to the day.
Regards,
Ivan";

            // Act
            var expense = controller.ReadText(sampleText);

            //Assert
            Assert.AreEqual("DEV002", expense.cost_centre);
            Assert.AreEqual((Decimal)1024.01, expense.total);
            Assert.AreEqual("personal card", expense.payment_method);
            Assert.AreEqual("Viaduct Steakhouse", expense.vendor);
            Assert.AreEqual(" development team’s project end celebration dinner", expense.description);
            Assert.AreEqual(new DateTime(2017, 4, 27), expense.date.Date);
        }
Exemplo n.º 12
0
        public void Post()
        {
            // Arrange

            var httpConfiguration = new HttpConfiguration();

            WebApiConfig.Register(httpConfiguration);
            var httpRouteData = new System.Web.Http.Routing.HttpRouteData(httpConfiguration.Routes["DefaultApi"],
                                                                          new System.Web.Http.Routing.HttpRouteValueDictionary {
                { "controller", "Expense" }
            });
            ExpenseController controller = new ExpenseController()
            {
                Request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:53852/api/Expense/")
                {
                    Properties =
                    {
                        { System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey, httpConfiguration },
                        { System.Web.Http.Hosting.HttpPropertyKeys.HttpRouteDataKey,     httpRouteData     }
                    }
                }
            };

            // Act
            var response = controller.Post("<expense><cost_centre>DEV002</cost_centre><total>890.55</total><payment_method>personalcard</payment_method><date>23/07/2018</date><description>test expense record</description></expense>");

            // Assert
            Assert.AreEqual(System.Net.HttpStatusCode.Created, response.StatusCode);
        }
Exemplo n.º 13
0
        public void Get_Can_Retrieve_All_Saved_Expenses()
        {
            var     controller    = new ExpenseController(_mockExpenseService.Object);
            Expense savedExpense  = _sampleExpenses[0];
            var     apiCallResult = controller.Get();

            Assert.IsInstanceOfType(apiCallResult, typeof(OkNegotiatedContentResult <List <Expense> >));
        }
Exemplo n.º 14
0
        public void GivenAValidEmailWhenProcessedThenReturnOkResult200()
        {
            _expenseClaimService.Setup(x => x.Process(ValidEmail)).Returns(It.IsAny <ExpenseClaimResult>());
            _controller = new ExpenseController(_expenseClaimService.Object, _logger.Object);
            var result = (OkObjectResult)_controller.Post(ValidEmail);

            Assert.Equal(200, result.StatusCode);
        }
Exemplo n.º 15
0
        public void GivenAInvalidEmailWhenProcessedThenReturnBadRequest400(int expected, string invalidEmail)
        {
            _expenseClaimService.Setup(x => x.Process(invalidEmail)).Throws <Exception>();
            _controller = new ExpenseController(_expenseClaimService.Object, _logger.Object);
            var result = (BadRequestObjectResult)_controller.Post(invalidEmail);

            Assert.Equal(expected, result.StatusCode);
        }
        public void ExpenseController_ShouldReturnDefaultView_WhenCraeteGetIsCalled()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);

            // Act
            // Assert
            expenseController.WithCallTo(x => x.Create()).ShouldRenderDefaultView();
        }
Exemplo n.º 17
0
        public void CurrentMonthTotalExpenses_Works_Correctly()
        {
            var controller   = new ExpenseController(_mockExpenseService.Object);
            var apiCallValue = controller.CurrentMonthTotalExpenses(sampleEmployee.Id);

            _mockExpenseService.Verify(x => x.StaffTotalExpensesForThisMonth(It.Is <string>(input =>
                                                                                            input == sampleEmployee.Id)));
            Assert.IsInstanceOfType(apiCallValue, typeof(OkNegotiatedContentResult <int>));
        }
Exemplo n.º 18
0
        public void Get_With_Parameter_Can_Retrieve_Saved_Expense()
        {
            Expense newExpense    = _sampleExpenses[0];
            var     controller    = new ExpenseController(_mockExpenseService.Object);
            var     apiCallResult = controller.Get(newExpense.Id);

            Assert.IsNotNull(apiCallResult);
            Assert.IsNotInstanceOfType(apiCallResult, typeof(OkResult));
        }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            travelController.Dispose();
            expenseController.Dispose();

            travelController  = null;
            expenseController = null;
        }
Exemplo n.º 20
0
        public void DELETE_Method_Works_Correctly()
        {
            var     controller   = new ExpenseController(_mockExpenseService.Object);
            Expense savedExpense = _sampleExpenses[0];

            controller.Delete(savedExpense.Id);
            _mockExpenseService.Verify(x => x.DeleteExpense(It.Is <int>(input =>
                                                                        input == savedExpense.Id
                                                                        )));
        }
        public void DeletePost_ShouldRedirectToAction_WhenIsCalled()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);

            // Act
            // Assert
            expenseController.WithCallTo(x => x.Delete(new ExpenseViewModel()))
            .ShouldRedirectTo <ExpenseController>(x => x.Index(new Guid()));
        }
        public void ExpenseController_ShouldHaveOneAuthorizeAttribute()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);

            // Act
            var result = expenseController.GetType().GetCustomAttributes(typeof(AuthorizeAttribute), false).Length;

            // Assert
            Assert.That(result == 1);
        }
Exemplo n.º 23
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ExpenseForm"/> class.
        /// </summary>
        /// <param name="expenseController">The expense controller to use for data retrieval.</param>
        public ExpenseForm(ExpenseController expenseController)
        {
            this.InitializeComponent();
            this.controller = expenseController;
            this.controller.ControllerDataRefreshed += this.OnControllerRefresh;

            this.AverageSelectionComboBox.SelectedIndex = 0;
            this.DisplayFilterNameTextBox.Text          = "N/A";

            this.UpdateDataGrid();
        }
        public void HouseholdService_ShouldCallGetHouseholdUsersOnce_WhenCreateGetIsCalled()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);

            // Act
            expenseController.Create();

            // Assert
            householdServiceMock.Verify(x => x.GetHouseholdUsers(It.IsAny <Guid>()), Times.Once);
        }
        public void WebHelper_ShouldCallGetHouseholdIdFromCookieOnce_WhenCreateGetIsCalled()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);

            // Act
            expenseController.Create();

            // Assert
            webHelperMock.Verify(x => x.GetHouseholdIdFromCookie(), Times.Once);
        }
Exemplo n.º 26
0
        public void Post_Can_Save_New_Expense()
        {
            var controller = new ExpenseController(_mockExpenseService.Object);
            var newExpense = new Expense("AnyExpense", 80000, sampleEmployee.Id);

            controller.Post(newExpense);
            _mockExpenseService.Verify(x => x.SaveExpense(It.Is <Expense>(exp =>
                                                                          exp.Description == "AnyExpense" &&
                                                                          exp.Cost == 80000
                                                                          )));
        }
Exemplo n.º 27
0
        public void Setup()
        {
            _expenseServiceMock  = new Mock <IExpenseService>();
            _categoryServiceMock = new Mock <ICategoryService>();
            _mapper = new Mock <IMapper>();

            _expenseController = new ExpenseController(
                _expenseServiceMock.Object,
                _categoryServiceMock.Object,
                _mapper.Object);
        }
        public void ExpenseService_ShouldCallDeleteOnce_WhenDeletePostIsCalled()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);

            // Act
            expenseController.Delete(new ExpenseViewModel());

            // Assert
            this.expenseServiceMock.Verify(x => x.DeleteExpense(It.IsAny <Guid>(), It.IsAny <bool>()), Times.Once);
        }
        public void ExpenseController_ShouldReturnDefaultView_WhenIndexIsCalled()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);
            var expense           = new Expense("_", new Guid(), "_", new Guid(), 1M, DateTime.Now, DateTime.Now);

            this.expenseServiceMock.Setup(x => x.GetExpense(It.IsAny <Guid>())).Returns(expense);

            // Act
            // Assert
            expenseController.WithCallTo(x => x.Index(new Guid())).ShouldRenderDefaultView();
        }
        public void EditPost_ShouldHaveValidateAntiForgeryTokenAttribute()
        {
            // Arrange
            var expenseController = new ExpenseController(expenseServiceMock.Object, mappingServiceMock.Object, householdServiceMock.Object, webHelperMock.Object);

            // Act
            var result = expenseController.GetType().GetMethod("Edit", new Type[] { typeof(ExpenseViewModel) })
                         .GetCustomAttributes(typeof(ValidateAntiForgeryTokenAttribute), false).Length;

            // Assert
            Assert.That(result == 1);
        }