diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-15 01:41:34 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-15 04:23:09 +0200 |
| commit | d56155231814633e04f856d22646fea24ef97011 (patch) | |
| tree | 9d5b6f8c32ee5b59783a2880388e7833278d1d87 /test/controllers | |
| parent | 28a6999b55cbec555696df848d6e924aae3166ee (diff) | |
node_id/page_id/user_id are lookup and ordering only -- all three
nullify on delete, so an entry outlives its actor and its subject.
Everything that must survive those deletions lives in a mandatory
metadata jsonb written once at creation: the actor's username, the
node's human-readable name (pinned to the default locale), and
action-specific extras such as publish's title from/to.
NodeAction.record! is the single constructor, so every entry gets
the same baseline metadata without each call site re-implementing
it. occurred_at is one field for live and backfilled entries alike;
inferred_from distinguishes them -- nil means witnessed at the
moment it happened, populated names how a backfilled entry was
estimated.
Instrumented so far: publish (crediting the actual publisher,
threaded through from the controller -- previously nobody had the
act of publishing recorded anywhere), revert's discard_autosave and
destroy_draft branches, and translation destroy. publish_draft! now
runs in a transaction so the promotion and its log entry land
together. The remaining verbs follow once this mechanism has proven
itself.
Diffstat (limited to 'test/controllers')
| -rw-r--r-- | test/controllers/page_translations_controller_test.rb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/test/controllers/page_translations_controller_test.rb b/test/controllers/page_translations_controller_test.rb index 8fa732f..82f8bce 100644 --- a/test/controllers/page_translations_controller_test.rb +++ b/test/controllers/page_translations_controller_test.rb | |||
| @@ -82,4 +82,19 @@ class PageTranslationsControllerTest < ActionController::TestCase | |||
| 82 | assert_equal page_count_before, node.pages.count | 82 | assert_equal page_count_before, node.pages.count |
| 83 | assert_equal "in progress", Globalize.with_locale(:en) { node.autosave.title } | 83 | assert_equal "in progress", Globalize.with_locale(:en) { node.autosave.title } |
| 84 | end | 84 | end |
| 85 | |||
| 86 | test "destroy logs a translation_destroy NodeAction" do | ||
| 87 | login_as :quentin | ||
| 88 | node = Node.root.children.create!(:slug => "translation_destroy_log_test") | ||
| 89 | Globalize.with_locale(:en) { node.draft.update!(:title => "English title") } | ||
| 90 | |||
| 91 | delete :destroy, params: { :node_id => node.id, :translation_locale => "en" } | ||
| 92 | |||
| 93 | action = NodeAction.last | ||
| 94 | assert_equal node, action.node | ||
| 95 | assert_equal "en", action.locale | ||
| 96 | assert_equal "translation_destroy", action.action | ||
| 97 | assert_equal users(:quentin), action.user | ||
| 98 | assert_redirected_to node_path(node) | ||
| 99 | end | ||
| 85 | end | 100 | end |
