From 2cbf823b10d4a7f8660f0f1633f0afd6acb3b3b6 Mon Sep 17 00:00:00 2001 From: justusbunsi Date: Tue, 12 Jul 2022 16:15:59 +0200 Subject: [PATCH] WIP: Pass SDK init callback into Gitea API client Signed-off-by: Steven Kriegler --- cmd/gitea-sonarqube-bot/main.go | 5 ++-- internal/clients/gitea/gitea.go | 15 ++++++++--- internal/clients/gitea/gitea_test.go | 37 ++++++++++++++++++++++++++++ internal/clients/gitea/main_test.go | 14 +++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 internal/clients/gitea/gitea_test.go create mode 100644 internal/clients/gitea/main_test.go diff --git a/cmd/gitea-sonarqube-bot/main.go b/cmd/gitea-sonarqube-bot/main.go index 28392bd..c5215d9 100644 --- a/cmd/gitea-sonarqube-bot/main.go +++ b/cmd/gitea-sonarqube-bot/main.go @@ -16,6 +16,7 @@ import ( sonarQubeSdk "gitea-sonarqube-bot/internal/clients/sonarqube" "gitea-sonarqube-bot/internal/settings" + "code.gitea.io/sdk/gitea" "github.com/urfave/cli/v2" ) @@ -61,8 +62,8 @@ func serveApi(c *cli.Context) error { log.Println("Hi! I'm Gitea SonarQube Bot. At your service.") log.Println("Config file in use:", config) - giteaHandler := api.NewGiteaWebhookHandler(giteaSdk.New(), sonarQubeSdk.New(&settings.SonarQube)) - sqHandler := api.NewSonarQubeWebhookHandler(giteaSdk.New(), sonarQubeSdk.New(&settings.SonarQube)) + giteaHandler := api.NewGiteaWebhookHandler(giteaSdk.New(&settings.Gitea, gitea.NewClient), sonarQubeSdk.New(&settings.SonarQube)) + sqHandler := api.NewSonarQubeWebhookHandler(giteaSdk.New(&settings.Gitea, gitea.NewClient), sonarQubeSdk.New(&settings.SonarQube)) server := api.New(giteaHandler, sqHandler) srv := &http.Server{ diff --git a/internal/clients/gitea/gitea.go b/internal/clients/gitea/gitea.go index 4aba30d..3e3b1e5 100644 --- a/internal/clients/gitea/gitea.go +++ b/internal/clients/gitea/gitea.go @@ -2,9 +2,10 @@ package gitea import ( "fmt" - "gitea-sonarqube-bot/internal/settings" "log" + "gitea-sonarqube-bot/internal/settings" + "code.gitea.io/sdk/gitea" ) @@ -14,8 +15,14 @@ type GiteaSdkInterface interface { DetermineHEAD(settings.GiteaRepository, int64) (string, error) } +type ClientInterface interface { + CreateIssueComment(owner, repo string, index int64, opt gitea.CreateIssueCommentOption) (*gitea.Comment, *gitea.Response, error) + CreateStatus(owner, repo, sha string, opts gitea.CreateStatusOption) (*gitea.Status, *gitea.Response, error) + GetPullRequest(owner, repo string, index int64) (*gitea.PullRequest, *gitea.Response, error) +} + type GiteaSdk struct { - client *gitea.Client + client ClientInterface } func (sdk *GiteaSdk) PostComment(repo settings.GiteaRepository, idx int, msg string) error { @@ -53,8 +60,8 @@ func (sdk *GiteaSdk) DetermineHEAD(repo settings.GiteaRepository, idx int64) (st return pr.Head.Sha, nil } -func New() *GiteaSdk { - client, err := gitea.NewClient(settings.Gitea.Url, gitea.SetToken(settings.Gitea.Token.Value)) +func New[T ClientInterface](configuration *settings.GiteaConfig, newClient func(url string, options ...gitea.ClientOption) (T, error)) *GiteaSdk { + client, err := newClient(configuration.Url, gitea.SetToken(configuration.Token.Value)) if err != nil { panic(fmt.Errorf("cannot initialize Gitea client: %w", err)) } diff --git a/internal/clients/gitea/gitea_test.go b/internal/clients/gitea/gitea_test.go new file mode 100644 index 0000000..dab2542 --- /dev/null +++ b/internal/clients/gitea/gitea_test.go @@ -0,0 +1,37 @@ +package gitea + +import ( + "testing" + + "gitea-sonarqube-bot/internal/settings" + + "code.gitea.io/sdk/gitea" + "github.com/stretchr/testify/assert" +) + +type SdkMock struct { +} + +func (m *SdkMock) CreateIssueComment(owner, repo string, index int64, opt gitea.CreateIssueCommentOption) (*gitea.Comment, *gitea.Response, error) { + return nil, nil, nil +} +func (m *SdkMock) CreateStatus(owner, repo, sha string, opts gitea.CreateStatusOption) (*gitea.Status, *gitea.Response, error) { + return nil, nil, nil +} +func (m *SdkMock) GetPullRequest(owner, repo string, index int64) (*gitea.PullRequest, *gitea.Response, error) { + return nil, nil, nil +} + +func TestNew(t *testing.T) { + config := &settings.GiteaConfig{ + Url: "http://example.com", + Token: &settings.Token{ + Value: "test-token", + }, + } + + callback := func(url string, options ...gitea.ClientOption) (*SdkMock, error) { + return &SdkMock{}, nil + } + assert.IsType(t, &GiteaSdk{}, New(config, callback), "") +} diff --git a/internal/clients/gitea/main_test.go b/internal/clients/gitea/main_test.go new file mode 100644 index 0000000..1355cbb --- /dev/null +++ b/internal/clients/gitea/main_test.go @@ -0,0 +1,14 @@ +package gitea + +import ( + "io/ioutil" + "log" + "os" + "testing" +) + +// SETUP: mute logs +func TestMain(m *testing.M) { + log.SetOutput(ioutil.Discard) + os.Exit(m.Run()) +}