/*
* Copyright [2014] [Christian Loehnert, krampenschiesser@gmail.com]
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.ks.idnadrev.task.create;
import de.ks.LauncherRunner;
import de.ks.activity.ActivityCfg;
import de.ks.file.FileStore;
import de.ks.file.FileViewController;
import de.ks.idnadrev.ActivityTest;
import de.ks.idnadrev.entity.Context;
import de.ks.idnadrev.entity.FileReference;
import de.ks.idnadrev.entity.Task;
import de.ks.idnadrev.entity.Thought;
import de.ks.persistence.PersistentWork;
import de.ks.text.AsciiDocEditor;
import de.ks.util.FXPlatform;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@RunWith(LauncherRunner.class)
public class CreateTaskWithFilesTest extends ActivityTest {
@Inject
FileStore fileStore;
private MainTaskInfo controller;
private CreateTask createTask;
private AsciiDocEditor expectedOutcomeEditor;
@Override
protected Class<? extends ActivityCfg> getActivityClass() {
return CreateTaskActivity.class;
}
@Override
protected void createTestData(EntityManager em) {
em.persist(new Context("context"));
}
@Before
public void setUp() throws Exception {
createTask = activityController.<CreateTask>getCurrentController();
controller = createTask.mainInfoController;
expectedOutcomeEditor = createTask.expectedOutcomeController.expectedOutcome;
}
@Test
public void testTaskFromThought() throws Exception {
Thought bla = createThoughtAndTestFile();
@SuppressWarnings("unchecked") CreateTaskDS datasource = (CreateTaskDS) store.getDatasource();
datasource.fromThought = bla;
activityController.reload();
activityController.waitForTasks();
FXPlatform.waitForFX();
assertEquals("Bla", controller.name.getText());
assertEquals("description", controller.description.getText());
activityController.save();
activityController.waitForTasks();
assertNull(datasource.fromThought);
assertEquals(0, PersistentWork.from(Thought.class).size());
PersistentWork.wrap(() -> {
List<FileReference> fileReferences = PersistentWork.from(FileReference.class);
assertEquals(1, fileReferences.size());
List<Task> tasks = PersistentWork.from(Task.class);
assertEquals(1, tasks.size());
Set<FileReference> files = tasks.get(0).getFiles();
assertEquals(1, files.size());
assertEquals(fileReferences.get(0), files.iterator().next());
});
}
@Test
public void testAddFile() throws Exception {
createThoughtAndTestFile();
@SuppressWarnings("unchecked") CreateTaskDS datasource = (CreateTaskDS) store.getDatasource();
activityController.reload();
activityController.waitForTasks();
FXPlatform.waitForFX();
FXPlatform.invokeLater(() -> {
controller.name.setText("test");
FileViewController fileView = activityController.getControllerInstance(FileViewController.class);
fileView.addFiles(Arrays.asList(getTestFile()));
});
activityController.save();
Thread.sleep(100);
activityController.waitForTasks();
PersistentWork.wrap(() -> {
List<FileReference> fileReferences = PersistentWork.from(FileReference.class);
assertEquals(1, fileReferences.size());
List<Task> tasks = PersistentWork.from(Task.class);
assertEquals(1, tasks.size());
Set<FileReference> files = tasks.get(0).getFiles();
assertEquals(1, files.size());
assertEquals(fileReferences.get(0), files.iterator().next());
});
}
protected File getTestFile() {
String fileStoreDir = fileStore.getFileStoreDir();
File dir = new File(fileStoreDir + File.separator + "fileDir");
File testFile = new File(dir, "test");
return testFile;
}
protected Thought createThoughtAndTestFile() throws IOException {
String fileStoreDir = fileStore.getFileStoreDir();
File dir = new File(fileStoreDir + File.separator + "fileDir");
if (!dir.exists()) {
Files.createDirectories(dir.toPath());
}
File testFile = new File(dir, "test");
if (!testFile.exists()) {
testFile.createNewFile();
}
return PersistentWork.wrap(() -> {
Thought thought = new Thought("Bla").setDescription("description");
FileReference reference = new FileReference("test", "md5123");
thought.addFileReference(reference);
PersistentWork.persist(thought);
PersistentWork.persist(reference);
return thought;
});
}
}