View Javadoc
1   package com.atlassian.activeobjects.internal;
2   
3   import com.atlassian.activeobjects.external.ActiveObjects;
4   import com.atlassian.activeobjects.external.ActiveObjectsUpgradeTask;
5   import com.atlassian.activeobjects.external.ModelVersion;
6   import com.google.common.collect.Lists;
7   import org.junit.Before;
8   import org.junit.Test;
9   import org.junit.runner.RunWith;
10  import org.mockito.Mock;
11  import org.mockito.junit.MockitoJUnitRunner;
12  
13  import java.util.List;
14  
15  @RunWith(MockitoJUnitRunner.class)
16  public final class ActiveObjectUpgradeManagerImplTest {
17      private ActiveObjectUpgradeManagerImpl upgradeManager;
18  
19      @Mock
20      private ModelVersionManager modelVersionManager;
21  
22      @Before
23      public void setUp() {
24          upgradeManager = new ActiveObjectUpgradeManagerImpl(modelVersionManager);
25      }
26  
27      @Test(expected = IllegalStateException.class)
28      public void twoUpgradeTasksWithSameModelVersionThrowsException() {
29          final List<ActiveObjectsUpgradeTask> upgradeTasks = Lists.newArrayList(
30                  new MockActiveObjectsUpgradeTask(ModelVersion.valueOf("1")),
31                  new MockActiveObjectsUpgradeTask(ModelVersion.valueOf("1")),
32                  new MockActiveObjectsUpgradeTask(ModelVersion.valueOf("2"))
33          );
34          upgradeManager.verify(upgradeTasks);
35      }
36  
37      @Test
38      public void sortedUpgradeTasksWithDifferentModelVersionDoesNotThrowException() {
39          final List<ActiveObjectsUpgradeTask> upgradeTasks = Lists.newArrayList(
40                  new MockActiveObjectsUpgradeTask(ModelVersion.valueOf("1")),
41                  new MockActiveObjectsUpgradeTask(ModelVersion.valueOf("3")),
42                  new MockActiveObjectsUpgradeTask(ModelVersion.valueOf("4"))
43          );
44          upgradeManager.verify(upgradeTasks);
45      }
46  
47      private static final class MockActiveObjectsUpgradeTask implements ActiveObjectsUpgradeTask {
48          private final ModelVersion version;
49  
50          MockActiveObjectsUpgradeTask(ModelVersion version) {
51              this.version = version;
52          }
53  
54          @Override
55          public ModelVersion getModelVersion() {
56              return version;
57          }
58  
59          @Override
60          public void upgrade(ModelVersion currentVersion, ActiveObjects ao) {
61          }
62      }
63  }