package de.ks.idnadrev.category.create; import de.ks.LauncherRunner; import de.ks.activity.ActivityCfg; import de.ks.executor.group.LastTextChange; import de.ks.file.FileStore; import de.ks.idnadrev.ActivityTest; import de.ks.idnadrev.entity.Category; import de.ks.idnadrev.entity.FileReference; import de.ks.idnadrev.entity.TaskTest; import de.ks.idnadrev.review.weeklydone.WeeklyDoneActivity; import de.ks.persistence.PersistentWork; import de.ks.util.FXPlatform; import javafx.scene.paint.Color; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import javax.inject.Inject; import java.io.File; import java.net.URISyntaxException; import static org.junit.Assert.*; @RunWith(LauncherRunner.class) public class CreateCategoryActivityTest extends ActivityTest { @Inject FileStore fileStore; private CreateCategoryController controller; @Override protected Class<? extends ActivityCfg> getActivityClass() { return CreateCategoryActivity.class; } @Before public void setUp() throws Exception { controller = activityController.getControllerInstance(CreateCategoryController.class); } @Test public void testCreateNew() throws Exception { assertTrue(controller.noImageLabel.isVisible()); assertTrue(controller.save.isDisabled()); assertNull(controller.imageView.getImage()); FXPlatform.invokeLater(() -> { controller.name.setText("category"); controller.colorSelection.setValue(Color.AQUA); try { File file = getDoneFile(); controller.selectImage(file); } catch (Exception e) { throw new RuntimeException(e); } }); Thread.sleep(LastTextChange.WAIT_TIME * 2); activityController.waitForTasks(); FXPlatform.waitForFX(); assertNotNull(controller.imageView.getImage()); assertFalse(controller.save.isDisabled()); assertFalse(controller.noImageLabel.isVisible()); controller.onSave(); activityController.waitForDataSource(); assertNull(controller.name.getText()); PersistentWork.wrap(() -> { Category category = PersistentWork.from(Category.class).get(0); assertEquals("category", category.getName()); assertEquals(Color.AQUA, category.getColor()); assertNotNull(category.getImage()); assertEquals("done.png", category.getImage().getName()); }); } private File getDoneFile() { try { return new File(WeeklyDoneActivity.class.getResource("done.png").toURI()); } catch (URISyntaxException e) { throw new RuntimeException(e); } } private File getThePctFile() { try { return new File(TaskTest.class.getResource("img.jpg").toURI()); } catch (URISyntaxException e) { throw new RuntimeException(e); } } @Test public void testEdit() throws Exception { store.getDatasource().setLoadingHint(createCategory()); activityController.reload(); activityController.waitForDataSource(); assertEquals("category", controller.name.getText()); assertEquals(Color.RED, controller.colorSelection.getValue()); assertNotNull(controller.imageView.getImage()); FXPlatform.invokeLater(() -> { controller.name.setText("test"); controller.colorSelection.setValue(Color.ALICEBLUE); controller.onSave(); }); activityController.waitForDataSource(); PersistentWork.wrap(() -> { Category category = PersistentWork.from(Category.class).get(0); assertEquals("test", category.getName()); assertEquals(Color.ALICEBLUE, category.getColor()); assertNotNull(category.getImage()); assertEquals("done.png", category.getImage().getName()); }); } @Test public void testEditImage() throws Exception { store.getDatasource().setLoadingHint(createCategory()); activityController.reload(); activityController.waitForDataSource(); FXPlatform.invokeLater(() -> { try { File file = getThePctFile(); controller.selectImage(file); } catch (Exception e) { throw new RuntimeException(e); } controller.onSave(); }); activityController.waitForDataSource(); PersistentWork.wrap(() -> { Category category = PersistentWork.from(Category.class).get(0); assertNotNull(category.getImage()); assertEquals("img.jpg", category.getImage().getName()); }); } private Category createCategory() { return PersistentWork.read(em -> { try { File doneFile = getDoneFile(); FileReference fileReference = fileStore.getReference(doneFile).get(); fileStore.scheduleCopy(fileReference, doneFile); Category category = new Category("category").setColorAsString("#FF0000").setImage(fileReference); em.persist(category); return category; } catch (Exception e) { throw new RuntimeException(e); } }); } }