hive-stream 2.0.2 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +3 -1
- package/.env.example +3 -2
- package/.travis.yml +11 -11
- package/LICENSE +21 -21
- package/README.md +238 -236
- package/dist/actions.d.ts +10 -9
- package/dist/actions.js +23 -15
- package/dist/actions.js.map +1 -1
- package/dist/adapters/base.adapter.d.ts +25 -21
- package/dist/adapters/base.adapter.js +49 -63
- package/dist/adapters/base.adapter.js.map +1 -1
- package/dist/adapters/mongodb.adapter.d.ts +37 -29
- package/dist/adapters/mongodb.adapter.js +158 -113
- package/dist/adapters/mongodb.adapter.js.map +1 -1
- package/dist/adapters/sqlite.adapter.d.ts +41 -23
- package/dist/adapters/sqlite.adapter.js +397 -121
- package/dist/adapters/sqlite.adapter.js.map +1 -1
- package/dist/api.d.ts +6 -0
- package/dist/api.js +56 -0
- package/dist/api.js.map +1 -0
- package/dist/config.d.ts +16 -14
- package/dist/config.js +18 -15
- package/dist/config.js.map +1 -1
- package/dist/contracts/coinflip.contract.d.ts +14 -0
- package/dist/contracts/coinflip.contract.js +95 -0
- package/dist/contracts/coinflip.contract.js.map +1 -0
- package/dist/contracts/dice.contract.d.ts +29 -29
- package/dist/contracts/dice.contract.js +155 -157
- package/dist/contracts/dice.contract.js.map +1 -1
- package/dist/contracts/lotto.contract.d.ts +20 -16
- package/dist/contracts/lotto.contract.js +246 -107
- package/dist/contracts/lotto.contract.js.map +1 -1
- package/dist/exchanges/bittrex.d.ts +6 -0
- package/dist/exchanges/bittrex.js +35 -0
- package/dist/exchanges/bittrex.js.map +1 -0
- package/dist/exchanges/exchange.d.ts +9 -0
- package/dist/exchanges/exchange.js +27 -0
- package/dist/exchanges/exchange.js.map +1 -0
- package/dist/hive-rates.d.ts +9 -0
- package/dist/hive-rates.js +76 -0
- package/dist/hive-rates.js.map +1 -0
- package/dist/index.d.ts +11 -10
- package/dist/index.js +32 -15
- package/dist/index.js.map +1 -1
- package/dist/streamer.d.ts +93 -70
- package/dist/streamer.js +545 -439
- package/dist/streamer.js.map +1 -1
- package/dist/test.d.ts +1 -1
- package/dist/test.js +25 -27
- package/dist/test.js.map +1 -1
- package/dist/types/hive-stream.d.ts +6 -6
- package/dist/types/hive-stream.js +2 -2
- package/dist/utils.d.ts +27 -14
- package/dist/utils.js +261 -85
- package/dist/utils.js.map +1 -1
- package/ecosystem.config.js +17 -17
- package/jest.config.js +9 -14
- package/package.json +48 -40
- package/test-contract-block.md +18 -18
- package/tests/adapters/sqlite.adapter.spec.ts +43 -0
- package/tests/contracts/coinflip.contract.spec.ts +132 -0
- package/tests/contracts/dice.contract.spec.ts +160 -0
- package/tests/contracts/entrants.json +729 -0
- package/tests/contracts/lotto.contract.spec.ts +324 -0
- package/tests/setup.ts +19 -0
- package/tests/streamer.spec.ts +152 -0
- package/tests/utils.spec.ts +95 -0
- package/tsconfig.build.json +22 -19
- package/tslint.json +20 -20
- package/wallaby.js +26 -0
- package/dist/adapters/file.adapter.d.ts +0 -8
- package/dist/adapters/file.adapter.js +0 -70
- package/dist/adapters/file.adapter.js.map +0 -1
- package/dist/test/setup.d.ts +0 -0
- package/dist/test/setup.js +0 -9
- package/dist/test/setup.js.map +0 -1
- package/dist/test/streamer.spec.d.ts +0 -1
- package/dist/test/streamer.spec.js +0 -145
- package/dist/test/streamer.spec.js.map +0 -1
- package/dist/test/utils.spec.d.ts +0 -1
- package/dist/test/utils.spec.js +0 -11
- package/dist/test/utils.spec.js.map +0 -1
- package/hive-stream.json +0 -1
- package/test/contracts/dice.contract.spec.ts +0 -253
- package/test/contracts/lotto.contract.spec.ts +0 -61
- package/test/setup.ts +0 -9
- package/test/streamer.spec.ts +0 -348
- package/test/utils.spec.ts +0 -12
package/wallaby.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module.exports = function (wallaby) {
|
|
2
|
+
return {
|
|
3
|
+
files: [
|
|
4
|
+
"**/*.css",
|
|
5
|
+
"**/*.json",
|
|
6
|
+
"src/**/*.ts",
|
|
7
|
+
"src/**/*.html",
|
|
8
|
+
"tests/setup.ts",
|
|
9
|
+
"tsconfig.json",
|
|
10
|
+
],
|
|
11
|
+
|
|
12
|
+
tests: ["tests/**/*.spec.ts"],
|
|
13
|
+
|
|
14
|
+
compilers: {
|
|
15
|
+
"**/*.ts": wallaby.compilers.typeScript({
|
|
16
|
+
module: "commonjs",
|
|
17
|
+
typescript: require("typescript"),
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
env: {
|
|
22
|
+
runner: "node",
|
|
23
|
+
type: "node",
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { AdapterBase } from './base.adapter';
|
|
2
|
-
import { TimeAction } from '../actions';
|
|
3
|
-
export declare class FileAdapter extends AdapterBase {
|
|
4
|
-
protected create(): Promise<boolean>;
|
|
5
|
-
protected loadActions(): Promise<TimeAction[]>;
|
|
6
|
-
protected loadState(): any;
|
|
7
|
-
protected saveState(data: any): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const fs_1 = __importDefault(require("fs"));
|
|
16
|
-
const base_adapter_1 = require("./base.adapter");
|
|
17
|
-
class FileAdapter extends base_adapter_1.AdapterBase {
|
|
18
|
-
create() {
|
|
19
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
return new Promise((resolve, reject) => {
|
|
21
|
-
const data = {
|
|
22
|
-
lastBlockNumber: 0,
|
|
23
|
-
actions: []
|
|
24
|
-
};
|
|
25
|
-
if (!fs_1.default.existsSync('hive-stream.json')) {
|
|
26
|
-
fs_1.default.writeFile('hive-stream.json', JSON.stringify(data), err => {
|
|
27
|
-
if (err) {
|
|
28
|
-
console.error(err);
|
|
29
|
-
reject(err);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
resolve(true);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
resolve(true);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
loadActions() {
|
|
43
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
-
if (fs_1.default.existsSync('hive-stream.json')) {
|
|
45
|
-
const file = JSON.parse(fs_1.default.readFileSync('hive-stream.json'));
|
|
46
|
-
return (file === null || file === void 0 ? void 0 : file.actions) ? file.actions : [];
|
|
47
|
-
}
|
|
48
|
-
return [];
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
loadState() {
|
|
52
|
-
if (fs_1.default.existsSync('hive-stream.json')) {
|
|
53
|
-
const state = JSON.parse(fs_1.default.readFileSync('hive-stream.json'));
|
|
54
|
-
return state;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
saveState(data) {
|
|
58
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
fs_1.default.writeFile('hive-stream.json', JSON.stringify(data), err => {
|
|
60
|
-
if (err) {
|
|
61
|
-
console.error(err);
|
|
62
|
-
return err;
|
|
63
|
-
}
|
|
64
|
-
return true;
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
exports.FileAdapter = FileAdapter;
|
|
70
|
-
//# sourceMappingURL=file.adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file.adapter.js","sourceRoot":"","sources":["../../src/adapters/file.adapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,iDAA6C;AAI7C,MAAa,WAAY,SAAQ,0BAAW;IACxB,MAAM;;YAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG;oBACT,eAAe,EAAE,CAAC;oBAClB,OAAO,EAAE,EAAE;iBACd,CAAC;gBAEF,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;oBACpC,YAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;wBACzD,IAAI,GAAG,EAAE;4BACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BAEnB,MAAM,CAAC,GAAG,CAAC,CAAC;yBACf;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,CAAC;yBACjB;oBACL,CAAC,CAAC,CAAC;iBACN;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC;iBACjB;YACL,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;IAEe,WAAW;;YACvB,IAAI,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,YAAE,CAAC,YAAY,CAAC,kBAAkB,CAAuB,CAAC,CAAC;gBAEpF,OAAO,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9C;YAED,OAAO,EAAE,CAAC;QACd,CAAC;KAAA;IAES,SAAS;QACf,IAAI,YAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAE,YAAE,CAAC,YAAY,CAAC,kBAAkB,CAAuB,CAAC,CAAC;YAErF,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEe,SAAS,CAAC,IAAS;;YAC/B,YAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;gBACzD,IAAI,GAAG,EAAE;oBACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAEnB,OAAO,GAAG,CAAC;iBACd;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;CACJ;AArDD,kCAqDC"}
|
package/dist/test/setup.d.ts
DELETED
|
File without changes
|
package/dist/test/setup.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
global.console = {
|
|
2
|
-
log: jest.fn(),
|
|
3
|
-
// Keep native behaviour for other methods, use those to print out things in your own tests, not `console.log`
|
|
4
|
-
error: console.error,
|
|
5
|
-
warn: console.warn,
|
|
6
|
-
info: console.info,
|
|
7
|
-
debug: console.debug,
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=setup.js.map
|
package/dist/test/setup.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../test/setup.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,OAAO,GAAG;IACtB,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IAEd,8GAA8G;IAC9G,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;CACvB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
const dsteem_1 = require("dsteem");
|
|
15
|
-
const streamer_1 = require("./../src/streamer");
|
|
16
|
-
const fs_1 = __importDefault(require("fs"));
|
|
17
|
-
const utils_1 = require("dsteem/lib/utils");
|
|
18
|
-
jest.mock('fs');
|
|
19
|
-
describe('Streamer', () => {
|
|
20
|
-
let sut;
|
|
21
|
-
beforeEach(() => {
|
|
22
|
-
sut = new streamer_1.Streamer({});
|
|
23
|
-
});
|
|
24
|
-
afterEach(() => {
|
|
25
|
-
sut.stop();
|
|
26
|
-
});
|
|
27
|
-
test('Constructor should instantiate client instance', () => {
|
|
28
|
-
expect(sut['client']).toBeInstanceOf(dsteem_1.Client);
|
|
29
|
-
});
|
|
30
|
-
test('setConfig properly assigns multiple values', () => {
|
|
31
|
-
sut.setConfig({
|
|
32
|
-
LAST_BLOCK_NUMBER: 1234
|
|
33
|
-
});
|
|
34
|
-
expect(sut['config'].LAST_BLOCK_NUMBER).toStrictEqual(1234);
|
|
35
|
-
});
|
|
36
|
-
test('state file does not exist', () => {
|
|
37
|
-
fs_1.default.existsSync.mockReturnValue(false);
|
|
38
|
-
jest.spyOn(fs_1.default, 'readFileSync');
|
|
39
|
-
sut.start();
|
|
40
|
-
expect(fs_1.default.readFileSync).not.toBeCalled();
|
|
41
|
-
});
|
|
42
|
-
test('state file does exist', () => {
|
|
43
|
-
fs_1.default.existsSync.mockReturnValue(true);
|
|
44
|
-
jest.spyOn(fs_1.default, 'readFileSync').mockReturnValue(`{"lastBlockNumber": 27777}`);
|
|
45
|
-
sut.start();
|
|
46
|
-
expect(fs_1.default.readFileSync).toBeCalledWith('hive-stream.json');
|
|
47
|
-
expect(sut['lastBlockNumber']).toStrictEqual(27777);
|
|
48
|
-
});
|
|
49
|
-
test('getBlock gets a block', () => __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
jest.spyOn(sut['client'].database, 'getDynamicGlobalProperties').mockResolvedValue({ head_block_number: 8882 });
|
|
51
|
-
jest.spyOn(sut['client'].database, 'getBlock').mockResolvedValue({
|
|
52
|
-
block_id: 1234,
|
|
53
|
-
previous: 1233,
|
|
54
|
-
transaction_ids: ['sdasd', 'dasdad'],
|
|
55
|
-
timestamp: new Date().toDateString(),
|
|
56
|
-
transactions: {
|
|
57
|
-
0: {
|
|
58
|
-
operations: {
|
|
59
|
-
0: {}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
jest.spyOn(sut, 'getBlock');
|
|
65
|
-
jest.spyOn(sut, 'loadBlock');
|
|
66
|
-
sut['lastBlockNumber'] = 0;
|
|
67
|
-
yield sut['getBlock']();
|
|
68
|
-
expect(sut['lastBlockNumber']).toStrictEqual(8882);
|
|
69
|
-
// Wait for 3 block cycles to be called
|
|
70
|
-
yield utils_1.sleep(3000);
|
|
71
|
-
sut['disableAllProcessing'] = true;
|
|
72
|
-
expect(sut['loadBlock']).toBeCalledWith(8882);
|
|
73
|
-
expect(sut['getBlock']).toBeCalledTimes(3);
|
|
74
|
-
}));
|
|
75
|
-
test('getBlock global properties returns null', () => __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
jest.spyOn(sut['client'].database, 'getDynamicGlobalProperties').mockResolvedValue(null);
|
|
77
|
-
jest.spyOn(sut, 'getBlock');
|
|
78
|
-
jest.spyOn(sut, 'loadBlock');
|
|
79
|
-
yield sut['getBlock']();
|
|
80
|
-
yield utils_1.sleep(1000);
|
|
81
|
-
sut['disableAllProcessing'] = true;
|
|
82
|
-
expect(sut['getBlock']).toBeCalled();
|
|
83
|
-
}));
|
|
84
|
-
test('getBlock client error should retry', () => __awaiter(this, void 0, void 0, function* () {
|
|
85
|
-
jest.spyOn(sut['client'].database, 'getDynamicGlobalProperties').mockRejectedValue({ message: 'network error' });
|
|
86
|
-
jest.spyOn(sut, 'getBlock');
|
|
87
|
-
jest.spyOn(sut, 'loadBlock');
|
|
88
|
-
expect(sut['attempts']).toStrictEqual(0);
|
|
89
|
-
yield sut['getBlock']();
|
|
90
|
-
sut['disableAllProcessing'] = true;
|
|
91
|
-
expect(sut['loadBlock']).not.toBeCalled();
|
|
92
|
-
expect(sut['attempts']).toStrictEqual(1);
|
|
93
|
-
}));
|
|
94
|
-
test('processOperation calls post subscriber', () => {
|
|
95
|
-
const callback = jest.fn();
|
|
96
|
-
sut.onPost(callback);
|
|
97
|
-
const operation = [
|
|
98
|
-
'comment',
|
|
99
|
-
{ parent_author: '' }
|
|
100
|
-
];
|
|
101
|
-
sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
102
|
-
expect(callback).toBeCalledWith({ 'parent_author': '' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
103
|
-
});
|
|
104
|
-
test('processOperation calls comment subscriber', () => {
|
|
105
|
-
const callback = jest.fn();
|
|
106
|
-
sut.onComment(callback);
|
|
107
|
-
const operation = [
|
|
108
|
-
'comment',
|
|
109
|
-
{ parent_author: 'beggars' }
|
|
110
|
-
];
|
|
111
|
-
sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
112
|
-
expect(callback).toBeCalledWith({ 'parent_author': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
113
|
-
});
|
|
114
|
-
test('processOperation calls transfer subscriber', () => {
|
|
115
|
-
const callback = jest.fn();
|
|
116
|
-
sut.onTransfer('beggars', callback);
|
|
117
|
-
const operation = [
|
|
118
|
-
'transfer',
|
|
119
|
-
{ to: 'beggars' }
|
|
120
|
-
];
|
|
121
|
-
sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
122
|
-
expect(callback).toBeCalledWith({ 'to': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
123
|
-
});
|
|
124
|
-
test('processOperation calls custom json subscriber signed with active key', () => {
|
|
125
|
-
const callback = jest.fn();
|
|
126
|
-
sut.onCustomJson(callback);
|
|
127
|
-
const operation = [
|
|
128
|
-
'custom_json',
|
|
129
|
-
{ required_auths: ['beggars'] }
|
|
130
|
-
];
|
|
131
|
-
sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
132
|
-
expect(callback).toBeCalledWith({ 'required_auths': ['beggars'] }, { 'isSignedWithActiveKey': true, 'sender': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
133
|
-
});
|
|
134
|
-
test('processOperation calls custom json subscriber signed without active key', () => {
|
|
135
|
-
const callback = jest.fn();
|
|
136
|
-
sut.onCustomJson(callback);
|
|
137
|
-
const operation = [
|
|
138
|
-
'custom_json',
|
|
139
|
-
{ required_posting_auths: ['beggars'] }
|
|
140
|
-
];
|
|
141
|
-
sut.processOperation(operation, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
142
|
-
expect(callback).toBeCalledWith({ 'required_posting_auths': ['beggars'] }, { 'isSignedWithActiveKey': false, 'sender': 'beggars' }, 1234, 'ffsdfsd', '34fdfsd', '4234ff', '2020-03-22T10:19:24.228Z');
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
//# sourceMappingURL=streamer.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streamer.spec.js","sourceRoot":"","sources":["../../test/streamer.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mCAAgC;AAChC,gDAA6C;AAE7C,4CAAoB;AACpB,4CAAyC;AAEzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IAEtB,IAAI,GAAa,CAAC;IAElB,UAAU,CAAC,GAAG,EAAE;QACZ,GAAG,GAAG,IAAI,mBAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,GAAG,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,eAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,GAAG,CAAC,SAAS,CAAC;YACV,iBAAiB,EAAE,IAAI;SAC1B,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QAClC,YAAU,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,YAAE,EAAE,cAAc,CAAC,CAAC;QAE/B,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,MAAM,CAAC,YAAE,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC9B,YAAU,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,CAAC,YAAE,EAAE,cAAc,CAAC,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;QAE7E,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,MAAM,CAAC,YAAE,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QAE3D,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAS,EAAE;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,iBAAiB,CAAC,EAAC,iBAAiB,EAAE,IAAI,EAAQ,CAAC,CAAC;QAErH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,iBAAiB,CAAC;YAC7D,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;YACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE;YACpC,YAAY,EAAE;gBACV,CAAC,EAAE;oBACC,UAAU,EAAE;wBACR,CAAC,EAAE,EAAE;qBACR;iBACJ;aACJ;SACG,CAAC,CAAC;QAEV,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,WAAW,CAAC,CAAC;QAEpC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAE3B,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAExB,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEnD,uCAAuC;QACvC,MAAM,aAAK,CAAC,IAAI,CAAC,CAAC;QAElB,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAS,EAAE;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAEzF,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,WAAW,CAAC,CAAC;QAEpC,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAExB,MAAM,aAAK,CAAC,IAAI,CAAC,CAAC;QAElB,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,GAAS,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAU,EAAE,WAAW,CAAC,CAAC;QAEpC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAExB,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAE1C,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAErB,MAAM,SAAS,GAAG;YACd,SAAS;YACT,EAAE,aAAa,EAAE,EAAE,EAAE;SACxB,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,eAAe,EAAE,EAAE,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAExB,MAAM,SAAS,GAAG;YACd,SAAS;YACT,EAAE,aAAa,EAAE,SAAS,EAAE;SAC/B,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,eAAe,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACpI,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG;YACd,UAAU;YACV,EAAE,EAAE,EAAE,SAAS,EAAE;SACpB,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,IAAI,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACzH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG;YACd,aAAa;YACb,EAAE,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE;SAClC,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAC,EAAE,EAAC,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IAC7L,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAE3B,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE3B,MAAM,SAAS,GAAG;YACd,aAAa;YACb,EAAE,sBAAsB,EAAE,CAAC,SAAS,CAAC,EAAE;SAC1C,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAAiC,CAAC,CAAC;QAEzG,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAC,wBAAwB,EAAE,CAAC,SAAS,CAAC,EAAC,EAAE,EAAC,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACtM,CAAC,CAAC,CAAC;AAEP,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/test/utils.spec.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const utils_1 = require("./../src/utils");
|
|
4
|
-
describe('Utils', () => {
|
|
5
|
-
test('Should generate two deterministic numbers', () => {
|
|
6
|
-
// Should generate a deterministic random number
|
|
7
|
-
expect(utils_1.Utils.randomNumber('dasdasdas', '2312fsdfsdfsdf', 'kfjlksdjflksdjf999')).toStrictEqual(26);
|
|
8
|
-
expect(utils_1.Utils.randomNumber('fdfsdfsdfsdfsf', '2312fsdfsdfsdf', 'kfjlksdjflksdjf999')).toStrictEqual(43);
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
//# sourceMappingURL=utils.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../test/utils.spec.ts"],"names":[],"mappings":";;AAAA,0CAAuC;AAEvC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAEnB,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,gDAAgD;QAChD,MAAM,CAAC,aAAK,CAAC,YAAY,CAAC,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAElG,MAAM,CAAC,aAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;AAEP,CAAC,CAAC,CAAC"}
|
package/hive-stream.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"lastBlockNumber":42333000,"actions":[{"timeValue":"hourly","id":"testhourly","contractName":"hivedice","contractMethod":"testauto","date":"2020-04-07T12:58:05.518Z"},{"timeValue":"30s","id":"test30s","contractName":"hivedice","contractMethod":"testauto","date":"2020-04-07T12:59:50.124Z"}]}
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import DiceContract from '../../src/contracts/dice.contract';
|
|
2
|
-
|
|
3
|
-
describe('Dice Contract', () => {
|
|
4
|
-
const sut: any = DiceContract;
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
sut['_client'] = {
|
|
8
|
-
database: {
|
|
9
|
-
getAccounts: jest.fn()
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
test('Gets balance', async () => {
|
|
15
|
-
sut['_client'].database.getAccounts = jest.fn(() => Promise.resolve([
|
|
16
|
-
{
|
|
17
|
-
balance: '2000.234 HIVE'
|
|
18
|
-
}
|
|
19
|
-
]));
|
|
20
|
-
|
|
21
|
-
expect(sut.getBalance()).resolves.toBe(2000.234);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
test('Balance call does not have an account', async () => {
|
|
25
|
-
sut['_client'].database.getAccounts = jest.fn(() => Promise.resolve(null));
|
|
26
|
-
|
|
27
|
-
expect(sut.getBalance()).resolves.toBeNull();
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test('winning roll and transfers winnings', async () => {
|
|
31
|
-
const payload = {
|
|
32
|
-
roll: '90'
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const args = {
|
|
36
|
-
sender: 'beggars',
|
|
37
|
-
amount: '9.234 HIVE'
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
sut['_instance'] = {
|
|
41
|
-
client: {
|
|
42
|
-
database: {
|
|
43
|
-
getAccounts: jest.fn().mockResolvedValue([{
|
|
44
|
-
balance: '250.123'
|
|
45
|
-
}])
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
getTransaction: jest.fn(),
|
|
49
|
-
transferHiveTokens: jest.fn(),
|
|
50
|
-
verifyTransfer: jest.fn().mockResolvedValue(true)
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
sut['blockId'] = '473847834';
|
|
54
|
-
sut['previousBlockId'] = 'fdf34342342342342sdfgsdgsdg';
|
|
55
|
-
sut['transactionId'] = 'jfkdjfkdf777jhfjshdf';
|
|
56
|
-
|
|
57
|
-
await sut['roll'](payload, args);
|
|
58
|
-
|
|
59
|
-
expect(sut['_instance']['transferHiveTokens']).toBeCalledWith('beggars', 'beggars', '9.747', 'HIVE', 'You won 9.747 HIVE. Roll: 51, Your guess: 90');
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test('losing roll and does not transfer anything', async () => {
|
|
63
|
-
const payload = {
|
|
64
|
-
roll: '22'
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const args = {
|
|
68
|
-
sender: 'beggars',
|
|
69
|
-
amount: '9.234 HIVE'
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
sut['_instance'] = {
|
|
73
|
-
client: {
|
|
74
|
-
database: {
|
|
75
|
-
getAccounts: jest.fn().mockResolvedValue([{
|
|
76
|
-
balance: '250.123'
|
|
77
|
-
}])
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
getTransaction: jest.fn(),
|
|
81
|
-
transferHiveTokens: jest.fn(),
|
|
82
|
-
verifyTransfer: jest.fn().mockResolvedValue(true)
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
sut['blockId'] = '473847834';
|
|
86
|
-
sut['previousBlockId'] = 'fdf34342342342342sdfgsdgsdg';
|
|
87
|
-
sut['transactionId'] = 'jfkdjfkdf777jhfjshdf';
|
|
88
|
-
|
|
89
|
-
await sut['roll'](payload, args);
|
|
90
|
-
|
|
91
|
-
expect(sut['_instance']['transferHiveTokens']).toBeCalledWith('beggars', 'beggars', '0.001', 'HIVE', 'You lost 9.234 HIVE. Roll: 51, Your guess: 22');
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
test('winning roll, but account has insufficient balance and refunds the bet', async () => {
|
|
95
|
-
const payload = {
|
|
96
|
-
roll: '78'
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const args = {
|
|
100
|
-
sender: 'beggars',
|
|
101
|
-
amount: '9.234 HIVE'
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
sut['_instance'] = {
|
|
105
|
-
client: {
|
|
106
|
-
database: {
|
|
107
|
-
getAccounts: jest.fn().mockResolvedValue([{
|
|
108
|
-
balance: '10.000'
|
|
109
|
-
}])
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
getTransaction: jest.fn(),
|
|
113
|
-
transferHiveTokens: jest.fn(),
|
|
114
|
-
verifyTransfer: jest.fn().mockResolvedValue(true)
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
sut['blockId'] = '473847834';
|
|
118
|
-
sut['previousBlockId'] = 'fdf34342342342342sdfgsdgsdg';
|
|
119
|
-
sut['transactionId'] = 'jfkdjfkdf777jhfjshdf';
|
|
120
|
-
|
|
121
|
-
await sut['roll'](payload, args);
|
|
122
|
-
|
|
123
|
-
expect(sut['_instance']['transferHiveTokens']).toBeCalledWith('beggars', 'beggars', '9.234', 'HIVE', '[Refund] The server could not fufill your bet.');
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
test('balance remaining is less than the maximum bet amount', async () => {
|
|
127
|
-
const payload = {
|
|
128
|
-
roll: '78'
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
const args = {
|
|
132
|
-
sender: 'beggars',
|
|
133
|
-
amount: '9.234 HIVE'
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
sut['_instance'] = {
|
|
137
|
-
client: {
|
|
138
|
-
database: {
|
|
139
|
-
getAccounts: jest.fn().mockResolvedValue([{
|
|
140
|
-
balance: '8.000'
|
|
141
|
-
}])
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
getTransaction: jest.fn(),
|
|
145
|
-
transferHiveTokens: jest.fn(),
|
|
146
|
-
verifyTransfer: jest.fn().mockResolvedValue(true)
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
sut['blockId'] = '473847834';
|
|
150
|
-
sut['previousBlockId'] = 'fdf34342342342342sdfgsdgsdg';
|
|
151
|
-
sut['transactionId'] = 'jfkdjfkdf777jhfjshdf';
|
|
152
|
-
|
|
153
|
-
await sut['roll'](payload, args);
|
|
154
|
-
|
|
155
|
-
expect(sut['_instance']['transferHiveTokens']).toBeCalledWith('beggars', 'beggars', '9.234', 'HIVE', '[Refund] The server could not fufill your bet.');
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
test('bet amount was higher than the maximum', async () => {
|
|
159
|
-
const payload = {
|
|
160
|
-
roll: '43'
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
const args = {
|
|
164
|
-
sender: 'beggars',
|
|
165
|
-
amount: '52.023 HIVE'
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
sut['_instance'] = {
|
|
169
|
-
client: {
|
|
170
|
-
database: {
|
|
171
|
-
getAccounts: jest.fn().mockResolvedValue([{
|
|
172
|
-
balance: '10.000'
|
|
173
|
-
}])
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
getTransaction: jest.fn(),
|
|
177
|
-
transferHiveTokens: jest.fn(),
|
|
178
|
-
verifyTransfer: jest.fn().mockResolvedValue(true)
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
sut['blockId'] = '473847834';
|
|
182
|
-
sut['previousBlockId'] = 'fdf34342342342342sdfgsdgsdg';
|
|
183
|
-
sut['transactionId'] = 'jfkdjfkdf777jhfjshdf';
|
|
184
|
-
|
|
185
|
-
await sut['roll'](payload, args);
|
|
186
|
-
|
|
187
|
-
expect(sut['_instance']['transferHiveTokens']).toBeCalledWith('beggars', 'beggars', '52.023', 'HIVE', '[Refund] You sent an invalid bet amount.');
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
test('roll amount was higher than the maximum, refund the user', async () => {
|
|
191
|
-
const payload = {
|
|
192
|
-
roll: '99'
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
const args = {
|
|
196
|
-
sender: 'beggars',
|
|
197
|
-
amount: '9.023 HIVE'
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
sut['_instance'] = {
|
|
201
|
-
client: {
|
|
202
|
-
database: {
|
|
203
|
-
getAccounts: jest.fn().mockResolvedValue([{
|
|
204
|
-
balance: '100.000'
|
|
205
|
-
}])
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
getTransaction: jest.fn(),
|
|
209
|
-
transferHiveTokens: jest.fn(),
|
|
210
|
-
verifyTransfer: jest.fn().mockResolvedValue(true)
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
sut['blockId'] = '473847834';
|
|
214
|
-
sut['previousBlockId'] = 'fdf34342342342342sdfgsdgsdg';
|
|
215
|
-
sut['transactionId'] = 'jfkdjfkdf777jhfjshdf';
|
|
216
|
-
|
|
217
|
-
await sut['roll'](payload, args);
|
|
218
|
-
|
|
219
|
-
expect(sut['_instance']['transferHiveTokens']).toBeCalledWith('beggars', 'beggars', '9.023', 'HIVE', '[Refund] Invalid bet params.');
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
test('winning roll, but account has insufficient balance and refunds the bet', async () => {
|
|
223
|
-
const payload = {
|
|
224
|
-
roll: '78'
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
const args = {
|
|
228
|
-
sender: 'beggars',
|
|
229
|
-
amount: '9.234 HIVE'
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
sut['_instance'] = {
|
|
233
|
-
client: {
|
|
234
|
-
database: {
|
|
235
|
-
getAccounts: jest.fn().mockResolvedValue([{
|
|
236
|
-
balance: '10.000'
|
|
237
|
-
}])
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
getTransaction: jest.fn(),
|
|
241
|
-
transferHiveTokens: jest.fn(),
|
|
242
|
-
verifyTransfer: jest.fn().mockResolvedValue(true)
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
sut['blockId'] = '473847834';
|
|
246
|
-
sut['previousBlockId'] = 'fdf34342342342342sdfgsdgsdg';
|
|
247
|
-
sut['transactionId'] = 'jfkdjfkdf777jhfjshdf';
|
|
248
|
-
|
|
249
|
-
await sut['roll'](payload, args);
|
|
250
|
-
|
|
251
|
-
expect(sut['_instance']['transferHiveTokens']).toBeCalledWith('beggars', 'beggars', '9.234', 'HIVE', '[Refund] The server could not fufill your bet.');
|
|
252
|
-
});
|
|
253
|
-
});
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { Streamer } from '../../src/streamer';
|
|
2
|
-
import lottoContract from '../../src/contracts/lotto.contract';
|
|
3
|
-
|
|
4
|
-
describe('Lotto Contract', () => {
|
|
5
|
-
let sut: Streamer;
|
|
6
|
-
|
|
7
|
-
beforeEach(() => {
|
|
8
|
-
sut = new Streamer({
|
|
9
|
-
JSON_ID: 'test',
|
|
10
|
-
PAYLOAD_IDENTIFIER: 'hiveContract'
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
(sut['client'] as any) = {
|
|
14
|
-
database: {
|
|
15
|
-
getAccounts: jest.fn()
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
afterEach(() => {
|
|
21
|
-
sut.stop();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
test('Gets balance', async () => {
|
|
25
|
-
(sut['client'] as any).database.getAccounts = jest.fn(() => Promise.resolve([
|
|
26
|
-
{
|
|
27
|
-
balance: '2000.234 HIVE'
|
|
28
|
-
}
|
|
29
|
-
]));
|
|
30
|
-
|
|
31
|
-
sut.registerContract('lotto', lottoContract);
|
|
32
|
-
|
|
33
|
-
jest.spyOn(lottoContract, 'buy');
|
|
34
|
-
|
|
35
|
-
const operation = [
|
|
36
|
-
'transfer',
|
|
37
|
-
{
|
|
38
|
-
from: 'beggars',
|
|
39
|
-
amount: '10.000 HIVE',
|
|
40
|
-
memo: JSON.stringify({
|
|
41
|
-
hiveContract: {
|
|
42
|
-
id: 'test',
|
|
43
|
-
name: 'lotto',
|
|
44
|
-
action: 'buy',
|
|
45
|
-
payload: {}
|
|
46
|
-
}
|
|
47
|
-
})
|
|
48
|
-
}
|
|
49
|
-
];
|
|
50
|
-
|
|
51
|
-
sut.processOperation(operation, 42323417, '52676', '1542355627', '0d972c0e076a3a2b2117e313b3a20743cad246bc', '2020-03-22T10:19:24.228Z' as any);
|
|
52
|
-
sut.processOperation(operation, 42323418, '52677', '1542355628', '0kdjasdkjdaksjd3123jhkjdhfkjsdhfkjshdkjfhsdkjfhsd', '2020-03-22T10:19:24.228Z' as any);
|
|
53
|
-
sut.processOperation(operation, 42323419, '52678', '1542355629', '0fsdfsdfsdfsdfsdf9845092384', '2020-03-22T10:19:24.228Z' as any);
|
|
54
|
-
sut.processOperation(operation, 42323420, '52679', '1542355630', '0fhjsdlkjfhlskdjflksdjflksjd', '2020-03-22T10:19:24.228Z' as any);
|
|
55
|
-
sut.processOperation(operation, 42323421, '52680', '1542355631', '0dkfjsd89723hjdsfkh978216hsjagfdnbm', '2020-03-22T10:19:24.228Z' as any);
|
|
56
|
-
|
|
57
|
-
expect(lottoContract.buy).toBeCalledTimes(5);
|
|
58
|
-
|
|
59
|
-
expect(lottoContract.buy).toBeCalledWith({}, {amount: '10.000 HIVE', sender: 'beggars'});
|
|
60
|
-
});
|
|
61
|
-
});
|
package/test/setup.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
(global as any).console = {
|
|
2
|
-
log: jest.fn(), // console.log are ignored in tests
|
|
3
|
-
|
|
4
|
-
// Keep native behaviour for other methods, use those to print out things in your own tests, not `console.log`
|
|
5
|
-
error: console.error,
|
|
6
|
-
warn: console.warn,
|
|
7
|
-
info: console.info,
|
|
8
|
-
debug: console.debug,
|
|
9
|
-
};
|