owl-blogs/user_test.go

327 lines
8.6 KiB
Go
Raw Normal View History

2022-08-03 14:55:48 +00:00
package owl_test
2022-07-20 17:35:31 +00:00
import (
"fmt"
2022-08-03 14:55:48 +00:00
"h4kor/owl-blogs"
2022-07-23 15:19:47 +00:00
"os"
2022-07-20 17:35:31 +00:00
"path"
"testing"
)
func TestCreateNewPostCreatesEntryInPublic(t *testing.T) {
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-07-20 17:35:31 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
user.CreateNewPost("testpost", false)
2022-10-13 19:00:28 +00:00
files, err := os.ReadDir(path.Join(user.Dir(), "public"))
2022-07-20 17:35:31 +00:00
if err != nil {
t.Error("Error reading directory")
}
if len(files) < 1 {
t.Error("Post not created")
}
}
2022-08-01 17:50:29 +00:00
func TestCreateNewPostCreatesMediaDir(t *testing.T) {
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-08-01 17:50:29 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
post, _ := user.CreateNewPost("testpost", false)
2022-08-01 17:50:29 +00:00
if _, err := os.Stat(post.MediaDir()); os.IsNotExist(err) {
t.Error("Media directory not created")
}
}
func TestCreateNewPostAddsDateToMetaBlock(t *testing.T) {
user := getTestUser()
// Create a new post
2022-10-13 18:33:00 +00:00
user.CreateNewPost("testpost", false)
posts, _ := user.Posts()
2022-08-17 19:57:55 +00:00
post, _ := user.GetPost(posts[0].Id())
meta := post.Meta()
2022-09-11 15:25:26 +00:00
if meta.Date.IsZero() {
t.Errorf("Found no date. Got: %v", meta.Date)
}
}
2022-07-20 17:35:31 +00:00
func TestCreateNewPostMultipleCalls(t *testing.T) {
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-07-20 17:35:31 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
user.CreateNewPost("testpost", false)
user.CreateNewPost("testpost", false)
user.CreateNewPost("testpost", false)
2022-10-13 19:00:28 +00:00
files, err := os.ReadDir(path.Join(user.Dir(), "public"))
2022-07-20 17:35:31 +00:00
if err != nil {
t.Error("Error reading directory")
}
if len(files) < 3 {
2022-10-13 19:03:16 +00:00
t.Errorf("Only %d posts created", len(files))
2022-07-20 17:35:31 +00:00
}
}
2022-07-20 19:12:18 +00:00
func TestCanListUserPosts(t *testing.T) {
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-07-20 19:12:18 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
user.CreateNewPost("testpost", false)
user.CreateNewPost("testpost", false)
user.CreateNewPost("testpost", false)
2022-07-20 19:12:18 +00:00
posts, err := user.Posts()
if err != nil {
t.Error("Error reading posts")
}
if len(posts) != 3 {
t.Error("No posts found")
}
}
2022-07-21 17:44:07 +00:00
2022-08-03 16:03:10 +00:00
func TestCannotListUserPostsInSubdirectories(t *testing.T) {
2022-07-23 15:19:47 +00:00
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-07-23 15:19:47 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
user.CreateNewPost("testpost", false)
2022-07-23 15:19:47 +00:00
os.Mkdir(path.Join(user.PostDir(), "foo"), 0755)
os.Mkdir(path.Join(user.PostDir(), "foo/bar"), 0755)
content := ""
content += "---\n"
content += "title: test\n"
content += "---\n"
content += "\n"
content += "Write your post here.\n"
2022-08-03 16:03:10 +00:00
os.WriteFile(path.Join(user.PostDir(), "foo/index.md"), []byte(content), 0644)
2022-07-23 15:19:47 +00:00
os.WriteFile(path.Join(user.PostDir(), "foo/bar/index.md"), []byte(content), 0644)
posts, _ := user.Posts()
2022-08-17 19:57:55 +00:00
postIds := []string{}
for _, p := range posts {
postIds = append(postIds, p.Id())
}
if !contains(postIds, "foo") {
2022-08-03 16:03:10 +00:00
t.Error("Does not contain post: foo. Found:")
for _, p := range posts {
2022-08-17 19:57:55 +00:00
t.Error("\t" + p.Id())
2022-08-03 16:03:10 +00:00
}
}
2022-08-17 19:57:55 +00:00
if contains(postIds, "foo/bar") {
2022-08-03 16:03:10 +00:00
t.Error("Invalid post found: foo/bar. Found:")
2022-07-23 15:19:47 +00:00
for _, p := range posts {
2022-08-17 19:57:55 +00:00
t.Error("\t" + p.Id())
2022-07-23 15:19:47 +00:00
}
}
2022-08-03 16:03:10 +00:00
}
func TestCannotListUserPostsWithoutIndexMd(t *testing.T) {
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-08-03 16:03:10 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
user.CreateNewPost("testpost", false)
2022-08-03 16:03:10 +00:00
os.Mkdir(path.Join(user.PostDir(), "foo"), 0755)
os.Mkdir(path.Join(user.PostDir(), "foo/bar"), 0755)
content := ""
content += "---\n"
content += "title: test\n"
content += "---\n"
content += "\n"
content += "Write your post here.\n"
2022-07-23 15:19:47 +00:00
2022-08-03 16:03:10 +00:00
os.WriteFile(path.Join(user.PostDir(), "foo/bar/index.md"), []byte(content), 0644)
posts, _ := user.Posts()
2022-08-17 19:57:55 +00:00
postIds := []string{}
for _, p := range posts {
postIds = append(postIds, p.Id())
}
if contains(postIds, "foo") {
2022-08-03 16:03:10 +00:00
t.Error("Contains invalid post: foo. Found:")
2022-07-23 15:19:47 +00:00
for _, p := range posts {
2022-08-17 19:57:55 +00:00
t.Error("\t" + p.Id())
2022-07-23 15:19:47 +00:00
}
}
}
2022-08-20 20:35:51 +00:00
func TestListUserPostsDoesNotIncludeDrafts(t *testing.T) {
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-08-20 20:35:51 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
post, _ := user.CreateNewPost("testpost", false)
2022-08-20 20:35:51 +00:00
content := ""
content += "---\n"
content += "title: test\n"
content += "draft: true\n"
content += "---\n"
content += "\n"
content += "Write your post here.\n"
os.WriteFile(post.ContentFile(), []byte(content), 0644)
posts, _ := user.Posts()
2022-08-22 06:01:44 +00:00
if len(posts) != 0 {
t.Error("Found draft post")
}
}
func TestListUsersDraftsExcludedRealWorld(t *testing.T) {
// Create a new user
repo := getTestRepo(owl.RepoConfig{})
2022-08-22 06:01:44 +00:00
user, _ := repo.CreateUser(randomUserName())
// Create a new post
2022-10-13 18:33:00 +00:00
post, _ := user.CreateNewPost("testpost", false)
2022-08-22 06:01:44 +00:00
content := ""
content += "---\n"
content += "title: Articles September 2019\n"
content += "author: h4kor\n"
content += "type: post\n"
content += "date: -001-11-30T00:00:00+00:00\n"
content += "draft: true\n"
content += "url: /?p=426\n"
content += "categories:\n"
content += " - Uncategorised\n"
content += "\n"
content += "---\n"
content += "<https://nesslabs.com/time-anxiety>\n"
os.WriteFile(post.ContentFile(), []byte(content), 0644)
posts, _ := user.Posts()
2022-08-20 20:35:51 +00:00
if len(posts) != 0 {
t.Error("Found draft post")
}
}
2022-07-21 17:44:07 +00:00
func TestCanLoadPost(t *testing.T) {
user := getTestUser()
// Create a new post
2022-10-13 18:33:00 +00:00
user.CreateNewPost("testpost", false)
2022-07-21 17:44:07 +00:00
posts, _ := user.Posts()
2022-08-17 19:57:55 +00:00
post, _ := user.GetPost(posts[0].Id())
2022-07-21 17:44:07 +00:00
if post.Title() != "testpost" {
t.Error("Wrong title, Got: " + post.Title())
}
}
2022-08-03 17:41:13 +00:00
func TestUserUrlPath(t *testing.T) {
user := getTestUser()
if !(user.UrlPath() == "/user/"+user.Name()+"/") {
t.Error("Wrong url path, Expected: " + "/user/" + user.Name() + "/" + " Got: " + user.UrlPath())
}
}
2022-08-13 16:47:27 +00:00
func TestUserFullUrl(t *testing.T) {
user := getTestUser()
if !(user.FullUrl() == "http://localhost:8080/user/"+user.Name()+"/") {
t.Error("Wrong url path, Expected: " + "http://localhost:8080/user/" + user.Name() + "/" + " Got: " + user.FullUrl())
}
}
2022-08-17 19:57:55 +00:00
func TestPostsSortedByPublishingDateLatestFirst(t *testing.T) {
user := getTestUser()
// Create a new post
2022-10-13 18:33:00 +00:00
post1, _ := user.CreateNewPost("testpost", false)
post2, _ := user.CreateNewPost("testpost2", false)
2022-08-17 19:57:55 +00:00
content := "---\n"
content += "title: Test Post\n"
content += "date: Wed, 17 Aug 2022 10:50:02 +0000\n"
content += "---\n"
content += "This is a test"
os.WriteFile(post1.ContentFile(), []byte(content), 0644)
content = "---\n"
content += "title: Test Post 2\n"
content += "date: Wed, 17 Aug 2022 20:50:06 +0000\n"
content += "---\n"
content += "This is a test"
os.WriteFile(post2.ContentFile(), []byte(content), 0644)
posts, _ := user.Posts()
if posts[0].Id() != post2.Id() {
t.Error("Wrong Id, Got: " + posts[0].Id())
}
if posts[1].Id() != post1.Id() {
t.Error("Wrong Id, Got: " + posts[1].Id())
}
}
func TestPostsSortedByPublishingDateLatestFirst2(t *testing.T) {
user := getTestUser()
// Create a new post
posts := []*owl.Post{}
for i := 59; i >= 0; i-- {
2022-10-13 18:33:00 +00:00
post, _ := user.CreateNewPost("testpost", false)
content := "---\n"
content += "title: Test Post\n"
content += fmt.Sprintf("date: Wed, 17 Aug 2022 10:%02d:02 +0000\n", i)
content += "---\n"
content += "This is a test"
os.WriteFile(post.ContentFile(), []byte(content), 0644)
2022-10-13 19:03:16 +00:00
posts = append(posts, post)
}
retPosts, _ := user.Posts()
for i, p := range retPosts {
if p.Id() != posts[i].Id() {
t.Error("Wrong Id, Got: " + p.Id())
}
}
}
2022-08-17 19:57:55 +00:00
func TestPostsSortedByPublishingDateBrokenAtBottom(t *testing.T) {
user := getTestUser()
// Create a new post
2022-10-13 18:33:00 +00:00
post1, _ := user.CreateNewPost("testpost", false)
post2, _ := user.CreateNewPost("testpost2", false)
2022-08-17 19:57:55 +00:00
content := "---\n"
content += "title: Test Post\n"
content += "date: Wed, 17 +0000\n"
content += "---\n"
content += "This is a test"
os.WriteFile(post1.ContentFile(), []byte(content), 0644)
content = "---\n"
content += "title: Test Post 2\n"
content += "date: Wed, 17 Aug 2022 20:50:06 +0000\n"
content += "---\n"
content += "This is a test"
os.WriteFile(post2.ContentFile(), []byte(content), 0644)
posts, _ := user.Posts()
if posts[0].Id() != post2.Id() {
t.Error("Wrong Id, Got: " + posts[0].Id())
}
if posts[1].Id() != post1.Id() {
t.Error("Wrong Id, Got: " + posts[1].Id())
}
}
2022-09-10 13:22:18 +00:00
func TestAvatarEmptyIfNotExist(t *testing.T) {
user := getTestUser()
if user.AvatarUrl() != "" {
t.Error("Avatar should be empty")
}
}
func TestAvatarSetIfFileExist(t *testing.T) {
user := getTestUser()
os.WriteFile(path.Join(user.MediaDir(), "avatar.png"), []byte("test"), 0644)
if user.AvatarUrl() == "" {
t.Error("Avatar should not be empty")
}
}
2022-10-13 18:58:16 +00:00
func TestPostNameIllegalFileName(t *testing.T) {
user := getTestUser()
_, err := user.CreateNewPost("testpost?///", false)
if err != nil {
t.Error("Should not have failed")
}
}