samhuri.net/test/views/rendering_test.rb
Sami Samhuri 007b1058b6
Migrate from Swift to Ruby (#33)
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.
2026-02-07 21:19:03 -08:00

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