feat: add recurring places and transaction pagination
Build MoneyMap image / build-and-push (push) Failing after 4s

This commit is contained in:
aj
2026-08-17 06:42:08 -04:00
parent 2356b7d5c9
commit 1cc0a355f2
175 changed files with 34411 additions and 34039 deletions
+231 -231
View File
@@ -1,231 +1,231 @@
using MoneyMap.Models;
using MoneyMap.Services;
using MoneyMap.Tests.TestHelpers;
namespace MoneyMap.Tests.Services;
public class CardServiceTests
{
[Fact]
public async Task GetAllCardsWithStatsAsync_ReturnsCardsWithTransactionCounts()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card1 = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "1111",
Owner = "John Doe"
};
var card2 = new Card
{
Id = 2,
AccountId = 1,
Issuer = "Mastercard",
Last4 = "2222",
Owner = "Jane Smith"
};
context.Cards.AddRange(card1, card2);
var transaction = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
context.Transactions.Add(transaction);
await context.SaveChangesAsync();
// Act
var result = await service.GetAllCardsWithStatsAsync();
// Assert
Assert.Equal(2, result.Count);
var card1Stats = result.First(c => c.Card.Id == 1);
Assert.Equal(1, card1Stats.TransactionCount);
var card2Stats = result.First(c => c.Card.Id == 2);
Assert.Equal(0, card2Stats.TransactionCount);
}
[Fact]
public async Task CanDeleteCardAsync_ReturnsFalse_WhenCardHasTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
var transaction = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
context.Transactions.Add(transaction);
await context.SaveChangesAsync();
// Act
var result = await service.CanDeleteCardAsync(1);
// Assert
Assert.False(result.CanDelete);
Assert.Contains("transaction", result.Reason, StringComparison.OrdinalIgnoreCase);
}
[Fact]
public async Task CanDeleteCardAsync_ReturnsTrue_WhenCardHasNoTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
await context.SaveChangesAsync();
// Act
var result = await service.CanDeleteCardAsync(1);
// Assert
Assert.True(result.CanDelete);
}
[Fact]
public async Task DeleteCardAsync_SuccessfullyDeletesCard_WhenNoTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
await context.SaveChangesAsync();
// Act
var result = await service.DeleteCardAsync(1);
// Assert
Assert.True(result.Success);
Assert.Empty(context.Cards);
}
[Fact]
public async Task DeleteCardAsync_FailsToDelete_WhenCardHasTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
var transaction = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
context.Transactions.Add(transaction);
await context.SaveChangesAsync();
// Act
var result = await service.DeleteCardAsync(1);
// Assert
Assert.False(result.Success);
Assert.Single(context.Cards);
}
}
using MoneyMap.Models;
using MoneyMap.Services;
using MoneyMap.Tests.TestHelpers;
namespace MoneyMap.Tests.Services;
public class CardServiceTests
{
[Fact]
public async Task GetAllCardsWithStatsAsync_ReturnsCardsWithTransactionCounts()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card1 = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "1111",
Owner = "John Doe"
};
var card2 = new Card
{
Id = 2,
AccountId = 1,
Issuer = "Mastercard",
Last4 = "2222",
Owner = "Jane Smith"
};
context.Cards.AddRange(card1, card2);
var transaction = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
context.Transactions.Add(transaction);
await context.SaveChangesAsync();
// Act
var result = await service.GetAllCardsWithStatsAsync();
// Assert
Assert.Equal(2, result.Count);
var card1Stats = result.First(c => c.Card.Id == 1);
Assert.Equal(1, card1Stats.TransactionCount);
var card2Stats = result.First(c => c.Card.Id == 2);
Assert.Equal(0, card2Stats.TransactionCount);
}
[Fact]
public async Task CanDeleteCardAsync_ReturnsFalse_WhenCardHasTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
var transaction = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
context.Transactions.Add(transaction);
await context.SaveChangesAsync();
// Act
var result = await service.CanDeleteCardAsync(1);
// Assert
Assert.False(result.CanDelete);
Assert.Contains("transaction", result.Reason, StringComparison.OrdinalIgnoreCase);
}
[Fact]
public async Task CanDeleteCardAsync_ReturnsTrue_WhenCardHasNoTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
await context.SaveChangesAsync();
// Act
var result = await service.CanDeleteCardAsync(1);
// Assert
Assert.True(result.CanDelete);
}
[Fact]
public async Task DeleteCardAsync_SuccessfullyDeletesCard_WhenNoTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
await context.SaveChangesAsync();
// Act
var result = await service.DeleteCardAsync(1);
// Assert
Assert.True(result.Success);
Assert.Empty(context.Cards);
}
[Fact]
public async Task DeleteCardAsync_FailsToDelete_WhenCardHasTransactions()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new CardService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var card = new Card
{
Id = 1,
AccountId = 1,
Issuer = "VISA",
Last4 = "9999",
Owner = "Test Owner"
};
context.Cards.Add(card);
var transaction = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
context.Transactions.Add(transaction);
await context.SaveChangesAsync();
// Act
var result = await service.DeleteCardAsync(1);
// Assert
Assert.False(result.Success);
Assert.Single(context.Cards);
}
}