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.
115 lines
3.6 KiB
Ruby
115 lines
3.6 KiB
Ruby
require "test_helper"
|
|
require "json"
|
|
require "tmpdir"
|
|
|
|
class Pressa::Posts::JSONFeedWriterTest < Minitest::Test
|
|
class PostsByYearStub
|
|
attr_accessor :posts
|
|
|
|
def initialize(posts)
|
|
@posts = posts
|
|
end
|
|
|
|
def recent_posts(_limit = 30)
|
|
@posts
|
|
end
|
|
end
|
|
|
|
def setup
|
|
@site = Pressa::Site.new(
|
|
author: "Sami Samhuri",
|
|
email: "sami@samhuri.net",
|
|
title: "samhuri.net",
|
|
description: "blog",
|
|
url: "https://samhuri.net",
|
|
image_url: "https://samhuri.net/images/me.jpg"
|
|
)
|
|
|
|
@posts_by_year = PostsByYearStub.new([link_post])
|
|
@writer = Pressa::Posts::JSONFeedWriter.new(site: @site, posts_by_year: @posts_by_year)
|
|
end
|
|
|
|
def test_write_feed_for_link_posts_uses_permalink_as_url_and_keeps_external_url
|
|
Dir.mktmpdir do |dir|
|
|
@writer.write_feed(target_path: dir, limit: 30)
|
|
feed = JSON.parse(File.read(File.join(dir, "feed.json")))
|
|
item = feed.fetch("items").first
|
|
|
|
assert_equal("https://samhuri.net/posts/2015/05/github-flow-like-a-pro", item.fetch("id"))
|
|
assert_equal("https://samhuri.net/posts/2015/05/github-flow-like-a-pro", item.fetch("url"))
|
|
assert_equal("http://haacked.com/archive/2014/07/28/github-flow-aliases/", item.fetch("external_url"))
|
|
end
|
|
end
|
|
|
|
def test_write_feed_for_regular_posts_omits_external_url
|
|
@posts_by_year.posts = [regular_post]
|
|
|
|
Dir.mktmpdir do |dir|
|
|
@writer.write_feed(target_path: dir, limit: 30)
|
|
feed = JSON.parse(File.read(File.join(dir, "feed.json")))
|
|
item = feed.fetch("items").first
|
|
|
|
assert_equal("https://samhuri.net/posts/2017/10/swift-optional-or", item.fetch("url"))
|
|
refute(item.key?("external_url"))
|
|
end
|
|
end
|
|
|
|
def test_write_feed_expands_root_relative_links_in_content_html
|
|
@posts_by_year.posts = [post_with_assets]
|
|
|
|
Dir.mktmpdir do |dir|
|
|
@writer.write_feed(target_path: dir, limit: 30)
|
|
feed = JSON.parse(File.read(File.join(dir, "feed.json")))
|
|
item = feed.fetch("items").first
|
|
content_html = item.fetch("content_html")
|
|
|
|
assert_includes(content_html, 'href="https://samhuri.net/posts/2010/01/basics-of-the-mach-o-file-format"')
|
|
assert_includes(content_html, 'src="https://samhuri.net/images/me.jpg"')
|
|
assert_includes(content_html, 'href="//cdn.example.net/app.js"')
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def 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 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 post_with_assets
|
|
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><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/swift-optional-or"
|
|
)
|
|
end
|
|
end
|