1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2025-08-02 16:35:19 +02:00

ui(settings): make user privacy settings more clear

This commit is contained in:
0ko 2024-07-09 23:38:53 +05:00
parent 51c5b993ab
commit 29a1c786a3
4 changed files with 32 additions and 13 deletions

View file

@ -24,11 +24,6 @@ func TestUserProfileActivity(t *testing.T) {
// Activity availability should be the same for guest and another non-admin user, so this is not tested separately
userGuest := emptyTestSession(t)
// The hint may contain "Configure" link with an anchor. Verify that it works.
response := userRegular.MakeRequest(t, NewRequest(t, "GET", "/user/settings"), http.StatusOK)
page := NewHTMLParser(t, response.Body)
assert.True(t, page.Find(".checkbox#keep-activity-private").Length() > 0)
// = Public =
// Set activity visibility of user2 to public. This is the default, but won't hurt to set it before testing.
@ -41,9 +36,18 @@ func TestUserProfileActivity(t *testing.T) {
// Verify the hint for all types of users: admin, self, guest
testUser2ActivityVisibility(t, userAdmin, "This activity is visible to everyone, but as an administrator you can also see interactions in private spaces.", true)
testUser2ActivityVisibility(t, userRegular, "Your activity is visible to everyone, except for interactions in private spaces. Configure.", true)
hintLink := testUser2ActivityVisibility(t, userRegular, "Your activity is visible to everyone, except for interactions in private spaces. Configure.", true)
testUser2ActivityVisibility(t, userGuest, "", true)
// When viewing own profile, the user is offered to configure activity visibility. Verify that the link is correct and works, also check that it links back to the activity tab.
linkCorrect := assert.EqualValues(t, "/user/settings#keep-activity-private", hintLink)
if linkCorrect {
page := NewHTMLParser(t, userRegular.MakeRequest(t, NewRequest(t, "GET", hintLink), http.StatusOK).Body)
activityLink, exists := page.Find(".field:has(.checkbox#keep-activity-private) .help a").Attr("href")
assert.True(t, exists)
assert.EqualValues(t, "/user2?tab=activity", activityLink)
}
// = Private =
// Set activity visibility of user2 to private
@ -56,8 +60,11 @@ func TestUserProfileActivity(t *testing.T) {
// Verify the hint for all types of users: admin, self, guest
testUser2ActivityVisibility(t, userAdmin, "This activity is visible to you because you're an administrator, but the user wants it to remain private.", true)
testUser2ActivityVisibility(t, userRegular, "Your activity is only visible to you and the instance administrators. Configure.", true)
hintLink = testUser2ActivityVisibility(t, userRegular, "Your activity is only visible to you and the instance administrators. Configure.", true)
testUser2ActivityVisibility(t, userGuest, "This user has disabled the public visibility of the activity.", false)
// Verify that Configure link is correct
assert.EqualValues(t, "/user/settings#keep-activity-private", hintLink)
})
}
@ -72,11 +79,14 @@ func testChangeUserActivityVisibility(t *testing.T, session *TestSession, newSta
}
// testUser2ActivityVisibility checks visibility of UI elements on /<user>?tab=activity
func testUser2ActivityVisibility(t *testing.T, session *TestSession, hint string, availability bool) {
// It also returns the account visibility link if it is present on the page.
func testUser2ActivityVisibility(t *testing.T, session *TestSession, hint string, availability bool) string {
t.Helper()
response := session.MakeRequest(t, NewRequest(t, "GET", "/user2?tab=activity"), http.StatusOK)
page := NewHTMLParser(t, response.Body)
// Check hint visibility and correctness
testSelectorEquals(t, page, "#visibility-hint", hint)
hintLink, hintLinkExists := page.Find("#visibility-hint a").Attr("href")
// Check that the hint aligns with the actual feed availability
assert.EqualValues(t, availability, page.Find("#activity-feed").Length() > 0)
@ -87,10 +97,16 @@ func testUser2ActivityVisibility(t *testing.T, session *TestSession, hint string
// Check that the current tab is displayed and is active regardless of it's actual availability
// For example, on /<user> it wouldn't be available to guest, but it should be still present on /<user>?tab=activity
assert.True(t, page.Find("overflow-menu .active.item[href='/user2?tab=activity']").Length() > 0)
if hintLinkExists {
return hintLink
}
return ""
}
// testUser2ActivityButtonsAvailability check visibility of Public activity tab on main profile page
// testUser2ActivityButtonsAvailability checks visibility of Public activity tab on main profile page
func testUser2ActivityButtonsAvailability(t *testing.T, session *TestSession, buttons bool) {
t.Helper()
response := session.MakeRequest(t, NewRequest(t, "GET", "/user2"), http.StatusOK)
page := NewHTMLParser(t, response.Body)
assert.EqualValues(t, buttons, page.Find("overflow-menu .item[href='/user2?tab=activity']").Length() > 0)