1
+
2
+ import { Framework } from "$lib/controller/framework" ;
3
+ import { BlacklistEntry } from "$lib/model/tables/blacklist/Blacklist" ;
4
+ import { jest } from "@jest/globals" ;
5
+ import { fireEvent } from "@testing-library/dom" ;
6
+ import { ServerMock } from "./__setup__/serverMock" ;
7
+ import { BUTTON } from "./__setup__/constants" ;
8
+ import { clickOnButtonForRows , clickOnButtonForSomeRows , getAllRows } from "./__setup__/helpers" ;
9
+ import { matchers } from "./__setup__/matcher" ;
10
+ import render from "./__setup__/pageRenderer" ;
11
+ import { OpenFramework } from "./__setup__/__mocks__/OpenFramework" ;
12
+
13
+ expect . extend ( matchers ) ;
14
+
15
+ describe ( "Testing interactions of blacklist as user" , ( ) => {
16
+
17
+ let page : HTMLElement ;
18
+
19
+ let framework : OpenFramework ;
20
+ let serverMock : ServerMock ;
21
+ let fetchBackend : ( body : string ) => Promise < any > ;
22
+
23
+ beforeAll ( ( ) => {
24
+ serverMock = new ServerMock ( [ ] , [ ] , [ ] ) ;
25
+ fetchBackend = serverMock . getFetchBackendMock ( ) ;
26
+ framework = new OpenFramework ( ) ;
27
+ Framework [ 'instance' ] = framework ;
28
+ framework [ 'backend' ] [ 'fetchBackend' ] = fetchBackend ;
29
+ } ) ;
30
+
31
+ const originalWarn = console . warn . bind ( console . warn )
32
+ beforeAll ( ( ) => {
33
+ console . warn = ( msg ) => ! msg . toString ( ) . includes ( 'prop' ) && originalWarn ( msg )
34
+ } )
35
+ afterAll ( ( ) => {
36
+ console . warn = originalWarn
37
+ } )
38
+
39
+ beforeEach ( ( ) => {
40
+ serverMock . setBlacklist ( [ ] ) ;
41
+ } ) ;
42
+
43
+ describe ( "a single entry" , ( ) => {
44
+
45
+ const entry = new BlacklistEntry ( "seggs" ) ;
46
+
47
+ beforeEach ( async ( ) => {
48
+ serverMock . setBlacklist ( [ entry ] ) ;
49
+ page = await render . blacklist ( ) ;
50
+ } ) ;
51
+
52
+ test ( "renders correctly" , async ( ) => {
53
+ expect ( page ) . toHaveAllRows ( [ entry ] ) ;
54
+ expect ( getAllRows ( page ) . length ) . toBe ( serverMock . getBlacklist ( ) . length ) ;
55
+ } ) ;
56
+
57
+ test ( "can be removed" , async ( ) => {
58
+ expect ( page ) . toHaveAllRows ( [ entry ] ) ;
59
+ clickOnButtonForRows ( page , BUTTON . BLACKLIST . DELETE ) ;
60
+
61
+ page = await render . blacklist ( ) ;
62
+ expect ( page ) . not . toHaveAllRows ( [ entry ] ) ;
63
+
64
+ page = await render . changes ( ) ;
65
+ expect ( getAllRows ( page ) . length ) . toBe ( 1 ) ;
66
+ expect ( page ) . toHaveAllMetadata ( [ entry ] ) ;
67
+
68
+ clickOnButtonForRows ( page , BUTTON . CHANGES . ACCEPT ) ;
69
+
70
+ page = await render . changes ( ) ;
71
+ expect ( getAllRows ( page ) . length ) . toBe ( 0 ) ;
72
+ expect ( serverMock . getBlacklist ( ) . length ) . toBe ( 0 ) ;
73
+
74
+ page = await render . blacklist ( ) ;
75
+ expect ( page ) . not . toHaveAllRows ( [ entry ] ) ;
76
+ } ) ;
77
+
78
+ test ( "is visible after abortion of change" , async ( ) => {
79
+ expect ( page ) . toHaveAllRows ( [ entry ] ) ;
80
+ clickOnButtonForRows ( page , BUTTON . BLACKLIST . DELETE ) ;
81
+
82
+ page = await render . blacklist ( ) ;
83
+ expect ( page ) . not . toHaveAllRows ( [ entry ] ) ;
84
+
85
+ page = await render . changes ( ) ;
86
+ expect ( getAllRows ( page ) . length ) . toBe ( 1 ) ;
87
+ expect ( page ) . toHaveAllMetadata ( [ entry ] ) ;
88
+
89
+ clickOnButtonForRows ( page , BUTTON . CHANGES . CANCEL ) ;
90
+
91
+ page = await render . changes ( ) ;
92
+ expect ( getAllRows ( page ) . length ) . toBe ( 0 ) ;
93
+
94
+ page = await render . blacklist ( ) ;
95
+ expect ( page ) . toHaveAllRows ( [ entry ] ) ;
96
+ expect ( serverMock . getBlacklist ( ) . length ) . toBe ( 1 ) ;
97
+ } ) ;
98
+ } ) ;
99
+
100
+ describe ( "multiple entries" , ( ) => {
101
+
102
+ beforeEach ( async ( ) => {
103
+ serverMock . setBlacklist ( [ new BlacklistEntry ( "seggs" ) , new BlacklistEntry ( "penis" ) , new BlacklistEntry ( "arsch" ) ] ) ;
104
+ page = await render . blacklist ( ) ;
105
+ } ) ;
106
+
107
+ test ( "renders correctly" , ( ) => {
108
+ expect ( page ) . toHaveAllRows ( serverMock . getBlacklist ( ) )
109
+ expect ( getAllRows ( page ) . length ) . toBe ( serverMock . getBlacklist ( ) . length ) ;
110
+ } ) ;
111
+
112
+ test . each ( [
113
+ [ [ 0 ] , [ 1 , 2 ] ] ,
114
+ [ [ 1 ] , [ 0 , 2 ] ] ,
115
+ [ [ 2 ] , [ 0 , 1 ] ] ,
116
+ [ [ 0 , 1 ] , [ 2 ] ] ,
117
+ [ [ 1 , 2 ] , [ 0 ] ] ,
118
+ [ [ 0 , 2 ] , [ 1 ] ] ,
119
+ [ [ 0 , 1 , 2 ] , [ ] ]
120
+ ] ) ( "can be removed" , async ( toRemove : number [ ] , alwaysVisible : number [ ] ) => {
121
+ let visibleEntries = alwaysVisible . map ( index => serverMock . getBlacklist ( ) [ index ] . toDisplayData ( ) [ 0 ] ) ;
122
+ let removedEntries = toRemove . map ( index => serverMock . getBlacklist ( ) [ index ] . toDisplayData ( ) [ 0 ] ) ;
123
+ clickOnButtonForSomeRows ( page , toRemove , BUTTON . BLACKLIST . DELETE ) ;
124
+
125
+ page = await render . blacklist ( ) ;
126
+ expect ( page ) . toHaveSomeRows ( alwaysVisible , serverMock . getBlacklist ( ) ) ;
127
+ expect ( page ) . not . toHaveSomeRows ( toRemove , serverMock . getBlacklist ( ) ) ;
128
+
129
+ page = await render . changes ( ) ;
130
+ expect ( page ) . toHaveSomeMetadata ( toRemove , serverMock . getBlacklist ( ) ) ;
131
+ expect ( getAllRows ( page ) . length ) . toBe ( toRemove . length ) ;
132
+
133
+ clickOnButtonForRows ( page , BUTTON . CHANGES . ACCEPT ) ;
134
+
135
+ page = await render . changes ( ) ;
136
+ expect ( page ) . not . toHaveSomeMetadata ( toRemove , serverMock . getBlacklist ( ) ) ;
137
+ expect ( getAllRows ( page ) . length ) . toBe ( 0 ) ;
138
+ expect ( serverMock . getBlacklist ( ) . length ) . toBe ( alwaysVisible . length ) ;
139
+
140
+ page = await render . blacklist ( ) ;
141
+ expect ( getAllRows ( page ) . length ) . toBe ( serverMock . getBlacklist ( ) . length ) ;
142
+
143
+ expect ( page ) . toHaveAllRows ( visibleEntries ) ;
144
+ expect ( page ) . not . toHaveAllRows ( removedEntries ) ;
145
+ } ) ;
146
+
147
+ test . each ( [
148
+ [ [ 0 ] , [ 1 , 2 ] ] ,
149
+ [ [ 1 ] , [ 0 , 2 ] ] ,
150
+ [ [ 2 ] , [ 0 , 1 ] ] ,
151
+ [ [ 0 , 1 ] , [ 2 ] ] ,
152
+ [ [ 1 , 2 ] , [ 0 ] ] ,
153
+ [ [ 0 , 2 ] , [ 1 ] ] ,
154
+ [ [ 0 , 1 , 2 ] , [ ] ]
155
+ ] ) ( "is visible after abortion of action" , async ( toRemove : number [ ] , alwaysVisible : number [ ] ) => {
156
+ clickOnButtonForSomeRows ( page , toRemove , BUTTON . BLACKLIST . DELETE ) ;
157
+
158
+ page = await render . blacklist ( ) ;
159
+ expect ( page ) . toHaveSomeRows ( alwaysVisible , serverMock . getBlacklist ( ) ) ;
160
+ expect ( page ) . not . toHaveSomeRows ( toRemove , serverMock . getBlacklist ( ) ) ;
161
+
162
+ page = await render . changes ( ) ;
163
+ expect ( page ) . toHaveSomeMetadata ( toRemove , serverMock . getBlacklist ( ) ) ;
164
+ expect ( getAllRows ( page ) . length ) . toBe ( toRemove . length ) ;
165
+
166
+ clickOnButtonForRows ( page , BUTTON . CHANGES . CANCEL ) ;
167
+
168
+ page = await render . changes ( ) ;
169
+ expect ( getAllRows ( page ) . length ) . toBe ( 0 ) ;
170
+ expect ( page ) . not . toHaveSomeMetadata ( toRemove , serverMock . getBlacklist ( ) ) ;
171
+ expect ( serverMock . getBlacklist ( ) . length ) . toBe ( toRemove . length + alwaysVisible . length ) ;
172
+
173
+ page = await render . blacklist ( ) ;
174
+ expect ( getAllRows ( page ) . length ) . toBe ( serverMock . getBlacklist ( ) . length ) ;
175
+ expect ( page ) . toHaveAllRows ( serverMock . getBlacklist ( ) )
176
+ } ) ;
177
+ } ) ;
178
+ } ) ;
0 commit comments