package main

import (
	"testing"

	"go.uber.org/mock/gomock"
	"src.opensuse.org/autogits/common"
	mock_common "src.opensuse.org/autogits/common/mock"
)

func TestClosePR(t *testing.T) {
	pr := PullRequestClosed{}

	config := &common.AutogitConfig{
		Reviewers:      []string{"reviewer1", "reviewer2"},
		Branch:         "branch",
		Organization:   "test",
		GitProjectName: "prj",
	}

	event := &common.PullRequestWebhookEvent{
		Action: "closed",
		Number: 1,
		Pull_Request: &common.PullRequest{
			Id: 1,
			Base: common.Head{
				Ref: "branch",
				Sha: "testing",
				Repo: &common.Repository{
					Name:           "testRepo",
					Default_Branch: "main1",
				},
			},
			Head: common.Head{
				Ref: "branch",
				Sha: "testing",
				Repo: &common.Repository{
					Name:           "testRepo",
					Default_Branch: "main1",
				},
			},
		},
		Repository: &common.Repository{
			Owner: &common.Organization{
				Username: "test",
			},
		},
	}

	git := &common.GitHandlerImpl{
		GitCommiter: "tester",
		GitEmail:    "test@suse.com",
	}

	t.Run("PR git closed request against PrjGit == no action", func(t *testing.T) {
		ctl := gomock.NewController(t)
		pr.gitea = mock_common.NewMockGitea(ctl)

		git.GitPath = t.TempDir()

		config.GitProjectName = "testRepo"
		event.Repository.Name = "testRepo"

		if err := pr.Process(event, git, config); err != nil {
			t.Error("Error PrjGit closed request. Should be no error.", err)
		}
	})

	t.Run("PR git closed", func(t *testing.T) {
		ctl := gomock.NewController(t)
		pr.gitea = mock_common.NewMockGitea(ctl)

		git.GitPath = t.TempDir()

		config.GitProjectName = "prjGit"
		event.Repository.Name = "tester"

		if err := pr.Process(event, git, config); err != nil {
			t.Error("Error PrjGit closed request. Should be no error.", err)
		}
	})

}