diff --git a/frontend/src/second-edition/components/LevelUps.test.tsx b/frontend/src/second-edition/components/LevelUps.test.tsx index 10fd337..ec0a592 100644 --- a/frontend/src/second-edition/components/LevelUps.test.tsx +++ b/frontend/src/second-edition/components/LevelUps.test.tsx @@ -66,4 +66,92 @@ describe("LevelUps Harcos specialization indexing", () => { expect(stateAfter.szintlepesek[0]?.harcosFegyver).toBeUndefined(); expect(stateAfter.szintlepesek[1]?.harcosFegyver).toBe(nextSpec); }); + + it("does not render tulajdonsag selector at level 4 when all abilities are maxed", () => { + const maxedCharacter: Karakter2E = { + ...DefaultKarakter, + szint: 1, + tulajdonsagok: { + t_ero: 18, + t_ugy: 18, + t_egs: 18, + t_int: 18, + t_bol: 18, + t_kar: 18, + }, + szintlepesek: [{ + osztaly: Osztaly2E.Pap, + HProll: 8, + }], + tolvajKepzettsegek: [], + varazslatok: [], + }; + + const level2 = applyLevelUp(maxedCharacter); + const level3 = applyLevelUp(level2); + const level4 = applyLevelUp(level3); + + expect(level4.szintlepesek[3]?.tulajdonsagNoveles).toBeUndefined(); + + const store = configureStore({ + reducer: { + user: userReducer, + character2E: characterReducer, + }, + }); + store.dispatch(setCharacter(level4)); + + const sut = render( + + store.dispatch(setCharacter(updated))} + /> + + ); + + expect(sut.queryByTestId("tulajdonsag-4")).toBeNull(); + }); + + it("does not render kaloz krit selector when tengeresz milestone exists but krit is missing", () => { + const inconsistentTengeresz: Karakter2E = { + ...DefaultKarakter, + szint: 3, + szintlepesek: [ + { + osztaly: Osztaly2E.Tengeresz, + HProll: 10, + }, + { + osztaly: Osztaly2E.Tengeresz, + HProll: 5, + }, + { + osztaly: Osztaly2E.Tengeresz, + HProll: 7, + } + ], + tolvajKepzettsegek: [], + varazslatok: [], + }; + + const store = configureStore({ + reducer: { + user: userReducer, + character2E: characterReducer, + }, + }); + store.dispatch(setCharacter(inconsistentTengeresz)); + + const sut = render( + + store.dispatch(setCharacter(updated))} + /> + + ); + + expect(sut.queryByTestId("kaloz-krit-3")).toBeNull(); + }); }); diff --git a/frontend/src/second-edition/components/LevelUps.tsx b/frontend/src/second-edition/components/LevelUps.tsx index 16c0138..771ded8 100644 --- a/frontend/src/second-edition/components/LevelUps.tsx +++ b/frontend/src/second-edition/components/LevelUps.tsx @@ -41,6 +41,8 @@ function LevelUp(props: { const kalozSzint = classLevels[Osztaly2E.Tengeresz] const tolvajSzint = classLevels[Osztaly2E.Tolvaj] const szintlepes = karakter.szintlepesek[szint-1]; + const tulajdonsagNoveles = szintlepes?.tulajdonsagNoveles; + const kalozKritikus = szintlepes?.kalozKritikus; return
@@ -54,10 +56,10 @@ function LevelUp(props: { osztalySzint={classLevels[osztaly]} dataTestId={`osztaly-${szint}`} />} - {szint % 4 === 0 && + {szint % 4 === 0 && tulajdonsagNoveles != null && } @@ -73,9 +75,9 @@ function LevelUp(props: { karakterSzint={szint} /> } - {osztaly === Osztaly2E.Tengeresz && kalozSzint % 3 === 0 && + {osztaly === Osztaly2E.Tengeresz && kalozSzint % 3 === 0 && kalozKritikus != null && x.kalozKritikus)} changeKrit={changeKalozKritikus} szint={kalozSzint} @@ -101,16 +103,19 @@ export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs: const {karakter, changeKarakter} = props; const tulajdonsagokAtSzint = (szint: number) => TulajdonsagokTotal({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint)}) + const szintlepesAt = (szint: number) => karakter.szintlepesek[szint-1]! const changeRolledHPAtSzint = (szint: number) => (newHProll: number) => { - changeKarakter({...karakter, szintlepesek: arraySetN(karakter.szintlepesek, szint-1, {...karakter.szintlepesek[szint-1], HProll: newHProll})}) + const szintlepes = szintlepesAt(szint) + changeKarakter({...karakter, szintlepesek: arraySetN(karakter.szintlepesek, szint-1, {...szintlepes, HProll: newHProll})}) console.log(karakter) } const changeTulajdonsagNovelesAtSzint = (szint: number) => { return (t: Tulajdonsag2E) => { + const szintlepes = szintlepesAt(szint) changeKarakter({...karakter, szintlepesek: arraySetN(karakter.szintlepesek, szint-1, { - ...karakter.szintlepesek[szint-1], + ...szintlepes, tulajdonsagNoveles: t }) }) @@ -119,10 +124,11 @@ export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs: const changeKalozKritikusAtSzint = (szint: number) => { return (krit: string) => { + const szintlepes = szintlepesAt(szint) changeKarakter({ ...karakter, szintlepesek: arraySetN(karakter.szintlepesek, szint-1, { - ...karakter.szintlepesek[szint-1], + ...szintlepes, kalozKritikus: krit }) }) @@ -131,10 +137,11 @@ export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs: const changeExtraTolvajKepzettseg = (szint: number) => { return (k: KepzettsegId) => { + const szintlepes = szintlepesAt(szint) changeKarakter({ ...karakter, szintlepesek: arraySetN(karakter.szintlepesek, szint-1, { - ...karakter.szintlepesek[szint-1], + ...szintlepes, tolvajExtraKepzettseg: k, }) }) @@ -145,10 +152,13 @@ export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs: return <> {levels.slice(1).map(szint => + { + const szintlepes = szintlepesAt(szint) + return ( changeKarakter(ChangeOsztalyAtSzint(karakter, o, szint))} changeExtraTolvajKepzettseg={changeExtraTolvajKepzettseg(szint)} /> + ) + } )} }