1
+ /*
2
+ * This file is a part of BSL Language Server.
3
+ *
4
+ * Copyright (c) 2018-2022
5
+ * Alexey Sosnoviy <labotamy@gmail.com>, Nikita Fedkin <nixel2007@gmail.com> and contributors
6
+ *
7
+ * SPDX-License-Identifier: LGPL-3.0-or-later
8
+ *
9
+ * BSL Language Server is free software; you can redistribute it and/or
10
+ * modify it under the terms of the GNU Lesser General Public
11
+ * License as published by the Free Software Foundation; either
12
+ * version 3.0 of the License, or (at your option) any later version.
13
+ *
14
+ * BSL Language Server is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ * Lesser General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU Lesser General Public
20
+ * License along with BSL Language Server.
21
+ */
22
+ package com .github ._1c_syntax .bsl .languageserver .aop .sentry ;
23
+
24
+ import com .github ._1c_syntax .bsl .languageserver .LanguageClientHolder ;
25
+ import com .github ._1c_syntax .bsl .languageserver .configuration .LanguageServerConfiguration ;
26
+ import com .github ._1c_syntax .bsl .languageserver .configuration .SendErrorsMode ;
27
+ import com .github ._1c_syntax .bsl .languageserver .util .CleanupContextBeforeClassAndAfterEachTestMethod ;
28
+ import com .github ._1c_syntax .bsl .languageserver .utils .Resources ;
29
+ import io .sentry .Hint ;
30
+ import io .sentry .SentryEvent ;
31
+ import org .eclipse .lsp4j .MessageActionItem ;
32
+ import org .eclipse .lsp4j .services .LanguageClient ;
33
+ import org .junit .jupiter .api .Test ;
34
+ import org .springframework .beans .factory .annotation .Autowired ;
35
+ import org .springframework .boot .test .context .SpringBootTest ;
36
+
37
+ import java .util .concurrent .CompletableFuture ;
38
+
39
+ import static org .assertj .core .api .Assertions .assertThat ;
40
+ import static org .mockito .ArgumentMatchers .any ;
41
+ import static org .mockito .Mockito .mock ;
42
+ import static org .mockito .Mockito .when ;
43
+
44
+ @ SpringBootTest
45
+ @ CleanupContextBeforeClassAndAfterEachTestMethod
46
+ class PermissionFilterBeforeSendCallbackTest {
47
+
48
+ @ Autowired
49
+ private PermissionFilterBeforeSendCallback permissionFilter ;
50
+
51
+ @ Autowired
52
+ private LanguageServerConfiguration configuration ;
53
+
54
+ @ Autowired
55
+ private LanguageClientHolder languageClientHolder ;
56
+
57
+ @ Test
58
+ void sendOnlyOnSendMode () {
59
+
60
+ // given
61
+ configuration .setSendErrors (SendErrorsMode .SEND );
62
+
63
+ var event = new SentryEvent ();
64
+
65
+ // when
66
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
67
+
68
+ // then
69
+ assertThat (filteredEvent ).isNotNull ();
70
+
71
+ }
72
+
73
+ @ Test
74
+ void dontSendIfClientIsNotConnectedAndModeIsAsk () {
75
+
76
+ // given
77
+ configuration .setSendErrors (SendErrorsMode .ASK );
78
+
79
+ languageClientHolder .connect (null );
80
+
81
+ var event = new SentryEvent ();
82
+
83
+ // when
84
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
85
+
86
+ // then
87
+ assertThat (filteredEvent ).isNull ();
88
+
89
+ }
90
+
91
+ @ Test
92
+ void notSendInDontSendMode () {
93
+
94
+ // given
95
+ configuration .setSendErrors (SendErrorsMode .NEVER );
96
+
97
+ var event = new SentryEvent ();
98
+
99
+ // when
100
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
101
+
102
+ // then
103
+ assertThat (filteredEvent ).isNull ();
104
+
105
+ }
106
+
107
+ @ Test
108
+ void notSendIfUserDoesNotGivePermission () {
109
+
110
+ // given
111
+ configuration .setSendErrors (SendErrorsMode .ASK );
112
+
113
+ var languageClient = mock (LanguageClient .class );
114
+ var answerTitle = Resources .getResourceString (
115
+ configuration .getLanguage (),
116
+ PermissionFilterBeforeSendCallback .class ,
117
+ "answer_dontSend"
118
+ );
119
+ var answer = new MessageActionItem (answerTitle );
120
+ when (languageClient .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (answer ));
121
+
122
+ languageClientHolder .connect (languageClient );
123
+
124
+ var event = new SentryEvent ();
125
+
126
+ // when
127
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
128
+
129
+ // then
130
+ assertThat (filteredEvent ).isNull ();
131
+
132
+ }
133
+
134
+ @ Test
135
+ void notSendIfUserClosedQuestion () {
136
+
137
+ // given
138
+ configuration .setSendErrors (SendErrorsMode .ASK );
139
+
140
+ var languageClient = mock (LanguageClient .class );
141
+ when (languageClient .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (new MessageActionItem ()));
142
+
143
+ languageClientHolder .connect (languageClient );
144
+
145
+ var event = new SentryEvent ();
146
+
147
+ // when
148
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
149
+
150
+ // then
151
+ assertThat (filteredEvent ).isNull ();
152
+
153
+ }
154
+
155
+ @ Test
156
+ void sendIfUserGavePermission () {
157
+
158
+ // given
159
+ configuration .setSendErrors (SendErrorsMode .ASK );
160
+
161
+ var languageClient = mock (LanguageClient .class );
162
+ var answerTitle = Resources .getResourceString (
163
+ configuration .getLanguage (),
164
+ PermissionFilterBeforeSendCallback .class ,
165
+ "answer_send"
166
+ );
167
+ var answer = new MessageActionItem (answerTitle );
168
+ when (languageClient .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (answer ));
169
+
170
+ languageClientHolder .connect (languageClient );
171
+
172
+ var event = new SentryEvent ();
173
+
174
+ // when
175
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
176
+
177
+ // then
178
+ assertThat (filteredEvent ).isNotNull ();
179
+ assertThat (configuration .getSendErrors ()).isEqualTo (SendErrorsMode .SEND );
180
+
181
+ }
182
+
183
+ @ Test
184
+ void notSendNextTimeIfUserGavePermissionOnce () {
185
+
186
+ // given
187
+ configuration .setSendErrors (SendErrorsMode .ASK );
188
+
189
+ var languageClient = mock (LanguageClient .class );
190
+ var answerTitle = Resources .getResourceString (
191
+ configuration .getLanguage (),
192
+ PermissionFilterBeforeSendCallback .class ,
193
+ "answer_sendOnce"
194
+ );
195
+ var answer = new MessageActionItem (answerTitle );
196
+ when (languageClient .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (answer ));
197
+
198
+ languageClientHolder .connect (languageClient );
199
+
200
+ var event = new SentryEvent ();
201
+
202
+ // when
203
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
204
+
205
+ // then
206
+ assertThat (filteredEvent ).isNotNull ();
207
+ assertThat (configuration .getSendErrors ()).isEqualTo (SendErrorsMode .ASK );
208
+ }
209
+
210
+ @ Test
211
+ void notSendIfUserSkippedButAsk () {
212
+
213
+ // given
214
+ configuration .setSendErrors (SendErrorsMode .ASK );
215
+
216
+ var languageClient = mock (LanguageClient .class );
217
+ var answerTitle = Resources .getResourceString (
218
+ configuration .getLanguage (),
219
+ PermissionFilterBeforeSendCallback .class ,
220
+ "answer_skip"
221
+ );
222
+ var answer = new MessageActionItem (answerTitle );
223
+ when (languageClient .showMessageRequest (any ())).thenReturn (CompletableFuture .completedFuture (answer ));
224
+
225
+ languageClientHolder .connect (languageClient );
226
+
227
+ var event = new SentryEvent ();
228
+
229
+ // when
230
+ var filteredEvent = permissionFilter .execute (event , mock (Hint .class ));
231
+
232
+ // then
233
+ assertThat (filteredEvent ).isNull ();
234
+ assertThat (configuration .getSendErrors ()).isEqualTo (SendErrorsMode .ASK );
235
+ }
236
+
237
+ }
0 commit comments