/*
* Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nuxeo - initial API and implementation
* $Id: TestLifeCycleService.java 28609 2008-01-09 16:38:30Z sfermigier $
*/
package org.eclipse.ecr.core.lifecycle;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.ecr.core.CoreUTConstants;
import org.eclipse.ecr.core.NXCore;
import org.eclipse.ecr.testlib.NXRuntimeTestCase;
/**
* Test the lifecycle service.
*
* @author <a href="mailto:ja@nuxeo.com">Julien Anguenot</a>
*/
public class TestLifeCycleService extends NXRuntimeTestCase {
private LifeCycleService lifeCycleService;
@Override
public void setUp() throws Exception {
super.setUp();
deployBundle(CoreUTConstants.CORE_BUNDLE); // will be implicit later
deployContrib(CoreUTConstants.CORE_TESTS_BUNDLE,
"OSGI-INF/LifeCycleManagerTestExtensions.xml");
lifeCycleService = NXCore.getLifeCycleService();
assertNotNull(lifeCycleService);
}
/**
* Tests the life cycles registration.
*/
public void testLifeCycleRegistration() throws LifeCycleException {
Collection<LifeCycle> lcs = lifeCycleService.getLifeCycles();
assertEquals(1, lcs.size());
// Test life cycle registration
LifeCycle lcd = lifeCycleService.getLifeCycleByName("default");
assertNotNull(lcd);
assertEquals("default", lcd.getName());
// Test states registration
Collection<LifeCycleState> states = lcd.getStates();
assertEquals(4, states.size());
List<String> expected = new ArrayList<String>();
expected.add("work");
expected.add("approved");
expected.add("cancelled");
expected.add("obsolete");
Collections.sort(expected);
List<String> stateNames = new ArrayList<String>();
for (LifeCycleState state : states) {
stateNames.add(state.getName());
}
Collections.sort(stateNames);
assertEquals(expected, stateNames);
// Test the initial state
assertEquals("work", lcd.getDefaultInitialStateName());
// Test all initial states
List<String> expectedInitialStates = new ArrayList<String>();
expectedInitialStates.add("work");
expectedInitialStates.add("approved");
Collections.sort(expectedInitialStates);
List<String> initialStates = new ArrayList<String>(
lcd.getInitialStateNames());
Collections.sort(initialStates);
assertEquals(expectedInitialStates, initialStates);
// Test transitions
Collection<String> transitions;
// work
transitions = lcd.getAllowedStateTransitionsFrom("work");
assertEquals(3, transitions.size());
assertTrue(transitions.contains("approve"));
assertTrue(transitions.contains("cancel"));
assertTrue(transitions.contains("obsolete"));
// check mutation fails
try {
transitions.remove("approve");
fail("Mutation should fail");
} catch (Exception e) {
// ok
}
transitions = lcd.getAllowedStateTransitionsFrom("work");
assertEquals(3, transitions.size());
// approved
transitions = lcd.getAllowedStateTransitionsFrom("approved");
assertEquals(1, transitions.size());
assertTrue(transitions.contains("obsolete"));
// canceled
transitions = lcd.getAllowedStateTransitionsFrom("cancelled");
assertEquals(1, transitions.size());
assertTrue(transitions.contains("backToWork"));
// obsolete
transitions = lcd.getAllowedStateTransitionsFrom("obsolete");
assertEquals(0, transitions.size());
// Test transitions
Collection<LifeCycleTransition> lifeCycleDefinitions = lcd.getTransitions();
assertEquals(4, lifeCycleDefinitions.size());
}
public void testLifeCycle() {
LifeCycle lifeCycle = lifeCycleService.getLifeCycleByName("default");
// work state
LifeCycleState workState = lifeCycle.getStateByName("work");
assertEquals("work", workState.getName());
Collection<String> transitions = workState.getAllowedStateTransitions();
assertEquals(3, transitions.size());
assertTrue(transitions.contains("approve"));
assertTrue(transitions.contains("cancel"));
assertTrue(transitions.contains("obsolete"));
// approved state
workState = lifeCycle.getStateByName("approved");
transitions = workState.getAllowedStateTransitions();
assertEquals(1, transitions.size());
assertTrue(transitions.contains("obsolete"));
// reject state
workState = lifeCycle.getStateByName("cancelled");
assertEquals("cancelled", workState.getName());
transitions = workState.getAllowedStateTransitions();
assertEquals(1, transitions.size());
assertTrue(transitions.contains("backToWork"));
// obsolete state
workState = lifeCycle.getStateByName("obsolete");
assertEquals("obsolete", workState.getName());
transitions = workState.getAllowedStateTransitions();
assertEquals(0, transitions.size());
LifeCycleTransition transition = lifeCycle.getTransitionByName("approve");
assertNotNull(transition);
String destinationName = lifeCycle.getTransitionByName("approve").getDestinationStateName();
assertEquals("approved", destinationName);
}
public void testLifeCycleTypesMappingRegistration() {
Map<String, String> mapping = lifeCycleService.getTypesMapping();
// assertEquals(2, mapping.size()); // has core contribs too
assertTrue(mapping.keySet().contains("File"));
assertTrue(mapping.keySet().contains("Folder"));
assertEquals("default", mapping.get("File"));
assertEquals("default", mapping.get("Folder"));
}
public void testLifeCycleTypesMappingAPI() {
Collection<String> types = lifeCycleService.getTypesFor("default");
// assertEquals(2, types.size()); // has core contribs too
assertTrue(types.contains("File"));
assertTrue(types.contains("Folder"));
}
public void testTypeLifeCycleMapping() {
String lifeCycleName = lifeCycleService.getLifeCycleNameFor("File");
assertEquals("default", lifeCycleName);
List<String> noRecursion = lifeCycleService.getNonRecursiveTransitionForDocType("File");
assertEquals(3, noRecursion.size());
assertTrue(noRecursion.contains("toBar"));
noRecursion = lifeCycleService.getNonRecursiveTransitionForDocType("Folder");
assertTrue(noRecursion.isEmpty());
}
public void testLifeCycleReverse() throws Exception {
deployContrib(CoreUTConstants.CORE_TESTS_BUNDLE,
"OSGI-INF/LifeCycleManagerReverseTestExtensions.xml");
LifeCycle lifeCycle = lifeCycleService.getLifeCycleByName("defaultReverse");
// work state
LifeCycleState workState = lifeCycle.getStateByName("work");
assertEquals("work", workState.getName());
Collection<String> transitions = workState.getAllowedStateTransitions();
assertEquals(3, transitions.size());
assertTrue(transitions.contains("approve"));
assertTrue(transitions.contains("cancel"));
assertTrue(transitions.contains("obsolete"));
// approved state
workState = lifeCycle.getStateByName("approved");
transitions = workState.getAllowedStateTransitions();
assertEquals(1, transitions.size());
assertTrue(transitions.contains("obsolete"));
// reject state
workState = lifeCycle.getStateByName("cancelled");
assertEquals("cancelled", workState.getName());
transitions = workState.getAllowedStateTransitions();
assertEquals(1, transitions.size());
assertTrue(transitions.contains("backToWork"));
// obsolete state
workState = lifeCycle.getStateByName("obsolete");
assertEquals("obsolete", workState.getName());
transitions = workState.getAllowedStateTransitions();
assertEquals(0, transitions.size());
LifeCycleTransition transition = lifeCycle.getTransitionByName("approve");
assertNotNull(transition);
String destinationName = transition.getDestinationStateName();
assertEquals("approved", destinationName);
}
}