54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { CLASSES, CLASS_KEYS, getClass, getBaseStats } = require('../../src/game/classes');
|
|
|
|
test('CLASSES contains exactly 3 classes', () => {
|
|
assert.equal(CLASS_KEYS.length, 3);
|
|
assert.ok(CLASS_KEYS.includes('warrior'));
|
|
assert.ok(CLASS_KEYS.includes('mage'));
|
|
assert.ok(CLASS_KEYS.includes('ranger'));
|
|
});
|
|
|
|
test('getClass returns correct base stats for warrior', () => {
|
|
const stats = getBaseStats('warrior');
|
|
assert.equal(stats.str, 8);
|
|
assert.equal(stats.agi, 4);
|
|
assert.equal(stats.int, 2);
|
|
assert.equal(stats.vit, 8);
|
|
});
|
|
|
|
test('getClass returns correct base stats for mage', () => {
|
|
const stats = getBaseStats('mage');
|
|
assert.equal(stats.str, 2);
|
|
assert.equal(stats.agi, 4);
|
|
assert.equal(stats.int, 9);
|
|
assert.equal(stats.vit, 5);
|
|
});
|
|
|
|
test('getClass returns correct base stats for ranger', () => {
|
|
const stats = getBaseStats('ranger');
|
|
assert.equal(stats.str, 5);
|
|
assert.equal(stats.agi, 9);
|
|
assert.equal(stats.int, 3);
|
|
assert.equal(stats.vit, 5);
|
|
});
|
|
|
|
test('getClass throws for unknown class', () => {
|
|
assert.throws(() => getClass('paladin'), Error);
|
|
});
|
|
|
|
test('getClass returns the class object with name and primary', () => {
|
|
const warrior = getClass('warrior');
|
|
assert.equal(warrior.name, 'Warrior');
|
|
assert.equal(warrior.primary, 'str');
|
|
assert.ok(warrior.bonuses.defensePct);
|
|
|
|
const mage = getClass('mage');
|
|
assert.equal(mage.primary, 'int');
|
|
assert.ok(mage.bonuses.magicVsHighDef);
|
|
|
|
const ranger = getClass('ranger');
|
|
assert.equal(ranger.primary, 'agi');
|
|
assert.ok(ranger.bonuses.critChance);
|
|
});
|