| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright 2024 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package integration
-
- import (
- "encoding/base64"
- "fmt"
- "net/http"
- "net/url"
- "testing"
- "time"
-
- auth_model "code.gitea.io/gitea/models/auth"
- api "code.gitea.io/gitea/modules/structs"
- "code.gitea.io/gitea/modules/util"
- "code.gitea.io/gitea/routers/web/shared/user"
-
- "github.com/stretchr/testify/assert"
- )
-
- func getCreateProfileReadmeFileOptions(content string) api.CreateFileOptions {
- contentEncoded := base64.StdEncoding.EncodeToString([]byte(content))
- return api.CreateFileOptions{
- FileOptions: api.FileOptions{
- BranchName: "main",
- NewBranchName: "main",
- Message: "create the profile README.md",
- Dates: api.CommitDateOptions{
- Author: time.Unix(946684810, 0),
- Committer: time.Unix(978307190, 0),
- },
- },
- ContentBase64: contentEncoded,
- }
- }
-
- func createTestProfile(t *testing.T, orgName, profileRepoName, readmeContent string) {
- isPrivate := profileRepoName == user.RepoNameProfilePrivate
-
- ctx := NewAPITestContext(t, "user1", profileRepoName, auth_model.AccessTokenScopeAll)
- session := loginUser(t, "user1")
- tokenAdmin := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeAll)
-
- // create repo
- doAPICreateOrganizationRepository(ctx, orgName, &api.CreateRepoOption{Name: profileRepoName, Private: isPrivate})(t)
-
- // create readme
- createFileOptions := getCreateProfileReadmeFileOptions(readmeContent)
- req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", orgName, profileRepoName, "README.md"), &createFileOptions).
- AddTokenAuth(tokenAdmin)
- MakeRequest(t, req, http.StatusCreated)
- }
-
- func TestOrgProfile(t *testing.T) {
- onGiteaRun(t, testOrgProfile)
- }
-
- func testOrgProfile(t *testing.T, u *url.URL) {
- const contentPublicReadme = "Public Readme Content"
- const contentPrivateReadme = "Private Readme Content"
- // HTML: "#org-home-view-as-dropdown" (indicate whether the view as dropdown menu is present)
-
- // PART 1: Test Both Private and Public
- createTestProfile(t, "org3", user.RepoNameProfile, contentPublicReadme)
- createTestProfile(t, "org3", user.RepoNameProfilePrivate, contentPrivateReadme)
-
- // Anonymous User
- req := NewRequest(t, "GET", "org3")
- resp := MakeRequest(t, req, http.StatusOK)
- bodyString := util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPublicReadme)
- assert.NotContains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- // Logged in but not member
- session := loginUser(t, "user24")
- req = NewRequest(t, "GET", "org3")
- resp = session.MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPublicReadme)
- assert.NotContains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- // Site Admin
- session = loginUser(t, "user1")
- req = NewRequest(t, "GET", "/org3")
- resp = session.MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPrivateReadme) // as an org member, default to show the private profile
- assert.Contains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- req = NewRequest(t, "GET", "/org3?view_as=member")
- resp = session.MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPrivateReadme)
- assert.Contains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- req = NewRequest(t, "GET", "/org3?view_as=public")
- resp = session.MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPublicReadme)
- assert.Contains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- // PART 2: Each org has either one of private pr public profile
- createTestProfile(t, "org41", user.RepoNameProfile, contentPublicReadme)
- createTestProfile(t, "org42", user.RepoNameProfilePrivate, contentPrivateReadme)
-
- // Anonymous User
- req = NewRequest(t, "GET", "/org41")
- resp = MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPublicReadme)
- assert.NotContains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- req = NewRequest(t, "GET", "/org42")
- resp = MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.NotContains(t, bodyString, contentPrivateReadme)
- assert.NotContains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- // Site Admin
- req = NewRequest(t, "GET", "/org41")
- resp = session.MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPublicReadme)
- assert.NotContains(t, bodyString, `id="org-home-view-as-dropdown"`)
-
- req = NewRequest(t, "GET", "/org42")
- resp = session.MakeRequest(t, req, http.StatusOK)
- bodyString = util.UnsafeBytesToString(resp.Body.Bytes())
- assert.Contains(t, bodyString, contentPrivateReadme)
- assert.NotContains(t, bodyString, `id="org-home-view-as-dropdown"`)
- }
|