public void BudgetsController_Get_ReturnAllElementsInRepo_WhenGivenNoParameters()
        {
            var result             = controller.Get();
            var resultObjectResult = result as ObjectResult;
            var resultObject       = resultObjectResult.Value as IEnumerable <Budget>;

            Assert.IsType <ObjectResult>(result);
            Assert.Equal(3, resultObject.Count());
        }
            public void ReturnsRepositoryResult()
            {
                // Act.
                BudgetsController controller = new BudgetsController(this.mockBudgetsRepository.Object);
                IActionResult     result     = controller.Get();
                OkObjectResult    okResult   = result as OkObjectResult;

                // Assert.
                this.mockBudgetsRepository.Verify(m => m.GetAll(this.userId), Times.Once, "The budgets should have been requested from the repository.");
                this.mockBudgetsRepository.VerifyNoOtherCalls();

                Assert.IsNotNull(okResult, "An OK response should have been returned.");
                Assert.AreEqual(200, okResult.StatusCode, "The status code from the response should have been 200.");
                Assert.AreEqual(this.stubBudgets, okResult.Value, "The result from the repository should have been returned.");
            }
            public void HandlesNotFound()
            {
                // Arrange.
                this.mockBudgetsRepository
                .Setup(m => m.Get(It.IsAny <long>(), It.IsAny <long>()))
                .Returns <Budget>(null);

                // Act.
                BudgetsController controller     = new BudgetsController(this.mockBudgetsRepository.Object);
                IActionResult     result         = controller.Get(this.id);
                NotFoundResult    notFoundResult = result as NotFoundResult;

                // Assert.
                Assert.IsNotNull(notFoundResult, "An object result should have been returned.");
                Assert.AreEqual(404, notFoundResult.StatusCode, "The status code from the response should have been 404.");
            }
            public void HandlesGeneralException()
            {
                // Arrange.
                this.mockBudgetsRepository
                .Setup(m => m.Get(It.IsAny <long>(), It.IsAny <long>()))
                .Throws(new Exception());

                // Act.
                BudgetsController controller   = new BudgetsController(this.mockBudgetsRepository.Object);
                IActionResult     result       = controller.Get(this.id);
                ObjectResult      objectResult = result as ObjectResult;

                // Assert.
                Assert.IsNotNull(objectResult, "An object result should have been returned.");
                Assert.AreEqual(500, objectResult.StatusCode, "The status code from the response should have been 500.");
                string expectedMessage = "There was an error getting the budget.";

                Assert.AreEqual(expectedMessage, objectResult.Value, "The error message should have been the result.");
            }
            public void ReturnsNotFoundWhenRepositoryReturnsNull()
            {
                // Arrange.
                this.stubBudget = null;
                this.mockBudgetsRepository
                .Setup(m => m.Get(It.IsAny <long>(), It.IsAny <long>()))
                .Returns(this.stubBudget);

                // Act.
                BudgetsController controller     = new BudgetsController(this.mockBudgetsRepository.Object);
                IActionResult     result         = controller.Get(this.id);
                NotFoundResult    notFoundResult = result as NotFoundResult;

                // Assert.
                this.mockBudgetsRepository.Verify(m => m.Get(this.id, this.userId), Times.Once, "The budget should have been requested from the repository.");
                this.mockBudgetsRepository.VerifyNoOtherCalls();

                Assert.IsNotNull(notFoundResult, "A Not Found response should have been returned.");
                Assert.AreEqual(404, notFoundResult.StatusCode, "The status code from the response should have been 404.");
            }
            public void ReturnsAnEmptyListWhenRepositoryReturnsNull()
            {
                // Arrange.
                this.stubBudgets = null;
                this.mockBudgetsRepository
                .Setup(m => m.GetAll(It.IsAny <long>()))
                .Returns(this.stubBudgets);

                // Act.
                BudgetsController controller = new BudgetsController(this.mockBudgetsRepository.Object);
                IActionResult     result     = controller.Get();
                OkObjectResult    okResult   = result as OkObjectResult;

                // Assert.
                this.mockBudgetsRepository.Verify(m => m.GetAll(this.userId), Times.Once, "The budgets should have been requested from the repository.");
                this.mockBudgetsRepository.VerifyNoOtherCalls();

                Assert.IsNotNull(okResult, "An OK response should have been returned.");
                Assert.AreEqual(200, okResult.StatusCode, "The status code from the response should have been 200.");
                Assert.AreEqual(0, (okResult.Value as List <Budget>).Count, "An empty list should be the result.");
            }