/*************************GO-LICENSE-START*********************************
* Copyright 2014 ThoughtWorks, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*************************GO-LICENSE-END***********************************/
package com.thoughtworks.go.plugin.access.notification;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class NotificationPluginRegistryTest {
public static final String PLUGIN_ID_1 = "plugin-id-1";
public static final String PLUGIN_ID_2 = "plugin-id-2";
public static final String PLUGIN_ID_3 = "plugin-id-3";
public static final String PLUGIN_ID_4 = "plugin-id-4";
public static final String PIPELINE_STATUS = "pipeline-status";
public static final String STAGE_STATUS = "stage-status";
public static final String JOB_STATUS = "job-status";
public static final String UNKNOWN_NOTIFICATION = "unknown-notification";
private NotificationPluginRegistry notificationPluginRegistry;
@Before
public void setUp() {
notificationPluginRegistry = new NotificationPluginRegistry();
notificationPluginRegistry.registerPluginInterests(PLUGIN_ID_1, asList(PIPELINE_STATUS, STAGE_STATUS, JOB_STATUS));
notificationPluginRegistry.registerPluginInterests(PLUGIN_ID_2, asList(PIPELINE_STATUS));
notificationPluginRegistry.registerPluginInterests(PLUGIN_ID_3, asList(STAGE_STATUS));
}
@After
public void tearDown() {
notificationPluginRegistry.clear();
}
@Test
public void should_getPluginsInterestedIn_Correctly() {
assertThat(notificationPluginRegistry.getPluginsInterestedIn(PIPELINE_STATUS), containsInAnyOrder(PLUGIN_ID_1, PLUGIN_ID_2));
assertThat(notificationPluginRegistry.getPluginsInterestedIn(STAGE_STATUS), containsInAnyOrder(PLUGIN_ID_1, PLUGIN_ID_3));
assertThat(notificationPluginRegistry.getPluginsInterestedIn(JOB_STATUS), containsInAnyOrder(PLUGIN_ID_1));
assertThat(notificationPluginRegistry.getPluginsInterestedIn(UNKNOWN_NOTIFICATION), containsInAnyOrder());
}
@Test
public void should_getPluginInterests_Correctly() {
assertThat(notificationPluginRegistry.getPluginInterests(PLUGIN_ID_1), containsInAnyOrder(PIPELINE_STATUS, STAGE_STATUS, JOB_STATUS));
assertThat(notificationPluginRegistry.getPluginInterests(PLUGIN_ID_2), containsInAnyOrder(PIPELINE_STATUS));
assertThat(notificationPluginRegistry.getPluginInterests(PLUGIN_ID_3), containsInAnyOrder(STAGE_STATUS));
assertThat(notificationPluginRegistry.getPluginInterests(PLUGIN_ID_4), containsInAnyOrder());
}
@Test
public void should_removePluginInterests_Correctly() {
notificationPluginRegistry.removePluginInterests(PLUGIN_ID_1);
assertThat(notificationPluginRegistry.getPluginsInterestedIn(PIPELINE_STATUS), containsInAnyOrder(PLUGIN_ID_2));
assertThat(notificationPluginRegistry.getPluginsInterestedIn(STAGE_STATUS), containsInAnyOrder(PLUGIN_ID_3));
assertThat(notificationPluginRegistry.getPluginsInterestedIn(JOB_STATUS), containsInAnyOrder());
assertThat(notificationPluginRegistry.getPluginsInterestedIn(UNKNOWN_NOTIFICATION), containsInAnyOrder());
}
@Test
public void should_isAnyPluginInterestedIn_Correctly() {
assertThat(notificationPluginRegistry.isAnyPluginInterestedIn(PIPELINE_STATUS), is(true));
assertThat(notificationPluginRegistry.isAnyPluginInterestedIn(UNKNOWN_NOTIFICATION), is(false));
}
@Test
public void shouldListRegisteredPlugins() {
notificationPluginRegistry.registerPlugin("plugin_id_1");
notificationPluginRegistry.registerPlugin("plugin_id_2");
assertThat(notificationPluginRegistry.getNotificationPlugins().size(), is(2));
assertTrue(notificationPluginRegistry.getNotificationPlugins().contains("plugin_id_1"));
assertTrue(notificationPluginRegistry.getNotificationPlugins().contains("plugin_id_2"));
}
@Test
public void shouldNotRegisterDuplicatePlugins() {
notificationPluginRegistry.registerPlugin("plugin_id_1");
notificationPluginRegistry.registerPlugin("plugin_id_1");
assertThat(notificationPluginRegistry.getNotificationPlugins().size(), is(1));
assertTrue(notificationPluginRegistry.getNotificationPlugins().contains("plugin_id_1"));
}
@Test
public void shouldNotListDeRegisteredPlugins() {
notificationPluginRegistry.registerPlugin("plugin_id_1");
notificationPluginRegistry.deregisterPlugin("plugin_id_1");
assertTrue(notificationPluginRegistry.getNotificationPlugins().isEmpty());
}
}