Skip to content

Commit

Permalink
Add tests for panel and rename function
Browse files Browse the repository at this point in the history
  • Loading branch information
markusweigelt committed Nov 21, 2023
1 parent 7c05ce4 commit e68b038
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ protected boolean valid() {
validationError = "mediaPartialFormNoMedium";
return false;
}
validationError = dataEditorForm.getGalleryPanel().getMediaPartialsPanel().validateDuration();
validationError = dataEditorForm.getGalleryPanel().getMediaPartialsPanel().validateMediaDuration();
if (Objects.nonNull(validationError)) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ private static void getMediaPartialViewDivisions(Map<LogicalDivision, MediaParti
/**
* Validate the duration of the media.
*
* @return The error if duration is not valid.
* @return The error if media duration is not valid.
*/
public String validateDuration() {
public String validateMediaDuration() {
String error = null;
if (StringUtils.isEmpty(getMediaDuration())) {
error = "mediaPartialFormMediaDurationEmpty";
Expand All @@ -104,18 +104,18 @@ public String validateDuration() {
}

/**
* Delete media view division from structure panel.
* Delete media partial division from structure panel.
*
* @param mediaViewDivision to delete
* @param mediaPartialDivision to delete
*/
public void deleteMediaViewDivision(Map.Entry<LogicalDivision, MediaPartialView> mediaViewDivision) {
String error = validateDuration();
public void deleteMediaPartialDivision(Map.Entry<LogicalDivision, MediaPartialView> mediaPartialDivision) {
String error = validateMediaDuration();
if (Objects.nonNull(error)) {
Helper.setErrorMessage(Helper.getTranslation(error));
return;
}

LogicalDivision logicalDivision = mediaViewDivision.getKey();
LogicalDivision logicalDivision = mediaPartialDivision.getKey();
if (dataEditor.getStructurePanel()
.deletePhysicalDivision(logicalDivision.getViews().getFirst().getPhysicalDivision())) {
logicalDivision.getViews().remove();
Expand Down Expand Up @@ -217,7 +217,7 @@ public static void generateExtentAndSortMediaPartials(List<LogicalDivision> logi
Collections.sort(logicalDivisions, getLogicalDivisionComparator());
}

private static void generateExtentForMediaPartials(List<LogicalDivision> logicalDivisions, Long duration) {
private static void generateExtentForMediaPartials(List<LogicalDivision> logicalDivisions, Long mediaDuration) {
ListIterator<LogicalDivision> iterator = logicalDivisions.listIterator();
LogicalDivision previousLogicalDivision = null;
while (iterator.hasNext()) {
Expand All @@ -235,7 +235,7 @@ private static void generateExtentForMediaPartials(List<LogicalDivision> logical
}
} else {
mediaPartialView.setExtent(convertMillisecondsToFormattedTime(
duration - convertFormattedTimeToMilliseconds(mediaPartialView.getBegin())));
mediaDuration - convertFormattedTimeToMilliseconds(mediaPartialView.getBegin())));
}
previousLogicalDivision = logicalDivision;
}
Expand All @@ -257,7 +257,7 @@ public static Long convertFormattedTimeToMilliseconds(String formattedTime) {
Integer.valueOf(time[0]) * 3600 + Integer.valueOf(time[1]) * 60 + Integer.valueOf(time[2])) * 1000;
}

private static String convertMillisecondsToFormattedTime(Long milliseconds) {
public static String convertMillisecondsToFormattedTime(Long milliseconds) {
return String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(milliseconds),
TimeUnit.MILLISECONDS.toMinutes(milliseconds) % 60, TimeUnit.MILLISECONDS.toSeconds(milliseconds) % 60);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
oncomplete="PF('addMediaPartialDialog').show();"/>
<p:commandButton styleClass="deleteMediaView secondary"
onstart="metadataEditor.gallery.mediaPartial.setDuration()"
action="#{DataEditorForm.galleryPanel.mediaPartialsPanel.deleteMediaViewDivision(mediaPartialDivision)}"
action="#{DataEditorForm.galleryPanel.mediaPartialsPanel.deleteMediaPartialDivision(mediaPartialDivision)}"
update="imagePreviewForm:mediaPartialList,imagePreviewForm:thumbnailStripe,metadataAccordion:logicalMetadataWrapperPanel,logicalTree,physicalTree"
icon="fa fa-trash"/>
</p:outputPanel>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
package org.kitodo.production.forms.dataeditor;

import org.apache.commons.lang3.tuple.ImmutablePair;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
Expand All @@ -30,6 +29,9 @@
import java.util.AbstractMap;
import java.util.LinkedList;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
Expand Down Expand Up @@ -87,7 +89,7 @@ public void initTest() {

@Test
public void testSave() {
Assert.assertEquals(1, logicalDivision.getChildren().size());
assertEquals(1, logicalDivision.getChildren().size());

// add media partial
when(mediaPartialForm.getMediaSelection()).thenReturn(new ImmutablePair<>(physicalDivision, logicalDivision));
Expand All @@ -97,12 +99,12 @@ public void testSave() {

mediaPartialForm.save();

Assert.assertEquals(2, logicalDivision.getChildren().size());
Assert.assertEquals("Lorem", logicalDivision.getChildren().get(1).getLabel());
assertEquals(2, logicalDivision.getChildren().size());
assertEquals("Lorem", logicalDivision.getChildren().get(1).getLabel());
LogicalDivision mediaPartialLogicalDivision = logicalDivision.getChildren().get(1);
MediaPartialView mediaPartialView = (MediaPartialView) mediaPartialLogicalDivision.getViews().get(0);
Assert.assertEquals("00:00:45", mediaPartialView.getBegin());
Assert.assertEquals("00:00:15", mediaPartialView.getExtent());
assertEquals("00:00:45", mediaPartialView.getBegin());
assertEquals("00:00:15", mediaPartialView.getExtent());

// edit media partial
when(mediaPartialForm.getTitle()).thenReturn("Lorem ipsum");
Expand All @@ -112,54 +114,53 @@ public void testSave() {

mediaPartialForm.save();

Assert.assertEquals(2, logicalDivision.getChildren().size());
assertEquals(2, logicalDivision.getChildren().size());
// 'media partial' is now designated as the first child in the sorting order.
Assert.assertEquals("Lorem ipsum", logicalDivision.getChildren().get(0).getLabel());
assertEquals("Lorem ipsum", logicalDivision.getChildren().get(0).getLabel());
mediaPartialLogicalDivision = logicalDivision.getChildren().get(0);
mediaPartialView = (MediaPartialView) mediaPartialLogicalDivision.getViews().get(0);
Assert.assertEquals("00:00:10", mediaPartialView.getBegin());
Assert.assertEquals("00:00:20",
assertEquals("00:00:10", mediaPartialView.getBegin());
assertEquals("00:00:20",
mediaPartialView.getExtent()); // changed calculation of duration to the begin of next media partial
}

@Test
public void testValidation() throws NoSuchFieldException, IllegalAccessException {
Assert.assertFalse(mediaPartialForm.valid());
Assert.assertEquals("mediaPartialFormNoMedium", getValidationError(mediaPartialForm));
assertFalse(mediaPartialForm.valid());
assertEquals("mediaPartialFormNoMedium", getValidationError(mediaPartialForm));

when(mediaPartialForm.getMediaSelection()).thenReturn(new ImmutablePair<>(physicalDivision, logicalDivision));
Assert.assertFalse(mediaPartialForm.valid());
Assert.assertEquals("mediaPartialFormMediaDurationEmpty", getValidationError(mediaPartialForm));
assertFalse(mediaPartialForm.valid());
assertEquals("mediaPartialFormMediaDurationEmpty", getValidationError(mediaPartialForm));

when(mediaPartialsPanel.getMediaDuration()).thenReturn("12345");
Assert.assertFalse(mediaPartialForm.valid());
Assert.assertEquals("mediaPartialFormMediaDurationWrongTimeFormat", getValidationError(mediaPartialForm));
assertFalse(mediaPartialForm.valid());
assertEquals("mediaPartialFormMediaDurationWrongTimeFormat", getValidationError(mediaPartialForm));

when(mediaPartialsPanel.getMediaDuration()).thenReturn("00:01:00");
Assert.assertFalse(mediaPartialForm.valid());
Assert.assertEquals("mediaPartialFormStartEmpty", getValidationError(mediaPartialForm));
assertFalse(mediaPartialForm.valid());
assertEquals("mediaPartialFormStartEmpty", getValidationError(mediaPartialForm));

when(mediaPartialForm.getBegin()).thenReturn("12345");
Assert.assertFalse(mediaPartialForm.valid());
Assert.assertEquals("mediaPartialFormStartWrongTimeFormat", getValidationError(mediaPartialForm));
assertFalse(mediaPartialForm.valid());
assertEquals("mediaPartialFormStartWrongTimeFormat", getValidationError(mediaPartialForm));

when(mediaPartialForm.getBegin()).thenReturn("00:02:00");
Assert.assertFalse(mediaPartialForm.valid());
Assert.assertEquals("mediaPartialFormStartLessThanMediaDuration", getValidationError(mediaPartialForm));
assertFalse(mediaPartialForm.valid());
assertEquals("mediaPartialFormStartLessThanMediaDuration", getValidationError(mediaPartialForm));

when(mediaPartialForm.getBegin()).thenReturn(EXISTING_MEDIA_PARTIAL_BEGIN);
Assert.assertFalse(mediaPartialForm.valid());
Assert.assertEquals("mediaPartialFormStartExists", getValidationError(mediaPartialForm));
assertFalse(mediaPartialForm.valid());
assertEquals("mediaPartialFormStartExists", getValidationError(mediaPartialForm));

when(mediaPartialForm.getBegin()).thenReturn("00:00:45");
Assert.assertTrue(mediaPartialForm.valid());
assertTrue(mediaPartialForm.valid());
}

private static String getValidationError(MediaPartialForm mediaPartialForm)
throws NoSuchFieldException, IllegalAccessException {
Field validationErrorField = mediaPartialForm.getClass().getDeclaredField("validationError");
validationErrorField.setAccessible(true);
String validationError = (String) validationErrorField.get(mediaPartialForm);
return validationError;
return (String) validationErrorField.get(mediaPartialForm);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,53 +12,81 @@
package org.kitodo.production.forms.dataeditor;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.kitodo.DummyRulesetManagement;
import org.kitodo.api.dataformat.LogicalDivision;
import org.kitodo.api.dataformat.mets.LinkedMetsResource;
import org.kitodo.data.database.beans.Process;
import org.kitodo.data.database.beans.Template;
import org.kitodo.data.database.beans.Workflow;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;
import org.kitodo.api.dataformat.MediaPartialView;
import org.kitodo.api.dataformat.PhysicalDivision;
import org.mockito.Mockito;
import org.omnifaces.util.Ajax;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

public class MediaPartialPanelTest {

MediaPartialsPanel mediaPartialsPanel;

@Before
public void init() {
// mock frontend update calls
Mockito.mockStatic(Ajax.class);
}

@Before
public void initTest() {
DataEditorForm dataEditorForm = mock(DataEditorForm.class);
mediaPartialsPanel = spy(new MediaPartialsPanel(dataEditorForm));
}

@Test
public void testBuildStructureTreeRecursively() throws Exception {
DataEditorForm dummyDataEditorForm = new DataEditorForm();
Process process = new Process();
Template template = new Template();
template.setWorkflow(new Workflow());
process.setTemplate(template);
dummyDataEditorForm.setProcess(process);
Field ruleset = DataEditorForm.class.getDeclaredField("ruleset");
ruleset.setAccessible(true);
ruleset.set(dummyDataEditorForm, new DummyRulesetManagement());
final StructurePanel underTest = new StructurePanel(dummyDataEditorForm);
public void testGenerateExtentAndSortMediaPartials() {
List<LogicalDivision> logicalDivisions = new ArrayList<>();
logicalDivisions.add(getLogicalDivisionWithMediaPartial("Lorem ipsum", "00:00:45"));
logicalDivisions.add(getLogicalDivisionWithMediaPartial("Lorem ipsum", "00:00:00"));
logicalDivisions.add(getLogicalDivisionWithMediaPartial("Lorem ipsum", "00:00:55"));
logicalDivisions.add(getLogicalDivisionWithMediaPartial("Lorem ipsum", "00:00:35"));

LogicalDivision structure = new LogicalDivision();
LinkedMetsResource link = new LinkedMetsResource();
link.setUri(URI.create("database://?process.id=42"));
structure.setLink(link);
TreeNode result = new DefaultTreeNode();
// one minute media duration
MediaPartialsPanel.generateExtentAndSortMediaPartials(logicalDivisions, Long.valueOf(60000L));

Method buildStructureTreeRecursively = StructurePanel.class.getDeclaredMethod("buildStructureTreeRecursively",
LogicalDivision.class, TreeNode.class);
buildStructureTreeRecursively.setAccessible(true);
buildStructureTreeRecursively.invoke(underTest, structure, result);
Assert.assertEquals("00:00:00", ((MediaPartialView) logicalDivisions.get(0).getViews().get(0)).getBegin());
Assert.assertEquals("00:00:35", ((MediaPartialView) logicalDivisions.get(0).getViews().get(0)).getExtent());
Assert.assertEquals("00:00:35", ((MediaPartialView) logicalDivisions.get(1).getViews().get(0)).getBegin());
Assert.assertEquals("00:00:10", ((MediaPartialView) logicalDivisions.get(1).getViews().get(0)).getExtent());
Assert.assertEquals("00:00:45", ((MediaPartialView) logicalDivisions.get(2).getViews().get(0)).getBegin());
Assert.assertEquals("00:00:10", ((MediaPartialView) logicalDivisions.get(2).getViews().get(0)).getExtent());
Assert.assertEquals("00:00:55", ((MediaPartialView) logicalDivisions.get(3).getViews().get(0)).getBegin());
Assert.assertEquals("00:00:05", ((MediaPartialView) logicalDivisions.get(3).getViews().get(0)).getExtent());
}

Assert.assertTrue(((StructureTreeNode) result.getChildren().get(0).getData()).isLinked());
private static LogicalDivision getLogicalDivisionWithMediaPartial(String label, String begin) {
LogicalDivision logicalDivision = new LogicalDivision();
logicalDivision.setLabel(label);
PhysicalDivision physicalDivision = new PhysicalDivision();
MediaPartialView mediaPartialView = new MediaPartialView(begin);
physicalDivision.setMediaPartialView(mediaPartialView);
logicalDivision.getViews().add(mediaPartialView);
return logicalDivision;
}

@Test
public void testMediaDurationValidation() {
assertEquals("mediaPartialFormMediaDurationEmpty", mediaPartialsPanel.validateMediaDuration());
when(mediaPartialsPanel.getMediaDuration()).thenReturn("123456");
assertEquals("mediaPartialFormMediaDurationWrongTimeFormat", mediaPartialsPanel.validateMediaDuration());
when(mediaPartialsPanel.getMediaDuration()).thenReturn("00:01:00");
Assert.assertNull(mediaPartialsPanel.validateMediaDuration());
}

@Test
public void preventNullPointerExceptionInIsSeparateMediaOnNotFullInitializedDataEditorForm() {
DataEditorForm dummyDataEditorForm = new DataEditorForm();
final StructurePanel underTest = new StructurePanel(dummyDataEditorForm);
Assert.assertFalse(underTest.isSeparateMedia());
public void testConverting() {
assertEquals(Long.valueOf(3661000L), mediaPartialsPanel.convertFormattedTimeToMilliseconds("01:01:01"));
assertEquals("01:01:01", mediaPartialsPanel.convertMillisecondsToFormattedTime(3661000L));
}
}

0 comments on commit e68b038

Please sign in to comment.