@plokkke/sw-rune
Version:
Library defining all utils for summoners war rune handling
192 lines (191 loc) • 7.07 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../src/index");
describe('Rune', () => {
describe('generate', () => {
it('should generate a rune', () => {
const mock = jest.spyOn(Math, 'random').mockReturnValue(0.337);
const expected = {
isAncient: false,
grade: 6,
slot: 3,
quality: 'HERO',
set: 'GUARD',
level: 0,
mainStat: { effect: 'DEFENSE_FLAT', value: 22 },
innateStat: { effect: 'DEFENSE_PERCENTAGE', value: 6 },
subStats: [
{ effect: 'SPEED', value: 5 },
{ effect: 'CRITICAL_RATE', value: 5 },
{ effect: 'HEALTH_PERCENTAGE', value: 6 },
],
};
expect((0, index_1.generate)()).toEqual(expected);
expect(mock).toHaveBeenCalledTimes(15);
});
it('should generate rune without innate', () => {
const mock = jest.spyOn(Math, 'random').mockReturnValue(0.337);
const expected = {
isAncient: false,
slot: 3,
set: 'GUARD',
grade: 6,
quality: 'HERO',
level: 0,
mainStat: { effect: 'DEFENSE_FLAT', value: 22 },
innateStat: null,
subStats: [
{ effect: 'DEFENSE_PERCENTAGE', value: 6 },
{ effect: 'SPEED', value: 5 },
{ effect: 'CRITICAL_RATE', value: 5 },
],
};
expect((0, index_1.generate)({
innateEffect: false,
})).toEqual(expected);
expect(mock).toHaveBeenCalledTimes(12);
});
it('should generate rune with innate', () => {
const mock = jest.spyOn(Math, 'random').mockReturnValue(0.999);
const expected = {
isAncient: false,
slot: 6,
set: 'INTANGIBLE',
grade: 6,
quality: 'LEGEND',
level: 0,
mainStat: { effect: 'RESISTANCE', value: 12 },
innateStat: { effect: 'CRITICAL_RATE', value: 6 },
subStats: [
{ effect: 'ACCURACY', value: 8 },
{ effect: 'CRITICAL_DAMAGE', value: 7 },
{ effect: 'SPEED', value: 6 },
{ effect: 'DEFENSE_PERCENTAGE', value: 8 },
],
};
expect((0, index_1.generate)({
innateEffect: 'CRITICAL_RATE',
})).toEqual(expected);
expect(mock).toHaveBeenCalledTimes(15);
});
it('should prevent invalid generation', () => {
expect(() => (0, index_1.generate)({
slot: 1,
mainEffect: 'ATTACK_PERCENTAGE',
})).toThrowError();
});
it('should prevent invalid generation', () => {
expect(() => (0, index_1.generate)({
slot: 1,
mainEffect: 'ATTACK_FLAT',
innateEffect: 'ATTACK_FLAT',
})).toThrowError();
});
it('should prevent invalid generation', () => {
expect(() => (0, index_1.generate)({
slot: 3,
innateEffect: 'ATTACK_FLAT',
})).toThrowError();
});
});
describe('upgrade', () => {
it('should upgrade a rune', () => {
const rune = (0, index_1.generate)();
(0, index_1.upgrade)(rune);
expect(rune.level).toBe(3);
(0, index_1.upgrade)(rune);
expect(rune.level).toBe(6);
(0, index_1.upgrade)(rune);
expect(rune.level).toBe(9);
(0, index_1.upgrade)(rune);
expect(rune.level).toBe(12);
(0, index_1.upgrade)(rune);
expect(rune.level).toBe(15);
(0, index_1.upgrade)(rune);
expect(rune.level).toBe(15);
});
it('should upgrade a rune', () => {
const rune = (0, index_1.generate)({ quality: 'RARE' });
(0, index_1.upgrade)(rune);
expect(rune.subStats.length).toBe(2);
(0, index_1.upgrade)(rune);
expect(rune.subStats.length).toBe(2);
(0, index_1.upgrade)(rune);
expect(rune.subStats.length).toBe(3);
(0, index_1.upgrade)(rune);
expect(rune.subStats.length).toBe(4);
});
});
describe('runeFromSW', () => {
it('should convert a rune from SW', () => {
const swRune = {
class: 6,
extra: 4,
occupied_id: 0,
prefix_eff: [12, 6],
pri_eff: [4, 11],
sec_eff: [
[3, 13],
[1, 284],
[2, 6],
],
set_id: 6,
slot_no: 2,
upgrade_curr: 0,
};
const expected = {
isAncient: false,
isEquipped: false,
slot: 2,
set: 'FOCUS',
grade: 6,
quality: 'HERO',
level: 0,
mainStat: { effect: 'ATTACK_PERCENTAGE', value: 11 },
innateStat: { effect: 'ACCURACY', value: 6 },
subStats: [
{ effect: 'ATTACK_FLAT', value: 13 },
{ effect: 'HEALTH_FLAT', value: 284 },
{ effect: 'HEALTH_PERCENTAGE', value: 6 },
],
};
const actual = (0, index_1.runeFromSW)(swRune);
expect(actual).toStrictEqual(expected);
});
it('should convert a rune from SW', () => {
const swRune = {
class: 5,
extra: 14,
occupied_id: 18,
prefix_eff: [0, 0],
pri_eff: [8, 11],
sec_eff: [
[3, 13],
[1, 284],
[2, 6],
],
set_id: 25,
slot_no: 2,
upgrade_curr: 8,
};
const expected = {
isAncient: true,
isEquipped: true,
slot: 2,
set: 'INTANGIBLE',
grade: 5,
quality: 'HERO',
level: 8,
mainStat: { effect: 'SPEED', value: 11 },
innateStat: null,
subStats: [
{ effect: 'ATTACK_FLAT', value: 13 },
{ effect: 'HEALTH_FLAT', value: 284 },
{ effect: 'HEALTH_PERCENTAGE', value: 6 },
],
};
const actual = (0, index_1.runeFromSW)(swRune);
expect(actual).toStrictEqual(expected);
});
});
});