package de.ks.blogging.grav.pages; import com.google.common.base.StandardSystemProperty; import de.ks.FileUtil; import de.ks.blogging.grav.entity.GravBlog; import de.ks.blogging.grav.posts.BasePost; import de.ks.blogging.grav.posts.BlogItem; import de.ks.blogging.grav.posts.HeaderContainer; import de.ks.blogging.grav.posts.Page; import org.apache.sanselan.ImageInfo; import org.apache.sanselan.Sanselan; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.InitCommand; import org.eclipse.jgit.api.Status; import org.eclipse.jgit.lib.RepositoryBuilder; import org.junit.Test; import java.io.File; import java.net.URL; import java.nio.file.Files; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.Arrays; import java.util.Collection; import java.util.List; import static org.junit.Assert.*; public class GravPagesTest { @Test public void testDiscoverPosts() throws Exception { URL location = getClass().getProtectionDomain().getCodeSource().getLocation(); String pathname = location.getFile(); File file = new File(pathname); while (!file.getName().equals("gravblogging")) { file = file.getParentFile(); } File postDir = new File(file, "src/test/resources/de/ks/blogging/grav/posts/"); GravPages gravPages = new GravPages(new GravBlog("test", postDir.getAbsolutePath())); gravPages.scan(); Collection<BasePost> allPosts = gravPages.getAllPosts(); assertEquals(3, allPosts.size()); BasePost blog = gravPages.getAllPosts().stream().filter(p -> p.getFile().getName().equals("blog.md")).findFirst().get(); assertEquals(1, blog.getMedia().values().size()); Collection<BlogItem> posts = gravPages.getBlogItems(); assertEquals(1, posts.size()); BlogItem post = posts.iterator().next(); assertEquals("Hello World", post.getHeader().getTitle()); assertEquals("Hello Sauerland", post.getContent()); assertEquals(LocalDate.of(2015, 6, 14), post.getHeader().getLocalDate().get()); assertEquals(LocalTime.of(14, 3, 0), post.getHeader().getLocalDateTime().get().toLocalTime()); assertEquals("Christian Loehnert", post.getHeader().getAuthor()); assertEquals("blog", post.getHeader().getCategory()); assertEquals(1, post.getHeader().getTags().size()); assertEquals("hello", post.getHeader().getTags().get(0)); Collection<Page> pages = gravPages.getPages(); assertEquals(1, pages.size()); Page page = pages.iterator().next(); assertEquals("PCT 2013", page.getHeader().getTitle()); assertEquals(LocalDate.of(2015, 6, 19), page.getHeader().getLocalDate().get()); assertFalse(page.getHeader().getLocalDateTime().isPresent()); assertEquals("Christian Löhnert", page.getHeader().getAuthor()); assertEquals("# PCT 2013", page.getContent()); } @Test public void testDiscoverGitDirSameDir() throws Exception { GravBlog blog = new GravBlog("test", StandardSystemProperty.JAVA_IO_TMPDIR.value() + StandardSystemProperty.FILE_SEPARATOR.value() + "gittest"); GravPages gravPages = new GravPages(blog); File tmpDir = new File(StandardSystemProperty.JAVA_IO_TMPDIR.value() + StandardSystemProperty.FILE_SEPARATOR.value() + "gittest"); if (!tmpDir.exists()) { tmpDir.mkdir(); } try { File gitDir = new File(tmpDir, ".git"); InitCommand init = Git.init(); init.setDirectory(tmpDir); init.setGitDir(gitDir).call(); assertTrue(gravPages.hasGitRepository()); } finally { FileUtil.deleteDir(tmpDir); } } @Test public void testDiscoverGitDirTopDir() throws Exception { File tmpDir = new File(StandardSystemProperty.JAVA_IO_TMPDIR.value() + StandardSystemProperty.FILE_SEPARATOR.value() + "gittest"); if (!tmpDir.exists()) { tmpDir.mkdir(); } try { File gitDir = new File(tmpDir, ".git"); InitCommand init = Git.init(); init.setDirectory(tmpDir); init.setGitDir(gitDir).call(); File sub = new File(tmpDir, "sub"); if (!sub.exists()) { sub.mkdir(); } GravBlog blog = new GravBlog("test", sub.getPath()); GravPages gravPages = new GravPages(blog); assertTrue(gravPages.hasGitRepository()); } finally { FileUtil.deleteDir(tmpDir); } } @Test public void testAddCommit() throws Exception { File tmpDir = new File(StandardSystemProperty.JAVA_IO_TMPDIR.value() + StandardSystemProperty.FILE_SEPARATOR.value() + "gittest"); if (!tmpDir.exists()) { tmpDir.mkdir(); } try { File gitDir = new File(tmpDir, ".git"); InitCommand init = Git.init(); init.setDirectory(tmpDir); init.setGitDir(gitDir); init.call(); GravBlog blog = new GravBlog("test", tmpDir.getPath()); GravPages gravPages = new GravPages(blog); File mdfile = new File(tmpDir, "test.md"); Files.write(mdfile.toPath(), Arrays.asList("Hello Sauerland")); gravPages.addCommit("First commit"); gravPages.close(); Git git = new Git(new RepositoryBuilder().findGitDir(gitDir).build()); Status call = git.status().call(); assertEquals(0, call.getModified().size()); assertEquals(0, call.getUncommittedChanges().size()); assertEquals(0, call.getUntracked().size()); git.close(); } finally { FileUtil.deleteDir(tmpDir); } } @Test public void testCreatePage() throws Exception { GravBlog blog = new GravBlog("test", StandardSystemProperty.JAVA_IO_TMPDIR.value()); GravPages gravPages = new GravPages(blog); String title = "Ein Bier, ein Würstchen!#+? "; String content = "Hello Sauerland"; Page page = gravPages.addPage(title, 42); page.getHeader().setLocalDateTime(LocalDateTime.of(2015, 06, 06, 12, 42, 0)); page.setContent(content); page.write(); File file = page.getFile(); file.deleteOnExit(); assertEquals("42.ein-bier-ein-wuerstchen", file.getParentFile().getName()); assertEquals("default.md", file.getName()); List<String> lines = Files.readAllLines(file.toPath()); assertEquals("title: " + title, lines.get(1)); assertEquals("author: " + StandardSystemProperty.USER_NAME.value(), lines.get(2)); assertEquals("date: 06.06.2015 12:42:00", lines.get(3)); assertEquals(content, lines.get(5)); } @Test public void testCreateBlogItem() throws Exception { GravBlog blog = new GravBlog("test", StandardSystemProperty.JAVA_IO_TMPDIR.value()); GravPages gravPages = new GravPages(blog); String title = "Title 1 "; String content = "Bla"; BlogItem blogItem = gravPages.addBlogItem(title); blogItem.setContent(content); blogItem.getHeader().setTags("test", "blubber"); blogItem.write(); File file = blogItem.getFile(); file.deleteOnExit(); assertEquals("01.blog", file.getParentFile().getParentFile().getName()); assertEquals("title-1", file.getParentFile().getName()); assertEquals("item.md", file.getName()); List<String> lines = Files.readAllLines(file.toPath()); assertEquals("title: " + title, lines.get(1)); assertEquals("author: " + StandardSystemProperty.USER_NAME.value(), lines.get(2)); assertEquals(HeaderContainer.INDENTATION + "category: blog", lines.get(4)); assertEquals(HeaderContainer.INDENTATION + "tag: [test, blubber]", lines.get(5)); assertEquals(content, lines.get(7)); } @Test public void testAddImage() throws Exception { GravBlog blog = new GravBlog("test", StandardSystemProperty.JAVA_IO_TMPDIR.value()); GravPages gravPages = new GravPages(blog); String title = "Title 1 "; String content = "Bla"; BlogItem blogItem = gravPages.addBlogItem(title); blogItem.setContent(content); blogItem.getHeader().setTags("test", "blubber"); File src = new File(getClass().getResource("landscape.jpg").getFile()); File mediaFile = blogItem.addMedia(src, blog.getImageDimension()); blogItem.write(); File file = blogItem.getFile(); mediaFile.deleteOnExit(); file.deleteOnExit(); assertTrue(file.exists()); assertTrue(mediaFile.exists()); ImageInfo imageInfo = Sanselan.getImageInfo(mediaFile); assertEquals(1024, imageInfo.getWidth()); } }