Refactored and fixed migration tests. (#16714)

Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
KN4CK3R 2021-08-18 02:47:18 +02:00 committed by GitHub
parent 65c6acccf6
commit 422c30d315
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 744 additions and 485 deletions

View file

@ -181,7 +181,7 @@ func (g *GiteaDownloader) GetMilestones() ([]*base.Milestone, error) {
for i := range ms {
// old gitea instances dont have this information
createdAT := time.Now()
createdAT := time.Time{}
var updatedAT *time.Time
if ms[i].Closed != nil {
createdAT = *ms[i].Closed
@ -548,11 +548,11 @@ func (g *GiteaDownloader) GetPullRequests(page, perPage int) ([]*base.PullReques
assignees = append(assignees, pr.Assignees[i].UserName)
}
createdAt := time.Now()
createdAt := time.Time{}
if pr.Created != nil {
createdAt = *pr.Created
}
updatedAt := time.Now()
updatedAt := time.Time{}
if pr.Created != nil {
updatedAt = *pr.Updated
}

View file

@ -6,7 +6,6 @@ package migrations
import (
"context"
"fmt"
"net/http"
"os"
"sort"
@ -18,29 +17,6 @@ import (
"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")
@ -63,7 +39,7 @@ func TestGiteaDownloadRepo(t *testing.T) {
repo, err := downloader.GetRepoInfo()
assert.NoError(t, err)
assert.EqualValues(t, &base.Repository{
assertRepositoryEqual(t, &base.Repository{
Name: "test_repo",
Owner: "gitea",
IsPrivate: false,
@ -80,54 +56,57 @@ func TestGiteaDownloadRepo(t *testing.T) {
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))
}
}
assertLabelsEqual(t, []*base.Label{
{
Name: "Bug",
Color: "e11d21",
},
{
Name: "Enhancement",
Color: "207de5",
},
{
Name: "Feature",
Color: "0052cc",
Description: "a feature request",
},
{
Name: "Invalid",
Color: "d4c5f9",
},
{
Name: "Question",
Color: "fbca04",
},
{
Name: "Valid",
Color: "53e917",
},
}, labels)
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))
}
}
assertMilestonesEqual(t, []*base.Milestone{
{
Title: "V2 Finalize",
Created: time.Unix(0, 0),
Deadline: timePtr(time.Unix(1599263999, 0)),
Updated: timePtr(time.Unix(0, 0)),
State: "open",
},
{
Title: "V1",
Description: "Generate Content",
Created: time.Unix(0, 0),
Updated: timePtr(time.Unix(0, 0)),
Closed: timePtr(time.Unix(1598985406, 0)),
State: "closed",
},
}, milestones)
releases, err := downloader.GetReleases()
assert.NoError(t, err)
assert.EqualValues(t, []*base.Release{
assertReleasesEqual(t, []*base.Release{
{
Name: "Second Release",
TagName: "v2-rc1",
@ -139,7 +118,7 @@ func TestGiteaDownloadRepo(t *testing.T) {
Published: time.Date(2020, 9, 1, 18, 2, 43, 0, time.UTC),
PublisherID: 689,
PublisherName: "6543",
PublisherEmail: "6543@noreply.gitea.io",
PublisherEmail: "6543@obermui.de",
},
{
Name: "First Release",
@ -152,95 +131,85 @@ func TestGiteaDownloadRepo(t *testing.T) {
Published: time.Date(2020, 9, 1, 17, 30, 32, 0, time.UTC),
PublisherID: 689,
PublisherName: "6543",
PublisherEmail: "6543@noreply.gitea.io",
PublisherEmail: "6543@obermui.de",
},
}, releases)
issues, isEnd, err := downloader.GetIssues(1, 50)
assert.NoError(t, err)
assert.Len(t, issues, 7)
assert.True(t, isEnd)
assert.Len(t, issues, 7)
assert.EqualValues(t, "open", issues[0].State)
issues, isEnd, err = downloader.GetIssues(3, 2)
assert.NoError(t, err)
assert.Len(t, issues, 2)
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",
assertIssuesEqual(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: timePtr(time.Date(2020, 9, 1, 15, 49, 34, 0, time.UTC)),
},
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])
{
Number: 2,
Title: "Spam",
Content: ":(",
Milestone: "",
PosterID: 689,
PosterName: "6543",
PosterEmail: "6543@obermui.de",
State: "closed",
IsLocked: false,
Created: time.Unix(1598919780, 0),
Updated: time.Unix(1598969497, 0),
Labels: []*base.Label{{
Name: "Invalid",
Color: "d4c5f9",
Description: "",
}},
Closed: timePtr(time.Unix(1598969497, 0)),
},
}, issues)
comments, _, err := downloader.GetComments(base.GetCommentOptions{
IssueNumber: 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{
assertCommentsEqual(t, []*base.Comment{
{
IssueIndex: 4,
PosterID: 689,
PosterName: "6543",
PosterEmail: "6543@noreply.gitea.io",
Created: comments[0].Created,
Updated: comments[0].Updated,
PosterEmail: "6543@obermui.de",
Created: time.Unix(1598975370, 0),
Updated: time.Unix(1599070865, 0),
Content: "a really good question!\n\nIt is the used as TESTSET for gitea2gitea repo migration function",
},
{
@ -248,8 +217,8 @@ func TestGiteaDownloadRepo(t *testing.T) {
PosterID: -1,
PosterName: "Ghost",
PosterEmail: "",
Created: comments[1].Created,
Updated: comments[1].Updated,
Created: time.Unix(1598975393, 0),
Updated: time.Unix(1598975393, 0),
Content: "Oh!",
},
}, comments)
@ -262,12 +231,11 @@ func TestGiteaDownloadRepo(t *testing.T) {
assert.NoError(t, err)
assert.False(t, isEnd)
assert.Len(t, prs, 3)
merged12 := time.Unix(1598982934, 0)
assertEqualPulls(t, &base.PullRequest{
assertPullRequestEqual(t, &base.PullRequest{
Number: 12,
PosterID: 689,
PosterName: "6543",
PosterEmail: "6543@noreply.gitea.io",
PosterEmail: "6543@obermui.de",
Title: "Dont Touch",
Content: "\r\nadd dont touch note",
Milestone: "V2 Finalize",
@ -275,10 +243,8 @@ func TestGiteaDownloadRepo(t *testing.T) {
IsLocked: false,
Created: time.Unix(1598982759, 0),
Updated: time.Unix(1599023425, 0),
Closed: &merged12,
Closed: timePtr(time.Unix(1598982934, 0)),
Assignees: []string{"techknowlogick"},
Labels: []*base.Label{},
Base: base.PullRequestBranch{
CloneURL: "",
Ref: "master",
@ -294,74 +260,59 @@ func TestGiteaDownloadRepo(t *testing.T) {
OwnerName: "6543-forks",
},
Merged: true,
MergedTime: &merged12,
MergedTime: timePtr(time.Unix(1598982934, 0)),
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,
}
assertReviewsEqual(t, []*base.Review{
{
ID: 1770,
IssueIndex: 7,
ReviewerID: 689,
ReviewerName: "6543",
CommitID: "187ece0cb6631e2858a6872e5733433bb3ca3b03",
CreatedAt: time.Date(2020, 9, 1, 16, 12, 58, 0, time.UTC),
State: "COMMENT", // TODO
Comments: []*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),
},
},
},
{
ID: 1771,
IssueIndex: 7,
ReviewerID: 9,
ReviewerName: "techknowlogick",
CommitID: "187ece0cb6631e2858a6872e5733433bb3ca3b03",
CreatedAt: time.Date(2020, 9, 1, 17, 6, 47, 0, time.UTC),
State: "REQUEST_CHANGES", // TODO
Content: "I think this needs some changes",
},
{
ID: 1772,
IssueIndex: 7,
ReviewerID: 9,
ReviewerName: "techknowlogick",
CommitID: "187ece0cb6631e2858a6872e5733433bb3ca3b03",
CreatedAt: time.Date(2020, 9, 1, 17, 19, 51, 0, time.UTC),
State: base.ReviewStateApproved,
Official: true,
Content: "looks good",
},
}, reviews)
}

View file

@ -165,11 +165,27 @@ func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) err
if deadline == 0 {
deadline = timeutil.TimeStamp(time.Date(9999, 1, 1, 0, 0, 0, 0, setting.DefaultUILocation).Unix())
}
if milestone.Created.IsZero() {
if milestone.Updated != nil {
milestone.Created = *milestone.Updated
} else if milestone.Deadline != nil {
milestone.Created = *milestone.Deadline
} else {
milestone.Created = time.Now()
}
}
if milestone.Updated == nil || milestone.Updated.IsZero() {
milestone.Updated = &milestone.Created
}
var ms = models.Milestone{
RepoID: g.repo.ID,
Name: milestone.Title,
Content: milestone.Description,
IsClosed: milestone.State == "closed",
CreatedUnix: timeutil.TimeStamp(milestone.Created.Unix()),
UpdatedUnix: timeutil.TimeStamp(milestone.Updated.Unix()),
DeadlineUnix: deadline,
}
if ms.IsClosed && milestone.Closed != nil {
@ -215,6 +231,14 @@ func (g *GiteaLocalUploader) CreateLabels(labels ...*base.Label) error {
func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error {
var rels = make([]*models.Release, 0, len(releases))
for _, release := range releases {
if release.Created.IsZero() {
if !release.Published.IsZero() {
release.Created = release.Published
} else {
release.Created = time.Now()
}
}
var rel = models.Release{
RepoID: g.repo.ID,
TagName: release.TagName,
@ -263,6 +287,13 @@ func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error {
}
for _, asset := range release.Assets {
if asset.Created.IsZero() {
if !asset.Updated.IsZero() {
asset.Created = asset.Updated
} else {
asset.Created = release.Created
}
}
var attach = models.Attachment{
UUID: gouuid.New().String(),
Name: asset.Name,
@ -332,6 +363,21 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
}
}
if issue.Created.IsZero() {
if issue.Closed != nil {
issue.Created = *issue.Closed
} else {
issue.Created = time.Now()
}
}
if issue.Updated.IsZero() {
if issue.Closed != nil {
issue.Updated = *issue.Closed
} else {
issue.Updated = time.Now()
}
}
var is = models.Issue{
RepoID: g.repo.ID,
Repo: g.repo,
@ -406,7 +452,7 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
}
for _, is := range iss {
g.issues.Store(is.Index, is.ID)
g.issues.Store(is.Index, is)
}
}
@ -417,16 +463,17 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
var cms = make([]*models.Comment, 0, len(comments))
for _, comment := range comments {
var issueID int64
if issueIDStr, ok := g.issues.Load(comment.IssueIndex); !ok {
issue, err := models.GetIssueByIndex(g.repo.ID, comment.IssueIndex)
var issue *models.Issue
issueInter, ok := g.issues.Load(comment.IssueIndex)
if !ok {
var err error
issue, err = models.GetIssueByIndex(g.repo.ID, comment.IssueIndex)
if err != nil {
return err
}
issueID = issue.ID
g.issues.Store(comment.IssueIndex, issueID)
g.issues.Store(comment.IssueIndex, issue)
} else {
issueID = issueIDStr.(int64)
issue = issueInter.(*models.Issue)
}
userid, ok := g.userMap[comment.PosterID]
@ -442,8 +489,15 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
}
}
if comment.Created.IsZero() {
comment.Created = time.Unix(int64(issue.CreatedUnix), 0)
}
if comment.Updated.IsZero() {
comment.Updated = comment.Created
}
cm := models.Comment{
IssueID: issueID,
IssueID: issue.ID,
Type: models.CommentTypeComment,
Content: comment.Content,
CreatedUnix: timeutil.TimeStamp(comment.Created.Unix()),
@ -530,7 +584,7 @@ func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error
return err
}
for _, pr := range gprs {
g.issues.Store(pr.Issue.Index, pr.Issue.ID)
g.issues.Store(pr.Issue.Index, pr.Issue)
pull.AddToTaskQueue(pr)
}
return nil
@ -634,6 +688,19 @@ func (g *GiteaLocalUploader) newPullRequest(pr *base.PullRequest) (*models.PullR
head = pr.Head.Ref
}
if pr.Created.IsZero() {
if pr.Closed != nil {
pr.Created = *pr.Closed
} else if pr.MergedTime != nil {
pr.Created = *pr.MergedTime
} else {
pr.Created = time.Now()
}
}
if pr.Updated.IsZero() {
pr.Updated = pr.Created
}
var issue = models.Issue{
RepoID: g.repo.ID,
Repo: g.repo,
@ -743,16 +810,17 @@ func convertReviewState(state string) models.ReviewType {
func (g *GiteaLocalUploader) CreateReviews(reviews ...*base.Review) error {
var cms = make([]*models.Review, 0, len(reviews))
for _, review := range reviews {
var issueID int64
if issueIDStr, ok := g.issues.Load(review.IssueIndex); !ok {
issue, err := models.GetIssueByIndex(g.repo.ID, review.IssueIndex)
var issue *models.Issue
issueInter, ok := g.issues.Load(review.IssueIndex)
if !ok {
var err error
issue, err = models.GetIssueByIndex(g.repo.ID, review.IssueIndex)
if err != nil {
return err
}
issueID = issue.ID
g.issues.Store(review.IssueIndex, issueID)
g.issues.Store(review.IssueIndex, issue)
} else {
issueID = issueIDStr.(int64)
issue = issueInter.(*models.Issue)
}
userid, ok := g.userMap[review.ReviewerID]
@ -768,9 +836,13 @@ func (g *GiteaLocalUploader) CreateReviews(reviews ...*base.Review) error {
}
}
if review.CreatedAt.IsZero() {
review.CreatedAt = time.Unix(int64(issue.CreatedUnix), 0)
}
var cm = models.Review{
Type: convertReviewState(review.State),
IssueID: issueID,
IssueID: issue.ID,
Content: review.Content,
Official: review.Official,
CreatedUnix: timeutil.TimeStamp(review.CreatedAt.Unix()),
@ -786,14 +858,14 @@ func (g *GiteaLocalUploader) CreateReviews(reviews ...*base.Review) error {
}
// get pr
pr, ok := g.prCache[issueID]
pr, ok := g.prCache[issue.ID]
if !ok {
var err error
pr, err = models.GetPullRequestByIssueIDWithNoAttributes(issueID)
pr, err = models.GetPullRequestByIssueIDWithNoAttributes(issue.ID)
if err != nil {
return err
}
g.prCache[issueID] = pr
g.prCache[issue.ID] = pr
}
for _, comment := range review.Comments {
@ -824,10 +896,17 @@ func (g *GiteaLocalUploader) CreateReviews(reviews ...*base.Review) error {
patch, _ = git.CutDiffAroundLine(reader, int64((&models.Comment{Line: int64(line + comment.Position - 1)}).UnsignedLine()), line < 0, setting.UI.CodeCommentLines)
if comment.CreatedAt.IsZero() {
comment.CreatedAt = review.CreatedAt
}
if comment.UpdatedAt.IsZero() {
comment.UpdatedAt = comment.CreatedAt
}
var c = models.Comment{
Type: models.CommentTypeCode,
PosterID: comment.PosterID,
IssueID: issueID,
IssueID: issue.ID,
Content: comment.Content,
Line: int64(line + comment.Position - 1),
TreePath: comment.TreePath,

View file

@ -70,7 +70,7 @@ func TestGiteaUploadRepo(t *testing.T) {
labels, err := models.GetLabelsByRepoID(repo.ID, "", models.ListOptions{})
assert.NoError(t, err)
assert.Len(t, labels, 11)
assert.Len(t, labels, 12)
releases, err := models.GetReleasesByRepoID(repo.ID, models.FindReleasesOptions{
ListOptions: models.ListOptions{
@ -98,7 +98,7 @@ func TestGiteaUploadRepo(t *testing.T) {
SortType: "oldest",
})
assert.NoError(t, err)
assert.Len(t, issues, 14)
assert.Len(t, issues, 15)
assert.NoError(t, issues[0].LoadDiscussComments())
assert.Empty(t, issues[0].Comments)
@ -106,7 +106,7 @@ func TestGiteaUploadRepo(t *testing.T) {
SortType: "oldest",
})
assert.NoError(t, err)
assert.Len(t, pulls, 34)
assert.Len(t, pulls, 30)
assert.NoError(t, pulls[0].LoadIssue())
assert.NoError(t, pulls[0].Issue.LoadDiscussComments())
assert.Len(t, pulls[0].Issue.Comments, 2)

View file

@ -16,53 +16,6 @@ import (
"github.com/stretchr/testify/assert"
)
func assertMilestoneEqual(t *testing.T, description, title, dueOn, created, updated, closed, state string, ms *base.Milestone) {
var tmPtr *time.Time
if dueOn != "" {
tm, err := time.Parse("2006-01-02 15:04:05 -0700 MST", dueOn)
assert.NoError(t, err)
tmPtr = &tm
}
var (
createdTM time.Time
updatedTM *time.Time
closedTM *time.Time
)
if created != "" {
var err error
createdTM, err = time.Parse("2006-01-02 15:04:05 -0700 MST", created)
assert.NoError(t, err)
}
if updated != "" {
updatedTemp, err := time.Parse("2006-01-02 15:04:05 -0700 MST", updated)
assert.NoError(t, err)
updatedTM = &updatedTemp
}
if closed != "" {
closedTemp, err := time.Parse("2006-01-02 15:04:05 -0700 MST", closed)
assert.NoError(t, err)
closedTM = &closedTemp
}
assert.EqualValues(t, &base.Milestone{
Description: description,
Title: title,
Deadline: tmPtr,
State: state,
Created: createdTM,
Updated: updatedTM,
Closed: closedTM,
}, ms)
}
func assertLabelEqual(t *testing.T, name, color, description string, label *base.Label) {
assert.EqualValues(t, &base.Label{
Name: name,
Color: color,
Description: description,
}, label)
}
func TestGitHubDownloadRepo(t *testing.T) {
GithubLimitRateRemaining = 3 //Wait at 3 remaining since we could have 3 CI in //
downloader := NewGithubDownloaderV3(context.Background(), "https://github.com", "", "", os.Getenv("GITHUB_READ_TOKEN"), "go-gitea", "test_repo")
@ -71,7 +24,7 @@ func TestGitHubDownloadRepo(t *testing.T) {
repo, err := downloader.GetRepoInfo()
assert.NoError(t, err)
assert.EqualValues(t, &base.Repository{
assertRepositoryEqual(t, &base.Repository{
Name: "test_repo",
Owner: "go-gitea",
Description: "Test repository for testing migration from github to gitea",
@ -86,52 +39,80 @@ func TestGitHubDownloadRepo(t *testing.T) {
milestones, err := downloader.GetMilestones()
assert.NoError(t, err)
assert.True(t, len(milestones) >= 2)
for _, milestone := range milestones {
switch milestone.Title {
case "1.0.0":
assertMilestoneEqual(t, "Milestone 1.0.0", "1.0.0", "2019-11-11 08:00:00 +0000 UTC",
"2019-11-12 19:37:08 +0000 UTC",
"2019-11-12 21:56:17 +0000 UTC",
"2019-11-12 19:45:49 +0000 UTC",
"closed", milestone)
case "1.1.0":
assertMilestoneEqual(t, "Milestone 1.1.0", "1.1.0", "2019-11-12 08:00:00 +0000 UTC",
"2019-11-12 19:37:25 +0000 UTC",
"2019-11-12 21:39:27 +0000 UTC",
"2019-11-12 19:45:46 +0000 UTC",
"closed", milestone)
}
}
assertMilestonesEqual(t, []*base.Milestone{
{
Title: "1.0.0",
Description: "Milestone 1.0.0",
Deadline: timePtr(time.Date(2019, 11, 11, 8, 0, 0, 0, time.UTC)),
Created: time.Date(2019, 11, 12, 19, 37, 8, 0, time.UTC),
Updated: timePtr(time.Date(2019, 11, 12, 21, 56, 17, 0, time.UTC)),
Closed: timePtr(time.Date(2019, 11, 12, 19, 45, 49, 0, time.UTC)),
State: "closed",
},
{
Title: "1.1.0",
Description: "Milestone 1.1.0",
Deadline: timePtr(time.Date(2019, 11, 12, 8, 0, 0, 0, time.UTC)),
Created: time.Date(2019, 11, 12, 19, 37, 25, 0, time.UTC),
Updated: timePtr(time.Date(2019, 11, 12, 21, 39, 27, 0, time.UTC)),
Closed: timePtr(time.Date(2019, 11, 12, 19, 45, 46, 0, time.UTC)),
State: "closed",
},
}, milestones)
labels, err := downloader.GetLabels()
assert.NoError(t, err)
assert.True(t, len(labels) >= 8)
for _, l := range labels {
switch l.Name {
case "bug":
assertLabelEqual(t, "bug", "d73a4a", "Something isn't working", l)
case "documentation":
assertLabelEqual(t, "documentation", "0075ca", "Improvements or additions to documentation", l)
case "duplicate":
assertLabelEqual(t, "duplicate", "cfd3d7", "This issue or pull request already exists", l)
case "enhancement":
assertLabelEqual(t, "enhancement", "a2eeef", "New feature or request", l)
case "good first issue":
assertLabelEqual(t, "good first issue", "7057ff", "Good for newcomers", l)
case "help wanted":
assertLabelEqual(t, "help wanted", "008672", "Extra attention is needed", l)
case "invalid":
assertLabelEqual(t, "invalid", "e4e669", "This doesn't seem right", l)
case "question":
assertLabelEqual(t, "question", "d876e3", "Further information is requested", l)
}
}
assertLabelsEqual(t, []*base.Label{
{
Name: "bug",
Color: "d73a4a",
Description: "Something isn't working",
},
{
Name: "documentation",
Color: "0075ca",
Description: "Improvements or additions to documentation",
},
{
Name: "duplicate",
Color: "cfd3d7",
Description: "This issue or pull request already exists",
},
{
Name: "enhancement",
Color: "a2eeef",
Description: "New feature or request",
},
{
Name: "good first issue",
Color: "7057ff",
Description: "Good for newcomers",
},
{
Name: "help wanted",
Color: "008672",
Description: "Extra attention is needed",
},
{
Name: "invalid",
Color: "e4e669",
Description: "This doesn't seem right",
},
{
Name: "question",
Color: "d876e3",
Description: "Further information is requested",
},
{
Name: "wontfix",
Color: "ffffff",
Description: "This will not be worked on",
},
}, labels)
releases, err := downloader.GetReleases()
assert.NoError(t, err)
assert.EqualValues(t, []*base.Release{
assertReleasesEqual(t, []*base.Release{
{
TagName: "v0.9.99",
TargetCommitish: "master",
@ -142,19 +123,13 @@ func TestGitHubDownloadRepo(t *testing.T) {
PublisherID: 1669571,
PublisherName: "mrsdizzie",
},
}, releases[len(releases)-1:])
}, releases)
// downloader.GetIssues()
issues, isEnd, err := downloader.GetIssues(1, 2)
assert.NoError(t, err)
assert.Len(t, issues, 2)
assert.False(t, isEnd)
var (
closed1 = time.Date(2019, 11, 12, 20, 22, 22, 0, time.UTC)
closed2 = time.Date(2019, 11, 12, 21, 1, 31, 0, time.UTC)
)
assert.EqualValues(t, []*base.Issue{
assertIssuesEqual(t, []*base.Issue{
{
Number: 1,
Title: "Please add an animated gif icon to the merge button",
@ -184,7 +159,7 @@ func TestGitHubDownloadRepo(t *testing.T) {
Content: "+1",
},
},
Closed: &closed1,
Closed: timePtr(time.Date(2019, 11, 12, 20, 22, 22, 0, time.UTC)),
},
{
Number: 2,
@ -235,7 +210,7 @@ func TestGitHubDownloadRepo(t *testing.T) {
Content: "+1",
},
},
Closed: &closed2,
Closed: timePtr(time.Date(2019, 11, 12, 21, 1, 31, 0, time.UTC)),
},
}, issues)
@ -244,8 +219,7 @@ func TestGitHubDownloadRepo(t *testing.T) {
IssueNumber: 2,
})
assert.NoError(t, err)
assert.Len(t, comments, 2)
assert.EqualValues(t, []*base.Comment{
assertCommentsEqual(t, []*base.Comment{
{
IssueIndex: 2,
PosterID: 1669571,
@ -270,17 +244,12 @@ func TestGitHubDownloadRepo(t *testing.T) {
Content: "A second comment",
Reactions: nil,
},
}, comments[:2])
}, comments)
// downloader.GetPullRequests()
prs, _, err := downloader.GetPullRequests(1, 2)
assert.NoError(t, err)
assert.Len(t, prs, 2)
closed1 = time.Date(2019, 11, 12, 21, 39, 27, 0, time.UTC)
var merged1 = time.Date(2019, 11, 12, 21, 39, 27, 0, time.UTC)
assert.EqualValues(t, []*base.PullRequest{
assertPullRequestsEqual(t, []*base.PullRequest{
{
Number: 3,
Title: "Update README.md",
@ -313,9 +282,9 @@ func TestGitHubDownloadRepo(t *testing.T) {
OwnerName: "go-gitea",
RepoName: "test_repo",
},
Closed: &closed1,
Closed: timePtr(time.Date(2019, 11, 12, 21, 39, 27, 0, time.UTC)),
Merged: true,
MergedTime: &merged1,
MergedTime: timePtr(time.Date(2019, 11, 12, 21, 39, 27, 0, time.UTC)),
MergeCommitSHA: "f32b0a9dfd09a60f616f29158f772cedd89942d2",
},
{
@ -368,7 +337,7 @@ func TestGitHubDownloadRepo(t *testing.T) {
reviews, err := downloader.GetReviews(3)
assert.NoError(t, err)
assert.EqualValues(t, []*base.Review{
assertReviewsEqual(t, []*base.Review{
{
ID: 315859956,
IssueIndex: 3,
@ -400,7 +369,7 @@ func TestGitHubDownloadRepo(t *testing.T) {
reviews, err = downloader.GetReviews(4)
assert.NoError(t, err)
assert.EqualValues(t, []*base.Review{
assertReviewsEqual(t, []*base.Review{
{
ID: 338338740,
IssueIndex: 4,

View file

@ -609,7 +609,7 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
// GetReviews returns pull requests review
func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review, error) {
state, resp, err := g.client.MergeRequestApprovals.GetApprovalState(g.repoID, int(pullRequestNumber), gitlab.WithContext(g.ctx))
approvals, resp, err := g.client.MergeRequestApprovals.GetConfiguration(g.repoID, int(pullRequestNumber), gitlab.WithContext(g.ctx))
if err != nil {
if resp != nil && resp.StatusCode == 404 {
log.Error(fmt.Sprintf("GitlabDownloader: while migrating a error occurred: '%s'", err.Error()))
@ -618,21 +618,12 @@ func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review,
return nil, err
}
// GitLab's Approvals are equivalent to Gitea's approve reviews
approvers := make(map[int]string)
for i := range state.Rules {
for u := range state.Rules[i].ApprovedBy {
approvers[state.Rules[i].ApprovedBy[u].ID] = state.Rules[i].ApprovedBy[u].Username
}
}
var reviews = make([]*base.Review, 0, len(approvers))
for id, name := range approvers {
var reviews = make([]*base.Review, 0, len(approvals.ApprovedBy))
for _, user := range approvals.ApprovedBy {
reviews = append(reviews, &base.Review{
ReviewerID: int64(id),
ReviewerName: name,
// GitLab API doesn't return a creation date
CreatedAt: time.Now(),
ReviewerID: int64(user.User.ID),
ReviewerName: user.User.Username,
CreatedAt: *approvals.UpdatedAt,
// All we get are approvals
State: base.ReviewStateApproved,
})

View file

@ -36,7 +36,7 @@ func TestGitlabDownloadRepo(t *testing.T) {
repo, err := downloader.GetRepoInfo()
assert.NoError(t, err)
// Repo Owner is blank in Gitlab Group repos
assert.EqualValues(t, &base.Repository{
assertRepositoryEqual(t, &base.Repository{
Name: "test_repo",
Owner: "",
Description: "Test repository for testing migration from gitlab to gitea",
@ -52,56 +52,66 @@ func TestGitlabDownloadRepo(t *testing.T) {
milestones, err := downloader.GetMilestones()
assert.NoError(t, err)
assert.True(t, len(milestones) >= 2)
for _, milestone := range milestones {
switch milestone.Title {
case "1.0":
assertMilestoneEqual(t, "", "1.0",
"",
"2019-11-28 08:42:30.301 +0000 UTC",
"2019-11-28 15:57:52.401 +0000 UTC",
"",
"closed", milestone)
case "1.1.0":
assertMilestoneEqual(t, "", "1.1.0",
"",
"2019-11-28 08:42:44.575 +0000 UTC",
"2019-11-28 08:42:44.575 +0000 UTC",
"",
"active", milestone)
}
}
assertMilestonesEqual(t, []*base.Milestone{
{
Title: "1.1.0",
Created: time.Date(2019, 11, 28, 8, 42, 44, 575000000, time.UTC),
Updated: timePtr(time.Date(2019, 11, 28, 8, 42, 44, 575000000, time.UTC)),
State: "active",
},
{
Title: "1.0.0",
Created: time.Date(2019, 11, 28, 8, 42, 30, 301000000, time.UTC),
Updated: timePtr(time.Date(2019, 11, 28, 15, 57, 52, 401000000, time.UTC)),
Closed: timePtr(time.Date(2019, 11, 28, 15, 57, 52, 401000000, time.UTC)),
State: "closed",
},
}, milestones)
labels, err := downloader.GetLabels()
assert.NoError(t, err)
assert.True(t, len(labels) >= 9)
for _, l := range labels {
switch l.Name {
case "bug":
assertLabelEqual(t, "bug", "d9534f", "", l)
case "documentation":
assertLabelEqual(t, "documentation", "f0ad4e", "", l)
case "confirmed":
assertLabelEqual(t, "confirmed", "d9534f", "", l)
case "enhancement":
assertLabelEqual(t, "enhancement", "5cb85c", "", l)
case "critical":
assertLabelEqual(t, "critical", "d9534f", "", l)
case "discussion":
assertLabelEqual(t, "discussion", "428bca", "", l)
case "suggestion":
assertLabelEqual(t, "suggestion", "428bca", "", l)
case "support":
assertLabelEqual(t, "support", "f0ad4e", "", l)
case "duplicate":
assertLabelEqual(t, "duplicate", "7F8C8D", "", l)
}
}
assertLabelsEqual(t, []*base.Label{
{
Name: "bug",
Color: "d9534f",
},
{
Name: "confirmed",
Color: "d9534f",
},
{
Name: "critical",
Color: "d9534f",
},
{
Name: "discussion",
Color: "428bca",
},
{
Name: "documentation",
Color: "f0ad4e",
},
{
Name: "duplicate",
Color: "7f8c8d",
},
{
Name: "enhancement",
Color: "5cb85c",
},
{
Name: "suggestion",
Color: "428bca",
},
{
Name: "support",
Color: "f0ad4e",
},
}, labels)
releases, err := downloader.GetReleases()
assert.NoError(t, err)
assert.EqualValues(t, []*base.Release{
assertReleasesEqual(t, []*base.Release{
{
TagName: "v0.9.99",
TargetCommitish: "0720a3ec57c1f843568298117b874319e7deee75",
@ -111,18 +121,13 @@ func TestGitlabDownloadRepo(t *testing.T) {
PublisherID: 1241334,
PublisherName: "lafriks",
},
}, releases[len(releases)-1:])
}, releases)
issues, isEnd, err := downloader.GetIssues(1, 2)
assert.NoError(t, err)
assert.Len(t, issues, 2)
assert.False(t, isEnd)
var (
closed1 = time.Date(2019, 11, 28, 8, 46, 23, 275000000, time.UTC)
closed2 = time.Date(2019, 11, 28, 8, 45, 44, 959000000, time.UTC)
)
assert.EqualValues(t, []*base.Issue{
assertIssuesEqual(t, []*base.Issue{
{
Number: 1,
Title: "Please add an animated gif icon to the merge button",
@ -152,7 +157,7 @@ func TestGitlabDownloadRepo(t *testing.T) {
UserName: "lafriks",
Content: "open_mouth",
}},
Closed: &closed1,
Closed: timePtr(time.Date(2019, 11, 28, 8, 46, 23, 275000000, time.UTC)),
},
{
Number: 2,
@ -200,7 +205,7 @@ func TestGitlabDownloadRepo(t *testing.T) {
UserName: "lafriks",
Content: "hearts",
}},
Closed: &closed2,
Closed: timePtr(time.Date(2019, 11, 28, 8, 45, 44, 959000000, time.UTC)),
},
}, issues)
@ -208,8 +213,7 @@ func TestGitlabDownloadRepo(t *testing.T) {
IssueNumber: 2,
})
assert.NoError(t, err)
assert.Len(t, comments, 4)
assert.EqualValues(t, []*base.Comment{
assertCommentsEqual(t, []*base.Comment{
{
IssueIndex: 2,
PosterID: 1241334,
@ -242,13 +246,11 @@ func TestGitlabDownloadRepo(t *testing.T) {
Content: "A second comment",
Reactions: nil,
},
}, comments[:4])
}, comments)
prs, _, err := downloader.GetPullRequests(1, 1)
assert.NoError(t, err)
assert.Len(t, prs, 1)
assert.EqualValues(t, []*base.PullRequest{
assertPullRequestsEqual(t, []*base.PullRequest{
{
Number: 4,
OriginalNumber: 2,
@ -296,27 +298,29 @@ func TestGitlabDownloadRepo(t *testing.T) {
rvs, err := downloader.GetReviews(1)
assert.NoError(t, err)
if assert.Len(t, rvs, 2) {
for i := range rvs {
switch rvs[i].ReviewerID {
case 4102996:
assert.EqualValues(t, "zeripath", rvs[i].ReviewerName)
assert.EqualValues(t, "APPROVED", rvs[i].State)
case 527793:
assert.EqualValues(t, "axifive", rvs[i].ReviewerName)
assert.EqualValues(t, "APPROVED", rvs[i].State)
default:
t.Errorf("Unexpected Reviewer ID: %d", rvs[i].ReviewerID)
assertReviewsEqual(t, []*base.Review{
{
ReviewerID: 4102996,
ReviewerName: "zeripath",
CreatedAt: time.Date(2019, 11, 28, 16, 02, 8, 377000000, time.UTC),
State: "APPROVED",
},
{
ReviewerID: 527793,
ReviewerName: "axifive",
CreatedAt: time.Date(2019, 11, 28, 16, 02, 8, 377000000, time.UTC),
State: "APPROVED",
},
}, rvs)
}
}
}
rvs, err = downloader.GetReviews(2)
assert.NoError(t, err)
if assert.Len(t, prs, 1) {
assert.EqualValues(t, 4575606, rvs[0].ReviewerID)
assert.EqualValues(t, "real6543", rvs[0].ReviewerName)
assert.EqualValues(t, "APPROVED", rvs[0].State)
}
assertReviewsEqual(t, []*base.Review{
{
ReviewerID: 4575606,
ReviewerName: "real6543",
CreatedAt: time.Date(2020, 04, 19, 19, 24, 21, 108000000, time.UTC),
State: "APPROVED",
},
}, rvs)
}

View file

@ -146,16 +146,12 @@ func (g *GogsDownloader) GetMilestones() ([]*base.Milestone, error) {
return nil, err
}
t := time.Now()
for _, m := range ms {
milestones = append(milestones, &base.Milestone{
Title: m.Title,
Description: m.Description,
Deadline: m.Deadline,
State: string(m.State),
Created: t,
Updated: &t,
Closed: m.Closed,
})
}
@ -294,12 +290,14 @@ func convertGogsIssue(issue *gogs.Issue) *base.Issue {
return &base.Issue{
Title: issue.Title,
Number: issue.Index,
PosterID: issue.Poster.ID,
PosterName: issue.Poster.Login,
PosterEmail: issue.Poster.Email,
Content: issue.Body,
Milestone: milestone,
State: string(issue.State),
Created: issue.Created,
Updated: issue.Updated,
Labels: labels,
Closed: closed,
}

View file

@ -34,65 +34,73 @@ func TestGogsDownloadRepo(t *testing.T) {
repo, err := downloader.GetRepoInfo()
assert.NoError(t, err)
assert.EqualValues(t, &base.Repository{
Name: "TESTREPO",
Owner: "lunnytest",
Description: "",
CloneURL: "https://try.gogs.io/lunnytest/TESTREPO.git",
assertRepositoryEqual(t, &base.Repository{
Name: "TESTREPO",
Owner: "lunnytest",
Description: "",
CloneURL: "https://try.gogs.io/lunnytest/TESTREPO.git",
OriginalURL: "https://try.gogs.io/lunnytest/TESTREPO",
DefaultBranch: "master",
}, repo)
milestones, err := downloader.GetMilestones()
assert.NoError(t, err)
assert.True(t, len(milestones) == 1)
for _, milestone := range milestones {
switch milestone.Title {
case "1.0":
assert.EqualValues(t, "open", milestone.State)
}
}
assertMilestonesEqual(t, []*base.Milestone{
{
Title: "1.0",
State: "open",
},
}, milestones)
labels, err := downloader.GetLabels()
assert.NoError(t, err)
assert.Len(t, labels, 7)
for _, l := range labels {
switch l.Name {
case "bug":
assertLabelEqual(t, "bug", "ee0701", "", l)
case "duplicated":
assertLabelEqual(t, "duplicated", "cccccc", "", l)
case "enhancement":
assertLabelEqual(t, "enhancement", "84b6eb", "", l)
case "help wanted":
assertLabelEqual(t, "help wanted", "128a0c", "", l)
case "invalid":
assertLabelEqual(t, "invalid", "e6e6e6", "", l)
case "question":
assertLabelEqual(t, "question", "cc317c", "", l)
case "wontfix":
assertLabelEqual(t, "wontfix", "ffffff", "", l)
}
}
_, err = downloader.GetReleases()
assert.Error(t, err)
assertLabelsEqual(t, []*base.Label{
{
Name: "bug",
Color: "ee0701",
},
{
Name: "duplicate",
Color: "cccccc",
},
{
Name: "enhancement",
Color: "84b6eb",
},
{
Name: "help wanted",
Color: "128a0c",
},
{
Name: "invalid",
Color: "e6e6e6",
},
{
Name: "question",
Color: "cc317c",
},
{
Name: "wontfix",
Color: "ffffff",
},
}, labels)
// downloader.GetIssues()
issues, isEnd, err := downloader.GetIssues(1, 8)
assert.NoError(t, err)
assert.Len(t, issues, 1)
assert.False(t, isEnd)
assert.EqualValues(t, []*base.Issue{
assertIssuesEqual(t, []*base.Issue{
{
Number: 1,
PosterID: 5331,
PosterName: "lunny",
PosterEmail: "xiaolunwen@gmail.com",
Title: "test",
Content: "test",
Milestone: "",
PosterName: "lunny",
PosterEmail: "xiaolunwen@gmail.com",
State: "open",
Created: time.Date(2019, 06, 11, 8, 16, 44, 0, time.UTC),
Updated: time.Date(2019, 10, 26, 11, 07, 2, 0, time.UTC),
Labels: []*base.Label{
{
Name: "bug",
@ -107,14 +115,24 @@ func TestGogsDownloadRepo(t *testing.T) {
IssueNumber: 1,
})
assert.NoError(t, err)
assert.Len(t, comments, 1)
assert.EqualValues(t, []*base.Comment{
assertCommentsEqual(t, []*base.Comment{
{
IssueIndex: 1,
PosterID: 5331,
PosterName: "lunny",
PosterEmail: "xiaolunwen@gmail.com",
Created: time.Date(2019, 06, 11, 8, 19, 50, 0, time.UTC),
Updated: time.Date(2019, 06, 11, 8, 19, 50, 0, time.UTC),
Content: `1111`,
Content: "1111",
},
{
IssueIndex: 1,
PosterID: 15822,
PosterName: "clacplouf",
PosterEmail: "test1234@dbn.re",
Created: time.Date(2019, 10, 26, 11, 7, 2, 0, time.UTC),
Updated: time.Date(2019, 10, 26, 11, 7, 2, 0, time.UTC),
Content: "88888888",
},
}, comments)

View file

@ -8,10 +8,259 @@ package migrations
import (
"path/filepath"
"testing"
"time"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/migrations/base"
"github.com/stretchr/testify/assert"
)
func TestMain(m *testing.M) {
models.MainTest(m, filepath.Join("..", ".."))
}
func timePtr(t time.Time) *time.Time {
return &t
}
func assertTimeEqual(t *testing.T, expected, actual time.Time) {
assert.Equal(t, expected.UTC(), actual.UTC())
}
func assertTimePtrEqual(t *testing.T, expected, actual *time.Time) {
if expected == nil {
assert.Nil(t, actual)
} else {
assertTimeEqual(t, *expected, *actual)
}
}
func assertCommentEqual(t *testing.T, expected, actual *base.Comment) {
assert.Equal(t, expected.IssueIndex, actual.IssueIndex)
assert.Equal(t, expected.PosterID, actual.PosterID)
assert.Equal(t, expected.PosterName, actual.PosterName)
assert.Equal(t, expected.PosterEmail, actual.PosterEmail)
assertTimeEqual(t, expected.Created, actual.Created)
assertTimeEqual(t, expected.Updated, actual.Updated)
assert.Equal(t, expected.Content, actual.Content)
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
}
func assertCommentsEqual(t *testing.T, expected, actual []*base.Comment) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertCommentEqual(t, expected[i], actual[i])
}
}
}
func assertLabelEqual(t *testing.T, expected, actual *base.Label) {
assert.Equal(t, expected.Name, actual.Name)
assert.Equal(t, expected.Color, actual.Color)
assert.Equal(t, expected.Description, actual.Description)
}
func assertLabelsEqual(t *testing.T, expected, actual []*base.Label) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertLabelEqual(t, expected[i], actual[i])
}
}
}
func assertMilestoneEqual(t *testing.T, expected, actual *base.Milestone) {
assert.Equal(t, expected.Title, actual.Title)
assert.Equal(t, expected.Description, actual.Description)
assertTimePtrEqual(t, expected.Deadline, actual.Deadline)
assertTimeEqual(t, expected.Created, actual.Created)
assertTimePtrEqual(t, expected.Updated, actual.Updated)
assertTimePtrEqual(t, expected.Closed, actual.Closed)
assert.Equal(t, expected.State, actual.State)
}
func assertMilestonesEqual(t *testing.T, expected, actual []*base.Milestone) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertMilestoneEqual(t, expected[i], actual[i])
}
}
}
func assertIssueEqual(t *testing.T, expected, actual *base.Issue) {
assert.Equal(t, expected.Number, actual.Number)
assert.Equal(t, expected.PosterID, actual.PosterID)
assert.Equal(t, expected.PosterName, actual.PosterName)
assert.Equal(t, expected.PosterEmail, actual.PosterEmail)
assert.Equal(t, expected.Title, actual.Title)
assert.Equal(t, expected.Content, actual.Content)
assert.Equal(t, expected.Ref, actual.Ref)
assert.Equal(t, expected.Milestone, actual.Milestone)
assert.Equal(t, expected.State, actual.State)
assert.Equal(t, expected.IsLocked, actual.IsLocked)
assertTimeEqual(t, expected.Created, actual.Created)
assertTimeEqual(t, expected.Updated, actual.Updated)
assertTimePtrEqual(t, expected.Closed, actual.Closed)
assertLabelsEqual(t, expected.Labels, actual.Labels)
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
assert.ElementsMatch(t, expected.Assignees, actual.Assignees)
}
func assertIssuesEqual(t *testing.T, expected, actual []*base.Issue) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertIssueEqual(t, expected[i], actual[i])
}
}
}
func assertPullRequestEqual(t *testing.T, expected, actual *base.PullRequest) {
assert.Equal(t, expected.Number, actual.Number)
assert.Equal(t, expected.Title, actual.Title)
assert.Equal(t, expected.PosterID, actual.PosterID)
assert.Equal(t, expected.PosterName, actual.PosterName)
assert.Equal(t, expected.PosterEmail, actual.PosterEmail)
assert.Equal(t, expected.Content, actual.Content)
assert.Equal(t, expected.Milestone, actual.Milestone)
assert.Equal(t, expected.State, actual.State)
assertTimeEqual(t, expected.Created, actual.Created)
assertTimeEqual(t, expected.Updated, actual.Updated)
assertTimePtrEqual(t, expected.Closed, actual.Closed)
assertLabelsEqual(t, expected.Labels, actual.Labels)
assert.Equal(t, expected.PatchURL, actual.PatchURL)
assert.Equal(t, expected.Merged, actual.Merged)
assertTimePtrEqual(t, expected.MergedTime, actual.MergedTime)
assert.Equal(t, expected.MergeCommitSHA, actual.MergeCommitSHA)
assertPullRequestBranchEqual(t, expected.Head, actual.Head)
assertPullRequestBranchEqual(t, expected.Base, actual.Base)
assert.ElementsMatch(t, expected.Assignees, actual.Assignees)
assert.Equal(t, expected.IsLocked, actual.IsLocked)
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
}
func assertPullRequestsEqual(t *testing.T, expected, actual []*base.PullRequest) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertPullRequestEqual(t, expected[i], actual[i])
}
}
}
func assertPullRequestBranchEqual(t *testing.T, expected, actual base.PullRequestBranch) {
assert.Equal(t, expected.CloneURL, actual.CloneURL)
assert.Equal(t, expected.Ref, actual.Ref)
assert.Equal(t, expected.SHA, actual.SHA)
assert.Equal(t, expected.RepoName, actual.RepoName)
assert.Equal(t, expected.OwnerName, actual.OwnerName)
}
func assertReactionEqual(t *testing.T, expected, actual *base.Reaction) {
assert.Equal(t, expected.UserID, actual.UserID)
assert.Equal(t, expected.UserName, actual.UserName)
assert.Equal(t, expected.Content, actual.Content)
}
func assertReactionsEqual(t *testing.T, expected, actual []*base.Reaction) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertReactionEqual(t, expected[i], actual[i])
}
}
}
func assertReleaseAssetEqual(t *testing.T, expected, actual *base.ReleaseAsset) {
assert.Equal(t, expected.ID, actual.ID)
assert.Equal(t, expected.Name, actual.Name)
assert.Equal(t, expected.ContentType, actual.ContentType)
assert.Equal(t, expected.Size, actual.Size)
assert.Equal(t, expected.DownloadCount, actual.DownloadCount)
assertTimeEqual(t, expected.Created, actual.Created)
assertTimeEqual(t, expected.Updated, actual.Updated)
assert.Equal(t, expected.DownloadURL, actual.DownloadURL)
}
func assertReleaseAssetsEqual(t *testing.T, expected, actual []*base.ReleaseAsset) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertReleaseAssetEqual(t, expected[i], actual[i])
}
}
}
func assertReleaseEqual(t *testing.T, expected, actual *base.Release) {
assert.Equal(t, expected.TagName, actual.TagName)
assert.Equal(t, expected.TargetCommitish, actual.TargetCommitish)
assert.Equal(t, expected.Name, actual.Name)
assert.Equal(t, expected.Body, actual.Body)
assert.Equal(t, expected.Draft, actual.Draft)
assert.Equal(t, expected.Prerelease, actual.Prerelease)
assert.Equal(t, expected.PublisherID, actual.PublisherID)
assert.Equal(t, expected.PublisherName, actual.PublisherName)
assert.Equal(t, expected.PublisherEmail, actual.PublisherEmail)
assertReleaseAssetsEqual(t, expected.Assets, actual.Assets)
assertTimeEqual(t, expected.Created, actual.Created)
assertTimeEqual(t, expected.Published, actual.Published)
}
func assertReleasesEqual(t *testing.T, expected, actual []*base.Release) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertReleaseEqual(t, expected[i], actual[i])
}
}
}
func assertRepositoryEqual(t *testing.T, expected, actual *base.Repository) {
assert.Equal(t, expected.Name, actual.Name)
assert.Equal(t, expected.Owner, actual.Owner)
assert.Equal(t, expected.IsPrivate, actual.IsPrivate)
assert.Equal(t, expected.IsMirror, actual.IsMirror)
assert.Equal(t, expected.Description, actual.Description)
assert.Equal(t, expected.CloneURL, actual.CloneURL)
assert.Equal(t, expected.OriginalURL, actual.OriginalURL)
assert.Equal(t, expected.DefaultBranch, actual.DefaultBranch)
}
func assertReviewEqual(t *testing.T, expected, actual *base.Review) {
assert.Equal(t, expected.ID, actual.ID)
assert.Equal(t, expected.IssueIndex, actual.IssueIndex)
assert.Equal(t, expected.ReviewerID, actual.ReviewerID)
assert.Equal(t, expected.ReviewerName, actual.ReviewerName)
assert.Equal(t, expected.Official, actual.Official)
assert.Equal(t, expected.CommitID, actual.CommitID)
assert.Equal(t, expected.Content, actual.Content)
assertTimeEqual(t, expected.CreatedAt, actual.CreatedAt)
assert.Equal(t, expected.State, actual.State)
assertReviewCommentsEqual(t, expected.Comments, actual.Comments)
}
func assertReviewsEqual(t *testing.T, expected, actual []*base.Review) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertReviewEqual(t, expected[i], actual[i])
}
}
}
func assertReviewCommentEqual(t *testing.T, expected, actual *base.ReviewComment) {
assert.Equal(t, expected.ID, actual.ID)
assert.Equal(t, expected.InReplyTo, actual.InReplyTo)
assert.Equal(t, expected.Content, actual.Content)
assert.Equal(t, expected.TreePath, actual.TreePath)
assert.Equal(t, expected.DiffHunk, actual.DiffHunk)
assert.Equal(t, expected.Position, actual.Position)
assert.Equal(t, expected.Line, actual.Line)
assert.Equal(t, expected.CommitID, actual.CommitID)
assert.Equal(t, expected.PosterID, actual.PosterID)
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
assertTimeEqual(t, expected.CreatedAt, actual.CreatedAt)
assertTimeEqual(t, expected.UpdatedAt, actual.UpdatedAt)
}
func assertReviewCommentsEqual(t *testing.T, expected, actual []*base.ReviewComment) {
if assert.Len(t, actual, len(expected)) {
for i := range expected {
assertReviewCommentEqual(t, expected[i], actual[i])
}
}
}