summaryrefslogtreecommitdiffhomepage
path: root/test/actions/user.spec.js
blob: 9bd93d401083c262535317ac1e64fe0dac4da4ae (plain)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import chai, { expect } from 'chai';
import spy from 'chai-spies';
import actions from '../../app/actions/user';
import { LoginState } from '../../app/constants';

chai.use(spy);

describe('actions', () => {

  describe('user', () => {
    
    it('should create action for USER_LOGIN_CHANGE', () => {
      const test = { 
        type: actions.loginChange.toString(), 
        payload: { 
          account: '1111',
          status: LoginState.failed,
          error: new Error('Something went wrong')
        }
      };
      const payload = Object.assign({}, test.payload);
      expect(actions.loginChange(payload)).to.deep.equal(test);
    });

    it('should successfully login', (done) => {
      const actionType = actions.loginChange.toString();
      const account = '1234';
      const getState = () => ({});
      let callCounter = 0;
      const dispatch = chai.spy(() => {
        callCounter += 1;

        if(callCounter == 2) {
          expect(dispatch).to.have.been.called.with({ 
            type: actionType, 
            payload: { account, status: LoginState.connecting } 
          });

          expect(dispatch).to.have.been.called.with({ 
            type: actionType, 
            payload: { status: LoginState.ok } 
          });

          done();
        }
      });

      const backend = {
        login: () => Promise.resolve()
      };

      const action = actions.login(backend, account);

      action(dispatch, getState);
    });

    it('should fail login', (done) => {
      const actionType = actions.loginChange.toString();
      const account = '1234';
      const getState = () => ({});
      let callCounter = 0;
      const dispatch = chai.spy(() => {
        callCounter += 1;

        if(callCounter == 2) {
          expect(dispatch).to.have.been.called.with({ 
            type: actionType, 
            payload: { account, status: LoginState.connecting } 
          });

          expect(dispatch).to.have.been.called.with({ 
            type: actionType, 
            payload: { status: LoginState.failed, error: new Error('Failed') } 
          });

          done();
        }
      });

      const backend = {
        login: () => Promise.reject(new Error('Failed'))
      };

      const action = actions.login(backend, account);

      action(dispatch, getState);
    });

    it('should log out', (done) => {
      let callCount = 0;
      const getState = () => ({ account: '1234', status: LoginState.ok });
      const dispatch = chai.spy( (u) => {
        callCount += 1;

        if(callCount === 1) {
          expect(dispatch).to.have.been.called.with({
            type: actions.loginChange.toString(),
            payload: { 
              account: '', 
              status: LoginState.none,
              error: null
            }
          });

          done();
        }
      });
      const backend = {
        logout: () => Promise.resolve()
      };
      const action = actions.logout(backend);

      action(dispatch, getState);
    });

  });
});