From ed18872be8211e6ea7ed88193cfc6b41d5b97446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Saquetim?= Date: Wed, 17 Sep 2025 21:32:41 -0300 Subject: [PATCH 1/3] DEV: Remove redundant `post-stream:refresh` event triggers Eliminate obsolete `post-stream:refresh` event triggers. These events were marked as TODO for removal after the Glimmer migration and are no longer needed. This cleanup improves code clarity and reduces unnecessary event emissions, with no impact on functionality since the events were unused by the current post-stream implementation. --- .../initializers/activity-pub-initializer.gjs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs b/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs index f9a4dc93..ad07580d 100644 --- a/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs +++ b/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs @@ -109,14 +109,10 @@ export default { activity_pub_updated_at: data.model.updated_at, activity_pub_delivered_at: data.model.delivered_at, }; - topic.postStream - .triggerActivityPubStateChange(data.model.id, props) - .then(() => - // TODO (glimmer-post-stream) the Glimmer Post Stream does not listen to this event - this.appEvents.trigger("post-stream:refresh", { - id: data.model.id, - }) - ); + topic.postStream.triggerActivityPubStateChange( + data.model.id, + props + ); this.appEvents.trigger( "activity-pub:post-updated", data.model.id, From b9ffa9a152d7c36d9956022f27637b81cde4c0ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Saquetim?= Date: Thu, 18 Sep 2025 16:23:26 -0300 Subject: [PATCH 2/3] DEV: Remove `glimmer_post_stream_mode` from tests for simplification Remove usages of `glimmer_post_stream_mode` in tests across various files, including acceptance and system-level specs, where it was used to toggle testing behavior. This reduces test complexity and ensures coverage without dependency on this feature flag, which is being phased out. --- .../acceptance/activity-pub-topic-test.js | 1126 ++++++++--------- 1 file changed, 548 insertions(+), 578 deletions(-) diff --git a/test/javascripts/acceptance/activity-pub-topic-test.js b/test/javascripts/acceptance/activity-pub-topic-test.js index 4c3e28e8..5a0f26a3 100644 --- a/test/javascripts/acceptance/activity-pub-topic-test.js +++ b/test/javascripts/acceptance/activity-pub-topic-test.js @@ -53,642 +53,612 @@ const setupServer = (needs, postAttrs = [], topicAttrs = {}) => { }); }; -["enabled", "disabled"].forEach((postStreamMode) => { - acceptance( - `Discourse Activity Pub | ActivityPub topic as user with post status not visible (glimmer_post_stream_mode = ${postStreamMode})`, - function (needs) { - needs.user({ - moderator: false, - admin: false, - groups: [AUTO_GROUPS.trust_level_0, AUTO_GROUPS.trust_level_1], - }); - needs.settings({ - glimmer_post_stream_mode: postStreamMode, - }); +acceptance( + `Discourse Activity Pub | ActivityPub topic as user with post status not visible`, + function (needs) { + needs.user({ + moderator: false, + admin: false, + groups: [AUTO_GROUPS.trust_level_0, AUTO_GROUPS.trust_level_1], + }); - setupServer(needs, [ - { - activity_pub_published_at: publishedAt, - activity_pub_local: true, - }, - { - activity_pub_published_at: publishedAt, - activity_pub_local: true, - }, - ]); + setupServer(needs, [ + { + activity_pub_published_at: publishedAt, + activity_pub_local: true, + }, + { + activity_pub_published_at: publishedAt, + activity_pub_local: true, + }, + ]); + + test("ActivityPub topic and post elements", async function (assert) { + this.siteSettings.activity_pub_post_status_visibility_groups = "1"; + Site.current().set("activity_pub_enabled", true); + + await visit("/t/280"); + + assert + .dom(".topic-map__activity-pub") + .doesNotExist("the topic map is not visible"); + assert + .dom(".topic-post[data-post-number='2'] .post-info.activity-pub") + .doesNotExist("the post status is not visible"); + }); + } +); + +acceptance( + `Discourse Activity Pub | ActivityPub topic as user in a group with post status visible`, + function (needs) { + needs.user({ moderator: true, admin: false }); + + setupServer(needs, [ + { + activity_pub_published_at: publishedAt, + activity_pub_visibility: "public", + activity_pub_domain: "external.com", + activity_pub_local: false, + }, + { + activity_pub_published_at: publishedAt, + activity_pub_visibility: "public", + activity_pub_local: true, + }, + ]); + + test("When the plugin is disabled", async function (assert) { + this.siteSettings.activity_pub_post_status_visibility_groups = "2"; + Site.current().setProperties({ + activity_pub_enabled: false, + activity_pub_publishing_enabled: false, + }); - test("ActivityPub topic and post elements", async function (assert) { - this.siteSettings.activity_pub_post_status_visibility_groups = "1"; - Site.current().set("activity_pub_enabled", true); + await visit("/t/280"); - await visit("/t/280"); + assert + .dom(".topic-map__activity-pub") + .doesNotExist("the activity pub topic map is not visible"); + }); - assert - .dom(".topic-map__activity-pub") - .doesNotExist("the topic map is not visible"); - assert - .dom(".topic-post[data-post-number='2'] .post-info.activity-pub") - .doesNotExist("the post status is not visible"); + test("When the plugin is enabled", async function (assert) { + this.siteSettings.activity_pub_post_status_visibility_groups = "2"; + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - } - ); - - acceptance( - `Discourse Activity Pub | ActivityPub topic as user in a group with post status visible (glimmer_post_stream_mode = ${postStreamMode})`, - function (needs) { - needs.user({ moderator: true, admin: false }); - needs.settings({ - glimmer_post_stream_mode: postStreamMode, + + await visit("/t/280"); + + assert.dom(".topic-map__activity-pub").exists("the topic map is visible"); + assert + .dom(".topic-post[data-post-number='2'] .post-info.activity-pub") + .exists("is visible"); + }); + + test("post status update", async function (assert) { + this.siteSettings.activity_pub_post_status_visibility_groups = "2"; + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - setupServer(needs, [ - { - activity_pub_published_at: publishedAt, - activity_pub_visibility: "public", - activity_pub_domain: "external.com", - activity_pub_local: false, - }, - { - activity_pub_published_at: publishedAt, - activity_pub_visibility: "public", - activity_pub_local: true, + await visit("/t/280"); + + const postStatusUpdate = { + model: { + id: 419, + type: "post", + topic_id: 280, + published_at: publishedAt, + deleted_at: deletedAt, }, - ]); + }; + await publishToMessageBus("/activity-pub", postStatusUpdate); + + assert + .dom( + `.topic-post[data-post-number='2'] .activity-pub-post-status[title='Post was deleted via ActivityPub on ${deletedAt.format( + i18n("dates.time_short_day") + )}.']` + ) + .exists("shows the right post status text"); + }); + } +); + +acceptance( + `Discourse Activity Pub | ActivityPub topic as anon user when post status is visible to everyone`, + function (needs) { + setupServer(needs, [ + { + activity_pub_published_at: publishedAt, + activity_pub_visibility: "public", + activity_pub_domain: "external.com", + activity_pub_local: false, + }, + { + activity_pub_published_at: publishedAt, + activity_pub_visibility: "public", + activity_pub_local: true, + }, + ]); + + test("When the plugin is disabled", async function (assert) { + this.siteSettings.activity_pub_post_status_visibility_groups = "0"; + Site.current().setProperties({ + activity_pub_enabled: false, + activity_pub_publishing_enabled: false, + }); - test("When the plugin is disabled", async function (assert) { - this.siteSettings.activity_pub_post_status_visibility_groups = "2"; - Site.current().setProperties({ - activity_pub_enabled: false, - activity_pub_publishing_enabled: false, - }); + await visit("/t/280"); - await visit("/t/280"); + assert + .dom(".topic-map__activity-pub") + .doesNotExist("the activity pub topic map is not visible"); + }); - assert - .dom(".topic-map__activity-pub") - .doesNotExist("the activity pub topic map is not visible"); + test("When the plugin is enabled", async function (assert) { + this.siteSettings.activity_pub_post_status_visibility_groups = "0"; + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - test("When the plugin is enabled", async function (assert) { - this.siteSettings.activity_pub_post_status_visibility_groups = "2"; - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - assert - .dom(".topic-map__activity-pub") - .exists("the topic map is visible"); - assert - .dom(".topic-post[data-post-number='2'] .post-info.activity-pub") - .exists("is visible"); - }); + await visit("/t/280"); - test("post status update", async function (assert) { - this.siteSettings.activity_pub_post_status_visibility_groups = "2"; - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - const postStatusUpdate = { - model: { - id: 419, - type: "post", - topic_id: 280, - published_at: publishedAt, - deleted_at: deletedAt, - }, - }; - await publishToMessageBus("/activity-pub", postStatusUpdate); - - assert - .dom( - `.topic-post[data-post-number='2'] .activity-pub-post-status[title='Post was deleted via ActivityPub on ${deletedAt.format( - i18n("dates.time_short_day") - )}.']` - ) - .exists("shows the right post status text"); - }); - } - ); - - acceptance( - `Discourse Activity Pub | ActivityPub topic as anon user when post status is visible to everyone (glimmer_post_stream_mode = ${postStreamMode})`, - function (needs) { - needs.settings({ - glimmer_post_stream_mode: postStreamMode, + assert.dom(".topic-map__activity-pub").exists("the topic map is visible"); + assert + .dom(".topic-post[data-post-number='2'] .post-info.activity-pub") + .exists("is visible"); + }); + } +); + +acceptance( + `Discourse Activity Pub | Scheduled ActivityPub topic as staff`, + function (needs) { + needs.user({ moderator: true, admin: false }); + + setupServer( + needs, + [ + { + activity_pub_scheduled_at: scheduledAt, + activity_pub_visibility: "public", + }, + ], + { + activity_pub_scheduled_at: scheduledAt, + } + ); + + test("topic map", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - setupServer(needs, [ + await visit("/t/280"); + + assert + .dom(".topic-map__activity-pub .activity-pub-topic-status") + .hasText( + `Topic is scheduled to be published via ActivityPub on ${scheduledAt.format( + i18n("dates.time_short_day") + )}.`, + "shows the right status text" + ); + }); + } +); + +acceptance( + `Discourse Activity Pub | Published ActivityPub full_topic topic as staff`, + function (needs) { + needs.user({ moderator: true, admin: false }); + + setupServer( + needs, + [ { activity_pub_published_at: publishedAt, activity_pub_visibility: "public", - activity_pub_domain: "external.com", - activity_pub_local: false, + activity_pub_local: true, + activity_pub_full_topic: true, }, { activity_pub_published_at: publishedAt, activity_pub_visibility: "public", activity_pub_local: true, + activity_pub_full_topic: true, }, - ]); + {}, + ], + { + activity_pub_published_at: publishedAt, + activity_pub_object_type: "Collection", + activity_pub_object_id: "https://local.com/collection/1234567", + activity_pub_full_topic: true, + } + ); + + test("When the plugin is disabled", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: false, + activity_pub_publishing_enabled: false, + }); - test("When the plugin is disabled", async function (assert) { - this.siteSettings.activity_pub_post_status_visibility_groups = "0"; - Site.current().setProperties({ - activity_pub_enabled: false, - activity_pub_publishing_enabled: false, - }); + await visit("/t/280"); - await visit("/t/280"); + assert + .dom(".topic-map__activity-pub") + .doesNotExist("the topic map is not visible"); + }); - assert - .dom(".topic-map__activity-pub") - .doesNotExist("the activity pub topic map is not visible"); + test("topic map", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - test("When the plugin is enabled", async function (assert) { - this.siteSettings.activity_pub_post_status_visibility_groups = "0"; - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - assert - .dom(".topic-map__activity-pub") - .exists("the topic map is visible"); - assert - .dom(".topic-post[data-post-number='2'] .post-info.activity-pub") - .exists("is visible"); - }); - } - ); - - acceptance( - `Discourse Activity Pub | Scheduled ActivityPub topic as staff (glimmer_post_stream_mode = ${postStreamMode})`, - function (needs) { - needs.user({ moderator: true, admin: false }); - needs.settings({ - glimmer_post_stream_mode: postStreamMode, - }); + await visit("/t/280"); - setupServer( - needs, - [ - { - activity_pub_scheduled_at: scheduledAt, - activity_pub_visibility: "public", - }, - ], - { - activity_pub_scheduled_at: scheduledAt, - } - ); + assert + .dom(".topic-map__activity-pub .activity-pub-topic-status") + .hasText( + `Topic was published via ActivityPub on ${publishedAt.format( + i18n("dates.time_short_day") + )}.`, + "shows the right status text" + ); + }); - test("topic map", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - assert - .dom(".topic-map__activity-pub .activity-pub-topic-status") - .hasText( - `Topic is scheduled to be published via ActivityPub on ${scheduledAt.format( - i18n("dates.time_short_day") - )}.`, - "shows the right status text" - ); - }); - } - ); - - acceptance( - `Discourse Activity Pub | Published ActivityPub full_topic topic as staff (glimmer_post_stream_mode = ${postStreamMode})`, - function (needs) { - needs.user({ moderator: true, admin: false }); - needs.settings({ - glimmer_post_stream_mode: postStreamMode, + test("topic status update", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - setupServer( - needs, - [ - { - activity_pub_published_at: publishedAt, - activity_pub_visibility: "public", - activity_pub_local: true, - activity_pub_full_topic: true, - }, - { - activity_pub_published_at: publishedAt, - activity_pub_visibility: "public", - activity_pub_local: true, - activity_pub_full_topic: true, - }, - {}, - ], - { + await visit("/t/280"); + + const topicStatusUpdate = { + model: { + id: 280, + type: "topic", activity_pub_published_at: publishedAt, - activity_pub_object_type: "Collection", - activity_pub_object_id: "https://local.com/collection/1234567", - activity_pub_full_topic: true, - } - ); + activity_pub_deleted_at: deletedAt, + }, + }; + await publishToMessageBus("/activity-pub", topicStatusUpdate); + + assert + .dom(".topic-map__activity-pub .activity-pub-topic-status") + .hasText( + `Topic was deleted via ActivityPub on ${deletedAt.format( + i18n("dates.time_short_day") + )}.`, + "shows the right status text" + ); + }); - test("When the plugin is disabled", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: false, - activity_pub_publishing_enabled: false, - }); + test("topic modal", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, + }); - await visit("/t/280"); + await visit("/t/280"); - assert - .dom(".topic-map__activity-pub") - .doesNotExist("the topic map is not visible"); - }); + await click(".topic-map__activity-pub .activity-pub-topic-status"); + assert.dom(".activity-pub-topic-info-modal").exists("shows the modal"); - test("topic map", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - assert - .dom(".topic-map__activity-pub .activity-pub-topic-status") - .hasText( - `Topic was published via ActivityPub on ${publishedAt.format( - i18n("dates.time_short_day") - )}.`, - "shows the right status text" - ); - }); + assert + .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") + .hasText( + `Topic was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right topic status text" + ); + assert + .dom(".activity-pub-topic-info-modal .activity-pub-post-status") + .hasText( + `Post was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right post status text" + ); + assert + .dom( + ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection" + ) + .exists("shows the right topic object type attribute"); + assert + .dom( + ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note" + ) + .exists("shows the right post object type attribute"); + + const topicStatusUpdate = { + model: { + id: 280, + type: "topic", + activity_pub_published_at: publishedAt, + activity_pub_deleted_at: deletedAt, + }, + }; + await publishToMessageBus("/activity-pub", topicStatusUpdate); + + assert + .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") + .hasText( + `Topic was deleted on ${deletedAt.format( + i18n("dates.long_with_year") + )}.`, + "handles a status update" + ); - test("topic status update", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - const topicStatusUpdate = { - model: { - id: 280, - type: "topic", - activity_pub_published_at: publishedAt, - activity_pub_deleted_at: deletedAt, - }, - }; - await publishToMessageBus("/activity-pub", topicStatusUpdate); - - assert - .dom(".topic-map__activity-pub .activity-pub-topic-status") - .hasText( - `Topic was deleted via ActivityPub on ${deletedAt.format( - i18n("dates.time_short_day") - )}.`, - "shows the right status text" - ); - }); + assert + .dom(".activity-pub-topic-actions .action.publish-all") + .exists("shows the publish all posts action"); + assert + .dom( + ".activity-pub-topic-actions .action.publish-all .action-description" + ) + .hasText( + `Publish 18 unpublished posts in Topic #280. Posts will not be delivered to the followers of the Group Actors.`, + "shows the right publish all description" + ); + assert + .dom(".activity-pub-post-actions .action.deliver") + .exists("shows the post deliver action"); + + const topicActionStatusUpdate = { + model: { + id: 280, + type: "topic", + activity_pub_published_post_count: 20, + activity_pub_total_post_count: 20, + }, + }; + await publishToMessageBus("/activity-pub", topicActionStatusUpdate); + assert + .dom( + ".activity-pub-topic-actions .action.publish-all .action-description" + ) + .hasText( + `Publish all posts is disabled. All posts in Topic #280 are already published.`, + "handles topic action status updates" + ); + }); - test("topic modal", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - await click(".topic-map__activity-pub .activity-pub-topic-status"); - assert.dom(".activity-pub-topic-info-modal").exists("shows the modal"); - - assert - .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") - .hasText( - `Topic was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right topic status text" - ); - assert - .dom(".activity-pub-topic-info-modal .activity-pub-post-status") - .hasText( - `Post was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right post status text" - ); - assert - .dom( - ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection" - ) - .exists("shows the right topic object type attribute"); - assert - .dom( - ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note" - ) - .exists("shows the right post object type attribute"); - - const topicStatusUpdate = { - model: { - id: 280, - type: "topic", - activity_pub_published_at: publishedAt, - activity_pub_deleted_at: deletedAt, - }, - }; - await publishToMessageBus("/activity-pub", topicStatusUpdate); - - assert - .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") - .hasText( - `Topic was deleted on ${deletedAt.format( - i18n("dates.long_with_year") - )}.`, - "handles a status update" - ); - - assert - .dom(".activity-pub-topic-actions .action.publish-all") - .exists("shows the publish all posts action"); - assert - .dom( - ".activity-pub-topic-actions .action.publish-all .action-description" - ) - .hasText( - `Publish 18 unpublished posts in Topic #280. Posts will not be delivered to the followers of the Group Actors.`, - "shows the right publish all description" - ); - assert - .dom(".activity-pub-post-actions .action.deliver") - .exists("shows the post deliver action"); - - const topicActionStatusUpdate = { - model: { - id: 280, - type: "topic", - activity_pub_published_post_count: 20, - activity_pub_total_post_count: 20, - }, - }; - await publishToMessageBus("/activity-pub", topicActionStatusUpdate); - assert - .dom( - ".activity-pub-topic-actions .action.publish-all .action-description" - ) - .hasText( - `Publish all posts is disabled. All posts in Topic #280 are already published.`, - "handles topic action status updates" - ); + test("post modal", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, + activity_pub_actors: SiteActors, }); - test("post modal", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - activity_pub_actors: SiteActors, - }); + await visit("/t/280"); - await visit("/t/280"); - - await click( - ".topic-post[data-post-number='3'] .activity-pub-post-status" + await click( + ".topic-post[data-post-number='3'] .activity-pub-post-status" + ); + assert.dom(".activity-pub-post-info-modal").exists("shows the modal"); + + assert + .dom(".activity-pub-post-info-modal .activity-pub-post-status") + .hasText("Post is not published.", "shows the right status text"); + assert + .dom(".activity-pub-post-actions .action.publish") + .exists("shows the publish post action"); + assert + .dom(".activity-pub-post-actions .action.publish .action-description") + .hasText( + `Publish Post #3 without delivering it. The Group Actors have no followers to deliver to.`, + "shows the right publish description" ); - assert.dom(".activity-pub-post-info-modal").exists("shows the modal"); - - assert - .dom(".activity-pub-post-info-modal .activity-pub-post-status") - .hasText("Post is not published.", "shows the right status text"); - assert - .dom(".activity-pub-post-actions .action.publish") - .exists("shows the publish post action"); - assert - .dom(".activity-pub-post-actions .action.publish .action-description") - .hasText( - `Publish Post #3 without delivering it. The Group Actors have no followers to deliver to.`, - "shows the right publish description" - ); - const topicStatusUpdate = { - model: { - id: 280, - type: "topic", - activity_pub_published_at: null, - }, - }; - await publishToMessageBus("/activity-pub", topicStatusUpdate); - assert - .dom(".activity-pub-post-actions .action.publish .action-description") - .hasText( - "Publish is disabled for Post #3. Topic #280 is not published.", - "handles topic status updates" - ); - }); - } - ); - - acceptance( - `Discourse Activity Pub | Published ActivityPub first_post topic as staff (glimmer_post_stream_mode = ${postStreamMode})`, - function (needs) { - needs.user({ moderator: true, admin: false }); - needs.settings({ - glimmer_post_stream_mode: postStreamMode, - }); + const topicStatusUpdate = { + model: { + id: 280, + type: "topic", + activity_pub_published_at: null, + }, + }; + await publishToMessageBus("/activity-pub", topicStatusUpdate); + assert + .dom(".activity-pub-post-actions .action.publish .action-description") + .hasText( + "Publish is disabled for Post #3. Topic #280 is not published.", + "handles topic status updates" + ); + }); + } +); - setupServer( - needs, - [ - { - activity_pub_first_post: true, - activity_pub_published_at: publishedAt, - activity_pub_visibility: "public", - activity_pub_local: true, - }, - ], +acceptance( + `Discourse Activity Pub | Published ActivityPub first_post topic as staff`, + function (needs) { + needs.user({ moderator: true, admin: false }); + + setupServer( + needs, + [ { + activity_pub_first_post: true, activity_pub_published_at: publishedAt, - activity_pub_full_topic: false, - } - ); - - test("ActivityPub topic info modal", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - await click(".topic-map__activity-pub .activity-pub-topic-status"); - assert.dom(".activity-pub-topic-info-modal").exists("shows the modal"); - - assert - .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") - .hasText( - `Topic was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right topic status text" - ); - assert - .dom(".activity-pub-topic-info-modal .activity-pub-post-status") - .hasText( - `Post was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right post status text" - ); - assert - .dom( - ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection" - ) - .doesNotExist("does not show a topic object type attribute"); - assert - .dom( - ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note" - ) - .exists("shows the right post object type attribute"); - assert - .dom(".activity-pub-topic-actions .action.publish-all") - .doesNotExist("does not show the publish all posts action"); - }); - } - ); - - acceptance( - `Discourse Activity Pub | Published ActivityPub topic as staff with a remote Note (glimmer_post_stream_mode = ${postStreamMode})`, - function (needs) { - needs.user({ moderator: true, admin: false }); - needs.settings({ - glimmer_post_stream_mode: postStreamMode, + activity_pub_visibility: "public", + activity_pub_local: true, + }, + ], + { + activity_pub_published_at: publishedAt, + activity_pub_full_topic: false, + } + ); + + test("ActivityPub topic info modal", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - setupServer( - needs, - [ - { - post_number: 1, - activity_pub_published_at: publishedAt, - activity_pub_visibility: "public", - activity_pub_local: false, - activity_pub_domain: "external.com", - activity_pub_url: "https://external.com/note/1", - }, - { - post_number: 2, - activity_pub_published_at: publishedAt, - activity_pub_visibility: "public", - activity_pub_local: false, - activity_pub_domain: "external.com", - activity_pub_url: "https://external.com/note/3", - }, - ], + await visit("/t/280"); + + await click(".topic-map__activity-pub .activity-pub-topic-status"); + assert.dom(".activity-pub-topic-info-modal").exists("shows the modal"); + + assert + .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") + .hasText( + `Topic was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right topic status text" + ); + assert + .dom(".activity-pub-topic-info-modal .activity-pub-post-status") + .hasText( + `Post was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right post status text" + ); + assert + .dom( + ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection" + ) + .doesNotExist("does not show a topic object type attribute"); + assert + .dom( + ".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note" + ) + .exists("shows the right post object type attribute"); + assert + .dom(".activity-pub-topic-actions .action.publish-all") + .doesNotExist("does not show the publish all posts action"); + }); + } +); + +acceptance( + `Discourse Activity Pub | Published ActivityPub topic as staff with a remote Note`, + function (needs) { + needs.user({ moderator: true, admin: false }); + + setupServer( + needs, + [ { + post_number: 1, activity_pub_published_at: publishedAt, + activity_pub_visibility: "public", activity_pub_local: false, - } - ); - - test("ActivityPub topic and post status", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - assert - .dom(".activity-pub-topic-status") - .hasText( - `Topic was published via ActivityPub by @cat_1@test.local on ${publishedAt.format( - i18n("dates.time_short_day") - )}.`, - "shows the right topic status text" - ); - assert - .dom( - `.topic-post[data-post-number='2'] .activity-pub-post-status[title='Post was published via ActivityPub by actor1@domain.com on ${publishedAt.format( - i18n("dates.time_short_day") - )}.']` - ) - .exists("shows the right post status text"); + activity_pub_domain: "external.com", + activity_pub_url: "https://external.com/note/1", + }, + { + post_number: 2, + activity_pub_published_at: publishedAt, + activity_pub_visibility: "public", + activity_pub_local: false, + activity_pub_domain: "external.com", + activity_pub_url: "https://external.com/note/3", + }, + ], + { + activity_pub_published_at: publishedAt, + activity_pub_local: false, + } + ); + + test("ActivityPub topic and post status", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - test("ActivityPub topic info modal", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); - - await visit("/t/280"); - - await click(".topic-map__activity-pub .activity-pub-topic-status"); - assert.dom(".activity-pub-topic-info-modal").exists("shows the modal"); - - assert - .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") - .hasText( - `Topic was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right topic status text" - ); - assert - .dom(".activity-pub-topic-info-modal .activity-pub-post-status") - .hasText( - `Post was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right post status text" - ); - assert - .dom(".activity-pub-topic-info-modal .activity-pub-post-status") - .hasText( - `Post was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right post status text" - ); + await visit("/t/280"); + + assert + .dom(".activity-pub-topic-status") + .hasText( + `Topic was published via ActivityPub by @cat_1@test.local on ${publishedAt.format( + i18n("dates.time_short_day") + )}.`, + "shows the right topic status text" + ); + assert + .dom( + `.topic-post[data-post-number='2'] .activity-pub-post-status[title='Post was published via ActivityPub by actor1@domain.com on ${publishedAt.format( + i18n("dates.time_short_day") + )}.']` + ) + .exists("shows the right post status text"); + }); + + test("ActivityPub topic info modal", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - test("ActivityPub post info modal", async function (assert) { - Site.current().setProperties({ - activity_pub_enabled: true, - activity_pub_publishing_enabled: true, - }); + await visit("/t/280"); - await visit("/t/280"); + await click(".topic-map__activity-pub .activity-pub-topic-status"); + assert.dom(".activity-pub-topic-info-modal").exists("shows the modal"); - await click( - ".topic-post[data-post-number='2'] .activity-pub-post-status" + assert + .dom(".activity-pub-topic-info-modal .activity-pub-topic-status") + .hasText( + `Topic was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right topic status text" + ); + assert + .dom(".activity-pub-topic-info-modal .activity-pub-post-status") + .hasText( + `Post was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right post status text" ); - assert.dom(".activity-pub-post-info-modal").exists("shows the modal"); - assert - .dom(".activity-pub-post-info-modal .activity-pub-post-status") - .hasText( - `Post was published on ${publishedAt.format( - i18n("dates.long_with_year") - )}.`, - "shows the right status text" - ); - assert - .dom( - ".activity-pub-post-info-modal .activity-pub-attribute.visibility" - ) - .hasText("Public", "shows the right visibility text"); + assert + .dom(".activity-pub-topic-info-modal .activity-pub-post-status") + .hasText( + `Post was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right post status text" + ); + }); + + test("ActivityPub post info modal", async function (assert) { + Site.current().setProperties({ + activity_pub_enabled: true, + activity_pub_publishing_enabled: true, }); - } - ); -}); + + await visit("/t/280"); + + await click( + ".topic-post[data-post-number='2'] .activity-pub-post-status" + ); + assert.dom(".activity-pub-post-info-modal").exists("shows the modal"); + assert + .dom(".activity-pub-post-info-modal .activity-pub-post-status") + .hasText( + `Post was published on ${publishedAt.format( + i18n("dates.long_with_year") + )}.`, + "shows the right status text" + ); + assert + .dom(".activity-pub-post-info-modal .activity-pub-attribute.visibility") + .hasText("Public", "shows the right visibility text"); + }); + } +); From a6167cf3afa8b9ab1ea220afbfe0d6c674c58a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Saquetim?= Date: Fri, 19 Sep 2025 14:10:02 -0300 Subject: [PATCH 3/3] DEV: Remove deprecated widget overrides and streamline `post` handling Remove deprecated `discourse.post-stream-widget-overrides` and associated legacy widget customizations. This cleanup reduces technical debt, ensures future maintainability, and aligns with the latest framework improvements. --- .../initializers/activity-pub-initializer.gjs | 51 ------------------- .../components/activity-pub-post-test.gjs | 49 ++++++++++++------ 2 files changed, 33 insertions(+), 67 deletions(-) diff --git a/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs b/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs index ad07580d..80c0ef66 100644 --- a/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs +++ b/assets/javascripts/discourse/initializers/activity-pub-initializer.gjs @@ -1,10 +1,7 @@ import { service } from "@ember/service"; -import { hbs } from "ember-cli-htmlbars"; import { Promise } from "rsvp"; import { bind } from "discourse/lib/decorators"; -import { withSilencedDeprecations } from "discourse/lib/deprecated"; import { withPluginApi } from "discourse/lib/plugin-api"; -import RenderGlimmer from "discourse/widgets/render-glimmer"; import { i18n } from "discourse-i18n"; import ActivityPubPostStatus from "../components/activity-pub-post-status"; import ActivityPubTopicMap from "../components/activity-pub-topic-map"; @@ -226,52 +223,4 @@ function customizePost(api, container) { }; } }); - - withSilencedDeprecations("discourse.post-stream-widget-overrides", () => - customizeWidgetPost(api, container) - ); -} - -function customizeWidgetPost(api, container) { - const currentUser = api.getCurrentUser(); - const site = container.lookup("service:site"); - const siteSettings = container.lookup("service:site-settings"); - - api.reopenWidget("post-meta-data", { - html(attrs) { - const result = this._super(attrs); - let postStatuses = result[result.length - 1].children; - postStatuses = postStatuses.filter( - (n) => n.renderInto !== "div.post-info.activity-pub" - ); - if ( - site.activity_pub_enabled && - attrs.activity_pub_enabled && - attrs.post_number !== 1 && - showStatusToUser(currentUser, siteSettings) - ) { - const status = activityPubPostStatus(attrs); - if (status) { - let replyToTabIndex = postStatuses.findIndex((postStatus) => { - return postStatus.name === "reply-to-tab"; - }); - const post = this.findAncestorModel(); - postStatuses.splice( - replyToTabIndex !== -1 ? replyToTabIndex + 1 : 0, - 0, - new RenderGlimmer( - this, - "div.post-info.activity-pub", - hbs``, - { - post, - } - ) - ); - } - } - result[result.length - 1].children = postStatuses; - return result; - }, - }); } diff --git a/test/javascripts/components/activity-pub-post-test.gjs b/test/javascripts/components/activity-pub-post-test.gjs index defe6421..23d1b883 100644 --- a/test/javascripts/components/activity-pub-post-test.gjs +++ b/test/javascripts/components/activity-pub-post-test.gjs @@ -1,31 +1,49 @@ +import { getOwner } from "@ember/owner"; import { click, render } from "@ember/test-helpers"; import { module, skip } from "qunit"; -import MountWidget from "discourse/components/mount-widget"; +import Post from "discourse/components/post"; import { setupRenderingTest } from "discourse/tests/helpers/component-test"; +import DMenus from "float-kit/components/d-menus"; -module("Discourse Activity Pub | Component | Widget | post", function (hooks) { +module("Discourse Activity Pub | Component | post", function (hooks) { setupRenderingTest(hooks); + hooks.beforeEach(function () { + this.siteSettings.post_menu_hidden_items = ""; + + this.store = getOwner(this).lookup("service:store"); + const topic = this.store.createRecord("topic", { id: 123 }); + const post = this.store.createRecord("post", { + id: 123, + post_number: 1, + topic, + like_count: 3, + actions_summary: [{ id: 2, count: 1, hidden: false, can_act: true }], + created_at: new Date(new Date().getTime() - 30 * 60 * 1000), + user_id: 1, + username: "eviltrout", + }); + + this.post = post; + }); skip("non activity pub topic", async function (assert) { const self = this; this.currentUser.admin = true; - this.set("args", { canManage: true, activity_pub_enabled: false }); + this.currentUser.staff = true; + this.post.activity_pub_enabled = false; this.set("changePostOwner", () => (this.owned = true)); await render( ); await click(".post-menu-area .show-post-admin-menu"); assert - .dom(".post-admin-menu button.change-owner") + .dom("[data-content][data-identifier='admin-post-menu'] .change-owner") .exists("the change owner button is visible"); }); @@ -33,22 +51,21 @@ module("Discourse Activity Pub | Component | Widget | post", function (hooks) { const self = this; this.currentUser.admin = true; - this.set("args", { canManage: true, activity_pub_enabled: true }); + this.currentUser.staff = true; + this.post.activity_pub_enabled = true; this.set("changePostOwner", () => (this.owned = true)); await render( ); await click(".post-menu-area .show-post-admin-menu"); + assert - .dom(".post-admin-menu button.change-owner") + .dom("[data-content][data-identifier='admin-post-menu'] .change-owner") .doesNotExist("the change owner button is not visible"); }); });