Passed
Pull Request — master (#1)
by Muhammad Dyas
01:28
created

tests/vote-card.test.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 152
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 124
mnd 1
bc 1
fnc 0
dl 0
loc 152
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import {dummyPoll} from './dummy';
2
import {buildVoteCard} from '../src/vote-card';
3
import voteCardJson from './json/vote_card.json';
4
import {saveVotes, choiceSection, progressBarText} from '../src/helpers/vote';
5
import {Votes} from '../src/helpers/interfaces';
6
7
test('test save voter', () => {
8
  const voter = {uid: 'users/103846892623842357554', name: 'Muhammad'};
9
  const votes: Votes = {
10
    '0': [],
11
    '1': [],
12
    '2': [{uid: 'users/118239915905237561078', name: 'Yaskur'}],
13
    '3': [
14
      {uid: 'users/123242424242323423423', name: 'Dyas'},
15
      {uid: 'users/103846892623842357554', name: 'Muhammad'},
16
      {uid: 'users/222423423523532523532', name: 'Ammar'},
17
    ],
18
  };
19
  const voterResult = saveVotes(2, voter, votes);
20
  expect(voterResult).toStrictEqual({
21
    '0': [],
22
    '1': [],
23
    '2': [
24
      {uid: 'users/118239915905237561078', name: 'Yaskur'},
25
      {uid: 'users/103846892623842357554', name: 'Muhammad'},
26
    ],
27
    '3': [
28
      {uid: 'users/123242424242323423423', name: 'Dyas'},
29
      {uid: 'users/222423423523532523532', name: 'Ammar'},
30
    ],
31
  });
32
33
  const voterResult2 = saveVotes(1, voter, votes);
34
35
  expect(voterResult2).toStrictEqual({
36
    '0': [],
37
    '1': [{uid: 'users/103846892623842357554', name: 'Muhammad'}],
38
    '2': [
39
      {uid: 'users/118239915905237561078', name: 'Yaskur'},
40
    ],
41
    '3': [
42
      {uid: 'users/123242424242323423423', name: 'Dyas'},
43
      {uid: 'users/222423423523532523532', name: 'Ammar'},
44
    ],
45
  });
46
});
47
test('test save voter anonymously', () => {
48
  const voter = {uid: 'users/103846892623842357554', name: 'Muhammad'};
49
  const votes: Votes = {
50
    '0': [],
51
    '1': [],
52
    '2': [],
53
    '3': [],
54
  };
55
  const voterResult = saveVotes(2, voter, votes, true);
56
  expect(voterResult).toStrictEqual({
57
    '0': [],
58
    '1': [],
59
    '2': [
60
      {uid: 'users/103846892623842357554'},
61
    ],
62
    '3': [],
63
  });
64
65
  const voterResult2 = saveVotes(1, voter, votes, true);
66
67
  expect(voterResult2).toStrictEqual({
68
    '0': [],
69
    '1': [{uid: 'users/103846892623842357554'}],
70
    '2': [],
71
    '3': [],
72
  });
73
});
74
75
test('build progress bar text', () => {
76
  const progressBar = progressBarText(2, 4);
77
78
  expect(progressBar).toBe('██████████████████');
79
});
80
81
test('build choice section ', () => {
82
  const state = JSON.stringify(dummyPoll);
83
  const normalChoice = choiceSection(2, dummyPoll, 4, state, 'Muhammad Dyas Yaskur');
84
85
  expect(normalChoice).
86
    toStrictEqual({
87
      'collapsible': true,
88
      'uncollapsibleWidgetsCount': 1,
89
      'widgets': [
90
        {
91
          'decoratedText': {
92
            'topLabel': 'Added by Muhammad Dyas Yaskur',
93
            'bottomLabel': progressBarText(2, 4) + ' 2',
94
            'button': {
95
              'onClick': {
96
                'action': {
97
                  'function': 'vote',
98
                  'parameters': [
99
                    {
100
                      'key': 'state',
101
                      'value': JSON.stringify(dummyPoll),
102
                    }, {'key': 'index', 'value': '2'}],
103
                },
104
              }, 'text': 'vote',
105
            },
106
            'text': 'Coco Worm',
107
          },
108
        }, {'textParagraph': {'text': 'Isa bin Maryam, Musa bin Imran'}}],
109
    });
110
111
  dummyPoll.anon = true;
112
  const anonymousChoice = choiceSection(2, dummyPoll, 4,
113
    JSON.stringify(dummyPoll));
114
  expect(anonymousChoice).toStrictEqual({
115
    'widgets': [
116
      {
117
        'decoratedText': {
118
          'bottomLabel': progressBarText(2, 4) + ' 2',
119
          'button': {
120
            'onClick': {
121
              'action': {
122
                'function': 'vote',
123
                'parameters': [
124
                  {
125
                    'key': 'state',
126
                    'value': JSON.stringify(dummyPoll),
127
                  }, {'key': 'index', 'value': '2'}],
128
              },
129
            }, 'text': 'vote',
130
          },
131
          'text': 'Coco Worm',
132
        },
133
      }],
134
  });
135
  dummyPoll.anon = false;
136
});
137
138
test('build vote card', () => {
139
  const pollCard = buildVoteCard(dummyPoll);
140
141
  expect(pollCard.card).toEqual(voteCardJson);
142
});
143
144
test('build vote card with long topic', () => {
145
  dummyPoll.topic = '12345678901234567890123456789012345678901234567890';
146
  const pollCard = buildVoteCard(dummyPoll);
147
148
  expect(pollCard.card?.header).toBeUndefined();
149
  // @ts-ignore: should not error
150
  expect(pollCard.card.sections[0].widgets[0].decoratedText.text).toBe(dummyPoll.topic);
151
});
152