/ test / blockchain_test.js
blockchain_test.js
 1  /* global before,describe,it */
 2  const {startRPCMockServer, TestProvider} = require('./test');
 3  
 4  const async = require('async');
 5  const {assert} = require('chai');
 6  
 7  const Blockchain = require('../dist/blockchain');
 8  
 9  describe('Blockchain', () => {
10    describe('#connect', () => {
11      before(() => {
12        Blockchain.default.registerProvider('web3', TestProvider);
13        Blockchain.default.setProvider('web3', {});
14      });
15  
16      const scenarios = [
17        {
18          description: 'should not keep trying other connections if connected',
19          servers: [true, true],
20          visited: [true, false],
21          error: false
22        },
23        {
24          description: 'should keep trying other connections if not connected',
25          servers: [false, true],
26          visited: [true, true],
27          error: false
28        },
29        {
30          description: 'should return error if no connections succeed',
31          servers: [false, false],
32          visited: [true, true],
33          error: true
34        }
35      ];
36  
37      scenarios.forEach(scenario => {
38        it(scenario.description, done => {
39          async.parallel(
40            scenario.servers.map(validServer =>
41              (cb) => startRPCMockServer({successful: validServer}, cb)
42            ),
43            (_err, servers) => {
44              const connStrings = servers.map(server => server.connectionString);
45              Blockchain.default.connect(connStrings, {}, err => {
46                if(scenario.error) assert(err);
47  
48                servers.forEach((server, idx) => {
49                  assert.strictEqual(server.visited, scenario.visited[idx]);
50                });
51                done();
52              });
53            }
54          );
55        });
56      });
57    });
58  });