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.
Files changed (88) hide show
  1. package/.env +3 -1
  2. package/.env.example +3 -2
  3. package/.travis.yml +11 -11
  4. package/LICENSE +21 -21
  5. package/README.md +238 -236
  6. package/dist/actions.d.ts +10 -9
  7. package/dist/actions.js +23 -15
  8. package/dist/actions.js.map +1 -1
  9. package/dist/adapters/base.adapter.d.ts +25 -21
  10. package/dist/adapters/base.adapter.js +49 -63
  11. package/dist/adapters/base.adapter.js.map +1 -1
  12. package/dist/adapters/mongodb.adapter.d.ts +37 -29
  13. package/dist/adapters/mongodb.adapter.js +158 -113
  14. package/dist/adapters/mongodb.adapter.js.map +1 -1
  15. package/dist/adapters/sqlite.adapter.d.ts +41 -23
  16. package/dist/adapters/sqlite.adapter.js +397 -121
  17. package/dist/adapters/sqlite.adapter.js.map +1 -1
  18. package/dist/api.d.ts +6 -0
  19. package/dist/api.js +56 -0
  20. package/dist/api.js.map +1 -0
  21. package/dist/config.d.ts +16 -14
  22. package/dist/config.js +18 -15
  23. package/dist/config.js.map +1 -1
  24. package/dist/contracts/coinflip.contract.d.ts +14 -0
  25. package/dist/contracts/coinflip.contract.js +95 -0
  26. package/dist/contracts/coinflip.contract.js.map +1 -0
  27. package/dist/contracts/dice.contract.d.ts +29 -29
  28. package/dist/contracts/dice.contract.js +155 -157
  29. package/dist/contracts/dice.contract.js.map +1 -1
  30. package/dist/contracts/lotto.contract.d.ts +20 -16
  31. package/dist/contracts/lotto.contract.js +246 -107
  32. package/dist/contracts/lotto.contract.js.map +1 -1
  33. package/dist/exchanges/bittrex.d.ts +6 -0
  34. package/dist/exchanges/bittrex.js +35 -0
  35. package/dist/exchanges/bittrex.js.map +1 -0
  36. package/dist/exchanges/exchange.d.ts +9 -0
  37. package/dist/exchanges/exchange.js +27 -0
  38. package/dist/exchanges/exchange.js.map +1 -0
  39. package/dist/hive-rates.d.ts +9 -0
  40. package/dist/hive-rates.js +76 -0
  41. package/dist/hive-rates.js.map +1 -0
  42. package/dist/index.d.ts +11 -10
  43. package/dist/index.js +32 -15
  44. package/dist/index.js.map +1 -1
  45. package/dist/streamer.d.ts +93 -70
  46. package/dist/streamer.js +545 -439
  47. package/dist/streamer.js.map +1 -1
  48. package/dist/test.d.ts +1 -1
  49. package/dist/test.js +25 -27
  50. package/dist/test.js.map +1 -1
  51. package/dist/types/hive-stream.d.ts +6 -6
  52. package/dist/types/hive-stream.js +2 -2
  53. package/dist/utils.d.ts +27 -14
  54. package/dist/utils.js +261 -85
  55. package/dist/utils.js.map +1 -1
  56. package/ecosystem.config.js +17 -17
  57. package/jest.config.js +9 -14
  58. package/package.json +48 -40
  59. package/test-contract-block.md +18 -18
  60. package/tests/adapters/sqlite.adapter.spec.ts +43 -0
  61. package/tests/contracts/coinflip.contract.spec.ts +132 -0
  62. package/tests/contracts/dice.contract.spec.ts +160 -0
  63. package/tests/contracts/entrants.json +729 -0
  64. package/tests/contracts/lotto.contract.spec.ts +324 -0
  65. package/tests/setup.ts +19 -0
  66. package/tests/streamer.spec.ts +152 -0
  67. package/tests/utils.spec.ts +95 -0
  68. package/tsconfig.build.json +22 -19
  69. package/tslint.json +20 -20
  70. package/wallaby.js +26 -0
  71. package/dist/adapters/file.adapter.d.ts +0 -8
  72. package/dist/adapters/file.adapter.js +0 -70
  73. package/dist/adapters/file.adapter.js.map +0 -1
  74. package/dist/test/setup.d.ts +0 -0
  75. package/dist/test/setup.js +0 -9
  76. package/dist/test/setup.js.map +0 -1
  77. package/dist/test/streamer.spec.d.ts +0 -1
  78. package/dist/test/streamer.spec.js +0 -145
  79. package/dist/test/streamer.spec.js.map +0 -1
  80. package/dist/test/utils.spec.d.ts +0 -1
  81. package/dist/test/utils.spec.js +0 -11
  82. package/dist/test/utils.spec.js.map +0 -1
  83. package/hive-stream.json +0 -1
  84. package/test/contracts/dice.contract.spec.ts +0 -253
  85. package/test/contracts/lotto.contract.spec.ts +0 -61
  86. package/test/setup.ts +0 -9
  87. package/test/streamer.spec.ts +0 -348
  88. 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"}
File without changes
@@ -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
@@ -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":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -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
- };