mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
93 lines
3.3 KiB
Go
93 lines
3.3 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package integration
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strconv"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/hanzoai/git/models/unittest"
|
|
user_model "github.com/hanzoai/git/models/user"
|
|
"github.com/hanzoai/git/modules/setting"
|
|
"github.com/hanzoai/git/tests"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func testRepoGenerate(t *testing.T, session *TestSession, templateID, templateOwnerName, templateRepoName, generateOwnerName, generateRepoName string) *httptest.ResponseRecorder {
|
|
generateOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: generateOwnerName})
|
|
|
|
// Step0: check the existence of the generated repo
|
|
req := NewRequestf(t, "GET", "/%s/%s", generateOwnerName, generateRepoName)
|
|
session.MakeRequest(t, req, http.StatusNotFound)
|
|
|
|
// Step1: go to the main page of template repo
|
|
req = NewRequestf(t, "GET", "/%s/%s", templateOwnerName, templateRepoName)
|
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
|
|
|
// Step2: click the "Use this template" button
|
|
htmlDoc := NewHTMLParser(t, resp.Body)
|
|
link, exists := htmlDoc.doc.Find(`a.ui.button[href^="/repo/create"]`).Attr("href")
|
|
assert.True(t, exists, "The template has changed")
|
|
req = NewRequest(t, "GET", link)
|
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
|
|
|
// Step3: fill the form on the "create" page
|
|
htmlDoc = NewHTMLParser(t, resp.Body)
|
|
link, exists = htmlDoc.doc.Find(`form.ui.form[action^="/repo/create"]`).Attr("action")
|
|
assert.True(t, exists, "The template has changed")
|
|
_, exists = htmlDoc.doc.Find(fmt.Sprintf(`#repo_owner_dropdown .item[data-value="%d"]`, generateOwner.ID)).Attr("data-value")
|
|
assert.True(t, exists, "Generate owner '%s' is not present in select box", generateOwnerName)
|
|
req = NewRequestWithValues(t, "POST", link, map[string]string{
|
|
"uid": strconv.FormatInt(generateOwner.ID, 10),
|
|
"repo_name": generateRepoName,
|
|
"repo_template": templateID,
|
|
"git_content": "true",
|
|
})
|
|
session.MakeRequest(t, req, http.StatusSeeOther)
|
|
|
|
// Step4: check the existence of the generated repo
|
|
req = NewRequestf(t, "GET", "/%s/%s", generateOwnerName, generateRepoName)
|
|
session.MakeRequest(t, req, http.StatusOK)
|
|
|
|
// Step5: check substituted values in Readme
|
|
req = NewRequestf(t, "GET", "/%s/%s/raw/branch/master/README.md", generateOwnerName, generateRepoName)
|
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
|
body := fmt.Sprintf(`# %s Readme
|
|
Owner: %s
|
|
Link: /%s/%s
|
|
Clone URL: %s%s/%s.git`,
|
|
generateRepoName,
|
|
strings.ToUpper(generateOwnerName),
|
|
generateOwnerName,
|
|
generateRepoName,
|
|
setting.AppURL,
|
|
generateOwnerName,
|
|
generateRepoName)
|
|
assert.Equal(t, body, resp.Body.String())
|
|
|
|
// Step6: check substituted values in substituted file path ${REPO_NAME}
|
|
req = NewRequestf(t, "GET", "/%s/%s/raw/branch/master/%s.log", generateOwnerName, generateRepoName, generateRepoName)
|
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
|
assert.Equal(t, generateRepoName, resp.Body.String())
|
|
|
|
return resp
|
|
}
|
|
|
|
func TestRepoGenerate(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
session := loginUser(t, "user1")
|
|
testRepoGenerate(t, session, "44", "user27", "template1", "user1", "generated1")
|
|
}
|
|
|
|
func TestRepoGenerateToOrg(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
session := loginUser(t, "user2")
|
|
testRepoGenerate(t, session, "44", "user27", "template1", "user2", "generated2")
|
|
}
|