From 3cc0c15015e15410aea3596df942cbddb88adbd6 Mon Sep 17 00:00:00 2001 From: Alan Guo Xiang Tan Date: Wed, 23 Nov 2022 09:21:33 +0800 Subject: [PATCH] UX: Update plugin's user page navigation to be compatible with new nav Core has currently introduced a redesigned user page navigation which is currently considered experimental behind a feature flag. This commit aims to make the plugin compatible with the redesigned user page navigation. --- .../user-main-nav/follow-user-container.hbs | 5 +- .../discourse/templates/follow.hbs | 66 +++++++++++++------ spec/system/follow_user_pages_spec.rb | 41 ++++++++++++ spec/system/page_objects/pages/follow.rb | 43 ++++++++++++ 4 files changed, 135 insertions(+), 20 deletions(-) create mode 100644 spec/system/follow_user_pages_spec.rb create mode 100644 spec/system/page_objects/pages/follow.rb diff --git a/assets/javascripts/discourse/connectors/user-main-nav/follow-user-container.hbs b/assets/javascripts/discourse/connectors/user-main-nav/follow-user-container.hbs index cd75322..479fc45 100644 --- a/assets/javascripts/discourse/connectors/user-main-nav/follow-user-container.hbs +++ b/assets/javascripts/discourse/connectors/user-main-nav/follow-user-container.hbs @@ -1,3 +1,6 @@ {{#if model.can_see_network_tab}} - {{#link-to "follow"}}{{d-icon "users"}}{{i18n "user.follow_nav"}}{{/link-to}} + {{#link-to "follow"}} + {{d-icon "users"}} + {{i18n "user.follow_nav"}} + {{/link-to}} {{/if}} diff --git a/assets/javascripts/discourse/templates/follow.hbs b/assets/javascripts/discourse/templates/follow.hbs index ede65ca..cc5cb72 100644 --- a/assets/javascripts/discourse/templates/follow.hbs +++ b/assets/javascripts/discourse/templates/follow.hbs @@ -1,22 +1,50 @@ -{{#d-section pageClass="user-follow" class="user-secondary-navigation" scrollTop=false}} - {{#mobile-nav class="activity-nav" desktopClass="action-list follow-list nav-stacked"}} - {{#if (eq model.id currentUser.id)}} -
  • - {{#link-to "feed"}}{{i18n "user.feed.label"}}{{/link-to}} -
  • - {{/if}} - {{#if model.can_see_following}} -
  • - {{#link-to "following"}}{{i18n "user.following.label"}}{{/link-to}} -
  • - {{/if}} - {{#if (and model.can_see_followers model.allow_people_to_follow_me)}} -
  • - {{#link-to "followers"}}{{i18n "user.followers.label"}}{{/link-to}} -
  • - {{/if}} - {{/mobile-nav}} -{{/d-section}} +{{#if this.currentUser.redesigned_user_page_nav_enabled}} + + +
    + + {{#if (eq model.id currentUser.id)}} + + {{i18n "user.feed.label"}} + + {{/if}} + + {{#if model.can_see_following}} + + {{i18n "user.following.label"}} + + {{/if}} + + {{#if (and model.can_see_followers model.allow_people_to_follow_me)}} + + {{i18n "user.followers.label"}} + + {{/if}} + +
    +{{else}} + {{#d-section pageClass="user-follow" class="user-secondary-navigation" scrollTop=false}} + {{#mobile-nav class="activity-nav" desktopClass="action-list follow-list nav-stacked"}} + {{#if (eq model.id currentUser.id)}} +
  • + {{#link-to "feed"}}{{i18n "user.feed.label"}}{{/link-to}} +
  • + {{/if}} + + {{#if model.can_see_following}} +
  • + {{#link-to "following"}}{{i18n "user.following.label"}}{{/link-to}} +
  • + {{/if}} + + {{#if (and model.can_see_followers model.allow_people_to_follow_me)}} +
  • + {{#link-to "followers"}}{{i18n "user.followers.label"}}{{/link-to}} +
  • + {{/if}} + {{/mobile-nav}} + {{/d-section}} +{{/if}}
    {{outlet}} diff --git a/spec/system/follow_user_pages_spec.rb b/spec/system/follow_user_pages_spec.rb new file mode 100644 index 0000000..85165a6 --- /dev/null +++ b/spec/system/follow_user_pages_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +RSpec.describe "Follow user pages", type: :system, js: true do + fab!(:user1) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } + fab!(:user3) { Fabricate(:user) } + fab!(:user2_post) { Fabricate(:post, user: user2) } + let(:everyone_group) { Group[:everyone] } + + before do + SiteSetting.discourse_follow_enabled = true + SiteSetting.follow_followers_visible = FollowPagesVisibility::EVERYONE + SiteSetting.follow_following_visible = FollowPagesVisibility::EVERYONE + + Follow::Updater.new(user1, user2).watch_follow + Follow::Updater.new(user3, user1).watch_follow + end + + describe 'when user has redesigned user page navigation enabled' do + before do + everyone_group.add(user1) + SiteSetting.enable_new_user_profile_nav_groups = everyone_group.name + sign_in(user1) + end + + it 'should allow user to navigate to the follow user profile pages' do + follow_page = PageObjects::Pages::Follow.new(user1) + follow_page.visit + + expect(follow_page).to have_following_topic(user2_post.topic) + + follow_page.click_on_followers + + expect(follow_page).to have_follower(user3) + + follow_page.click_on_following + + expect(follow_page).to have_following(user2) + end + end +end diff --git a/spec/system/page_objects/pages/follow.rb b/spec/system/page_objects/pages/follow.rb new file mode 100644 index 0000000..2c0215c --- /dev/null +++ b/spec/system/page_objects/pages/follow.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module PageObjects + module Pages + class Follow < PageObjects::Pages::Base + CONTENT_CLASS = '.user-follows-tab' + + def initialize(user) + super() + @user = user + end + + def visit + page.visit("/u/#{@user.username}") + click_on I18n.t('js.user.follow_nav') + self + end + + def click_on_followers + click_on I18n.t("js.user.followers.label") + self + end + + def click_on_following + click_on I18n.t("js.user.following.label") + self + end + + def has_follower?(user) + within(CONTENT_CLASS) do + page.has_content?(user.username) + end + end + alias_method :has_following?, :has_follower? + + def has_following_topic?(topic) + within(CONTENT_CLASS) do + page.has_content?(topic.title) + end + end + end + end +end