89 lines
2.9 KiB
TypeScript
89 lines
2.9 KiB
TypeScript
import { describe, it, expect, vi } from 'vitest';
|
|
import { migration_1_2_0 } from '../../src/migrations/1.2.0';
|
|
|
|
describe('migration 1.2.0', () => {
|
|
it('sets zealRegenBonus flag on character actors that lack it', async () => {
|
|
const setFlag = vi.fn(async () => undefined);
|
|
const character = {
|
|
type: 'character',
|
|
items: [],
|
|
effects: [],
|
|
getFlag: () => undefined,
|
|
setFlag,
|
|
update: vi.fn(async () => undefined),
|
|
};
|
|
(globalThis as any).game = {
|
|
...(globalThis as any).game,
|
|
user: { isGM: true },
|
|
actors: { contents: [character] },
|
|
items: { contents: [] },
|
|
};
|
|
await migration_1_2_0.run();
|
|
expect(setFlag).toHaveBeenCalledWith('hbm-rpg-v3', 'zealRegenBonus', 0);
|
|
});
|
|
|
|
it('attaches a zeal-regen ActiveEffect to a +1 Zapał talent', async () => {
|
|
const createEmbeddedDocuments = vi.fn(async () => undefined);
|
|
const talent = {
|
|
type: 'talent',
|
|
system: { description: 'Na początku tury otrzymujesz +1 Zapał.' },
|
|
effects: [],
|
|
createEmbeddedDocuments,
|
|
};
|
|
(globalThis as any).game = {
|
|
...(globalThis as any).game,
|
|
user: { isGM: true },
|
|
actors: { contents: [] },
|
|
items: { contents: [talent] },
|
|
};
|
|
await migration_1_2_0.run();
|
|
expect(createEmbeddedDocuments).toHaveBeenCalledTimes(1);
|
|
const [type, [doc]] = createEmbeddedDocuments.mock.calls[0];
|
|
expect(type).toBe('ActiveEffect');
|
|
expect(doc.transfer).toBe(true);
|
|
expect(doc.changes[0].key).toBe('flags.hbm-rpg-v3.zealRegenBonus');
|
|
expect(doc.changes[0].value).toBe('1');
|
|
});
|
|
|
|
it('does not attach AE if talent already has one targeting the flag', async () => {
|
|
const createEmbeddedDocuments = vi.fn(async () => undefined);
|
|
const talent = {
|
|
type: 'talent',
|
|
system: { description: 'regeneracja Zapału' },
|
|
effects: [{ changes: [{ key: 'flags.hbm-rpg-v3.zealRegenBonus' }] }],
|
|
createEmbeddedDocuments,
|
|
};
|
|
(globalThis as any).game = {
|
|
...(globalThis as any).game,
|
|
user: { isGM: true },
|
|
actors: { contents: [] },
|
|
items: { contents: [talent] },
|
|
};
|
|
await migration_1_2_0.run();
|
|
expect(createEmbeddedDocuments).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('backfills NPC mana/zeal/blood attributes when missing', async () => {
|
|
const update = vi.fn(async () => undefined);
|
|
const npc = {
|
|
type: 'npc',
|
|
items: [],
|
|
effects: [],
|
|
system: { attributes: {} },
|
|
update,
|
|
};
|
|
(globalThis as any).game = {
|
|
...(globalThis as any).game,
|
|
user: { isGM: true },
|
|
actors: { contents: [npc] },
|
|
items: { contents: [] },
|
|
};
|
|
await migration_1_2_0.run();
|
|
expect(update).toHaveBeenCalledWith(expect.objectContaining({
|
|
'system.attributes.mana': expect.any(Object),
|
|
'system.attributes.zeal': expect.any(Object),
|
|
'system.attributes.blood': expect.any(Object),
|
|
}));
|
|
});
|
|
});
|