/* * Copyright 2016 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. */ package com.thoughtworks.go.plugin.access.authentication; import com.thoughtworks.go.plugin.access.authentication.models.AuthenticationPluginConfiguration; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.Set; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class AuthenticationPluginRegistryTest { private AuthenticationPluginRegistry registry; @Before public void setUp() { registry = new AuthenticationPluginRegistry(); registry.registerPlugin("plugin-id-1", new AuthenticationPluginConfiguration("plugin 1", "image 1", true, true)); registry.registerPlugin("plugin-id-2", new AuthenticationPluginConfiguration("plugin 2", null, false, false)); registry.registerPlugin("plugin-id-3", new AuthenticationPluginConfiguration("plugin 3", "image 3", true, true)); registry.registerPlugin("plugin-id-4", new AuthenticationPluginConfiguration("plugin 4", null, false, false)); } @After public void tearDown() { registry.clear(); } @Test public void shouldGetAllAuthenticationPlugins() { verifySetContents(registry.getAuthenticationPlugins(), "plugin-id-1", "plugin-id-2", "plugin-id-3", "plugin-id-4"); } @Test public void shouldGetAllPluginsThatSupportsWebBasedAuthentication() { verifySetContents(registry.getPluginsThatSupportsWebBasedAuthentication(), "plugin-id-1", "plugin-id-3"); } @Test public void shouldGetAllPluginsThatSupportsPasswordBasedAuthentication() { verifySetContents(registry.getPluginsThatSupportsPasswordBasedAuthentication(), "plugin-id-1", "plugin-id-3"); } @Test public void shouldGetIndividualConfigurationExistingPlugin() { verifyConfigurationFor("plugin-id-1", "plugin 1", "image 1", true, true, true); verifyConfigurationFor("plugin-id-2", "plugin 2", null, false, false, true); verifyConfigurationFor("plugin-id-3", "plugin 3", "image 3", true, true, false); verifyConfigurationFor("plugin-id-4", "plugin 4", null, false, false, false); } @Test public void shouldGetIndividualConfigurationForNonExistingPlugin() { String pluginId = "non-existing-plugin"; assertThat(registry.getDisplayNameFor(pluginId), is(nullValue())); assertThat(registry.getDisplayImageURLFor(pluginId), is(nullValue())); assertThat(registry.supportsPasswordBasedAuthentication(pluginId), is(false)); } @Test public void shouldDeregisterPlugins() { registry.deregisterPlugin("plugin-id-2"); registry.deregisterPlugin("plugin-id-3"); verifySetContents(registry.getAuthenticationPlugins(), "plugin-id-1", "plugin-id-4"); verifySetContents(registry.getPluginsThatSupportsWebBasedAuthentication(), "plugin-id-1"); verifySetContents(registry.getPluginsThatSupportsPasswordBasedAuthentication(), "plugin-id-1"); } private void verifySetContents(Set<String> set, String... values) { assertThat(set.size(), is(values.length)); assertThat(set, containsInAnyOrder(values)); } private void verifyConfigurationFor(String pluginId, String displayName, String displayImageURL, boolean supportsWebBasedAuthentication, boolean supportsPasswordBasedAuthentication, boolean supportsUserSearch) { assertThat(registry.getDisplayNameFor(pluginId), is(displayName)); assertThat(registry.getDisplayImageURLFor(pluginId), is(displayImageURL)); assertThat(registry.supportsPasswordBasedAuthentication(pluginId), is(supportsWebBasedAuthentication)); assertThat(registry.supportsPasswordBasedAuthentication(pluginId), is(supportsPasswordBasedAuthentication)); } }