示例#1
0
        public Task StoreTransaction(StoreTransactionDto transactionDto)
        {
            var transaction = _mapper.Map <Transaction>(transactionDto);

            transaction.TransactionId = Guid.NewGuid().ToString();
            transaction.UserId        = _userContext.UserId;
            return(_repository.StoreTransaction(transaction));
        }
            GivenValidStoreTransactionDto_ThenCorrectTransactionShouldBeStored()
            {
                const string expectedUserId = "id123";

                _mockCurrentUserContext.SetupGet(context => context.UserId)
                .Returns(expectedUserId);

                var inputDto = new StoreTransactionDto
                {
                    Amount = (decimal)1.0,
                    TransactionTimestamp = "2021-04-13T13:15:23.7002027Z",
                    Category             = "category-1",
                    Subcategory          = "subcategory-1",
                    TransactionType      = "transaction-type-1",
                    PayerPayeeId         = Guid.NewGuid().ToString(),
                    PayerPayeeName       = "name1",
                    Note = "this is a note123"
                };

                _mockMapper.Setup(mapper => mapper.Map <Transaction>(It.IsAny <StoreTransactionDto>()))
                .Returns(new Transaction
                {
                    Amount = inputDto.Amount,
                    TransactionTimestamp = inputDto.TransactionTimestamp,
                    Category             = inputDto.Category,
                    Subcategory          = inputDto.Subcategory,
                    TransactionType      = inputDto.TransactionType,
                    PayerPayeeId         = inputDto.PayerPayeeId,
                    PayerPayeeName       = inputDto.PayerPayeeName,
                    Note = inputDto.Note
                });

                var service = new TransactionHelperService(_mockCurrentUserContext.Object,
                                                           _mockTransactionRepository.Object, _mockMapper.Object);

                await service.StoreTransaction(inputDto);

                Guid guid;

                _mockTransactionRepository.Verify(repository =>
                                                  repository.StoreTransaction(It.Is <Transaction>(transaction =>
                                                                                                  transaction.UserId == expectedUserId &&
                                                                                                  transaction.TransactionTimestamp == inputDto.TransactionTimestamp &&
                                                                                                  Guid.TryParse(transaction.TransactionId, out guid) &&
                                                                                                  transaction.Amount == inputDto.Amount &&
                                                                                                  transaction.Category == inputDto.Category &&
                                                                                                  transaction.Subcategory == inputDto.Subcategory &&
                                                                                                  transaction.TransactionType == inputDto.TransactionType &&
                                                                                                  transaction.PayerPayeeId == inputDto.PayerPayeeId &&
                                                                                                  transaction.PayerPayeeName == inputDto.PayerPayeeName &&
                                                                                                  transaction.Note == inputDto.Note))
                                                  );
            }
        GivenValidTransactionRequest_WhenPostTransactionsIsCalled_ThenCorrectTransactionsArePersisted()
        {
            const decimal expectedAmount               = 123M;
            const string  expectedCategory             = "Food";
            const string  expectedSubcategory          = "Dinner";
            var           expectedTransactionTimestamp =
                new DateTimeOffset(new DateTime(2021, 4, 2)).ToString("yyyy-MM-ddThh:mm:ss.FFFK");
            const string expectedTransactionType = "expense";
            var          expectedPayerPayeeId    = Guid.NewGuid().ToString();
            const string expectedPayerPayeeName  = "name1";
            const string expectedNote            = "this is a note123";
            var          inputDto = new StoreTransactionDto
            {
                Amount               = expectedAmount,
                Category             = expectedCategory,
                Subcategory          = expectedSubcategory,
                TransactionTimestamp = expectedTransactionTimestamp,
                TransactionType      = expectedTransactionType,
                PayerPayeeId         = expectedPayerPayeeId,
                PayerPayeeName       = expectedPayerPayeeName,
                Note = expectedNote
            };

            string inputDtoString = JsonSerializer.Serialize(inputDto);

            StringContent httpContent =
                new StringContent(inputDtoString, Encoding.UTF8, "application/json");

            var response = await HttpClient.PostAsync($"/api/transactions", httpContent);

            response.EnsureSuccessStatusCode();

            var returnedTransactions = await DynamoDbHelper.ScanTable <Transaction>();

            Assert.Single(returnedTransactions);
            Assert.Equal(expectedAmount, returnedTransactions[0].Amount);
            Assert.Equal(expectedCategory, returnedTransactions[0].Category);
            Assert.Equal(expectedSubcategory, returnedTransactions[0].Subcategory);
            Assert.Equal(expectedTransactionTimestamp, returnedTransactions[0].TransactionTimestamp);
            Assert.Equal(expectedTransactionType, returnedTransactions[0].TransactionType);
            Assert.Equal(expectedPayerPayeeId, returnedTransactions[0].PayerPayeeId);
            Assert.Equal(expectedPayerPayeeName, returnedTransactions[0].PayerPayeeName);
            Assert.Equal(expectedNote, returnedTransactions[0].Note);
        }
        public async Task GivenInvalidRequest_WhenPostTransactionsIsCalled_ThenValidationErrorShouldBeReturned()
        {
            var inputDto = new StoreTransactionDto
            {
                Category             = "Food",
                Subcategory          = "Dinner",
                TransactionTimestamp = "2017-06-21T14:57:17",
                TransactionType      = "expense",
                PayerPayeeId         = Guid.NewGuid().ToString(),
                PayerPayeeName       = "name1",
                Note = "note123"
            };

            string inputDtoString = JsonSerializer.Serialize(inputDto);

            StringContent httpContent =
                new StringContent(inputDtoString, Encoding.UTF8, "application/json");

            var response = await HttpClient.PostAsync($"/api/transactions", httpContent);

            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
        }
示例#5
0
        public async Task <IActionResult> Post(StoreTransactionDto storeTransactionDto)
        {
            await _transactionHelperService.StoreTransaction(storeTransactionDto);

            return(Ok());
        }