slotify.js
Version:
A video slot game session framework for JavaScript
162 lines (156 loc) • 5.88 kB
text/typescript
import {ReelGameSessionConfig} from "./ReelGameSessionConfig";
import {IReelGameSessionConfig} from "./IReelGameSessionConfig";
describe("ReelGameSessionConfig", () => {
it("creates default config", () => {
const conf: ReelGameSessionConfig = new ReelGameSessionConfig();
expect(conf.wildItemId).toEqual("W");
expect(conf.wildsMultipliers).toEqual({1: 2, 2: 4, 3: 6, 4: 8});
expect(conf.scatters).toEqual([["S", 3]]);
expect(conf.reelsNumber).toEqual(5);
expect(conf.reelsItemsNumber).toEqual(3);
expect(conf.linesDirections).toEqual({
0: [0, 0, 0, 0, 0],
1: [1, 1, 1, 1, 1],
2: [2, 2, 2, 2, 2],
});
expect(conf.reelsItemsSequences.length).toEqual(conf.reelsNumber);
conf.reelsItemsSequences.forEach((seq: string[]) => {
conf.availableItems.forEach((item: string) => {
// Check if every of available items exists on each sequence
expect(seq.indexOf(item)).toBeGreaterThanOrEqual(0);
});
});
expect(conf.availableItems).toEqual([
"A",
"K",
"Q",
"J",
"10",
"9",
"W",
"S",
]);
expect(conf.paytable).toEqual({
1:
{
9: {3: 1, 4: 2, 5: 3},
10: {3: 1, 4: 2, 5: 3},
A: {3: 1, 4: 2, 5: 3},
K: {3: 1, 4: 2, 5: 3},
Q: {3: 1, 4: 2, 5: 3},
J: {3: 1, 4: 2, 5: 3},
S: {3: 1, 4: 2, 5: 3},
},
2:
{
9: {3: 2, 4: 4, 5: 6},
10: {3: 2, 4: 4, 5: 6},
A: {3: 2, 4: 4, 5: 6},
K: {3: 2, 4: 4, 5: 6},
Q: {3: 2, 4: 4, 5: 6},
J: {3: 2, 4: 4, 5: 6},
S: {3: 2, 4: 4, 5: 6},
},
3:
{
9: {3: 3, 4: 6, 5: 9},
10: {3: 3, 4: 6, 5: 9},
A: {3: 3, 4: 6, 5: 9},
K: {3: 3, 4: 6, 5: 9},
Q: {3: 3, 4: 6, 5: 9},
J: {3: 3, 4: 6, 5: 9},
S: {3: 3, 4: 6, 5: 9},
},
4:
{
9: {3: 4, 4: 8, 5: 12},
10: {3: 4, 4: 8, 5: 12},
A: {3: 4, 4: 8, 5: 12},
K: {3: 4, 4: 8, 5: 12},
Q: {3: 4, 4: 8, 5: 12},
J: {3: 4, 4: 8, 5: 12},
S: {3: 4, 4: 8, 5: 12},
},
5:
{
9: {3: 5, 4: 10, 5: 15},
10: {3: 5, 4: 10, 5: 15},
A: {3: 5, 4: 10, 5: 15},
K: {3: 5, 4: 10, 5: 15},
Q: {3: 5, 4: 10, 5: 15},
J: {3: 5, 4: 10, 5: 15},
S: {3: 5, 4: 10, 5: 15},
},
10:
{
9: {3: 10, 4: 20, 5: 30},
10: {3: 10, 4: 20, 5: 30},
A: {3: 10, 4: 20, 5: 30},
K: {3: 10, 4: 20, 5: 30},
Q: {3: 10, 4: 20, 5: 30},
J: {3: 10, 4: 20, 5: 30},
S: {3: 10, 4: 20, 5: 30},
},
20:
{
9: {3: 20, 4: 40, 5: 60},
10: {3: 20, 4: 40, 5: 60},
A: {3: 20, 4: 40, 5: 60},
K: {3: 20, 4: 40, 5: 60},
Q: {3: 20, 4: 40, 5: 60},
J: {3: 20, 4: 40, 5: 60},
S: {3: 20, 4: 40, 5: 60},
},
30:
{
9: {3: 30, 4: 60, 5: 90},
10: {3: 30, 4: 60, 5: 90},
A: {3: 30, 4: 60, 5: 90},
K: {3: 30, 4: 60, 5: 90},
Q: {3: 30, 4: 60, 5: 90},
J: {3: 30, 4: 60, 5: 90},
S: {3: 30, 4: 60, 5: 90},
},
40:
{
9: {3: 40, 4: 80, 5: 120},
10: {3: 40, 4: 80, 5: 120},
A: {3: 40, 4: 80, 5: 120},
K: {3: 40, 4: 80, 5: 120},
Q: {3: 40, 4: 80, 5: 120},
J: {3: 40, 4: 80, 5: 120},
S: {3: 40, 4: 80, 5: 120},
},
50:
{
9: {3: 50, 4: 100, 5: 150},
10: {3: 50, 4: 100, 5: 150},
A: {3: 50, 4: 100, 5: 150},
K: {3: 50, 4: 100, 5: 150},
Q: {3: 50, 4: 100, 5: 150},
J: {3: 50, 4: 100, 5: 150},
S: {3: 50, 4: 100, 5: 150},
},
100:
{
9: {3: 100, 4: 200, 5: 300},
10: {3: 100, 4: 200, 5: 300},
A: {3: 100, 4: 200, 5: 300},
K: {3: 100, 4: 200, 5: 300},
Q: {3: 100, 4: 200, 5: 300},
J: {3: 100, 4: 200, 5: 300},
S: {3: 100, 4: 200, 5: 300},
},
});
});
it("detects is item wild", () => {
const conf: IReelGameSessionConfig = new ReelGameSessionConfig();
expect(conf.isItemWild("W")).toBeTruthy();
expect(conf.isItemWild("A")).toBeFalsy();
});
it("detects is item scatter", () => {
const conf: IReelGameSessionConfig = new ReelGameSessionConfig();
expect(conf.isItemScatter("S")).toBeTruthy();
expect(conf.isItemScatter("A")).toBeFalsy();
});
});