refactor(campaign): delegate gift-reward-type check to GiftRewardTypes

Delete local IsSupportedGiftRewardType and replace its single call site with
GiftRewardTypes.IsSupported — Card (5) and Sleeve (6) are now accepted.
Update unsupported-type test sentinel from 5 (Card) to 11 (SpotCard).
Add Card and Sleeve success-path tests; full suite 1152/1152.
This commit is contained in:
gamer147
2026-06-09 20:52:47 -04:00
parent b2a5b69423
commit 742058403c
2 changed files with 58 additions and 11 deletions

View File

@@ -182,9 +182,10 @@ public class CampaignControllerTests
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
// RewardType 5 = Card; gift mapper supports only 1=Crystal, 4=Item, 9=Rupy.
// RewardType 11 = SpotCard; InventoryTransaction throws NotSupportedException, so the
// gift mapper rejects it.
var code = await SeedCodeAsync(factory, "BADTYPE",
rewards: new[] { (5, 100L, 1) });
rewards: new[] { (11, 100L, 1) });
using var client = factory.CreateAuthenticatedClient(viewerId);
var response = await client.PostAsync("/campaign/regist_serial_code",
@@ -227,4 +228,57 @@ public class CampaignControllerTests
using var doc = JsonDocument.Parse(raw);
Assert.That(doc.RootElement.GetProperty("result_code").GetInt32(), Is.EqualTo(4202));
}
[Test]
public async Task Register_with_card_reward_succeeds_and_creates_present()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
var code = await SeedCodeAsync(factory, "CARDCODE", "Free card",
rewards: new[] { (5, 12345L, 1) });
using var client = factory.CreateAuthenticatedClient(viewerId);
var response = await client.PostAsync("/campaign/regist_serial_code",
JsonBody("""{"serial_code":"CARDCODE"}"""));
var raw = await response.Content.ReadAsStringAsync();
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK), raw);
using var doc = JsonDocument.Parse(raw);
Assert.That(doc.RootElement.GetProperty("is_complete").GetBoolean(), Is.True);
using var verifyScope = factory.Services.CreateScope();
var ctx = verifyScope.ServiceProvider.GetRequiredService<SVSimDbContext>();
var presents = await ctx.ViewerPresents.AsNoTracking()
.Where(p => p.ViewerId == viewerId).ToListAsync();
Assert.That(presents, Has.Count.EqualTo(1));
Assert.That(presents[0].RewardType, Is.EqualTo(5));
Assert.That(presents[0].RewardDetailId, Is.EqualTo(12345L));
Assert.That(presents[0].Source, Is.EqualTo($"serial_code:{code.Id}"));
}
[Test]
public async Task Register_with_sleeve_reward_succeeds_and_creates_present()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
var code = await SeedCodeAsync(factory, "SLEEVECODE", "Free sleeve",
rewards: new[] { (6, 700100L, 1) });
using var client = factory.CreateAuthenticatedClient(viewerId);
var response = await client.PostAsync("/campaign/regist_serial_code",
JsonBody("""{"serial_code":"SLEEVECODE"}"""));
var raw = await response.Content.ReadAsStringAsync();
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK), raw);
using var doc = JsonDocument.Parse(raw);
Assert.That(doc.RootElement.GetProperty("is_complete").GetBoolean(), Is.True);
using var verifyScope = factory.Services.CreateScope();
var ctx = verifyScope.ServiceProvider.GetRequiredService<SVSimDbContext>();
var presents = await ctx.ViewerPresents.AsNoTracking()
.Where(p => p.ViewerId == viewerId).ToListAsync();
Assert.That(presents, Has.Count.EqualTo(1));
Assert.That(presents[0].RewardType, Is.EqualTo(6));
Assert.That(presents[0].RewardDetailId, Is.EqualTo(700100L));
}
}