MMKB-5027: do some refactorings + tests

This commit is contained in:
Schneider Roland
2024-11-25 15:04:22 +01:00
parent 394a5c42bf
commit af29265e11
12 changed files with 252 additions and 26 deletions

View File

@@ -0,0 +1,159 @@
package at.ucs.magnolia.updates;
import at.ucs.magnolia.updates.util.TaskWrapper;
import at.ucs.magnolia.updates.util.VersionUtil;
import info.magnolia.module.InstallContext;
import info.magnolia.module.delta.Delta;
import info.magnolia.module.delta.Task;
import info.magnolia.module.model.ModuleDefinition;
import info.magnolia.module.model.Version;
import org.junit.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import javax.jcr.RepositoryException;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
public class IntranetUpdateModuleVersionHandlerTest {
private static final List<String> appliedUpdates = new ArrayList<>();
@Test
public void testGetDeltas_mustReturnSimpleTask() throws RepositoryException {
try (MockedStatic<VersionUtil> utilities = Mockito.mockStatic(VersionUtil.class)) {
mockVersionUtil(utilities);
InstallContext installContext = Mockito.mock(InstallContext.class);
ModuleDefinition moduleDefinition = Mockito.mock(ModuleDefinition.class);
Mockito.when(installContext.getCurrentModuleDefinition()).thenReturn(moduleDefinition);
Mockito.when(moduleDefinition.getVersion()).thenReturn(Version.parseVersion("9.9.9"));
IntranetUpdateModuleConfig config = new IntranetUpdateModuleConfig() {
@Override
public List<Task> getInitialUpdateTasks() {
return List.of();
}
@Override
public String getYamlUpdateDir() {
return "";
}
@Override
public String getUpdateTaskPackage() {
return "at.ucs.magnolia.updates.test.updates1";
}
};
List<Delta> deltas = new IntranetUpdateModuleVersionHandler(config).getDeltas(installContext, installContext.getCurrentModuleDefinition().getVersion());
assertThat(deltas.size(), equalTo(1));
// the TestTask contained by the class V20241125113012_TestUpdate1 should be returned
List<Task> matching = deltas.stream().flatMap(delta -> delta.getTasks().stream()).filter( task -> (task instanceof TaskWrapper && ((TaskWrapper)task).getTask() instanceof TestTask) || (task instanceof TestTask)).toList();
assertThat("count of testtask must be 1", matching.size(), equalTo(1));
}
}
@Test
public void testGetDeltas_mustReturnAlsoInstallTasks() throws RepositoryException {
try (MockedStatic<VersionUtil> utilities = Mockito.mockStatic(VersionUtil.class)) {
mockVersionUtil(utilities);
InstallContext installContext = Mockito.mock(InstallContext.class);
ModuleDefinition moduleDefinition = Mockito.mock(ModuleDefinition.class);
Mockito.when(installContext.getCurrentModuleDefinition()).thenReturn(moduleDefinition);
Mockito.when(moduleDefinition.getVersion()).thenReturn(null);
IntranetUpdateModuleConfig config = new IntranetUpdateModuleConfig() {
@Override
public List<Task> getInitialUpdateTasks() {
return List.of(new TestTask("install1","install1desc"));
}
@Override
public String getYamlUpdateDir() {
return "";
}
@Override
public String getUpdateTaskPackage() {
return "at.ucs.magnolia.updates.test.updates1";
}
};
List<Delta> deltas = new IntranetUpdateModuleVersionHandler(config).getDeltas(installContext, installContext.getCurrentModuleDefinition().getVersion());
assertThat(deltas.size(), equalTo(2));
// the TestTask contained by the class V20241125113012_TestUpdate1 must be returned
// The TestTask returned by the IntranetUpdateModuleConfig#getInitialUpdateTasks must be contained
List<Task> matching = deltas.stream().flatMap(delta -> delta.getTasks().stream()).filter( task -> (task instanceof TaskWrapper && ((TaskWrapper)task).getTask() instanceof TestTask) || (task instanceof TestTask)).toList();
assertThat("count of testtask must be 2", matching.size(), equalTo(2));
}
}
@Test
public void testGetDeltas_mustNotReturnInstallTasks() throws RepositoryException {
try (MockedStatic<VersionUtil> utilities = Mockito.mockStatic(VersionUtil.class)) {
mockVersionUtil(utilities);
InstallContext installContext = Mockito.mock(InstallContext.class);
ModuleDefinition moduleDefinition = Mockito.mock(ModuleDefinition.class);
Mockito.when(installContext.getCurrentModuleDefinition()).thenReturn(moduleDefinition);
Mockito.when(moduleDefinition.getVersion()).thenReturn(Version.parseVersion("9.9.9"));
IntranetUpdateModuleConfig config = new IntranetUpdateModuleConfig() {
@Override
public List<Task> getInitialUpdateTasks() {
return List.of(new TestTask("install1","install1desc"));
}
@Override
public String getYamlUpdateDir() {
return "";
}
@Override
public String getUpdateTaskPackage() {
return "at.ucs.magnolia.updates.test.updates1";
}
};
List<Delta> deltas = new IntranetUpdateModuleVersionHandler(config).getDeltas(installContext, installContext.getCurrentModuleDefinition().getVersion());
assertThat(deltas.size(), equalTo(1));
// the TestTask contained by the class V20241125113012_TestUpdate1 should be returned
// The TestTask returned by the IntranetUpdateModuleConfig#getInitialUpdateTasks must not be contained
List<Task> matching = deltas.stream().flatMap(delta -> delta.getTasks().stream()).filter( task -> (task instanceof TaskWrapper && ((TaskWrapper)task).getTask() instanceof TestTask) || (task instanceof TestTask)).toList();
assertThat("count of testtask must be 1", matching.size(), equalTo(1));
}
}
private void mockVersionUtil(MockedStatic<VersionUtil> utilities) throws RepositoryException {
utilities.when(() -> VersionUtil.containsVersion(Mockito.any(), Mockito.any()))
.thenAnswer(
invocation -> {
String version = invocation.getArgument(1, String.class);
return appliedUpdates.contains(version);
}
);
utilities.when(() -> VersionUtil.addVersion(Mockito.any(), Mockito.any(), Mockito.any()))
.thenAnswer(
invocation -> {
String version = invocation.getArgument(1, String.class);
return appliedUpdates.add(version);
}
);
utilities.when(() -> VersionUtil.addVersion(Mockito.any(), Mockito.any(), Mockito.any()))
.thenAnswer(
invocation -> {
String version = invocation.getArgument(1, String.class);
return appliedUpdates.add(version);
}
);
String testVersion = "123456";
assertThat(VersionUtil.containsVersion(null, testVersion), equalTo(false));
VersionUtil.addVersion(null, testVersion, null);
assertThat(VersionUtil.containsVersion(null, testVersion), equalTo(true));
// cleanup versions
appliedUpdates.clear();
}
}

View File

@@ -0,0 +1,10 @@
package at.ucs.magnolia.updates;
import at.ucs.magnolia.updates.util.LoggingTask;
public class TestTask extends LoggingTask {
public TestTask(String taskName, String taskDescription) {
super(taskName, taskDescription);
}
}

View File

@@ -0,0 +1,15 @@
package at.ucs.magnolia.updates.test.updates1;
import at.ucs.magnolia.updates.ModuleUpdate;
import at.ucs.magnolia.updates.TestTask;
import info.magnolia.module.delta.Task;
import java.util.List;
public class V20241125113012_TestUpdate1 extends ModuleUpdate {
@Override
public List<Task> getUpdateTasks() {
return List.of(new TestTask("test1","V20241125113012_TestUpdate1"));
}
}

View File

@@ -0,0 +1,17 @@
package at.ucs.magnolia.updates.util;
import at.ucs.magnolia.updates.test.updates1.V20241125113012_TestUpdate1;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
public class VersionNumberUtilTest {
@Test
public void testGetVersion() {
String version = VersionNumberUtil.getVersion(new V20241125113012_TestUpdate1());
assertThat("version must match",version,equalTo("20241125113012"));
}
}