test for kepzettsegek and allowed fegyverek and pancel

This commit is contained in:
2024-03-21 23:58:16 +01:00
parent 4b3e6052df
commit 7c1f8dc04d
4 changed files with 256 additions and 5 deletions
@@ -0,0 +1,73 @@
import {AllowedFegyver} from "./allowed-fegyver";
import {Osztaly} from "./osztaly";
describe('Allowed Fegyver calculations', () => {
describe('varazslo fegyverek', () => {
test.each([
[Osztaly.Varazslo],
[Osztaly.Illuzionista]])('%s fegyverek should be fixed', (osztaly: Osztaly) => {
const expected = new Set([
'bot',
'bunko',
'dobotu',
'tor',
'okol',
'parittya',
]);
const actual = AllowedFegyver(osztaly, []);
const actualSet = new Set(actual.map(f => f.Id));
expect(actualSet.size).toEqual(expected.size)
for (const expectedKey in expected) {
expect(actualSet).toContain(expectedKey)
}
for (const actualKey in actualSet) {
expect(expected).toContain(actualKey)
}
})
})
describe('Tolvaj fegyverek', () => {
it('should be fixed', () => {
const expected = new Set([
'rovid_ij',
'konnyu_szamszerij',
'nehez_szamszerij',
'dobotu',
'tor',
'okol',
'parittya',
'szablya',
'hosszu_kard',
'rovid_kard'
]);
const actual = AllowedFegyver(Osztaly.Tolvaj, []);
const actualSet = new Set(actual.map(f => f.Id));
expect(actualSet.size).toEqual(expected.size)
for (const expectedKey in expected) {
expect(actualSet).toContain(expectedKey)
}
for (const actualKey in actualSet) {
expect(expected).toContain(actualKey)
}
})
})
describe('Harcos fegyverek', () => {
it('Ijasz can use visszacsapo_ij', () => {
const actual = AllowedFegyver(Osztaly.Ijasz, []);
const actualSet = new Set(actual.map(f => f.Id));
expect(actualSet).toContain('visszacsapo_ij')
})
test.each([
[['visszacsapo_ij']],
[['fattyu_kard', 'torpe_fejsze']],
])('Harcos can use %s specializations', (specializations) => {
const actual = AllowedFegyver(Osztaly.Harcos, specializations);
const actualSet = new Set(actual.map(f => f.Id));
for (const specialization of specializations) {
expect(actualSet).toContain(specialization)
}
})
})
})
@@ -0,0 +1,24 @@
import {Osztaly} from "./osztaly";
import {AllowedPancelTypes} from "./allowed-pancel-types";
describe('Allowed Pancel types', () => {
test.each([
[[Osztaly.Amazon], ['konnyu']],
[[Osztaly.Amazon, Osztaly.Barbar], ['konnyu', 'kozepes', 'nehez']],
[[Osztaly.Illuzionista], []],
[[Osztaly.Varazslo], []],
[[Osztaly.Tolvaj], ['konnyu']],
[[Osztaly.Ijasz], ['konnyu', 'kozepes']],
[[Osztaly.Kaloz], ['konnyu', 'kozepes']],
])('%s allows %s pancel types', (osztalyok: Osztaly[], expected: string[]) => {
const actual = AllowedPancelTypes(osztalyok)
expect(actual.length).toEqual(expected.length)
for (const expectedElement of expected) {
expect(actual).toContain(expectedElement)
}
for (const actualElement of actual) {
expect(expected).toContain(actualElement)
}
})
})
@@ -0,0 +1,154 @@
import {KarakterDefaults} from "./karakter";
import {Osztaly} from "./osztaly";
import {
AvailableKezpettsegList, GetKepzettsegListaN,
GetNumberOfKepzettsegek,
SetDefaultTolvajKepzettsegek
} from "./kepzettsegek";
import {Faj} from "./faj";
describe('AvailableKezpettsegList', ()=> {
const commonKepzettsegek = ['k_allatidomitas', 'k_eloadas', 'k_ertekbecsles', 'k_gyogyitas', 'k_hajozas',
'k_hallgatozas', 'k_lovaglas', 'k_maszas', 'k_megfigyeles', 'k_mesterseg', 'k_nyomkereses', 'k_osonas', 'k_rejtozes',
'k_tudas', 'k_ugras', 'k_uszas']
test.each([
[Osztaly.Amazon, commonKepzettsegek],
[Osztaly.Ijasz, commonKepzettsegek],
[Osztaly.Harcos, commonKepzettsegek],
[Osztaly.Kaloz, commonKepzettsegek],
[Osztaly.Barbar, commonKepzettsegek],
[Osztaly.Tolvaj, ['k_alcazas', 'k_csapdak', 'k_egyensulyozas', 'k_hamisitas', 'k_jelek_olvasasa', 'k_meregkeveres', 'k_szabadulomuveszet', 'k_zarnyitas', 'k_zsebmetszes', ...commonKepzettsegek]],
[Osztaly.Pap, ['k_varazslatismeret', 'k_koncentracio', 'k_csillagjoslas', 'k_alkimia', 'k_jelek_olvasasa', ...commonKepzettsegek]],
[Osztaly.Varazslo, ['k_varazslatismeret', 'k_koncentracio', 'k_csillagjoslas', 'k_alkimia', 'k_jelek_olvasasa', ...commonKepzettsegek]],
[Osztaly.Illuzionista, ['k_varazslatismeret', 'k_koncentracio', 'k_csillagjoslas', 'k_alkimia', 'k_jelek_olvasasa', ...commonKepzettsegek]],
])('%s has %s', (osztaly: Osztaly, expected: string[]) => {
const availableKezpettsegList = AvailableKezpettsegList(osztaly).map(x => x.Id)
expect(availableKezpettsegList).toHaveLength(expected.length)
for (const kepzettseg of expected) {
expect(availableKezpettsegList).toContain(kepzettseg)
}
for (const kepzettseg of availableKezpettsegList) {
expect(expected).toContain(kepzettseg)
}
})
})
describe('GetNumberOfKepzettsegek', () => {
test.each([
[Faj.Birodalmi, 10, 3],
[Faj.Ember, 10, 4],
[Faj.Elf, 18, 6],
[Faj.Torpe, 3, 1],
])('%s with %i INT has %i kepzettseg', (faj: Faj, int: number, expected: number) => {
const actual = GetNumberOfKepzettsegek(int, faj, 16)
expect(actual).toEqual(expected)
})
})
describe('SetDefaultTolvajKepzettsegek', ()=> {
describe('when karakter is not a Tolvaj', () => {
it('sets tolvaj kepzettsegek to empty', () => {
// arrange
const karakter = {...KarakterDefaults}
karakter.osztaly = Osztaly.Barbar
karakter.tolvajKepzettsegek = ['k_alkimia']
const invocations = [] as (string[] | undefined)[]
const changeTolvajkepzettsegek = (ids?: string[]) => {
invocations.push(ids)
}
// act
SetDefaultTolvajKepzettsegek(karakter, changeTolvajkepzettsegek)
// assert
expect(invocations).toHaveLength(1)
expect(invocations[0]).toBeUndefined()
})
})
describe('when karakter is a Tolvaj', () => {
describe('and tolvaj kepzettsegek is empty', () => {
it('sets 4 tolvaj kepzettsegek', () => {
// arrange
const karakter = {...KarakterDefaults}
karakter.osztaly = Osztaly.Tolvaj
const invocations = [] as (string[] | undefined)[]
const changeTolvajkepzettsegek = (ids?: string[]) => {
invocations.push(ids)
}
// act
SetDefaultTolvajKepzettsegek(karakter, changeTolvajkepzettsegek)
// assert
expect(invocations).toHaveLength(1)
expect(invocations[0]).toHaveLength(4)
})
})
describe('and tolvaj kepzettsegek is already set', () => {
it('doesnt change anything', () => {
// arrange
const karakter = {...KarakterDefaults}
karakter.osztaly = Osztaly.Tolvaj
karakter.tolvajKepzettsegek = ['k_alkimia', 'k_hamisitas', 'k_meregkeveres', 'k_zsebmetszes']
const invocations = [] as (string[] | undefined)[]
const changeTolvajkepzettsegek = (ids?: string[]) => {
invocations.push(ids)
}
// act
SetDefaultTolvajKepzettsegek(karakter, changeTolvajkepzettsegek)
// assert
expect(invocations).toHaveLength(0)
})
})
})
})
describe('GetKepzettsegListaN', () => {
it("contains the Nth kepzettseg", () => {
const karakter = {...KarakterDefaults}
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
const sut = GetKepzettsegListaN(karakter)
for (let i = 0; i < karakter.kepzettsegek.length; i++) {
const actual = sut(i).map(x => x.Id)
expect(actual).toContain(karakter.kepzettsegek[i])
}
})
it('returns Hajozas as 1st for Eszaki', ()=> {
const karakter = {...KarakterDefaults}
karakter.faj = Faj.Eszaki
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
const actual = GetKepzettsegListaN(karakter)(0).map(x => x.Id)
expect(actual).toHaveLength(1)
expect(actual[0]).toEqual('k_hajozas')
})
it('returns Lovaglas as 1st for Etuniai', ()=> {
const karakter = {...KarakterDefaults}
karakter.faj = Faj.Etuniai
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
const actual = GetKepzettsegListaN(karakter)(0).map(x => x.Id)
expect(actual).toHaveLength(1)
expect(actual[0]).toEqual('k_lovaglas')
})
it('returns Meregkeveres and Alkimia as 1st for Birodalmi', ()=> {
const karakter = {...KarakterDefaults}
karakter.faj = Faj.Birodalmi
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
const actual = GetKepzettsegListaN(karakter)(0).map(x => x.Id)
expect(actual).toHaveLength(2)
expect(actual).toContain('k_meregkeveres')
expect(actual).toContain('k_alkimia')
})
it("doesn't contains other selected kepzettsegek", () => {
const karakter = {...KarakterDefaults}
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
const sut = GetKepzettsegListaN(karakter)
for (let i = 0; i < karakter.kepzettsegek.length; i++) {
const actual = sut(i).map(x => x.Id)
for (let j = 0; j < karakter.kepzettsegek.length; j++) {
if (i === j) {
continue;
}
expect(actual.indexOf(karakter.kepzettsegek[j])).toEqual(-1)
}
}
})
})
@@ -19,7 +19,7 @@ export const KepzettsegLista: Kepzettseg[] = [
Name: 'Alkímia',
Description: 'Különféle különleges anyagok, pl. savak, görögtűz, stb. kikeverésére szolgál. Használatához gyakran jól felszerelt laboratórium szükséges. Az Alkímia képzettséggel a karakter képes beazonosítani a különféle vegyi anyagokat és mérgeket, bizonyos esetekben varázsitalokat is.',
Tulajdonsag: [Tulajdonsag.Intelligencia],
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista],
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
},
{
Id: 'k_alcazas',
@@ -46,7 +46,7 @@ export const KepzettsegLista: Kepzettseg[] = [
Name: 'Csillagjóslás',
Description: 'A karakter a képzettséggel egyrészt képes meghatározni a karakterek hozzávetőleges pozícióját a térképen, másrészt egyszerűbb jóslatokat készíthet.',
Tulajdonsag: [Tulajdonsag.Bolcsesseg],
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista],
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
},
{
Id: 'k_egyensulyozas',
@@ -97,14 +97,14 @@ export const KepzettsegLista: Kepzettseg[] = [
Name: 'Jelek Olvasása',
Description: 'A képzettséggel a karakter el tud olvasni más nyelven írt írásokat és feliratokat.',
Tulajdonsag: [Tulajdonsag.Intelligencia],
Osztalyok: [Osztaly.Tolvaj, Osztaly.Varazslo, Osztaly.Illuzionista],
Osztalyok: [Osztaly.Tolvaj, Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
},
{
Id: 'k_koncentracio',
Name: 'Koncentráció',
Description: 'Ez a képesség arra teszi alkalmassá a varázshasználót, hogy nehéz körülmények között sebesülten, vágtató lovon, hánykolódó hajón, stb. is alkalmazhassa varázslatait.',
Tulajdonsag: [Tulajdonsag.Bolcsesseg],
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista],
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
},
{
Id: 'k_lovaglas',
@@ -185,7 +185,7 @@ export const KepzettsegLista: Kepzettseg[] = [
Name: 'Varázslatismeret',
Description: 'A Mágiaismerettel ellentétben ez a képzettség nem a mágia elméletében, hanem a konkrét varázslatokban való ismereteket méri. Sikeres próbával a karakter azonosíthatja az elmondás alatt álló varázslatokat (NF= a mentődobás nehézsége), bizonyos mágikus effektusokat, csapdákat, stb.',
Tulajdonsag: [Tulajdonsag.Intelligencia],
Osztalyok: [Osztaly.Illuzionista, Osztaly.Varazslo],
Osztalyok: [Osztaly.Illuzionista, Osztaly.Varazslo, Osztaly.Pap],
},
{
Id: 'k_zarnyitas',