test(giving): cover anonymous member-id stripping and delete-lock guard
This commit is contained in:
@@ -100,4 +100,41 @@ public class GivingServiceTests
|
|||||||
var svc = new GivingService(db);
|
var svc = new GivingService(db);
|
||||||
await Assert.ThrowsAsync<KeyNotFoundException>(() => svc.DeleteAsync(999));
|
await Assert.ThrowsAsync<KeyNotFoundException>(() => svc.DeleteAsync(999));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CreateAsync_Anonymous_NullsProvidedMemberId()
|
||||||
|
{
|
||||||
|
using var db = BuildDb();
|
||||||
|
var catId = await SeedCategoryAsync(db);
|
||||||
|
var svc = new GivingService(db);
|
||||||
|
|
||||||
|
var id = await svc.CreateAsync(new CreateGivingRequest
|
||||||
|
{
|
||||||
|
GivingCategoryId = catId, Amount = 25m, PaymentMethod = "Cash",
|
||||||
|
GivingDate = new DateOnly(2026, 5, 31),
|
||||||
|
IsAnonymous = true, MemberId = 12345, // provided, but must be stripped
|
||||||
|
});
|
||||||
|
|
||||||
|
var saved = await db.Givings.FindAsync(id);
|
||||||
|
Assert.True(saved!.IsAnonymous);
|
||||||
|
Assert.Null(saved.MemberId);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task DeleteAsync_Throws_WhenGivingBelongsToSubmittedSession()
|
||||||
|
{
|
||||||
|
using var db = BuildDb();
|
||||||
|
var catId = await SeedCategoryAsync(db);
|
||||||
|
var session = new OfferingSession { SessionDate = new DateOnly(2026, 5, 31), Status = "Submitted" };
|
||||||
|
db.OfferingSessions.Add(session);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
var giving = new Giving { GivingCategoryId = catId, Amount = 50m, PaymentMethod = "Cash",
|
||||||
|
GivingDate = new DateOnly(2026, 5, 31), OfferingSessionId = session.Id };
|
||||||
|
db.Givings.Add(giving);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
var svc = new GivingService(db);
|
||||||
|
|
||||||
|
await Assert.ThrowsAsync<InvalidOperationException>(() => svc.DeleteAsync(giving.Id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user