package de.ks.blogging.grav.ui.post.edit; import com.google.common.base.StandardSystemProperty; import de.ks.LauncherRunner; import de.ks.activity.ActivityCfg; import de.ks.blogging.grav.entity.GravBlog; import de.ks.blogging.grav.pages.GravPages; import de.ks.blogging.grav.posts.BasePost; import de.ks.blogging.grav.ui.post.AbstractBlogIntegrationTest; import de.ks.persistence.PersistentWork; import de.ks.util.FXPlatform; import org.hamcrest.Matchers; import org.junit.Test; import org.junit.runner.RunWith; import javax.inject.Inject; import java.io.File; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @RunWith(LauncherRunner.class) public class CreateEditPostActivityTest extends AbstractBlogIntegrationTest { @Inject GravPages gravPages; @Override protected Class<? extends ActivityCfg> getActivityClass() { return CreateEditPostActivity.class; } @Override protected void beforeActivityStart() throws Exception { GravBlog blog1 = PersistentWork.forName(GravBlog.class, "blog1"); gravPages.setBlog(blog1); gravPages.scan(); } @Test public void testEditPost() throws Exception { store.getDatasource().setLoadingHint(gravPages.getAllPosts().iterator().next()); store.reload(); store.waitForDataSource(); CreateEditPostController editor = activityController.getControllerInstance(CreateEditPostController.class); assertEquals("post 1", editor.title.getText()); assertEquals("Hello Sauerland", editor.editor.getText().trim()); assertEquals(dateTime.toLocalDate(), editor.date.getValue()); FXPlatform.invokeLater(() -> editor.validator.apply(editor.time, editor.time.getText())); assertEquals(dateTime.toLocalTime(), editor.validator.getTime()); LocalDate yesterday = LocalDate.now().minusDays(1); FXPlatform.invokeLater(() -> { editor.date.setValue(yesterday); editor.time.setText("12:33"); editor.title.setText("post 1 edited"); editor.tags.setText("tag 1, tag 2"); editor.editor.setText("CDT here I come"); }); activityController.save(); activityController.waitForDataSource(); gravPages.scan(); BasePost post = gravPages.getAllPosts().iterator().next(); assertEquals("post 1 edited", post.getHeader().getTitle()); assertEquals("CDT here I come", post.getContent()); LocalDateTime expectedTime = LocalDateTime.of(yesterday, LocalTime.of(12, 33)); assertEquals(expectedTime, post.getHeader().getLocalDateTime().get()); assertEquals(2, post.getHeader().getTags().size()); assertEquals("tag 1", post.getHeader().getTags().get(0)); assertEquals("tag 2", post.getHeader().getTags().get(1)); } @Test public void testCreateBlogItem() throws Exception { CreateEditPostController editor = activityController.getControllerInstance(CreateEditPostController.class); LocalDate today = LocalDate.now(); FXPlatform.invokeLater(() -> { editor.type.setValue(PostType.BLOGITEM); editor.date.setValue(today); editor.time.setText("12:33"); editor.title.setText("post 2"); editor.tags.setText("tag 1, tag 2"); editor.editor.setText("CDT here I come"); }); activityController.save(); activityController.waitForDataSource(); gravPages.scan(); assertEquals(2, gravPages.getAllPosts().size()); assertEquals(1, gravPages.getBlogItems().size()); BasePost post = gravPages.getBlogItems().iterator().next(); assertEquals("post 2", post.getHeader().getTitle()); assertEquals("CDT here I come", post.getContent()); LocalDateTime expectedTime = LocalDateTime.of(today, LocalTime.of(12, 33)); assertEquals(expectedTime, post.getHeader().getLocalDateTime().get()); assertEquals(2, post.getHeader().getTags().size()); assertEquals("tag 1", post.getHeader().getTags().get(0)); assertEquals("tag 2", post.getHeader().getTags().get(1)); } @Test public void testCreatePage() throws Exception { CreateEditPostController editor = activityController.getControllerInstance(CreateEditPostController.class); LocalDate today = LocalDate.now(); FXPlatform.invokeLater(() -> { editor.type.setValue(PostType.PAGE); editor.date.setValue(today); editor.time.setText("12:33"); editor.title.setText("post 2"); editor.tags.setText("tag 1, tag 2"); editor.pageIndex.setText("42"); editor.editor.setText("CDT here I come"); }); activityController.save(); activityController.waitForDataSource(); gravPages.scan(); assertEquals(2, gravPages.getAllPosts().size()); assertEquals(1, gravPages.getPages().size()); BasePost post = gravPages.getPages().iterator().next(); assertEquals("post 2", post.getHeader().getTitle()); assertEquals("CDT here I come", post.getContent()); LocalDateTime expectedTime = LocalDateTime.of(today, LocalTime.of(12, 33)); assertEquals(expectedTime, post.getHeader().getLocalDateTime().get()); assertEquals(2, post.getHeader().getTags().size()); assertEquals("tag 1", post.getHeader().getTags().get(0)); assertEquals("tag 2", post.getHeader().getTags().get(1)); assertThat(post.getFile().getParentFile().getName(), Matchers.startsWith("42.")); } @Test public void testCreateUnknown() throws Exception { CreateEditPostController editor = activityController.getControllerInstance(CreateEditPostController.class); LocalDate today = LocalDate.now(); FXPlatform.invokeLater(() -> { editor.type.setValue(PostType.UNKNOWN); editor.date.setValue(today); editor.time.setText("12:33"); editor.title.setText("post 2"); editor.tags.setText("tag 1, tag 2"); editor.editor.setText("CDT here I come"); File path = new File(fileBlog1, "other" + StandardSystemProperty.FILE_SEPARATOR + "myitem.md"); editor.filePath.setText(path.getPath()); }); activityController.save(); activityController.waitForDataSource(); gravPages.scan(); assertEquals(2, gravPages.getAllPosts().size()); assertEquals(0, gravPages.getBlogItems().size()); assertEquals(0, gravPages.getPages().size()); BasePost post = gravPages.getAllPosts().stream().filter(s -> s.getHeader().getTitle().equals("post 2")).findFirst().get(); assertEquals("post 2", post.getHeader().getTitle()); assertEquals("CDT here I come", post.getContent()); LocalDateTime expectedTime = LocalDateTime.of(today, LocalTime.of(12, 33)); assertEquals(expectedTime, post.getHeader().getLocalDateTime().get()); assertEquals(2, post.getHeader().getTags().size()); assertEquals("tag 1", post.getHeader().getTags().get(0)); assertEquals("tag 2", post.getHeader().getTags().get(1)); } }