diff --git a/frontend/src/second-edition/components/Kepzettsegek2E.test.tsx b/frontend/src/second-edition/components/Kepzettsegek2E.test.tsx
new file mode 100644
index 0000000..3535bcb
--- /dev/null
+++ b/frontend/src/second-edition/components/Kepzettsegek2E.test.tsx
@@ -0,0 +1,126 @@
+import React from "react";
+import {render} from "@testing-library/react";
+import {configureStore} from "@reduxjs/toolkit";
+import {Provider} from "react-redux";
+import KarakterKepzettsegek from "./Kepzettsegek2E";
+import userReducer from "../../shared/domain-models/userSlice";
+import characterReducer, {setCharacter} from "../domain-models/characterSlice";
+import {DefaultKarakter, Karakter2E} from "../domain-models/karakter2E";
+import {Osztaly2E} from "../domain-models/osztaly2E";
+import {Tulajdonsag2E} from "../domain-models/tulajdonsag2E";
+
+function createStore() {
+ return configureStore({
+ reducer: {
+ user: userReducer,
+ character2E: characterReducer,
+ },
+ });
+}
+
+describe("KarakterKepzettsegek", () => {
+ it("shows one more kepzettseg selector when INT modifier increases from level-up", () => {
+ const karakter: Karakter2E = {
+ ...DefaultKarakter,
+ szint: 4,
+ tulajdonsagok: {
+ ...DefaultKarakter.tulajdonsagok,
+ t_int: 17,
+ },
+ szintlepesek: [
+ { osztaly: Osztaly2E.Harcos, HProll: 10 },
+ { osztaly: Osztaly2E.Harcos, HProll: 7 },
+ { osztaly: Osztaly2E.Harcos, HProll: 6 },
+ { osztaly: Osztaly2E.Harcos, HProll: 8, tulajdonsagNoveles: Tulajdonsag2E.Intelligencia },
+ ],
+ tolvajKepzettsegek: [],
+ varazslatok: [],
+ };
+
+ const store = createStore();
+ store.dispatch(setCharacter(karakter));
+
+ const sut = render(
+
+
+
+ );
+
+ const selectors = sut.container.querySelectorAll('[data-testid^="kepzettseg-"]');
+ expect(selectors).toHaveLength(7);
+ });
+
+ it("shows one more kepzettseg selector when INT modifier increases at level 8", () => {
+ const karakter: Karakter2E = {
+ ...DefaultKarakter,
+ szint: 8,
+ tulajdonsagok: {
+ ...DefaultKarakter.tulajdonsagok,
+ t_int: 14,
+ },
+ szintlepesek: [
+ { osztaly: Osztaly2E.Harcos, HProll: 10 },
+ { osztaly: Osztaly2E.Harcos, HProll: 7 },
+ { osztaly: Osztaly2E.Harcos, HProll: 6 },
+ { osztaly: Osztaly2E.Harcos, HProll: 8, tulajdonsagNoveles: Tulajdonsag2E.Ero },
+ { osztaly: Osztaly2E.Harcos, HProll: 4 },
+ { osztaly: Osztaly2E.Harcos, HProll: 9 },
+ { osztaly: Osztaly2E.Harcos, HProll: 5 },
+ { osztaly: Osztaly2E.Harcos, HProll: 6, tulajdonsagNoveles: Tulajdonsag2E.Intelligencia },
+ ],
+ tolvajKepzettsegek: [],
+ varazslatok: [],
+ };
+
+ const store = createStore();
+ store.dispatch(setCharacter(karakter));
+
+ const sut = render(
+
+
+
+ );
+
+ const selectors = sut.container.querySelectorAll('[data-testid^="kepzettseg-"]');
+ expect(selectors).toHaveLength(6);
+ });
+
+ it("shows one more kepzettseg selector when INT modifier increases at level 12", () => {
+ const karakter: Karakter2E = {
+ ...DefaultKarakter,
+ szint: 12,
+ tulajdonsagok: {
+ ...DefaultKarakter.tulajdonsagok,
+ t_int: 17,
+ },
+ szintlepesek: [
+ { osztaly: Osztaly2E.Harcos, HProll: 10 },
+ { osztaly: Osztaly2E.Harcos, HProll: 7 },
+ { osztaly: Osztaly2E.Harcos, HProll: 6 },
+ { osztaly: Osztaly2E.Harcos, HProll: 8, tulajdonsagNoveles: Tulajdonsag2E.Ero },
+ { osztaly: Osztaly2E.Harcos, HProll: 4 },
+ { osztaly: Osztaly2E.Harcos, HProll: 9 },
+ { osztaly: Osztaly2E.Harcos, HProll: 5 },
+ { osztaly: Osztaly2E.Harcos, HProll: 6, tulajdonsagNoveles: Tulajdonsag2E.Egeszseg },
+ { osztaly: Osztaly2E.Harcos, HProll: 3 },
+ { osztaly: Osztaly2E.Harcos, HProll: 7 },
+ { osztaly: Osztaly2E.Harcos, HProll: 5 },
+ { osztaly: Osztaly2E.Harcos, HProll: 4, tulajdonsagNoveles: Tulajdonsag2E.Intelligencia },
+ ],
+ tolvajKepzettsegek: [],
+ varazslatok: [],
+ };
+
+ const store = createStore();
+ store.dispatch(setCharacter(karakter));
+
+ const sut = render(
+
+
+
+ );
+
+ const selectors = sut.container.querySelectorAll('[data-testid^="kepzettseg-"]');
+ expect(selectors).toHaveLength(7);
+ });
+});
diff --git a/frontend/src/second-edition/components/Kepzettsegek2E.tsx b/frontend/src/second-edition/components/Kepzettsegek2E.tsx
index 2dfea75..baf2f61 100644
--- a/frontend/src/second-edition/components/Kepzettsegek2E.tsx
+++ b/frontend/src/second-edition/components/Kepzettsegek2E.tsx
@@ -13,7 +13,7 @@ import {arraySetN} from "../../util";
import {useDispatch, useSelector} from "react-redux";
import {AppDispatch, RootState} from "../../store";
import {characterSelector, setKepzettsegek, setTolvajKepzettsegek} from "../domain-models/characterSlice";
-import {TulajdonsagokFajjal} from "../domain-models/faj2E";
+import {TulajdonsagokTotal} from "../domain-models/tulajdonsag2E";
function InternalKepzettsegekSelector(props: {
title: string,
@@ -70,8 +70,8 @@ function KarakterKepzettsegek () {
const karakter = useSelector.withTypes()(characterSelector);
const dispatch = useDispatch.withTypes()();
- const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
- const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj)
+ const tulajdonsagokTotal = TulajdonsagokTotal(karakter)
+ const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokTotal.t_int, karakter.faj)
const kepzettsegek = karakter.kepzettsegek
const fajError = karakter.kepzettsegFajError
const osztalyError = karakter.kepzettsegOsztalyError
diff --git a/frontend/src/second-edition/domain-models/kepzettsegek2E.ts b/frontend/src/second-edition/domain-models/kepzettsegek2E.ts
index 37a0e93..a718932 100644
--- a/frontend/src/second-edition/domain-models/kepzettsegek2E.ts
+++ b/frontend/src/second-edition/domain-models/kepzettsegek2E.ts
@@ -13,7 +13,8 @@ function availableKezpettsegListFajjal(faj: Faj2E, ...osztalyok: Osztaly2E[]): K
}
export function GetNumberOfKepzettsegek(t_int: number, faj: Faj2E, max: number = 11) {
- //max = 3 + 1 + 3 + 5 = 12 // 3 base, 1 human, 3 from max ability modifier, 4 from Thief +1 at 9th level
+ // Default cap is 11. Base calculation is 3 + 1 (human) + 3 (max ability modifier) = 7;
+ // thief-specific extra selections are handled elsewhere and are not part of this default max.
let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj2E.Ember ? 1 : 0)
if (numberOfKepzettseg < 1) {