summaryrefslogtreecommitdiffstats
path: root/modules/migrations/gitea_downloader_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/migrations/gitea_downloader_test.go')
-rw-r--r--modules/migrations/gitea_downloader_test.go365
1 files changed, 365 insertions, 0 deletions
diff --git a/modules/migrations/gitea_downloader_test.go b/modules/migrations/gitea_downloader_test.go
new file mode 100644
index 0000000000..c52c1225f4
--- /dev/null
+++ b/modules/migrations/gitea_downloader_test.go
@@ -0,0 +1,365 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+ "os"
+ "sort"
+ "testing"
+ "time"
+
+ "code.gitea.io/gitea/modules/migrations/base"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func assertEqualIssue(t *testing.T, issueExp, issueGet *base.Issue) {
+ assert.EqualValues(t, issueExp.Number, issueGet.Number)
+ assert.EqualValues(t, issueExp.Title, issueGet.Title)
+ assert.EqualValues(t, issueExp.Content, issueGet.Content)
+ assert.EqualValues(t, issueExp.Milestone, issueGet.Milestone)
+ assert.EqualValues(t, issueExp.PosterID, issueGet.PosterID)
+ assert.EqualValues(t, issueExp.PosterName, issueGet.PosterName)
+ assert.EqualValues(t, issueExp.PosterEmail, issueGet.PosterEmail)
+ assert.EqualValues(t, issueExp.IsLocked, issueGet.IsLocked)
+ assert.EqualValues(t, issueExp.Created.Unix(), issueGet.Created.Unix())
+ assert.EqualValues(t, issueExp.Updated.Unix(), issueGet.Updated.Unix())
+ if issueExp.Closed != nil {
+ assert.EqualValues(t, issueExp.Closed.Unix(), issueGet.Closed.Unix())
+ } else {
+ assert.True(t, issueGet.Closed == nil)
+ }
+ sort.Strings(issueExp.Assignees)
+ sort.Strings(issueGet.Assignees)
+ assert.EqualValues(t, issueExp.Assignees, issueGet.Assignees)
+ assert.EqualValues(t, issueExp.Labels, issueGet.Labels)
+ assert.EqualValues(t, issueExp.Reactions, issueGet.Reactions)
+}
+
+func TestGiteaDownloadRepo(t *testing.T) {
+ // Skip tests if Gitea token is not found
+ giteaToken := os.Getenv("GITEA_TOKEN")
+ if giteaToken == "" {
+ t.Skip("skipped test because GITEA_TOKEN was not in the environment")
+ }
+
+ resp, err := http.Get("https://gitea.com/gitea")
+ if err != nil || resp.StatusCode != 200 {
+ t.Skipf("Can't reach https://gitea.com, skipping %s", t.Name())
+ }
+
+ downloader, err := NewGiteaDownloader(context.Background(), "https://gitea.com", "gitea/test_repo", "", "", giteaToken)
+ if downloader == nil {
+ t.Fatal("NewGitlabDownloader is nil")
+ }
+ if !assert.NoError(t, err) {
+ t.Fatal("NewGitlabDownloader error occur")
+ }
+
+ repo, err := downloader.GetRepoInfo()
+ assert.NoError(t, err)
+ assert.EqualValues(t, &base.Repository{
+ Name: "test_repo",
+ Owner: "gitea",
+ IsPrivate: false,
+ Description: "Test repository for testing migration from gitea to gitea",
+ CloneURL: "https://gitea.com/gitea/test_repo.git",
+ OriginalURL: "https://gitea.com/gitea/test_repo",
+ DefaultBranch: "master",
+ }, repo)
+
+ topics, err := downloader.GetTopics()
+ assert.NoError(t, err)
+ sort.Strings(topics)
+ assert.EqualValues(t, []string{"ci", "gitea", "migration", "test"}, topics)
+
+ labels, err := downloader.GetLabels()
+ assert.NoError(t, err)
+ assert.Len(t, labels, 6)
+ for _, l := range labels {
+ switch l.Name {
+ case "Bug":
+ assertLabelEqual(t, "Bug", "e11d21", "", l)
+ case "documentation":
+ assertLabelEqual(t, "Enhancement", "207de5", "", l)
+ case "confirmed":
+ assertLabelEqual(t, "Feature", "0052cc", "a feature request", l)
+ case "enhancement":
+ assertLabelEqual(t, "Invalid", "d4c5f9", "", l)
+ case "critical":
+ assertLabelEqual(t, "Question", "fbca04", "", l)
+ case "discussion":
+ assertLabelEqual(t, "Valid", "53e917", "", l)
+ default:
+ assert.Error(t, fmt.Errorf("unexpected label: %s", l.Name))
+ }
+ }
+
+ milestones, err := downloader.GetMilestones()
+ assert.NoError(t, err)
+ assert.Len(t, milestones, 2)
+
+ for _, milestone := range milestones {
+ switch milestone.Title {
+ case "V1":
+ assert.EqualValues(t, "Generate Content", milestone.Description)
+ // assert.EqualValues(t, "ToDo", milestone.Created)
+ // assert.EqualValues(t, "ToDo", milestone.Updated)
+ assert.EqualValues(t, 1598985406, milestone.Closed.Unix())
+ assert.True(t, milestone.Deadline == nil)
+ assert.EqualValues(t, "closed", milestone.State)
+ case "V2 Finalize":
+ assert.EqualValues(t, "", milestone.Description)
+ // assert.EqualValues(t, "ToDo", milestone.Created)
+ // assert.EqualValues(t, "ToDo", milestone.Updated)
+ assert.True(t, milestone.Closed == nil)
+ assert.EqualValues(t, 1599263999, milestone.Deadline.Unix())
+ assert.EqualValues(t, "open", milestone.State)
+ default:
+ assert.Error(t, fmt.Errorf("unexpected milestone: %s", milestone.Title))
+ }
+ }
+
+ releases, err := downloader.GetReleases()
+ assert.NoError(t, err)
+ assert.EqualValues(t, []*base.Release{
+ {
+ Name: "Second Release",
+ TagName: "v2-rc1",
+ TargetCommitish: "master",
+ Body: "this repo has:\r\n* reactions\r\n* wiki\r\n* issues (open/closed)\r\n* pulls (open/closed/merged) (external/internal)\r\n* pull reviews\r\n* projects\r\n* milestones\r\n* labels\r\n* releases\r\n\r\nto test migration against",
+ Draft: false,
+ Prerelease: true,
+ Created: time.Date(2020, 9, 1, 18, 2, 43, 0, time.UTC),
+ Published: time.Date(2020, 9, 1, 18, 2, 43, 0, time.UTC),
+ PublisherID: 689,
+ PublisherName: "6543",
+ PublisherEmail: "6543@noreply.gitea.io",
+ },
+ {
+ Name: "First Release",
+ TagName: "V1",
+ TargetCommitish: "master",
+ Body: "as title",
+ Draft: false,
+ Prerelease: false,
+ Created: time.Date(2020, 9, 1, 17, 30, 32, 0, time.UTC),
+ Published: time.Date(2020, 9, 1, 17, 30, 32, 0, time.UTC),
+ PublisherID: 689,
+ PublisherName: "6543",
+ PublisherEmail: "6543@noreply.gitea.io",
+ },
+ }, releases)
+
+ issues, isEnd, err := downloader.GetIssues(1, 50)
+ assert.NoError(t, err)
+ assert.EqualValues(t, 7, len(issues))
+ assert.True(t, isEnd)
+ assert.EqualValues(t, "open", issues[0].State)
+
+ issues, isEnd, err = downloader.GetIssues(3, 2)
+ assert.NoError(t, err)
+ assert.EqualValues(t, 2, len(issues))
+ assert.False(t, isEnd)
+
+ var (
+ closed4 = time.Date(2020, 9, 1, 15, 49, 34, 0, time.UTC)
+ closed2 = time.Unix(1598969497, 0)
+ )
+
+ assertEqualIssue(t, &base.Issue{
+ Number: 4,
+ Title: "what is this repo about?",
+ Content: "",
+ Milestone: "V1",
+ PosterID: -1,
+ PosterName: "Ghost",
+ PosterEmail: "",
+ State: "closed",
+ IsLocked: true,
+ Created: time.Unix(1598975321, 0),
+ Updated: time.Unix(1598975400, 0),
+ Labels: []*base.Label{{
+ Name: "Question",
+ Color: "fbca04",
+ Description: "",
+ }},
+ Reactions: []*base.Reaction{
+ {
+ UserID: 689,
+ UserName: "6543",
+ Content: "gitea",
+ },
+ {
+ UserID: 689,
+ UserName: "6543",
+ Content: "laugh",
+ },
+ },
+ Closed: &closed4,
+ }, issues[0])
+ assertEqualIssue(t, &base.Issue{
+ Number: 2,
+ Title: "Spam",
+ Content: ":(",
+ Milestone: "",
+ PosterID: 689,
+ PosterName: "6543",
+ PosterEmail: "6543@noreply.gitea.io",
+ State: "closed",
+ IsLocked: false,
+ Created: time.Unix(1598919780, 0),
+ Updated: closed2,
+ Labels: []*base.Label{{
+ Name: "Invalid",
+ Color: "d4c5f9",
+ Description: "",
+ }},
+ Reactions: nil,
+ Closed: &closed2,
+ }, issues[1])
+
+ comments, err := downloader.GetComments(4)
+ assert.NoError(t, err)
+ assert.Len(t, comments, 2)
+ assert.EqualValues(t, 1598975370, comments[0].Created.Unix())
+ assert.EqualValues(t, 1599070865, comments[0].Updated.Unix())
+ assert.EqualValues(t, 1598975393, comments[1].Created.Unix())
+ assert.EqualValues(t, 1598975393, comments[1].Updated.Unix())
+ assert.EqualValues(t, []*base.Comment{
+ {
+ IssueIndex: 4,
+ PosterID: 689,
+ PosterName: "6543",
+ PosterEmail: "6543@noreply.gitea.io",
+ Created: comments[0].Created,
+ Updated: comments[0].Updated,
+ Content: "a really good question!\n\nIt is the used as TESTSET for gitea2gitea repo migration function",
+ },
+ {
+ IssueIndex: 4,
+ PosterID: -1,
+ PosterName: "Ghost",
+ PosterEmail: "",
+ Created: comments[1].Created,
+ Updated: comments[1].Updated,
+ Content: "Oh!",
+ },
+ }, comments)
+
+ prs, isEnd, err := downloader.GetPullRequests(1, 50)
+ assert.NoError(t, err)
+ assert.True(t, isEnd)
+ assert.Len(t, prs, 6)
+ prs, isEnd, err = downloader.GetPullRequests(1, 3)
+ assert.NoError(t, err)
+ assert.False(t, isEnd)
+ assert.Len(t, prs, 3)
+ merged12 := time.Unix(1598982934, 0)
+ assertEqualPulls(t, &base.PullRequest{
+ Number: 12,
+ PosterID: 689,
+ PosterName: "6543",
+ PosterEmail: "6543@noreply.gitea.io",
+ Title: "Dont Touch",
+ Content: "\r\nadd dont touch note",
+ Milestone: "V2 Finalize",
+ State: "closed",
+ IsLocked: false,
+ Created: time.Unix(1598982759, 0),
+ Updated: time.Unix(1599023425, 0),
+ Closed: &merged12,
+ Assignees: []string{"techknowlogick"},
+ Labels: []*base.Label{},
+
+ Base: base.PullRequestBranch{
+ CloneURL: "",
+ Ref: "master",
+ SHA: "827aa28a907853e5ddfa40c8f9bc52471a2685fd",
+ RepoName: "test_repo",
+ OwnerName: "gitea",
+ },
+ Head: base.PullRequestBranch{
+ CloneURL: "https://gitea.com/6543-forks/test_repo.git",
+ Ref: "refs/pull/12/head",
+ SHA: "b6ab5d9ae000b579a5fff03f92c486da4ddf48b6",
+ RepoName: "test_repo",
+ OwnerName: "6543-forks",
+ },
+ Merged: true,
+ MergedTime: &merged12,
+ MergeCommitSHA: "827aa28a907853e5ddfa40c8f9bc52471a2685fd",
+ PatchURL: "https://gitea.com/gitea/test_repo/pulls/12.patch",
+ }, prs[1])
+
+ reviews, err := downloader.GetReviews(7)
+ assert.NoError(t, err)
+ if assert.Len(t, reviews, 3) {
+ assert.EqualValues(t, 689, reviews[0].ReviewerID)
+ assert.EqualValues(t, "6543", reviews[0].ReviewerName)
+ assert.EqualValues(t, "techknowlogick", reviews[1].ReviewerName)
+ assert.EqualValues(t, "techknowlogick", reviews[2].ReviewerName)
+ assert.False(t, reviews[1].Official)
+ assert.EqualValues(t, "I think this needs some changes", reviews[1].Content)
+ assert.EqualValues(t, "REQUEST_CHANGES", reviews[1].State)
+ assert.True(t, reviews[2].Official)
+ assert.EqualValues(t, "looks good", reviews[2].Content)
+ assert.EqualValues(t, "APPROVED", reviews[2].State)
+
+ // TODO: https://github.com/go-gitea/gitea/issues/12846
+ // assert.EqualValues(t, 9, reviews[1].ReviewerID)
+ // assert.EqualValues(t, 9, reviews[2].ReviewerID)
+
+ assert.Len(t, reviews[0].Comments, 1)
+ assert.EqualValues(t, &base.ReviewComment{
+ ID: 116561,
+ InReplyTo: 0,
+ Content: "is one `\\newline` to less?",
+ TreePath: "README.md",
+ DiffHunk: "@@ -2,3 +2,3 @@\n \n-Test repository for testing migration from gitea 2 gitea\n\\ No newline at end of file\n+Test repository for testing migration from gitea 2 gitea",
+ Position: 0,
+ Line: 4,
+ CommitID: "187ece0cb6631e2858a6872e5733433bb3ca3b03",
+ PosterID: 689,
+ Reactions: nil,
+ CreatedAt: time.Date(2020, 9, 1, 16, 12, 58, 0, time.UTC),
+ UpdatedAt: time.Date(2020, 9, 1, 16, 12, 58, 0, time.UTC),
+ }, reviews[0].Comments[0])
+ }
+}
+
+func assertEqualPulls(t *testing.T, pullExp, pullGet *base.PullRequest) {
+ assertEqualIssue(t, pull2issue(pullExp), pull2issue(pullGet))
+ assert.EqualValues(t, 0, pullGet.OriginalNumber)
+ assert.EqualValues(t, pullExp.PatchURL, pullGet.PatchURL)
+ assert.EqualValues(t, pullExp.Merged, pullGet.Merged)
+ assert.EqualValues(t, pullExp.MergedTime.Unix(), pullGet.MergedTime.Unix())
+ assert.EqualValues(t, pullExp.MergeCommitSHA, pullGet.MergeCommitSHA)
+ assert.EqualValues(t, pullExp.Base, pullGet.Base)
+ assert.EqualValues(t, pullExp.Head, pullGet.Head)
+}
+
+func pull2issue(pull *base.PullRequest) *base.Issue {
+ return &base.Issue{
+ Number: pull.Number,
+ PosterID: pull.PosterID,
+ PosterName: pull.PosterName,
+ PosterEmail: pull.PosterEmail,
+ Title: pull.Title,
+ Content: pull.Content,
+ Milestone: pull.Milestone,
+ State: pull.State,
+ IsLocked: pull.IsLocked,
+ Created: pull.Created,
+ Updated: pull.Updated,
+ Closed: pull.Closed,
+ Labels: pull.Labels,
+ Reactions: pull.Reactions,
+ Assignees: pull.Assignees,
+ }
+}