@Test public void no_pages_with_the_same_path() { underTest.addPage(page); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Page 'Project Export' cannot be loaded. Another page with key 'governance/project_export' already exists."); underTest.addPage(page); }
@Test public void test_page_definition() { PageDefinition underTest = context -> context.addPage(Page.builder("my_plugin/my_page").setName("My Page").build()); Context context = new Context(); underTest.define(context); assertThat(context.getPages()).extracting(Page::getKey).contains("my_plugin/my_page"); }
@Override public void start() { Context context = new Context(); definitions.forEach(definition -> definition.define(context)); Context coreContext = new Context(); corePageDefinitions.stream() .map(CorePageDefinition::getPageDefinition) .forEach(definition -> definition.define(coreContext)); pages = Stream.concat( context.getPages().stream().peek(this::checkPluginExists), coreContext.getPages().stream().peek(this::checkCoreExtensionExists)) .sorted(comparing(Page::getKey)) .collect(toList()); }
@Test public void ordered_by_name() { underTest .addPage(Page.builder("fake/K1").setName("N2").build()) .addPage(Page.builder("fake/K2").setName("N3").build()) .addPage(Page.builder("fake/K3").setName("N1").build()); Collection<Page> result = underTest.getPages(); assertThat(result).extracting(Page::getKey, Page::getName) .containsOnly( tuple("fake/K3", "N1"), tuple("fake/K1", "N2"), tuple("fake/K2", "N3")); }
@Test public void empty_pages_by_default() { Collection<Page> result = underTest.getPages(); assertThat(result).isEmpty(); }
@Override public void start() { Context context = new Context(); definitions.forEach(definition -> definition.define(context)); Context coreContext = new Context(); corePageDefinitions.stream() .map(CorePageDefinition::getPageDefinition) .forEach(definition -> definition.define(coreContext)); pages = Stream.concat( context.getPages().stream().peek(this::checkPluginExists), coreContext.getPages().stream().peek(this::checkCoreExtensionExists)) .sorted(comparing(Page::getKey)) .collect(toList()); }
private void init(Page... pages) { PluginRepository pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin(any())).thenReturn(true); when(pluginRepository.getPluginInfo(any())).thenReturn(new PluginInfo("unused")); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); when(coreExtensionRepository.isInstalled(any())).thenReturn(false); PageRepository pageRepository = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[] {context -> { for (Page page : pages) { context.addPage(page); } }}); ws = new WsActionTester(new SettingsAction(pageRepository, settings.asConfig(), userSessionRule)); pageRepository.start(); }
private void initWithPages(Page... pages) { PluginRepository pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin(any())).thenReturn(true); when(pluginRepository.getPluginInfo(any())).thenReturn(new PluginInfo("unused").setVersion(Version.create("1.0"))); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); when(coreExtensionRepository.isInstalled(any())).thenReturn(false); PageRepository pageRepository = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[] {context -> { for (Page page : pages) { context.addPage(page); } }}); pageRepository.start(); ws = new WsActionTester(new OrganizationAction(dbClient, defaultOrganizationProvider, userSession, pageRepository, billingValidations)); }
@Test public void fail_if_page_with_unknown_plugin() { PageDefinition governance = context -> context.addPage(Page.builder("governance/my_key").setName("N1").build()); PageDefinition plugin42 = context -> context.addPage(Page.builder("plugin_42/my_key").setName("N2").build()); pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin("governance")).thenReturn(true); underTest = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[]{governance, plugin42}); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Page 'N2' references plugin 'plugin_42' that does not exist"); underTest.start(); } }
private void init(org.sonar.api.web.page.Page[] pages, ResourceTypeTree[] resourceTypeTrees) { when(dbClient.getDatabase().getDialect()).thenReturn(new H2()); when(server.getVersion()).thenReturn("6.42"); PluginRepository pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin(any())).thenReturn(true); when(pluginRepository.getPluginInfo(any())).thenReturn(new PluginInfo("unused").setVersion(Version.create("1.0"))); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); when(coreExtensionRepository.isInstalled(any())).thenReturn(false); PageRepository pageRepository = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[] {context -> { for (Page page : pages) { context.addPage(page); } }}); pageRepository.start(); GlobalAction wsAction = new GlobalAction(pageRepository, settings.asConfig(), new ResourceTypes(resourceTypeTrees), server, webServer, dbClient, organizationFlags, defaultOrganizationProvider, branchFeature, userSession, editionProvider); ws = new WsActionTester(wsAction); wsAction.start(); }
private void init(Page... pages) { PluginRepository pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin(any())).thenReturn(true); when(pluginRepository.getPluginInfo(any())).thenReturn(new PluginInfo("unused").setVersion(Version.create("1.0"))); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); when(coreExtensionRepository.isInstalled(any())).thenReturn(false); PageRepository pageRepository = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[] {context -> { for (Page page : pages) { context.addPage(page); } }}); pageRepository.start(); ws = new WsActionTester( new ComponentAction(dbClient, pageRepository, resourceTypes, userSession, new ComponentFinder(dbClient, resourceTypes), new QualityGateFinder(dbClient), billingValidations)); }
@Test public void filter_pages_without_qualifier() { PageDefinition plugin = context -> context .addPage(Page.builder("my_plugin/K1").setName("N1").build()) .addPage(Page.builder("my_plugin/K2").setName("N2").build()) .addPage(Page.builder("my_plugin/K3").setName("N3").build()); underTest = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[]{plugin}); underTest.start(); List<Page> result = underTest.getGlobalPages(false); assertThat(result) .extracting(Page::getKey) .containsExactly("my_plugin/K1", "my_plugin/K2", "my_plugin/K3"); }
@Test public void get_organization_pages() { PageDefinition plugin = context -> context .addPage(Page.builder("my_plugin/G1").setName("G1").setScope(GLOBAL).build()) .addPage(Page.builder("my_plugin/C1").setName("C1").setScope(COMPONENT).build()) .addPage(Page.builder("my_plugin/O1").setName("O1").setScope(ORGANIZATION).build()) .addPage(Page.builder("my_plugin/O2").setName("O2").setScope(ORGANIZATION).build()) .addPage(Page.builder("my_plugin/O3").setName("O3").setScope(ORGANIZATION).build()) .addPage(Page.builder("my_plugin/OA1").setName("OA1").setScope(ORGANIZATION).setAdmin(true).build()); underTest = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[]{plugin}); underTest.start(); List<Page> result = underTest.getOrganizationPages(false); assertThat(result) .extracting(Page::getKey) .containsExactly("my_plugin/O1", "my_plugin/O2", "my_plugin/O3"); }
@Test public void get_organization_admin_pages() { PageDefinition plugin = context -> context .addPage(Page.builder("my_plugin/O1").setName("O1").setScope(ORGANIZATION).build()) .addPage(Page.builder("my_plugin/O2").setName("O2").setScope(ORGANIZATION).setAdmin(true).build()); underTest = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[]{plugin}); underTest.start(); List<Page> result = underTest.getOrganizationPages(true); assertThat(result) .extracting(Page::getKey) .containsExactly("my_plugin/O2"); }
@Test public void filter_by_navigation_and_qualifier() { PageDefinition plugin = context -> context // Default with GLOBAL navigation and no qualifiers .addPage(Page.builder("my_plugin/K1").setName("K1").build()) .addPage(Page.builder("my_plugin/K2").setName("K2").setScope(COMPONENT).setComponentQualifiers(Qualifier.PROJECT).build()) .addPage(Page.builder("my_plugin/K3").setName("K3").setScope(COMPONENT).setComponentQualifiers(Qualifier.MODULE).build()) .addPage(Page.builder("my_plugin/K4").setName("K4").setScope(GLOBAL).build()) .addPage(Page.builder("my_plugin/K5").setName("K5").setScope(COMPONENT).setComponentQualifiers(Qualifier.VIEW).build()) .addPage(Page.builder("my_plugin/K6").setName("K6").setScope(COMPONENT).setComponentQualifiers(Qualifier.APP).build()); underTest = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[]{plugin}); underTest.start(); List<Page> result = underTest.getComponentPages(false, Qualifiers.PROJECT); assertThat(result) .extracting(Page::getKey) .containsExactly("my_plugin/K2"); }
@Test public void pages_from_different_page_definitions_ordered_by_key() { PageDefinition firstPlugin = context -> context .addPage(Page.builder("my_plugin/K1").setName("N1").build()) .addPage(Page.builder("my_plugin/K3").setName("N3").build()); PageDefinition secondPlugin = context -> context.addPage(Page.builder("my_plugin/K2").setName("N2").build()); underTest = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[]{firstPlugin, secondPlugin}); underTest.start(); List<Page> result = underTest.getAllPages(); assertThat(result) .extracting(Page::getKey, Page::getName) .containsExactly( tuple("my_plugin/K1", "N1"), tuple("my_plugin/K2", "N2"), tuple("my_plugin/K3", "N3")); }
@Override public void define(Context context) { context.addPage( Page.builder("dependencycheck/report") .setScope(Scope.COMPONENT) .setComponentQualifiers(Page.Qualifier.PROJECT, Page.Qualifier.MODULE) .setName("Dependency-Check") .setAdmin(false).build()); } }
@Override public void define(Context context) { context .addPage(Page.builder("example/custom_page_4_project") .setName("Custom Project Page (Pure JS)") .setScope(Scope.COMPONENT).build()) .addPage(Page.builder("example/measures_history") .setName("Custom Project Page using ReactJS") .setScope(Scope.COMPONENT).build()) .addPage(Page.builder("example/custom_page_4_admin") .setName("Custom Admin Page") .setScope(Scope.GLOBAL) .setAdmin(Boolean.TRUE).build()) .addPage(Page.builder("example/sanity_check") .setName("Custom Admin Page Sanity Check") .setScope(Scope.GLOBAL) .setAdmin(Boolean.TRUE).build()) .addPage(Page.builder("example/custom_page_global") .setName("Custom Global Page") .setScope(Scope.GLOBAL).build()); } }