|
@@ -427,6 +427,27 @@ public sealed class MemberItemTests
|
|
|
Assert.IsFalse(withUsed.List.Any(r => r.ID == revoked.ID), "회수분은 항상 제외");
|
|
Assert.IsFalse(withUsed.List.Any(r => r.ID == revoked.ID), "회수분은 항상 제외");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ [TestMethod]
|
|
|
|
|
+ public async Task List_ConsumableOnly_ExcludesStatusItems()
|
|
|
|
|
+ {
|
|
|
|
|
+ // 기대 행위: ConsumableOnly=true (소모품 보관함) 는 소모품(Kind>=ChatBanLift)만, 지위아이템(Badge/NicknameEffect)은 제외.
|
|
|
|
|
+ using var db = TestDb.Create();
|
|
|
|
|
+ var memberID = await TestDb.CreateMemberAsync(db);
|
|
|
|
|
+
|
|
|
|
|
+ var consumable = await SeedMemberItemAsync(db, memberID, ItemKind.ChatBanLift);
|
|
|
|
|
+ await SeedMemberItemAsync(db, memberID, ItemKind.Badge, durationDays: 30);
|
|
|
|
|
+ await SeedMemberItemAsync(db, memberID, ItemKind.NicknameEffect);
|
|
|
|
|
+
|
|
|
|
|
+ var handler = new ListHandler(db);
|
|
|
|
|
+
|
|
|
|
|
+ var all = await handler.Handle(new ListQuery(memberID), default);
|
|
|
|
|
+ Assert.AreEqual(3, all.Total, "기본(전체) 조회는 소모품+지위 3건");
|
|
|
|
|
+
|
|
|
|
|
+ var consumableOnly = await handler.Handle(new ListQuery(memberID, ConsumableOnly: true), default);
|
|
|
|
|
+ Assert.AreEqual(1, consumableOnly.Total, "ConsumableOnly 는 소모품(ChatBanLift) 1건만");
|
|
|
|
|
+ Assert.AreEqual(consumable.ID, consumableOnly.List[0].ID);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// ── 도메인: 지위 아이템 (Badge/NicknameEffect/CommentEffect) ────
|
|
// ── 도메인: 지위 아이템 (Badge/NicknameEffect/CommentEffect) ────
|
|
|
|
|
|
|
|
[TestMethod]
|
|
[TestMethod]
|