diff --git a/apps/web/src/app/layout/top-bar/top-bar.component.html b/apps/web/src/app/layout/top-bar/top-bar.component.html index eb34269..b94ed41 100644 --- a/apps/web/src/app/layout/top-bar/top-bar.component.html +++ b/apps/web/src/app/layout/top-bar/top-bar.component.html @@ -4,7 +4,7 @@ @if (character(); as character) {
{{ character.name }} - Stufe {{ character.level }} + Renown {{ character.renown }}
{{ character.currentHp }} / {{ character.maxHp }} @@ -20,10 +20,6 @@
Silber
{{ character.silver }}
-
-
XP
-
{{ character.experience }}
-
} @else { Charakterdaten werden geladen diff --git a/apps/web/src/app/layout/top-bar/top-bar.component.spec.ts b/apps/web/src/app/layout/top-bar/top-bar.component.spec.ts new file mode 100644 index 0000000..a904e11 --- /dev/null +++ b/apps/web/src/app/layout/top-bar/top-bar.component.spec.ts @@ -0,0 +1,52 @@ +import { TestBed } from '@angular/core/testing'; +import type { CharacterResponse } from '../../core/api/game-api.models'; +import { TopBarComponent } from './top-bar.component'; + +function characterFixture(overrides: Partial = {}): CharacterResponse { + return { + id: 'character-1', + name: 'Aric Duskwalker', + renown: 3, + silver: 120, + currentHp: 80, + maxHp: 100, + attack: 10, + currentLocation: { id: 'location-1', key: 'aschenfelder', name: 'Aschenfelder' }, + ...overrides, + }; +} + +async function render(character: CharacterResponse | null): Promise { + await TestBed.configureTestingModule({ + imports: [TopBarComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TopBarComponent); + fixture.componentRef.setInput('character', character); + fixture.detectChanges(); + + return fixture.nativeElement as HTMLElement; +} + +describe('TopBarComponent', () => { + it('shows the character name, HP and silver', async () => { + const element = await render(characterFixture({ name: 'Aric Duskwalker', currentHp: 80, maxHp: 100, silver: 120 })); + + expect(element.textContent).toContain('Aric Duskwalker'); + expect(element.textContent).toContain('80 / 100'); + expect(element.querySelector('[data-top-bar-silver]')?.textContent).toContain('120'); + }); + + it('shows Renown instead of Level, and displays no XP value', async () => { + const element = await render(characterFixture({ renown: 3 })); + + expect(element.textContent).toContain('Renown 3'); + expect(element.querySelector('[data-top-bar-experience]')).toBeNull(); + }); + + it('shows a loading message when no character is available yet', async () => { + const element = await render(null); + + expect(element.textContent).toContain('Charakterdaten werden geladen'); + }); +});