From 0dd21fb3d7d821e152bc87e8ed065788bf9b661d Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Wed, 17 May 2023 22:16:26 +0300 Subject: [PATCH] feat(fileCommands): init tests --- .../read-markdown-file-from-repo.command.go | 8 ++- ...ad-markdown-file-from-repo.command_test.go | 30 +++++++++++ ...rkdown-file-from-repo.command_test.mock.go | 53 +++++++++++++++++++ go.mod | 1 + go.sum | 18 +++++++ main.go | 2 +- 6 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 file/commands/read-markdown-file-from-repo.command_test.go create mode 100644 file/commands/read-markdown-file-from-repo.command_test.mock.go diff --git a/file/commands/read-markdown-file-from-repo.command.go b/file/commands/read-markdown-file-from-repo.command.go index 208373e..485862d 100644 --- a/file/commands/read-markdown-file-from-repo.command.go +++ b/file/commands/read-markdown-file-from-repo.command.go @@ -6,8 +6,12 @@ import ( "github.com/google/go-github/v52/github" ) -func ReadMarkdownFileFromRepo(ctx context.Context, client *github.Client, owner, repo, path string) (string, error) { - fileContent, _, _, err := client.Repositories.GetContents(ctx, owner, repo, path, nil) +type GitHubClient interface { + GetContents(ctx context.Context, owner, repo, path string, opt *github.RepositoryContentGetOptions) (*github.RepositoryContent, []*github.RepositoryContent, *github.Response, error) +} + +func ReadMarkdownFileFromRepo(ctx context.Context, client GitHubClient, owner, repo, path string) (string, error) { + fileContent, _, _, err := client.GetContents(ctx, owner, repo, path, nil) if err != nil { return "", err } diff --git a/file/commands/read-markdown-file-from-repo.command_test.go b/file/commands/read-markdown-file-from-repo.command_test.go new file mode 100644 index 0000000..1a758ca --- /dev/null +++ b/file/commands/read-markdown-file-from-repo.command_test.go @@ -0,0 +1,30 @@ +package commands + +import ( + "context" + "encoding/base64" + "github.com/golang/mock/gomock" + "github.com/google/go-github/v52/github" + "testing" +) + +func TestReadMarkdownFileFromRepo(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockClient := NewMockGitHubClient(ctrl) + fileContent := "test content" + encodedContent := base64.StdEncoding.EncodeToString([]byte(fileContent)) + githubFileContent := &github.RepositoryContent{Content: &encodedContent} + mockClient.EXPECT().GetContents(gomock.Any(), "owner", "repo", "path", gomock.Nil()).Return(githubFileContent, nil, nil, nil) + + ctx := context.Background() + content, err := ReadMarkdownFileFromRepo(ctx, mockClient, "owner", "repo", "path") + if err != nil { + t.Errorf("ReadMarkdownFileFromRepo returned error: %v", err) + } + + if content != fileContent { + t.Errorf("Expected content '%s', but got '%s'", fileContent, content) + } +} diff --git a/file/commands/read-markdown-file-from-repo.command_test.mock.go b/file/commands/read-markdown-file-from-repo.command_test.mock.go new file mode 100644 index 0000000..6c281bb --- /dev/null +++ b/file/commands/read-markdown-file-from-repo.command_test.mock.go @@ -0,0 +1,53 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: file/commands/read-markdown-file-from-repo.command.go + +// Package commands is a generated GoMock package. +package commands + +import ( + context "context" + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + github "github.com/google/go-github/v52/github" +) + +// MockGitHubClient is a mock of GitHubClient interface. +type MockGitHubClient struct { + ctrl *gomock.Controller + recorder *MockGitHubClientMockRecorder +} + +// MockGitHubClientMockRecorder is the mock recorder for MockGitHubClient. +type MockGitHubClientMockRecorder struct { + mock *MockGitHubClient +} + +// NewMockGitHubClient creates a new mock instance. +func NewMockGitHubClient(ctrl *gomock.Controller) *MockGitHubClient { + mock := &MockGitHubClient{ctrl: ctrl} + mock.recorder = &MockGitHubClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockGitHubClient) EXPECT() *MockGitHubClientMockRecorder { + return m.recorder +} + +// GetContents mocks base method. +func (m *MockGitHubClient) GetContents(ctx context.Context, owner, repo, path string, opt *github.RepositoryContentGetOptions) (*github.RepositoryContent, []*github.RepositoryContent, *github.Response, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetContents", ctx, owner, repo, path, opt) + ret0, _ := ret[0].(*github.RepositoryContent) + ret1, _ := ret[1].([]*github.RepositoryContent) + ret2, _ := ret[2].(*github.Response) + ret3, _ := ret[3].(error) + return ret0, ret1, ret2, ret3 +} + +// GetContents indicates an expected call of GetContents. +func (mr *MockGitHubClientMockRecorder) GetContents(ctx, owner, repo, path, opt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetContents", reflect.TypeOf((*MockGitHubClient)(nil).GetContents), ctx, owner, repo, path, opt) +} diff --git a/go.mod b/go.mod index b6201bb..1e12442 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/torinasakura/github go 1.20 require ( + github.com/golang/mock v1.6.0 github.com/google/go-github/v52 v52.0.0 golang.org/x/oauth2 v0.7.0 ) diff --git a/go.sum b/go.sum index 9a2424b..0040230 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7N github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= @@ -15,18 +17,29 @@ github.com/google/go-github/v52 v52.0.0 h1:uyGWOY+jMQ8GVGSX8dkSwCzlehU3WfdxQ7Gwe github.com/google/go-github/v52 v52.0.0/go.mod h1:WJV6VEEUPuMo5pXqqa2ZCZEdbQqua4zAk2MZTIo+m+4= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= @@ -36,7 +49,12 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= diff --git a/main.go b/main.go index f321490..76ee59e 100644 --- a/main.go +++ b/main.go @@ -39,7 +39,7 @@ func main() { log.Fatalf("Could not create repository: %v", err) } - content, err := fileCommands.ReadMarkdownFileFromRepo(ctx, client, cfg.GithubOrg, cfg.GithubTasksRepo, "README.md") + content, err := fileCommands.ReadMarkdownFileFromRepo(ctx, client.Repositories, cfg.GithubOrg, cfg.GithubTasksRepo, "README.md") if err != nil { log.Fatalf("Could not read file from repo: %v", err) }