mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-03-25 09:05:47 +00:00
Replace the Swift site generator with a Ruby and Phlex implementation. Loads site and projects from TOML, derive site metadata from posts. Migrate from make to bake and add standardrb and code coverage tasks. Update CI and docs to match the new workflow, and remove unused assets/dependencies plus obsolete tooling.
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
|