repo(card): CreateCards happy path

This commit is contained in:
gamer147
2026-05-28 01:09:56 -04:00
parent dd80f5187a
commit e1becca659
2 changed files with 101 additions and 5 deletions

View File

@@ -281,4 +281,34 @@ public class CardInventoryRepositoryTests
Assert.That(deck.Cards.First(c => c.Card.Id == 10001001L).Count, Is.EqualTo(2),
"deck untouched because owned (3) still covers usage (2)");
}
[Test]
public async Task Create_single_card_debits_vials_and_grants_copy()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
await factory.SeedOwnedCardAsync(viewerId, cardId: 10001001L, count: 0, craftCost: 200);
await factory.SetRedEtherAsync(viewerId, 1_000UL);
using var scope = factory.Services.CreateScope();
var repo = scope.ServiceProvider.GetRequiredService<ICardInventoryRepository>();
var outcome = await repo.CreateCards(viewerId, new Dictionary<long, int> { { 10001001L, 1 } });
Assert.That(outcome.IsSuccess, Is.True, outcome.Error?.ToString());
Assert.That(outcome.Result!.NewRedEtherTotal, Is.EqualTo(800UL), "1000 - 200 = 800");
var grants = outcome.Result!.Grants;
Assert.That(grants.Any(g => g.RewardType == (int)UserGoodsType.Card
&& g.RewardId == 10001001L
&& g.RewardNum == 1), Is.True);
// Verify persisted state
var db = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
var viewer = await db.Viewers
.Include(v => v.Cards).ThenInclude(c => c.Card)
.FirstAsync(v => v.Id == viewerId);
Assert.That(viewer.Currency.RedEther, Is.EqualTo(800UL));
Assert.That(viewer.Cards.First(c => c.Card.Id == 10001001L).Count, Is.EqualTo(1));
}
}