diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/models/event_test.rb | 71 | ||||
| -rw-r--r-- | test/models/helpers/node_actions_helper_test.rb | 13 |
2 files changed, 84 insertions, 0 deletions
diff --git a/test/models/event_test.rb b/test/models/event_test.rb index 2a671b7c..a5449a2a 100644 --- a/test/models/event_test.rb +++ b/test/models/event_test.rb | |||
| @@ -13,6 +13,10 @@ class EventTest < ActiveSupport::TestCase | |||
| 13 | @cal_node.publish_draft! | 13 | @cal_node.publish_draft! |
| 14 | @cal_node.head.reload | 14 | @cal_node.head.reload |
| 15 | end | 15 | end |
| 16 | |||
| 17 | def event_entries | ||
| 18 | NodeAction.where(:action => %w[event_create event_update event_destroy]).order(:id) | ||
| 19 | end | ||
| 16 | 20 | ||
| 17 | test 'verfy setup data' do | 21 | test 'verfy setup data' do |
| 18 | assert_not_nil @cal_node | 22 | assert_not_nil @cal_node |
| @@ -107,4 +111,71 @@ class EventTest < ActiveSupport::TestCase | |||
| 107 | chaosradio_days = scoped_occurrences.map {|x| x.start_time.day} | 111 | chaosradio_days = scoped_occurrences.map {|x| x.start_time.day} |
| 108 | assert_equal expected_days, chaosradio_days | 112 | assert_equal expected_days, chaosradio_days |
| 109 | end | 113 | end |
| 114 | |||
| 115 | test "creating an event is witnessed with a full snapshot" do | ||
| 116 | event = Event.new(:title => "Chaostreff", | ||
| 117 | :start_time => Time.utc(2026, 9, 1, 19, 0), | ||
| 118 | :end_time => Time.utc(2026, 9, 1, 21, 0), | ||
| 119 | :rrule => "FREQ=WEEKLY;BYDAY=TU", :location => "Zentrale", | ||
| 120 | :tag_list => "open-day") | ||
| 121 | |||
| 122 | assert_difference -> { event_entries.count }, 1 do | ||
| 123 | assert event.save_witnessed(:actor => users(:aaron)) | ||
| 124 | end | ||
| 125 | |||
| 126 | entry = event_entries.last | ||
| 127 | assert_equal "event_create", entry.action | ||
| 128 | assert_equal users(:aaron).id, entry.user_id | ||
| 129 | assert_equal "Chaostreff", entry.metadata["event_title"] | ||
| 130 | assert_equal "FREQ=WEEKLY;BYDAY=TU", entry.metadata["rrule"] | ||
| 131 | assert_equal ["open-day"], entry.metadata["event_tags"] | ||
| 132 | assert_equal event.id, entry.action_participants.first.subject_id | ||
| 133 | assert_equal "Event", entry.action_participants.first.subject_type | ||
| 134 | end | ||
| 135 | |||
| 136 | test "updating an event records only what changed" do | ||
| 137 | event = Event.new(:title => "Chaostreff", :location => "Zentrale") | ||
| 138 | event.save_witnessed(:actor => users(:aaron)) | ||
| 139 | |||
| 140 | assert_difference -> { event_entries.count }, 1 do | ||
| 141 | assert event.update_witnessed({ :location => "Neue Zentrale" }, :actor => users(:aaron)) | ||
| 142 | end | ||
| 143 | |||
| 144 | entry = event_entries.last | ||
| 145 | assert_equal "event_update", entry.action | ||
| 146 | assert_equal({ "from" => "Zentrale", "to" => "Neue Zentrale" }, | ||
| 147 | entry.metadata.dig("changes", "location")) | ||
| 148 | assert_nil entry.metadata.dig("changes", "title") | ||
| 149 | assert_equal "Neue Zentrale", entry.metadata["location"] | ||
| 150 | end | ||
| 151 | |||
| 152 | test "an update that changes nothing records no entry" do | ||
| 153 | event = Event.new(:title => "Chaostreff") | ||
| 154 | event.save_witnessed(:actor => users(:aaron)) | ||
| 155 | |||
| 156 | assert_no_difference -> { event_entries.count } do | ||
| 157 | assert event.update_witnessed({ :title => "Chaostreff" }, :actor => users(:aaron)) | ||
| 158 | end | ||
| 159 | end | ||
| 160 | |||
| 161 | test "deleting an event is witnessed before the row goes" do | ||
| 162 | event = Event.new(:title => "Chaostreff", :location => "Zentrale") | ||
| 163 | event.save_witnessed(:actor => users(:aaron)) | ||
| 164 | |||
| 165 | assert_difference -> { event_entries.count }, 1 do | ||
| 166 | assert event.destroy_witnessed(:actor => users(:aaron)) | ||
| 167 | end | ||
| 168 | |||
| 169 | entry = event_entries.last | ||
| 170 | assert_equal "event_destroy", entry.action | ||
| 171 | assert_equal "Chaostreff", entry.metadata["event_title"] | ||
| 172 | assert_equal "Zentrale", entry.metadata["location"] | ||
| 173 | assert_nil Event.find_by(:id => event.id) | ||
| 174 | end | ||
| 175 | |||
| 176 | test "an event may start without ending" do | ||
| 177 | event = Event.new(:title => "Chaostreff", :start_time => Time.utc(2026, 9, 1, 19, 0)) | ||
| 178 | assert event.save | ||
| 179 | assert_equal event.start_time, event.occurrences.first&.start_time | ||
| 180 | end | ||
| 110 | end | 181 | end |
diff --git a/test/models/helpers/node_actions_helper_test.rb b/test/models/helpers/node_actions_helper_test.rb index 1b72ec9c..01b57962 100644 --- a/test/models/helpers/node_actions_helper_test.rb +++ b/test/models/helpers/node_actions_helper_test.rb | |||
| @@ -143,4 +143,17 @@ class NodeActionsHelperTest < ActionView::TestCase | |||
| 143 | assert_includes verb_icon(entry("publish", { "via" => "revision" })), "node_action_icon--history" | 143 | assert_includes verb_icon(entry("publish", { "via" => "revision" })), "node_action_icon--history" |
| 144 | assert_includes verb_icon(entry("frobnicate")), "node_action_icon--circle-dashed" | 144 | assert_includes verb_icon(entry("frobnicate")), "node_action_icon--circle-dashed" |
| 145 | end | 145 | end |
| 146 | |||
| 147 | test "an event entry renders after its event is gone" do | ||
| 148 | event = Event.new(:title => "Chaostreff", :rrule => "FREQ=WEEKLY;BYDAY=TU", | ||
| 149 | :start_time => Time.utc(2026, 9, 1, 19, 0), | ||
| 150 | :end_time => Time.utc(2026, 9, 1, 21, 0)) | ||
| 151 | event.save_witnessed(:actor => users(:aaron)) | ||
| 152 | event.destroy_witnessed(:actor => users(:aaron)) | ||
| 153 | |||
| 154 | entry = NodeAction.where(:action => "event_destroy").order(:id).last | ||
| 155 | |||
| 156 | assert_match "Chaostreff", action_summary(entry) | ||
| 157 | assert_nothing_raised { event_changes_list(entry) } | ||
| 158 | end | ||
| 146 | end | 159 | end |
