mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-03-25 09:05:47 +00:00
129 lines
4.8 KiB
Ruby
129 lines
4.8 KiB
Ruby
require "test_helper"
|
|
|
|
class Pressa::Views::RenderingTest < Minitest::Test
|
|
def site
|
|
@site ||= Pressa::Site.new(
|
|
author: "Sami Samhuri",
|
|
email: "sami@samhuri.net",
|
|
title: "samhuri.net",
|
|
description: "blog",
|
|
url: "https://samhuri.net"
|
|
)
|
|
end
|
|
|
|
def regular_post
|
|
@regular_post ||= Pressa::Posts::Post.new(
|
|
slug: "swift-optional-or",
|
|
title: "Swift Optional OR",
|
|
author: "Sami Samhuri",
|
|
date: DateTime.parse("2017-10-01T10:00:00-07:00"),
|
|
formatted_date: "1st October, 2017",
|
|
body: "<p>hello</p>",
|
|
excerpt: "hello...",
|
|
path: "/posts/2017/10/swift-optional-or"
|
|
)
|
|
end
|
|
|
|
def link_post
|
|
@link_post ||= Pressa::Posts::Post.new(
|
|
slug: "github-flow-like-a-pro",
|
|
title: "GitHub Flow Like a Pro",
|
|
author: "Sami Samhuri",
|
|
date: DateTime.parse("2015-05-28T07:42:27-07:00"),
|
|
formatted_date: "28th May, 2015",
|
|
link: "http://haacked.com/archive/2014/07/28/github-flow-aliases/",
|
|
body: "<p>hello</p>",
|
|
excerpt: "hello...",
|
|
path: "/posts/2015/05/github-flow-like-a-pro"
|
|
)
|
|
end
|
|
|
|
def test_post_view_renders_regular_post_and_article_class
|
|
html = Pressa::Views::PostView.new(
|
|
post: regular_post,
|
|
site:,
|
|
article_class: "container"
|
|
).call
|
|
|
|
assert_includes(html, "<article class=\"container\">")
|
|
assert_includes(html, "<a href=\"/posts/2017/10/swift-optional-or\">Swift Optional OR</a>")
|
|
assert_includes(html, "<a href=\"/posts/2017/10/swift-optional-or\" class=\"permalink\">∞</a>")
|
|
end
|
|
|
|
def test_post_view_renders_link_post_title_with_arrow
|
|
html = Pressa::Views::PostView.new(post: link_post, site:).call
|
|
|
|
assert_includes(html, "→ GitHub Flow Like a Pro")
|
|
assert_includes(html, "http://haacked.com/archive/2014/07/28/github-flow-aliases/")
|
|
end
|
|
|
|
def test_feed_post_view_expands_root_relative_urls_only
|
|
post = Pressa::Posts::Post.new(
|
|
slug: "with-assets",
|
|
title: "With Assets",
|
|
author: "Sami Samhuri",
|
|
date: DateTime.parse("2017-10-01T10:00:00-07:00"),
|
|
formatted_date: "1st October, 2017",
|
|
body: '<p><a href="/posts/2010/01/basics-of-the-mach-o-file-format">read</a></p>' \
|
|
'<p><img src="/images/me.jpg" alt="me"></p>' \
|
|
'<p><a href="//cdn.example.net/app.js">cdn</a></p>',
|
|
excerpt: "hello...",
|
|
path: "/posts/2017/10/with-assets"
|
|
)
|
|
|
|
html = Pressa::Views::FeedPostView.new(post:, site:).call
|
|
|
|
assert_includes(html, 'href="https://samhuri.net/posts/2010/01/basics-of-the-mach-o-file-format"')
|
|
assert_includes(html, 'src="https://samhuri.net/images/me.jpg"')
|
|
assert_includes(html, 'href="//cdn.example.net/app.js"')
|
|
end
|
|
|
|
def test_project_and_projects_views_render_project_links_and_stats
|
|
project = Pressa::Projects::Project.new(
|
|
name: "demo",
|
|
title: "Demo Project",
|
|
description: "Demo project description",
|
|
url: "https://github.com/samsonjs/demo"
|
|
)
|
|
|
|
listing = Pressa::Views::ProjectsView.new(projects: [project], site:).call
|
|
details = Pressa::Views::ProjectView.new(project:, site:).call
|
|
|
|
assert_includes(listing, "Demo Project")
|
|
assert_includes(listing, "https://samhuri.net/projects/demo")
|
|
assert_includes(details, "https://github.com/samsonjs/demo/stargazers")
|
|
assert_includes(details, "https://github.com/samsonjs/demo/network/members")
|
|
end
|
|
|
|
def test_archive_views_render_year_month_and_both_post_types
|
|
may_posts = Pressa::Posts::MonthPosts.new(
|
|
month: Pressa::Posts::Month.new(name: "May", number: 5, padded: "05"),
|
|
posts: [link_post]
|
|
)
|
|
oct_posts = Pressa::Posts::MonthPosts.new(
|
|
month: Pressa::Posts::Month.new(name: "October", number: 10, padded: "10"),
|
|
posts: [regular_post]
|
|
)
|
|
|
|
by_year = {
|
|
2017 => Pressa::Posts::YearPosts.new(year: 2017, by_month: {10 => oct_posts}),
|
|
2015 => Pressa::Posts::YearPosts.new(year: 2015, by_month: {5 => may_posts})
|
|
}
|
|
posts_by_year = Pressa::Posts::PostsByYear.new(by_year:)
|
|
|
|
year_html = Pressa::Views::YearPostsView.new(year: 2015, year_posts: by_year[2015], site:).call
|
|
month_html = Pressa::Views::MonthPostsView.new(year: 2017, month_posts: oct_posts, site:).call
|
|
recent_html = Pressa::Views::RecentPostsView.new(posts: [regular_post], site:).call
|
|
archive_html = Pressa::Views::ArchiveView.new(posts_by_year:, site:).call
|
|
|
|
assert_includes(year_html, "https://samhuri.net/posts/2015/05/")
|
|
assert_includes(year_html, "→ GitHub Flow Like a Pro")
|
|
assert_match(%r{<a (?=[^>]*class="permalink")(?=[^>]*href="/posts/2015/05/github-flow-like-a-pro")[^>]*>∞</a>}, year_html)
|
|
|
|
assert_includes(month_html, "October 2017")
|
|
assert_includes(recent_html, "Swift Optional OR")
|
|
assert_includes(archive_html, "Archive")
|
|
assert_includes(archive_html, "https://samhuri.net/posts/2017/")
|
|
assert_includes(archive_html, "https://samhuri.net/posts/2015/")
|
|
end
|
|
end
|