/*
* Copyright 2016 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.guvnor.asset.management.backend.service;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.enterprise.event.Event;
import javax.enterprise.inject.Instance;
import org.guvnor.asset.management.model.ConfigureRepositoryEvent;
import org.guvnor.asset.management.service.AssetManagementService;
import org.guvnor.common.services.project.model.Repository;
import org.guvnor.common.services.project.service.POMService;
import org.guvnor.common.services.project.service.ProjectService;
import org.guvnor.structure.repositories.NewBranchEvent;
import org.guvnor.structure.repositories.RepositoryEnvironmentConfigurations;
import org.guvnor.structure.repositories.RepositoryService;
import org.guvnor.structure.server.config.ConfigurationService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.io.IOService;
import org.uberfire.java.nio.file.FileSystem;
import org.uberfire.java.nio.file.Path;
import org.uberfire.mocks.EventSourceMock;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class AssetManagementServiceImplTest {
@Mock
private Instance<ProjectService<?>> projectService;
@Mock
private IOService ioService;
@Mock
private POMService pomService;
@Mock
private RepositoryService repositoryService;
private AssetManagementService assetManagementService;
private final List<Object> receivedEvents = new ArrayList<Object>();
private final List<Object> receivedBranchEvents = new ArrayList<Object>();
private Event<NewBranchEvent> newBranchEvent = new EventSourceMock<NewBranchEvent>() {
@Override
public void fire( NewBranchEvent event ) {
receivedBranchEvents.add(event);
}
};
private Event<ConfigureRepositoryEvent> configureRepositoryEvent = new EventSourceMock<ConfigureRepositoryEvent>() {
@Override
public void fire( ConfigureRepositoryEvent event ) {
receivedEvents.add(event);
}
};
@Before
public void setup() {
receivedEvents.clear();
Path path = Mockito.mock(Path.class);
when(path.getFileName()).thenReturn(Mockito.mock(Path.class));
when(path.toUri()).thenReturn(URI.create("dummy://test"));
when(path.getFileSystem()).thenReturn(Mockito.mock(FileSystem.class));
when(ioService.get(any(URI.class))).thenReturn(path);
assetManagementService = new AssetManagementServiceImpl(newBranchEvent,
configureRepositoryEvent,
pomService,
ioService,
repositoryService,
projectService);
}
@Test
public void testConfigureRepository() {
assetManagementService.configureRepository("test-repo", "master", "dev", "release", "1.0.0");
assertEquals(1, receivedEvents.size());
Object event = receivedEvents.get(0);
assertTrue(event instanceof ConfigureRepositoryEvent);
ConfigureRepositoryEvent eventReceived = (ConfigureRepositoryEvent) event;
Map<String, Object> parameters = eventReceived.getParams();
assertNotNull(parameters);
assertEquals(5, parameters.size());
assertTrue(parameters.containsKey("RepositoryName"));
assertTrue(parameters.containsKey("SourceBranchName"));
assertTrue(parameters.containsKey("DevBranchName"));
assertTrue(parameters.containsKey("RelBranchName"));
assertTrue(parameters.containsKey("Version"));
assertEquals("test-repo", parameters.get("RepositoryName"));
assertEquals("master", parameters.get("SourceBranchName"));
assertEquals("dev", parameters.get("DevBranchName"));
assertEquals("release", parameters.get("RelBranchName"));
assertEquals("1.0.0", parameters.get("Version"));
assertEquals(2, receivedBranchEvents.size());
event = receivedBranchEvents.get(0);
assertTrue(event instanceof NewBranchEvent);
assertEquals("test-repo", ((NewBranchEvent)event).getRepositoryAlias());
assertEquals("dev-1.0.0", ((NewBranchEvent)event).getBranchName());
event = receivedBranchEvents.get(1);
assertTrue(event instanceof NewBranchEvent);
assertEquals("test-repo", ((NewBranchEvent)event).getRepositoryAlias());
assertEquals("release-1.0.0", ((NewBranchEvent)event).getBranchName());
}
}