3232d08a68c1b1b598da01c690c83b302f5aff36
[lhc/web/wiklou.git] / tests / qunit / suites / resources / mediawiki.rcfilters / dm.FilterItem.test.js
1 ( function ( mw ) {
2 QUnit.module( 'mediawiki.rcfilters - FilterItem' );
3
4 QUnit.test( 'Initializing filter item', function ( assert ) {
5 var item,
6 group1 = new mw.rcfilters.dm.FilterGroup( 'group1' ),
7 group2 = new mw.rcfilters.dm.FilterGroup( 'group2' );
8
9 item = new mw.rcfilters.dm.FilterItem( 'filter1', group1 );
10 assert.equal(
11 item.getName(),
12 'filter1',
13 'Filter name is retained.'
14 );
15 assert.equal(
16 item.getGroupName(),
17 'group1',
18 'Group name is retained.'
19 );
20
21 item = new mw.rcfilters.dm.FilterItem(
22 'filter1',
23 group1,
24 {
25 label: 'test label',
26 description: 'test description'
27 }
28 );
29 assert.equal(
30 item.getLabel(),
31 'test label',
32 'Label information is retained.'
33 );
34 assert.equal(
35 item.getLabel(),
36 'test label',
37 'Description information is retained.'
38 );
39
40 item = new mw.rcfilters.dm.FilterItem(
41 'filter1',
42 group1,
43 {
44 selected: true
45 }
46 );
47 assert.equal(
48 item.isSelected(),
49 true,
50 'Item can be selected in the config.'
51 );
52 item.toggleSelected( true );
53 assert.equal(
54 item.isSelected(),
55 true,
56 'Item can toggle its selected state.'
57 );
58
59 // Subsets
60 item = new mw.rcfilters.dm.FilterItem(
61 'filter1',
62 group1,
63 {
64 subset: [ 'sub1', 'sub2', 'sub3' ]
65 }
66 );
67 assert.deepEqual(
68 item.getSubset(),
69 [ 'sub1', 'sub2', 'sub3' ],
70 'Subset information is retained.'
71 );
72 assert.equal(
73 item.existsInSubset( 'sub1' ),
74 true,
75 'Specific item exists in subset.'
76 );
77 assert.equal(
78 item.existsInSubset( 'sub10' ),
79 false,
80 'Specific item does not exists in subset.'
81 );
82 assert.equal(
83 item.isIncluded(),
84 false,
85 'Initial state of "included" is false.'
86 );
87
88 item.toggleIncluded( true );
89 assert.equal(
90 item.isIncluded(),
91 true,
92 'Item toggles its included state.'
93 );
94
95 // Conflicts
96 item = new mw.rcfilters.dm.FilterItem(
97 'filter1',
98 group1,
99 {
100 conflicts: {
101 conflict1: { group: 'group2', filter: 'conflict1' },
102 conflict2: { group: 'group2', filter: 'conflict2' },
103 conflict3: { group: 'group2', filter: 'conflict3' }
104 }
105 }
106 );
107 assert.deepEqual(
108 item.getConflicts(),
109 {
110 conflict1: { group: 'group2', filter: 'conflict1' },
111 conflict2: { group: 'group2', filter: 'conflict2' },
112 conflict3: { group: 'group2', filter: 'conflict3' }
113 },
114 'Conflict information is retained.'
115 );
116 assert.equal(
117 // TODO: Consider allowing for either a FilterItem or a filter name
118 // in this method, so it is consistent with the subset one
119 item.existsInConflicts( new mw.rcfilters.dm.FilterItem( 'conflict1', group2 ) ),
120 true,
121 'Specific item exists in conflicts.'
122 );
123 assert.equal(
124 item.existsInConflicts( new mw.rcfilters.dm.FilterItem( 'conflict10', group1 ) ),
125 false,
126 'Specific item does not exists in conflicts.'
127 );
128 assert.equal(
129 item.isConflicted(),
130 false,
131 'Initial state of "conflicted" is false.'
132 );
133
134 item.toggleConflicted( true );
135 assert.equal(
136 item.isConflicted(),
137 true,
138 'Item toggles its conflicted state.'
139 );
140
141 // Fully covered
142 item = new mw.rcfilters.dm.FilterItem( 'filter1', group1 );
143 assert.equal(
144 item.isFullyCovered(),
145 false,
146 'Initial state of "full coverage" is false.'
147 );
148 item.toggleFullyCovered( true );
149 assert.equal(
150 item.isFullyCovered(),
151 true,
152 'Item toggles its fully coverage state.'
153 );
154
155 } );
156
157 QUnit.test( 'Emitting events', function ( assert ) {
158 var group1 = new mw.rcfilters.dm.FilterGroup( 'group1' ),
159 item = new mw.rcfilters.dm.FilterItem( 'filter1', group1 ),
160 events = [];
161
162 // Listen to update events
163 item.on( 'update', function () {
164 events.push( item.getState() );
165 } );
166
167 // Do stuff
168 item.toggleSelected( true ); // { selected: true, included: false, conflicted: false, fullyCovered: false }
169 item.toggleSelected( true ); // No event (duplicate state)
170 item.toggleIncluded( true ); // { selected: true, included: true, conflicted: false, fullyCovered: false }
171 item.toggleConflicted( true ); // { selected: true, included: true, conflicted: true, fullyCovered: false }
172 item.toggleFullyCovered( true ); // { selected: true, included: true, conflicted: true, fullyCovered: true }
173 item.toggleSelected(); // { selected: false, included: true, conflicted: true, fullyCovered: true }
174
175 // Check emitted events
176 assert.deepEqual(
177 events,
178 [
179 { selected: true, included: false, conflicted: false, fullyCovered: false },
180 { selected: true, included: true, conflicted: false, fullyCovered: false },
181 { selected: true, included: true, conflicted: true, fullyCovered: false },
182 { selected: true, included: true, conflicted: true, fullyCovered: true },
183 { selected: false, included: true, conflicted: true, fullyCovered: true }
184 ],
185 'Events emitted successfully.'
186 );
187 } );
188 }( mediaWiki ) );