Skip to content

Commit

Permalink
Merge pull request #1229 from venky333/test/repository_files
Browse files Browse the repository at this point in the history
add tests for repository_files apart from create update and delete
  • Loading branch information
svanharmelen authored Sep 23, 2021
2 parents 144f431 + ea2d3c8 commit 7859f46
Showing 1 changed file with 349 additions and 0 deletions.
349 changes: 349 additions & 0 deletions repository_files_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,349 @@
package gitlab

import (
"fmt"
"net/http"
"testing"
"time"

"github.com/stretchr/testify/require"
)

func TestRepositoryFilesService_GetFile(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprintf(w, `
{
"file_name": "key.rb",
"file_path": "app/models/key.rb",
"size": 1476,
"encoding": "base64",
"content": "IyA9PSBTY2hlbWEgSW5mb3...",
"content_sha256": "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481",
"ref": "master",
"blob_id": "79f7bbd25901e8334750839545a9bd021f0e4c83",
"commit_id": "d5a3ff139356ce33e37e73add446f16869741b50",
"last_commit_id": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d"
}
`)
})

want := &File{
FileName: "key.rb",
FilePath: "app/models/key.rb",
Size: 1476,
Encoding: "base64",
Content: "IyA9PSBTY2hlbWEgSW5mb3...",
Ref: "master",
BlobID: "79f7bbd25901e8334750839545a9bd021f0e4c83",
CommitID: "d5a3ff139356ce33e37e73add446f16869741b50",
SHA256: "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481",
LastCommitID: "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
}

f, resp, err := client.RepositoryFiles.GetFile(13083, "app%2Fmodels%2Fkey%2Erb?ref=master", nil)
require.NoError(t, err)
require.NotNil(t, resp)
require.Equal(t, want, f)

f, resp, err = client.RepositoryFiles.GetFile(13083.01, "app%2Fmodels%2Fkey%2Erb?ref=master", nil)
require.EqualError(t, err, "invalid ID type 13083.01, the ID must be an int or a string")
require.Nil(t, resp)
require.Nil(t, f)

f, resp, err = client.RepositoryFiles.GetFile(13083, "app%2Fmodels%2Fkey%2Erb?ref=master", nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)
require.Nil(t, f)

f, resp, err = client.RepositoryFiles.GetFile(13084, "app%2Fmodels%2Fkey%2Erb?ref=master", nil)
require.Error(t, err)
require.Nil(t, f)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

func TestRepositoryFilesService_GetFileMetaData(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodHead)
w.Header().Set("X-Gitlab-Blob-Id", "79f7bbd25901e8334750839545a9bd021f0e4c83")
w.Header().Set("X-Gitlab-Commit-Id", "d5a3ff139356ce33e37e73add446f16869741b50")
w.Header().Set("X-Gitlab-Content-Sha256", "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481")
w.Header().Set("X-Gitlab-Encoding", "base64")
w.Header().Set("X-Gitlab-File-Name", "key.rb")
w.Header().Set("X-Gitlab-File-Path", "app/models/key.rb")
w.Header().Set("X-Gitlab-Last-Commit-Id", "570e7b2abdd848b95f2f578043fc23bd6f6fd24d")
w.Header().Set("X-Gitlab-Ref", "master")
w.Header().Set("X-Gitlab-Size", "1476")
})

want := &File{
FileName: "key.rb",
FilePath: "app/models/key.rb",
Size: 1476,
Encoding: "base64",
Ref: "master",
BlobID: "79f7bbd25901e8334750839545a9bd021f0e4c83",
CommitID: "d5a3ff139356ce33e37e73add446f16869741b50",
SHA256: "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481",
LastCommitID: "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
}

f, resp, err := client.RepositoryFiles.GetFileMetaData(13083, "app%2Fmodels%2Fkey%2Erb?ref=master", nil)
require.NoError(t, err)
require.NotNil(t, resp)
require.Equal(t, want, f)

f, resp, err = client.RepositoryFiles.GetFileMetaData(13083.01, "app%2Fmodels%2Fkey%2Erb?ref=master", nil)
require.EqualError(t, err, "invalid ID type 13083.01, the ID must be an int or a string")
require.Nil(t, resp)
require.Nil(t, f)

f, resp, err = client.RepositoryFiles.GetFileMetaData(13083, "app%2Fmodels%2Fkey%2Erb?ref=master", nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)
require.Nil(t, f)

f, resp, err = client.RepositoryFiles.GetFileMetaData(13084, "app%2Fmodels%2Fkey%2Erb?ref=master", nil)
require.Error(t, err)
require.Nil(t, f)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

func TestRepositoryFilesService_GetFileBlame(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/13083/repository/files/path%2Fto%2Ffile.rb/blame", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprintf(w, `
[
{
"commit": {
"id": "d42409d56517157c48bf3bd97d3f75974dde19fb",
"message": "Add feature also fix bug",
"parent_ids": [
"cc6e14f9328fa6d7b5a0d3c30dc2002a3f2a3822"
],
"author_name": "Venkatesh Thalluri",
"author_email": "[email protected]",
"committer_name": "Venkatesh Thalluri",
"committer_email": "[email protected]"
},
"lines": [
"require 'fileutils'",
"require 'open3'"
]
}
]
`)
})

want := []*FileBlameRange{{
Commit: struct {
ID string `json:"id"`
ParentIDs []string `json:"parent_ids"`
Message string `json:"message"`
AuthoredDate *time.Time `json:"authored_date"`
AuthorName string `json:"author_name"`
AuthorEmail string `json:"author_email"`
CommittedDate *time.Time `json:"committed_date"`
CommitterName string `json:"committer_name"`
CommitterEmail string `json:"committer_email"`
}{
ID: "d42409d56517157c48bf3bd97d3f75974dde19fb",
ParentIDs: []string{"cc6e14f9328fa6d7b5a0d3c30dc2002a3f2a3822"},
Message: "Add feature also fix bug",
AuthorName: "Venkatesh Thalluri",
AuthorEmail: "[email protected]",
CommitterName: "Venkatesh Thalluri",
CommitterEmail: "[email protected]",
},
Lines: []string{"require 'fileutils'", "require 'open3'"}},
}

fbr, resp, err := client.RepositoryFiles.GetFileBlame(13083, "path%2Fto%2Ffile.rb", nil)
require.NoError(t, err)
require.NotNil(t, resp)
require.Equal(t, want, fbr)

fbr, resp, err = client.RepositoryFiles.GetFileBlame(13083.01, "path%2Fto%2Ffile.rb", nil)
require.EqualError(t, err, "invalid ID type 13083.01, the ID must be an int or a string")
require.Nil(t, resp)
require.Nil(t, fbr)

fbr, resp, err = client.RepositoryFiles.GetFileBlame(13083, "path%2Fto%2Ffile.rb", nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)
require.Nil(t, fbr)

fbr, resp, err = client.RepositoryFiles.GetFileBlame(13084, "path%2Fto%2Ffile.rb", nil)
require.Error(t, err)
require.Nil(t, fbr)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

func TestRepositoryFilesService_GetRawFile(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb/raw", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprintf(w, "HTTP/1.1 200 OK"+
"..."+
"X-Gitlab-Blob-Id: 79f7bbd25901e8334750839545a9bd021f0e4c83"+
"X-Gitlab-Commit-Id: d5a3ff139356ce33e37e73add446f16869741b50"+
"X-Gitlab-Content-Sha256: 4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481"+
"X-Gitlab-Encoding: base64"+
"X-Gitlab-File-Name: file.rb"+
"X-Gitlab-File-Path: path/to/file.rb"+
"X-Gitlab-Last-Commit-Id: 570e7b2abdd848b95f2f578043fc23bd6f6fd24d"+
"X-Gitlab-Ref: master"+
"X-Gitlab-Size: 1476"+
"...")
})

want := []byte("HTTP/1.1 200 OK" +
"..." +
"X-Gitlab-Blob-Id: 79f7bbd25901e8334750839545a9bd021f0e4c83" +
"X-Gitlab-Commit-Id: d5a3ff139356ce33e37e73add446f16869741b50" +
"X-Gitlab-Content-Sha256: 4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481" +
"X-Gitlab-Encoding: base64" +
"X-Gitlab-File-Name: file.rb" +
"X-Gitlab-File-Path: path/to/file.rb" +
"X-Gitlab-Last-Commit-Id: 570e7b2abdd848b95f2f578043fc23bd6f6fd24d" +
"X-Gitlab-Ref: master" +
"X-Gitlab-Size: 1476" +
"...",
)

b, resp, err := client.RepositoryFiles.GetRawFile(13083, "app%2Fmodels%2Fkey%2Erb", nil)
require.NoError(t, err)
require.NotNil(t, resp)
require.Equal(t, want, b)

b, resp, err = client.RepositoryFiles.GetRawFile(13083.01, "app%2Fmodels%2Fkey%2Erb", nil)
require.EqualError(t, err, "invalid ID type 13083.01, the ID must be an int or a string")
require.Nil(t, resp)
require.Nil(t, b)

b, resp, err = client.RepositoryFiles.GetRawFile(13083, "app%2Fmodels%2Fkey%2Erb", nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)
require.Nil(t, b)

b, resp, err = client.RepositoryFiles.GetRawFile(13084, "app%2Fmodels%2Fkey%2Erb", nil)
require.Error(t, err)
require.Nil(t, b)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

func TestRepositoryFilesService_CreateFile(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/13083/repository/files/app%2Fproject%2Erb", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodPost)
fmt.Fprintf(w, `
{
"file_path": "app/project.rb",
"branch": "master"
}
`)
})

want := &FileInfo{
FilePath: "app/project.rb",
Branch: "master",
}

fi, resp, err := client.RepositoryFiles.CreateFile(13083, "app%2Fproject%2Erb", nil)
require.NoError(t, err)
require.NotNil(t, resp)
require.Equal(t, want, fi)

fi, resp, err = client.RepositoryFiles.CreateFile(13083.01, "app%2Fproject%2Erb", nil)
require.EqualError(t, err, "invalid ID type 13083.01, the ID must be an int or a string")
require.Nil(t, resp)
require.Nil(t, fi)

fi, resp, err = client.RepositoryFiles.CreateFile(13083, "app%2Fproject%2Erb", nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)
require.Nil(t, fi)

fi, resp, err = client.RepositoryFiles.CreateFile(13084, "app%2Fproject%2Erb", nil)
require.Error(t, err)
require.Nil(t, fi)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

func TestRepositoryFilesService_UpdateFile(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/13083/repository/files/app%2Fproject%2Erb", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodPut)
fmt.Fprintf(w, `
{
"file_path": "app/project.rb",
"branch": "master"
}
`)
})

want := &FileInfo{
FilePath: "app/project.rb",
Branch: "master",
}

fi, resp, err := client.RepositoryFiles.UpdateFile(13083, "app%2Fproject%2Erb", nil)
require.NoError(t, err)
require.NotNil(t, resp)
require.Equal(t, want, fi)

fi, resp, err = client.RepositoryFiles.UpdateFile(13083.01, "app%2Fproject%2Erb", nil)
require.EqualError(t, err, "invalid ID type 13083.01, the ID must be an int or a string")
require.Nil(t, resp)
require.Nil(t, fi)

fi, resp, err = client.RepositoryFiles.UpdateFile(13083, "app%2Fproject%2Erb", nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)
require.Nil(t, fi)

fi, resp, err = client.RepositoryFiles.UpdateFile(13084, "app%2Fproject%2Erb", nil)
require.Error(t, err)
require.Nil(t, fi)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

func TestRepositoryFilesService_DeleteFile(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/projects/13083/repository/files/app%2Fproject%2Erb", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodDelete)
})

resp, err := client.RepositoryFiles.DeleteFile(13083, "app%2Fproject%2Erb", nil)
require.NoError(t, err)
require.NotNil(t, resp)

resp, err = client.RepositoryFiles.DeleteFile(13083.01, "app%2Fproject%2Erb", nil)
require.EqualError(t, err, "invalid ID type 13083.01, the ID must be an int or a string")
require.Nil(t, resp)

resp, err = client.RepositoryFiles.DeleteFile(13083, "app%2Fproject%2Erb", nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)

resp, err = client.RepositoryFiles.DeleteFile(13084, "app%2Fproject%2Erb", nil)
require.Error(t, err)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

0 comments on commit 7859f46

Please sign in to comment.