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 }