From da59dea46f55c64a3090b83a6321fbecd2ee6f60 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Sun, 2 Aug 2026 22:45:51 +0200 Subject: Witness calendar entries --- test/models/event_test.rb | 71 +++++++++++++++++++++++++ test/models/helpers/node_actions_helper_test.rb | 13 +++++ 2 files changed, 84 insertions(+) (limited to 'test') 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 @cal_node.publish_draft! @cal_node.head.reload end + + def event_entries + NodeAction.where(:action => %w[event_create event_update event_destroy]).order(:id) + end test 'verfy setup data' do assert_not_nil @cal_node @@ -107,4 +111,71 @@ class EventTest < ActiveSupport::TestCase chaosradio_days = scoped_occurrences.map {|x| x.start_time.day} assert_equal expected_days, chaosradio_days end + + test "creating an event is witnessed with a full snapshot" do + event = Event.new(:title => "Chaostreff", + :start_time => Time.utc(2026, 9, 1, 19, 0), + :end_time => Time.utc(2026, 9, 1, 21, 0), + :rrule => "FREQ=WEEKLY;BYDAY=TU", :location => "Zentrale", + :tag_list => "open-day") + + assert_difference -> { event_entries.count }, 1 do + assert event.save_witnessed(:actor => users(:aaron)) + end + + entry = event_entries.last + assert_equal "event_create", entry.action + assert_equal users(:aaron).id, entry.user_id + assert_equal "Chaostreff", entry.metadata["event_title"] + assert_equal "FREQ=WEEKLY;BYDAY=TU", entry.metadata["rrule"] + assert_equal ["open-day"], entry.metadata["event_tags"] + assert_equal event.id, entry.action_participants.first.subject_id + assert_equal "Event", entry.action_participants.first.subject_type + end + + test "updating an event records only what changed" do + event = Event.new(:title => "Chaostreff", :location => "Zentrale") + event.save_witnessed(:actor => users(:aaron)) + + assert_difference -> { event_entries.count }, 1 do + assert event.update_witnessed({ :location => "Neue Zentrale" }, :actor => users(:aaron)) + end + + entry = event_entries.last + assert_equal "event_update", entry.action + assert_equal({ "from" => "Zentrale", "to" => "Neue Zentrale" }, + entry.metadata.dig("changes", "location")) + assert_nil entry.metadata.dig("changes", "title") + assert_equal "Neue Zentrale", entry.metadata["location"] + end + + test "an update that changes nothing records no entry" do + event = Event.new(:title => "Chaostreff") + event.save_witnessed(:actor => users(:aaron)) + + assert_no_difference -> { event_entries.count } do + assert event.update_witnessed({ :title => "Chaostreff" }, :actor => users(:aaron)) + end + end + + test "deleting an event is witnessed before the row goes" do + event = Event.new(:title => "Chaostreff", :location => "Zentrale") + event.save_witnessed(:actor => users(:aaron)) + + assert_difference -> { event_entries.count }, 1 do + assert event.destroy_witnessed(:actor => users(:aaron)) + end + + entry = event_entries.last + assert_equal "event_destroy", entry.action + assert_equal "Chaostreff", entry.metadata["event_title"] + assert_equal "Zentrale", entry.metadata["location"] + assert_nil Event.find_by(:id => event.id) + end + + test "an event may start without ending" do + event = Event.new(:title => "Chaostreff", :start_time => Time.utc(2026, 9, 1, 19, 0)) + assert event.save + assert_equal event.start_time, event.occurrences.first&.start_time + end 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 assert_includes verb_icon(entry("publish", { "via" => "revision" })), "node_action_icon--history" assert_includes verb_icon(entry("frobnicate")), "node_action_icon--circle-dashed" end + + test "an event entry renders after its event is gone" do + event = Event.new(:title => "Chaostreff", :rrule => "FREQ=WEEKLY;BYDAY=TU", + :start_time => Time.utc(2026, 9, 1, 19, 0), + :end_time => Time.utc(2026, 9, 1, 21, 0)) + event.save_witnessed(:actor => users(:aaron)) + event.destroy_witnessed(:actor => users(:aaron)) + + entry = NodeAction.where(:action => "event_destroy").order(:id).last + + assert_match "Chaostreff", action_summary(entry) + assert_nothing_raised { event_changes_list(entry) } + end end -- cgit v1.3