Adv 2.0 Phase L2 step 6: arena render reads → DnDCharacter

renderArenaStreakEntry now takes *DnDCharacter and reads c.Level
instead of AdventureCharacter.CombatLevel. renderArenaStatus drops
its unused *AdventureCharacter arg. Callers in handleArenaMenu /
handleArenaStatus updated; menu path uses ensureCharForDnDCmd to
fetch (or auto-migrate) the sheet. Tests switched accordingly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-05-09 08:20:59 -07:00
parent 341b1fc8e5
commit 8afd9494fe
4 changed files with 21 additions and 21 deletions

View File

@@ -274,7 +274,7 @@ func TestArenaDeathChance_Components(t *testing.T) {
// ── Render Tests ────────────────────────────────────────────────────────────
func TestRenderArenaStreakEntry(t *testing.T) {
char := &AdventureCharacter{CombatLevel: 30}
char := &DnDCharacter{Level: 30}
tier := arenaGetTier(1)
monster := arenaGetMonster(1, 1)
@@ -576,7 +576,7 @@ func TestArenaGearDropRates_Decreasing(t *testing.T) {
// ── Render Tests (New/Updated) ─────────────────────────────────────────────
func TestRenderArenaStreakEntry_ShowsMultipliers(t *testing.T) {
char := &AdventureCharacter{CombatLevel: 50}
char := &DnDCharacter{Level: 50}
tier := arenaGetTier(1)
monster := arenaGetMonster(1, 1)
@@ -604,7 +604,7 @@ func TestRenderArenaStreakEntry_ShowsMultipliers(t *testing.T) {
func TestRenderArenaStreakEntry_HighLevel_AllEligible(t *testing.T) {
// T5 requires level 70, so use level 70+ to unlock everything
char := &AdventureCharacter{CombatLevel: 70}
char := &DnDCharacter{Level: 70}
tier := arenaGetTier(1)
monster := arenaGetMonster(1, 1)
@@ -641,9 +641,8 @@ func TestRenderArenaRoundStart_ZeroEarnings(t *testing.T) {
func TestRenderArenaStatus_Active(t *testing.T) {
run := &ArenaRun{Tier: 2, Round: 3, Status: "active", Earnings: 8000, TierEarnings: 1500, RoundsSurvived: 6}
char := &AdventureCharacter{CombatLevel: 20}
text := renderArenaStatus(run, char)
text := renderArenaStatus(run)
if !strings.Contains(text, "Streak") {
t.Error("status should say Arena Streak")
}
@@ -660,9 +659,8 @@ func TestRenderArenaStatus_Active(t *testing.T) {
func TestRenderArenaStatus_Awaiting(t *testing.T) {
run := &ArenaRun{Tier: 3, Status: "awaiting", Earnings: 20000, TierEarnings: 0, RoundsSurvived: 12}
char := &AdventureCharacter{CombatLevel: 30}
text := renderArenaStatus(run, char)
text := renderArenaStatus(run)
if !strings.Contains(text, "advancing shortly") {
t.Error("awaiting status should mention advancing")
}
@@ -793,9 +791,8 @@ func TestRenderArenaLevelGate(t *testing.T) {
func TestRenderArenaStatus(t *testing.T) {
run := &ArenaRun{Tier: 3, Round: 2, Status: "active", Earnings: 5000, RoundsSurvived: 5}
char := &AdventureCharacter{CombatLevel: 30}
text := renderArenaStatus(run, char)
text := renderArenaStatus(run)
if !strings.Contains(text, "Tier: 3") {
t.Error("status should show tier")
}
@@ -1054,7 +1051,7 @@ func TestArenaStreakEuroMultiplier_Exact(t *testing.T) {
// ── Streak Entry Shows Brim & Battle Sponsorship ──────────────────────────
func TestArenaStreakEntry_Sponsorship(t *testing.T) {
char := &AdventureCharacter{CombatLevel: 1}
char := &DnDCharacter{Level: 1}
tier := arenaGetTier(1)
monster := arenaGetMonster(1, 1)