mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
test for kepzettsegek and allowed fegyverek and pancel
This commit is contained in:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user