require "../spec_helper" include Nodes describe PageContent do it "renders a single parent/child node structure" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Paragraph.new(children: [ Text.new(content: "hi"), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(

hi

) end it "renders multiple childrens" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Paragraph.new(children: [ Text.new(content: "Hello, "), Emphasis.new(children: [ Text.new(content: "World!"), ] of Child), ] of Child), UnorderedList.new(children: [ ListItem.new(children: [ Text.new(content: "List!"), ] of Child), ListItem.new(children: [ Text.new(content: "Again!"), ] of Child), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(

Hello, World!

) end it "renders an anchor" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Anchor.new(children: [Text.new("link")] of Child, href: "https://example.com"), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(link) end it "renders a blockquote" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ BlockQuote.new(children: [ Text.new("Wayne Gretzky. Michael Scott."), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(
Wayne Gretzky. Michael Scott.
) end it "renders code" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Code.new(children: [ Text.new("foo = bar"), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(foo = bar) end it "renders empasis" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Paragraph.new(children: [ Text.new(content: "This is "), Emphasis.new(children: [ Text.new(content: "neat!"), ] of Child), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(

This is neat!

) end it "renders a figure and figure caption" do children = [Text.new("A caption")] of Child page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Figure.new(children: [ Image.new(src: "image.png", originalWidth: 100, originalHeight: 200), FigureCaption.new(children: children), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq stripped_html <<-HTML
A caption
HTML end it "renders an H3" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Heading2.new(children: [ Text.new(content: "Title!"), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(

Title!

) end it "renders an H4" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Heading3.new(children: [ Text.new(content: "In Conclusion..."), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(

In Conclusion...

) end it "renders an image" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Paragraph.new(children: [ Image.new(src: "image.png", originalWidth: 100, originalHeight: 200), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq stripped_html <<-HTML

HTML end it "renders an iframe container" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Paragraph.new(children: [ IFrame.new(href: "https://example.com"), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq stripped_html <<-HTML

Embedded content at example.com

HTML end it "renders an mixtape embed container" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Paragraph.new(children: [ MixtapeEmbed.new(children: [ Anchor.new( children: [Text.new("Mixtape")] of Child, href: "https://example.com" ), ] of Child), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq stripped_html <<-HTML

Mixtape

HTML end it "renders an ordered list" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ OrderedList.new(children: [ ListItem.new(children: [Text.new("One")] of Child), ListItem.new(children: [Text.new("Two")] of Child), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(
  1. One
  2. Two
) end it "renders an preformatted text" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Paragraph.new(children: [ Text.new("Hello, world!"), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(

Hello, world!

) end it "renders an preformatted text" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Preformatted.new(children: [ Text.new("New\nline"), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(
New\nline
) end it "renders strong text" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ Strong.new(children: [ Text.new("Oh yeah!"), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(Oh yeah!) end it "renders an unordered list" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ UnorderedList.new(children: [ ListItem.new(children: [Text.new("Apple")] of Child), ListItem.new(children: [Text.new("Banana")] of Child), ] of Child), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %() end it "renders a user anchor" do page = Page.new( title: "Title", subtitle: nil, author: "Author", created_at: Time.local, nodes: [ UserAnchor.new(children: [Text.new("Some User")] of Child, userId: "abc123"), ] of Child ) html = PageContent.new(page: page).render_to_string html.should eq %(Some User) end end def stripped_html(html : String) html.gsub(/\n\s*/, "").strip end