/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * 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 org.kie.workbench.common.widgets.configresource.client.widget.bound; import java.util.List; import javax.enterprise.event.Event; import org.drools.workbench.models.datamodel.imports.Import; import org.drools.workbench.models.datamodel.imports.Imports; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle; import org.kie.workbench.common.widgets.client.datamodel.ImportAddedEvent; import org.kie.workbench.common.widgets.client.datamodel.ImportRemovedEvent; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class ImportsWidgetPresenterTest { @Mock ImportsWidgetView view; @Mock Event<ImportAddedEvent> importAddedEvent; @Mock Event<ImportRemovedEvent> importRemovedEvent; @Mock AsyncPackageDataModelOracle dmo; @Captor private ArgumentCaptor<List<Import>> internalFactTypesCaptor; @Captor private ArgumentCaptor<List<Import>> externalFactTypesCaptor; @Captor private ArgumentCaptor<List<Import>> importsFactTypesCaptor; @Captor private ArgumentCaptor<ImportAddedEvent> importAddedEventCaptor; @Captor private ArgumentCaptor<ImportRemovedEvent> importRemovedEventCaptor; @Before public void setup() { when(dmo.getInternalFactTypes()).thenReturn(new String[]{"Internal1", "Internal2", "Internal3"}); when(dmo.getExternalFactTypes()).thenReturn(new String[]{"org.pkg1.External1", "org.pkg1.External2", "org.pkg1.External3"}); } @Test public void testSetup() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); verify(view, times(1)).init(presenter); } @Test public void testSetContent() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); final Imports imports = new Imports(); imports.addImport(new Import("Internal1")); presenter.setContent(dmo, imports, false); verify(view, times(1)).setContent(internalFactTypesCaptor.capture(), externalFactTypesCaptor.capture(), importsFactTypesCaptor.capture(), eq(false)); assertEquals(3, internalFactTypesCaptor.getValue().size()); assertContains("Internal1", internalFactTypesCaptor.getValue()); assertContains("Internal2", internalFactTypesCaptor.getValue()); assertContains("Internal3", internalFactTypesCaptor.getValue()); assertEquals(3, externalFactTypesCaptor.getValue().size()); assertContains("org.pkg1.External1", externalFactTypesCaptor.getValue()); assertContains("org.pkg1.External2", externalFactTypesCaptor.getValue()); assertContains("org.pkg1.External3", externalFactTypesCaptor.getValue()); assertEquals(0, importsFactTypesCaptor.getValue().size()); assertEquals(1, imports.getImports().size()); assertContains("Internal1", imports.getImports()); } @Test public void isInternalImportWithoutSetup() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); assertFalse(presenter.isInternalImport(mock(Import.class))); } @Test public void isInternalImportWithoutSetupNullImportType() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); assertFalse(presenter.isInternalImport(null)); } @Test public void isInternalImportInternalImportType() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); final Imports imports = new Imports(); final Import importType = new Import("Internal1"); imports.addImport(importType); presenter.setContent(dmo, imports, false); assertTrue(presenter.isInternalImport(importType)); } @Test public void isInternalImportExternalImportType() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); final Imports imports = new Imports(); final Import importType = new Import("External1"); imports.addImport(importType); presenter.setContent(dmo, imports, false); assertFalse(presenter.isInternalImport(mock(Import.class))); } @Test public void testOnImportAdded() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); final Imports imports = new Imports(); imports.addImport(new Import("Internal1")); presenter.setContent(dmo, imports, false); presenter.onAddImport(new Import("NewImport1")); assertEquals(2, imports.getImports().size()); assertContains("Internal1", imports.getImports()); assertContains("NewImport1", imports.getImports()); verify(importAddedEvent, times(1)).fire(importAddedEventCaptor.capture()); assertEquals("NewImport1", importAddedEventCaptor.getValue().getImport().getType()); } @Test public void testOnImportRemoved() { final ImportsWidgetPresenter presenter = new ImportsWidgetPresenter(view, importAddedEvent, importRemovedEvent); final Imports imports = new Imports(); imports.addImport(new Import("Internal1")); presenter.setContent(dmo, imports, false); presenter.onRemoveImport(new Import("Internal1")); assertEquals(0, imports.getImports().size()); verify(importRemovedEvent, times(1)).fire(importRemovedEventCaptor.capture()); assertEquals("Internal1", importRemovedEventCaptor.getValue().getImport().getType()); } private static void assertContains(final String factType, final List<Import> factTypes) { for (Import i : factTypes) { if (i.getType().equals(factType)) { return; } } fail("Expected Fact Type '" + factType + "' was not found."); } }