public async Task Mediatr_test_success()
        {
            //Assemble
            var _mediatorMock     = new Mock <IMediator>();
            var _mockCmd          = new Mock <GeneratePaymentCmd>();
            var FirstName         = "JOHN";
            var LastName          = "DOE";
            var AnualSalary       = 60050;
            var PaymentPeriod     = "1March-31March";
            var Super             = "9";
            var ExpectedIncomeTax = 922;

            //Arrange
            var fakeResult = new PaymentDTO()
            {
                IncomeTax = ExpectedIncomeTax
            };
            var mockCmd = new GeneratePaymentCmd(FirstName, LastName, AnualSalary, PaymentPeriod, Super);

            _mediatorMock.Setup(x => x.Send(It.IsAny <GeneratePaymentCmd>(), default(System.Threading.CancellationToken)))
            .Returns(Task.FromResult(fakeResult));

            //Act
            var payController = new PaymentController(_mediatorMock.Object);
            var actionResult  = await payController.GeneratePaymentAsync(mockCmd);

            //Assert
            Assert.AreEqual(actionResult.Value.IncomeTax, ExpectedIncomeTax);
        }
        public async Task Payment_for_JohnDoe_withAnualSalary_60050_super_9()
        {
            //Assemble
            var _mediatorMock      = new Mock <IMediator>();
            var _taxRepositoryMock = new Mock <ITaxRepository>();
            var FirstName          = "JOHN";
            var LastName           = "DOE";
            var AnualSalary        = 60050;
            var PaymentPeriod      = "1March-31March";
            var Super         = "9";
            var year          = 2018;
            var mockedTaxData = MockTaxDataRepo(year);

            //expected results
            var ExpectedIncomeTax   = 922;
            var ExpectedSuper       = 450;
            var ExpectedGrossIncome = 5004;
            var ExpectedNetIncome   = 4082;

            //Arrange
            var mockPayCmd = new GeneratePaymentCmd(FirstName, LastName, AnualSalary, PaymentPeriod, Super);

            _taxRepositoryMock
            .Setup(s => s.GetTaxData(It.IsAny <int>()))
            .Returns(await MockTaxDataRepo(year));
            var handler  = new GeneratePaymentCmdHandler(_taxRepositoryMock.Object);
            var cltToken = new System.Threading.CancellationToken();

            //Act
            var result = await handler.Handle(mockPayCmd, cltToken);

            //Assert
            Assert.AreEqual(result.GrossIncome, ExpectedGrossIncome);
            Assert.AreEqual(result.IncomeTax, ExpectedIncomeTax);
            Assert.AreEqual(result.NetIncome, ExpectedNetIncome);
            Assert.AreEqual(result.IncomeTax, ExpectedIncomeTax);
            Assert.AreEqual(result.Super, ExpectedSuper);
        }
 public async Task <ActionResult <PaymentDTO> > GeneratePaymentAsync([FromBody] GeneratePaymentCmd generatePaymentCmd)
 {
     return(await _mediator.Send(generatePaymentCmd));
 }