summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-08-02 22:45:51 +0200
committererdgeist <erdgeist@erdgeist.org>2026-08-02 22:45:51 +0200
commitda59dea46f55c64a3090b83a6321fbecd2ee6f60 (patch)
treeea64bb3e3d124f8141ae0cfb07e1dfffc19162bb /test
parent30d85119ba5cda8a23ca99df5af9e94f5391eb78 (diff)
Witness calendar entries
Diffstat (limited to 'test')
-rw-r--r--test/models/event_test.rb71
-rw-r--r--test/models/helpers/node_actions_helper_test.rb13
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
110end 181end
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
146end 159end