code.gitea.io/gitea@v1.22.3/tests/integration/api_repo_archive_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "fmt" 8 "io" 9 "net/http" 10 "net/url" 11 "regexp" 12 "testing" 13 14 auth_model "code.gitea.io/gitea/models/auth" 15 repo_model "code.gitea.io/gitea/models/repo" 16 "code.gitea.io/gitea/models/unittest" 17 user_model "code.gitea.io/gitea/models/user" 18 "code.gitea.io/gitea/tests" 19 20 "github.com/stretchr/testify/assert" 21 ) 22 23 func TestAPIDownloadArchive(t *testing.T) { 24 defer tests.PrepareTestEnv(t)() 25 26 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 27 user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 28 session := loginUser(t, user2.LowerName) 29 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository) 30 31 link, _ := url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master.zip", user2.Name, repo.Name)) 32 resp := MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK) 33 bs, err := io.ReadAll(resp.Body) 34 assert.NoError(t, err) 35 assert.Len(t, bs, 320) 36 37 link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master.tar.gz", user2.Name, repo.Name)) 38 resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK) 39 bs, err = io.ReadAll(resp.Body) 40 assert.NoError(t, err) 41 assert.Len(t, bs, 266) 42 43 // Must return a link to a commit ID as the "immutable" archive link 44 linkHeaderRe := regexp.MustCompile(`^<(https?://.*/api/v1/repos/user2/repo1/archive/[a-f0-9]+\.tar\.gz.*)>; rel="immutable"$`) 45 m := linkHeaderRe.FindStringSubmatch(resp.Header().Get("Link")) 46 assert.NotEmpty(t, m[1]) 47 resp = MakeRequest(t, NewRequest(t, "GET", m[1]).AddTokenAuth(token), http.StatusOK) 48 bs2, err := io.ReadAll(resp.Body) 49 assert.NoError(t, err) 50 // The locked URL should give the same bytes as the non-locked one 51 assert.EqualValues(t, bs, bs2) 52 53 link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master.bundle", user2.Name, repo.Name)) 54 resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK) 55 bs, err = io.ReadAll(resp.Body) 56 assert.NoError(t, err) 57 assert.Len(t, bs, 382) 58 59 link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master", user2.Name, repo.Name)) 60 MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusBadRequest) 61 }