summaryrefslogtreecommitdiff
path: root/test/models/helpers/node_actions_helper_test.rb
blob: 5244c19e984c832f076503b6ba4be4071250366e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
require 'test_helper'

class NodeActionsHelperTest < ActionView::TestCase
  def setup
    @original_locale = I18n.locale
    I18n.locale = :en
  end

  def default_url_options
    { :locale => nil }
  end

  def teardown
    I18n.locale = @original_locale
  end

  def entry action, metadata = {}, node: nil, user: nil, page: nil
    NodeAction.create!(:node => node, :user => user, :page => page,
                        :action => action, :occurred_at => Time.now,
                        :metadata => { "username" => "quentin",
                                       "human_readable_node_name" => "Subject" }.merge(metadata))
  end

  test "publish renders the revision sentence, not the titles" do
    out = action_summary(entry("publish",
      { "via" => "draft", "title" => { "from" => "Old", "to" => "New" } }))

    assert_includes out, "quentin"
    assert_includes out, "new revision"
    assert_not_includes out, "Old"
  end

  test "first publish uses its own sentence" do
    out = action_summary(entry("publish",
      { "via" => "draft", "title" => { "from" => nil, "to" => "New" } }))

    assert_includes out, "for the first time"
  end

  test "rollback publishes get the rollback sentence" do
    out = action_summary(entry("publish",
      { "via" => "revision", "title" => { "from" => "Now", "to" => "Then" } }))

    assert_includes out, "rolled"
  end

  test "move renders the path pair" do
    out = action_summary(entry("move",
      { "path" => { "from" => "a/b", "to" => "a/c" } }))

    assert_includes out, "a/b"
    assert_includes out, "a/c"
  end

  test "unknown verbs degrade to a generic sentence, never an error" do
    out = action_summary(entry("frobnicate"))

    assert_includes out, "frobnicate"
    assert_includes out, "quentin"
  end

  test "dead references render as plain names from metadata, no links" do
    out = action_summary(entry("publish",
      { "title" => { "from" => "Old", "to" => "New" } }))

    assert_not_includes out, "<a "
    assert_includes out, "Subject"
  end

  test "metadata values are escaped" do
    out = action_summary(entry("publish",
      { "human_readable_node_name" => "<b>bold</b>" }))

    assert_not_includes out, "<b>"
  end

  test "live associations upgrade names to links" do
    out = action_summary(entry("publish",
      { "title" => { "from" => "Old", "to" => "New" } },
      :user => users(:quentin)))

    assert_includes out, "<a "
  end

  test "details are guarded off when nothing but an unchanged title is present" do
    unchanged = entry("publish", { "title" => { "from" => "Same", "to" => "Same" } })
    changed   = entry("publish", { "title" => { "from" => "Old",  "to" => "New" } })

    assert_not action_details?(unchanged)
    assert action_details?(changed)
  end

  test "first publish with a byline names the author" do
    out = action_summary(entry("publish",
      { "title" => { "from" => nil, "to" => "New" },
        "author" => { "from" => nil, "to" => "quentin" } }))

    assert_includes out, "author"
  end

  test "create entries with their flat title render and are guarded off details" do
    e = entry("create", { "title" => "Initial", "path" => "a/b" })

    assert_includes action_summary(e), "a/b"
    assert_not action_details?(e)
  end
end