]> source.dussan.org Git - sonarqube.git/blob
b8d3d6e30fb75d9b3d7cd73406f2acbbba1514ad
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2023 SonarSource SA
4  * mailto:info AT sonarsource DOT com
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 3 of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20 package org.sonar.server.notification;
21
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.Mock;
25 import org.mockito.MockitoAnnotations;
26 import org.sonar.api.notifications.Notification;
27 import org.sonar.api.notifications.NotificationChannel;
28
29 import static org.hamcrest.CoreMatchers.is;
30 import static org.junit.Assert.assertThat;
31 import static org.mockito.Mockito.never;
32 import static org.mockito.Mockito.times;
33 import static org.mockito.Mockito.verify;
34 import static org.mockito.Mockito.when;
35
36 public class NotificationDispatcherTest {
37
38   @Mock
39   private NotificationChannel channel;
40
41   @Mock
42   private Notification notification;
43
44   @Mock
45   private NotificationDispatcher.Context context;
46
47   @Before
48   public void init() {
49     MockitoAnnotations.initMocks(this);
50     when(notification.getType()).thenReturn("event1");
51   }
52
53   @Test
54   public void defaultMethods() {
55     NotificationDispatcher dispatcher = new FakeGenericNotificationDispatcher();
56     assertThat(dispatcher.getKey(), is("FakeGenericNotificationDispatcher"));
57     assertThat(dispatcher.toString(), is("FakeGenericNotificationDispatcher"));
58   }
59
60   @Test
61   public void shouldAlwaysRunDispatchForGenericDispatcher() {
62     NotificationDispatcher dispatcher = new FakeGenericNotificationDispatcher();
63     dispatcher.performDispatch(notification, context);
64
65     verify(context, times(1)).addUser("user1", channel);
66   }
67
68   @Test
69   public void shouldNotAlwaysRunDispatchForSpecificDispatcher() {
70     NotificationDispatcher dispatcher = new FakeSpecificNotificationDispatcher();
71
72     // a "event1" notif is sent
73     dispatcher.performDispatch(notification, context);
74     verify(context, never()).addUser("user1", channel);
75
76     // now, a "specific-event" notif is sent
77     when(notification.getType()).thenReturn("specific-event");
78     dispatcher.performDispatch(notification, context);
79     verify(context, times(1)).addUser("user1", channel);
80   }
81
82   class FakeGenericNotificationDispatcher extends NotificationDispatcher {
83     @Override
84     public void dispatch(Notification notification, Context context) {
85       context.addUser("user1", channel);
86     }
87   }
88
89   class FakeSpecificNotificationDispatcher extends NotificationDispatcher {
90
91     public FakeSpecificNotificationDispatcher() {
92       super("specific-event");
93     }
94
95     @Override
96     public void dispatch(Notification notification, Context context) {
97       context.addUser("user1", channel);
98     }
99   }
100
101 }