@ -8,6 +8,7 @@ import (
"io"
"io"
"net/http"
"net/http"
"net/url"
"net/url"
"regexp"
"testing"
"testing"
auth_model "code.gitea.io/gitea/models/auth"
auth_model "code.gitea.io/gitea/models/auth"
@ -39,6 +40,16 @@ func TestAPIDownloadArchive(t *testing.T) {
assert . NoError ( t , err )
assert . NoError ( t , err )
assert . Len ( t , bs , 266 )
assert . Len ( t , bs , 266 )
// Must return a link to a commit ID as the "immutable" archive link
linkHeaderRe := regexp . MustCompile ( ` ^<(https?://.*/api/v1/repos/user2/repo1/archive/[a-f0-9]+\.tar\.gz.*)>; rel="immutable"$ ` )
m := linkHeaderRe . FindStringSubmatch ( resp . Header ( ) . Get ( "Link" ) )
assert . NotEmpty ( t , m [ 1 ] )
resp = MakeRequest ( t , NewRequest ( t , "GET" , m [ 1 ] ) . AddTokenAuth ( token ) , http . StatusOK )
bs2 , err := io . ReadAll ( resp . Body )
assert . NoError ( t , err )
// The locked URL should give the same bytes as the non-locked one
assert . EqualValues ( t , bs , bs2 )
link , _ = url . Parse ( fmt . Sprintf ( "/api/v1/repos/%s/%s/archive/master.bundle" , user2 . Name , repo . Name ) )
link , _ = url . Parse ( fmt . Sprintf ( "/api/v1/repos/%s/%s/archive/master.bundle" , user2 . Name , repo . Name ) )
resp = MakeRequest ( t , NewRequest ( t , "GET" , link . String ( ) ) . AddTokenAuth ( token ) , http . StatusOK )
resp = MakeRequest ( t , NewRequest ( t , "GET" , link . String ( ) ) . AddTokenAuth ( token ) , http . StatusOK )
bs , err = io . ReadAll ( resp . Body )
bs , err = io . ReadAll ( resp . Body )