All files / src/tx/applyTx checkPeriodVote test.js

0% Statements 0/37
100% Branches 0/0
0% Functions 0/11
0% Lines 0/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80                                                                                                                                                               
const { Tx, Input, Outpoint } = require('leap-core');
 
const checkPeriodVote = require('./checkPeriodVote');
 
const ADDR_1 = '0xB8205608d54cb81f44F263bE086027D8610F3C94';
const ADDR_2 = '0xD56F7dFCd2BaFfBC1d885F0266b21C7F2912020c';
const PRIV_1 =
  '0x9b63fe8147edb8d251a6a66fd18c0ed73873da9fff3f08ea202e1c0a8ead7311';
const PRIV_2 =
  '0xea3a59a673a9f7e74ad65e92ee04c2330fc5b905d0fa47bb2ae36c0b94af61cd';
const TENDER_KEY_1 = '0x7640D69D9EDB21592CBDF4CC49956EA53E59656FC2D8BBD1AE3F427BF67D47FA'.toLowerCase();
const TENDER_KEY_2 = '0x0000069D9EDB21592CBDF4CC49956EA53E59656FC2D8BBD1AE3F427BF67D47FA'.toLowerCase();
const merkleRoot = '0x3342fc20b1a6b66a964d58e4f56ec38c3421964237b41853a603e1abd0b7885d';
 
const getInitialState = () => ({
  periodVotes: {},
  slots: [
    {
      id: 0,
      tenderKey: TENDER_KEY_1,
      signerAddr: ADDR_1,
      eventsCount: 1,
    },
    {
      id: 1,
      tenderKey: TENDER_KEY_2,
      signerAddr: ADDR_2,
      eventsCount: 1,
    },
  ],
});
 
describe('checkPeriodVote', () => {
 
  test('successful tx', () => {
    const state = getInitialState();
    const periodVoteTx = Tx
      .periodVote(1, new Input(new Outpoint(merkleRoot, 0)))
      .signAll(PRIV_1);
 
    checkPeriodVote(state, periodVoteTx);
 
    expect(state.periodVotes.keys().length).toEqual(1);
    expect(state.periodVotes[1]).toBe(merkleRoot);
  });
 
  test('reject: wrong type', () => {
    const tx = Tx.transfer([], []);
    expect(() => checkPeriodVote({}, tx)).toThrow('[period vote] periodVote tx expected');
  });
 
  test('reject: slot is not taken', () => {
    const state = getInitialState();
    const periodVoteTx = Tx.periodVote(2, new Input(new Outpoint(merkleRoot, 0)));
 
    expect(() => 
      checkPeriodVote(state, periodVoteTx)
    ).toThrow('[period vote] Slot 2 is empty');
  });
 
  test('reject: no inputs', () => {
    const state = getInitialState();
    const periodVoteTx = Tx.periodVote(1, []);
 
    expect(() => 
      checkPeriodVote(state, periodVoteTx)
    ).toThrow('[period vote] Malformed period vote tx. Should have one input');
  });
 
  test('reject: unsigned input', () => {
    const state = getInitialState();
    const periodVoteTx = Tx.periodVote(1, new Input(new Outpoint(merkleRoot, 0)));
 
    expect(() => 
      checkPeriodVote(state, periodVoteTx)
    ).toThrow('[period vote] Input should be signed by validator');
  });
 
});