Files
MoneyMap/MoneyMap.Tests/Services/TransactionStatisticsServiceTests.cs
AJ 1c28d9cc88 Refactor: remove unnecessary using directives
Removed unused using statements from page models and test files:
- Removed unused Microsoft.EntityFrameworkCore and MoneyMap.Data imports
- Removed redundant Xunit usings (already declared as global)

Fixes CS8019 and CS8933 hidden diagnostics.
2025-11-16 11:53:50 -05:00

188 lines
5.1 KiB
C#

using MoneyMap.Models;
using MoneyMap.Services;
using MoneyMap.Tests.TestHelpers;
namespace MoneyMap.Tests.Services;
public class TransactionStatisticsServiceTests
{
[Fact]
public async Task CalculateStatsAsync_ReturnsCorrectStatistics()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new TransactionStatisticsService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var debit1 = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Store A",
Memo = "Purchase",
AccountId = 1
};
var debit2 = new Transaction
{
Date = DateTime.Now,
Amount = -30.00m,
Name = "Store B",
Memo = "Purchase",
AccountId = 1
};
var credit = new Transaction
{
Date = DateTime.Now,
Amount = 100.00m,
Name = "Deposit",
Memo = "Paycheck",
AccountId = 1
};
context.Transactions.AddRange(debit1, debit2, credit);
await context.SaveChangesAsync();
var query = context.Transactions.AsQueryable();
// Act
var result = await service.CalculateStatsAsync(query);
// Assert
Assert.Equal(3, result.Count);
Assert.Equal(-80.00m, result.TotalDebits);
Assert.Equal(100.00m, result.TotalCredits);
Assert.Equal(20.00m, result.NetAmount);
}
[Fact]
public async Task GetCategorizationStatsAsync_ReturnsCorrectCounts()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new TransactionStatisticsService(context);
var account = new Account
{
Id = 1,
Institution = "Test Bank",
AccountType = AccountType.Checking,
Last4 = "1234",
Owner = "Test Owner"
};
context.Accounts.Add(account);
var categorized1 = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
Category = "Groceries"
};
var categorized2 = new Transaction
{
Date = DateTime.Now,
Amount = -30.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
Category = "Gas"
};
var uncategorized = new Transaction
{
Date = DateTime.Now,
Amount = -20.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
Category = ""
};
context.Transactions.AddRange(categorized1, categorized2, uncategorized);
await context.SaveChangesAsync();
// Act
var result = await service.GetCategorizationStatsAsync();
// Assert
Assert.Equal(3, result.TotalTransactions);
Assert.Equal(2, result.Categorized);
Assert.Equal(1, result.Uncategorized);
}
[Fact]
public async Task GetCardStatsForAccountAsync_ReturnsStatsForLinkedCards()
{
// Arrange
using var context = DbContextHelper.CreateInMemoryContext();
var service = new TransactionStatisticsService(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 = "Test"
};
var card2 = new Card
{
Id = 2,
AccountId = 1,
Issuer = "Mastercard",
Last4 = "2222",
Owner = "Test"
};
context.Cards.AddRange(card1, card2);
var transaction1 = new Transaction
{
Date = DateTime.Now,
Amount = -50.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
var transaction2 = new Transaction
{
Date = DateTime.Now,
Amount = -30.00m,
Name = "Test",
Memo = "Test",
AccountId = 1,
CardId = 1
};
context.Transactions.AddRange(transaction1, transaction2);
await context.SaveChangesAsync();
// Act
var result = await service.GetCardStatsForAccountAsync(1);
// Assert
Assert.Equal(2, result.Count);
var card1Stats = result.First(c => c.Card.Id == 1);
Assert.Equal(2, card1Stats.TransactionCount);
var card2Stats = result.First(c => c.Card.Id == 2);
Assert.Equal(0, card2Stats.TransactionCount);
}
}