public async Task PostPayment_ReturnsBadRequestObjectResult_WhenInvalidModelStateReturned()
        {
            // Arrange

            Guid          id            = Guid.NewGuid();
            PaymentStatus paymentStatus = PaymentStatus.Paid;

            PaymentReqVM paymentReqVM = MockPaymentReqVM.Get();

            PaymentReqRespModel  paymentReqRespModel  = MockPaymentReqRespModel.Get(id, paymentStatus);
            ModelStateDictionary modelStateDictionary = new ModelStateDictionary();

            modelStateDictionary.AddModelError("UnitTest", "Error");


            mockPaymentManager.Setup(s => s.PostAsync(It.IsAny <PaymentReqModel>(), It.IsAny <ModelStateDictionary>()))
            .Returns(Task.FromResult <(PaymentReqRespModel, ModelStateDictionary)>((paymentReqRespModel, modelStateDictionary)))
            .Verifiable();

            // Act

            ActionResult actionResult = await paymentController.Post(paymentReqVM) as ActionResult;

            // Assert

            Assert.IsNotNull(actionResult);
            Assert.IsInstanceOf <BadRequestObjectResult>(actionResult);

            BadRequestObjectResult badRequestObjectResult = actionResult as BadRequestObjectResult;

            Assert.IsNotNull(badRequestObjectResult);
            Assert.AreEqual(StatusCodes.Status400BadRequest, badRequestObjectResult.StatusCode);

            Assert.IsNotNull(badRequestObjectResult.Value);
            Assert.IsInstanceOf <SerializableError>(badRequestObjectResult.Value);

            SerializableError serializableError = badRequestObjectResult.Value as SerializableError;

            Assert.IsNotNull(serializableError);

            Assert.AreEqual(1, serializableError.Keys.Count());
            Assert.IsTrue(serializableError.ContainsKey("UnitTest"));

            mockPaymentManager.Verify(v => v.PostAsync(It.IsAny <PaymentReqModel>(), It.IsAny <ModelStateDictionary>()));
        }
        public async Task PostPayment_ReturnsCreatedResult()
        {
            // Arrange

            Guid          id            = Guid.NewGuid();
            PaymentStatus paymentStatus = PaymentStatus.Paid;

            PaymentReqVM paymentReqVM = MockPaymentReqVM.Get();

            PaymentReqRespModel  paymentReqRespModel  = MockPaymentReqRespModel.Get(id, paymentStatus);
            ModelStateDictionary modelStateDictionary = new ModelStateDictionary();

            mockPaymentManager.Setup(s => s.PostAsync(It.IsAny <PaymentReqModel>(), It.IsAny <ModelStateDictionary>()))
            .Returns(Task.FromResult <(PaymentReqRespModel, ModelStateDictionary)>((paymentReqRespModel, modelStateDictionary)))
            .Verifiable();

            // Act

            ActionResult actionResult = await paymentController.Post(paymentReqVM) as ActionResult;

            // Assert

            Assert.IsNotNull(actionResult);
            Assert.IsInstanceOf <CreatedResult>(actionResult);

            CreatedResult createdResult = actionResult as CreatedResult;

            Assert.IsNotNull(createdResult);
            Assert.AreEqual(StatusCodes.Status201Created, createdResult.StatusCode);

            Assert.IsNotNull(createdResult.Value);
            Assert.IsInstanceOf <PaymentCreatedRespVM>(createdResult.Value);

            PaymentCreatedRespVM paymentCreatedRespVM = createdResult.Value as PaymentCreatedRespVM;

            Assert.IsNotNull(paymentCreatedRespVM);
            Assert.AreEqual(id, paymentCreatedRespVM.Id);
            Assert.AreEqual(paymentStatus.ToString(), paymentCreatedRespVM.Status);
            Assert.AreEqual($"/api/v1/Payment/{id}", paymentCreatedRespVM.Href);

            mockPaymentManager.Verify(v => v.PostAsync(It.IsAny <PaymentReqModel>(), It.IsAny <ModelStateDictionary>()));
        }
Exemple #3
0
        public void PaymentReqVM_ShouldReturnErrorIfAmountIsZero()
        {
            // Arrange

            PaymentReqVM paymentReqVM = MockPaymentReqVM.Get();

            paymentReqVM.Amount = 0;

            List <ValidationResult> validationResults = new List <ValidationResult>();

            // Act

            bool isValid = Validator.TryValidateObject(paymentReqVM, new ValidationContext(paymentReqVM), validationResults, true);

            ValidationResult amountErrorMessage = validationResults
                                                  .FirstOrDefault(e => e.MemberNames.FirstOrDefault() == nameof(paymentReqVM.Amount));

            // Assert

            Assert.IsFalse(isValid);
            Assert.AreEqual(1, validationResults.Count);
            Assert.AreEqual("The Amount field must be greater then zero.", amountErrorMessage.ErrorMessage);
        }