1// Copyright 2019 The Gitea Authors. All rights reserved. 2// Copyright 2018 Jonas Franz. All rights reserved. 3// Use of this source code is governed by a MIT-style 4// license that can be found in the LICENSE file. 5 6package migrations 7 8import ( 9 "path/filepath" 10 "testing" 11 "time" 12 13 "code.gitea.io/gitea/models/unittest" 14 base "code.gitea.io/gitea/modules/migration" 15 16 "github.com/stretchr/testify/assert" 17) 18 19func TestMain(m *testing.M) { 20 unittest.MainTest(m, filepath.Join("..", "..")) 21} 22 23func timePtr(t time.Time) *time.Time { 24 return &t 25} 26 27func assertTimeEqual(t *testing.T, expected, actual time.Time) { 28 assert.Equal(t, expected.UTC(), actual.UTC()) 29} 30 31func assertTimePtrEqual(t *testing.T, expected, actual *time.Time) { 32 if expected == nil { 33 assert.Nil(t, actual) 34 } else { 35 assert.NotNil(t, actual) 36 assertTimeEqual(t, *expected, *actual) 37 } 38} 39 40func assertCommentEqual(t *testing.T, expected, actual *base.Comment) { 41 assert.Equal(t, expected.IssueIndex, actual.IssueIndex) 42 assert.Equal(t, expected.PosterID, actual.PosterID) 43 assert.Equal(t, expected.PosterName, actual.PosterName) 44 assert.Equal(t, expected.PosterEmail, actual.PosterEmail) 45 assertTimeEqual(t, expected.Created, actual.Created) 46 assertTimeEqual(t, expected.Updated, actual.Updated) 47 assert.Equal(t, expected.Content, actual.Content) 48 assertReactionsEqual(t, expected.Reactions, actual.Reactions) 49} 50 51func assertCommentsEqual(t *testing.T, expected, actual []*base.Comment) { 52 if assert.Len(t, actual, len(expected)) { 53 for i := range expected { 54 assertCommentEqual(t, expected[i], actual[i]) 55 } 56 } 57} 58 59func assertLabelEqual(t *testing.T, expected, actual *base.Label) { 60 assert.Equal(t, expected.Name, actual.Name) 61 assert.Equal(t, expected.Color, actual.Color) 62 assert.Equal(t, expected.Description, actual.Description) 63} 64 65func assertLabelsEqual(t *testing.T, expected, actual []*base.Label) { 66 if assert.Len(t, actual, len(expected)) { 67 for i := range expected { 68 assertLabelEqual(t, expected[i], actual[i]) 69 } 70 } 71} 72 73func assertMilestoneEqual(t *testing.T, expected, actual *base.Milestone) { 74 assert.Equal(t, expected.Title, actual.Title) 75 assert.Equal(t, expected.Description, actual.Description) 76 assertTimePtrEqual(t, expected.Deadline, actual.Deadline) 77 assertTimeEqual(t, expected.Created, actual.Created) 78 assertTimePtrEqual(t, expected.Updated, actual.Updated) 79 assertTimePtrEqual(t, expected.Closed, actual.Closed) 80 assert.Equal(t, expected.State, actual.State) 81} 82 83func assertMilestonesEqual(t *testing.T, expected, actual []*base.Milestone) { 84 if assert.Len(t, actual, len(expected)) { 85 for i := range expected { 86 assertMilestoneEqual(t, expected[i], actual[i]) 87 } 88 } 89} 90 91func assertIssueEqual(t *testing.T, expected, actual *base.Issue) { 92 assert.Equal(t, expected.Number, actual.Number) 93 assert.Equal(t, expected.PosterID, actual.PosterID) 94 assert.Equal(t, expected.PosterName, actual.PosterName) 95 assert.Equal(t, expected.PosterEmail, actual.PosterEmail) 96 assert.Equal(t, expected.Title, actual.Title) 97 assert.Equal(t, expected.Content, actual.Content) 98 assert.Equal(t, expected.Ref, actual.Ref) 99 assert.Equal(t, expected.Milestone, actual.Milestone) 100 assert.Equal(t, expected.State, actual.State) 101 assert.Equal(t, expected.IsLocked, actual.IsLocked) 102 assertTimeEqual(t, expected.Created, actual.Created) 103 assertTimeEqual(t, expected.Updated, actual.Updated) 104 assertTimePtrEqual(t, expected.Closed, actual.Closed) 105 assertLabelsEqual(t, expected.Labels, actual.Labels) 106 assertReactionsEqual(t, expected.Reactions, actual.Reactions) 107 assert.ElementsMatch(t, expected.Assignees, actual.Assignees) 108} 109 110func assertIssuesEqual(t *testing.T, expected, actual []*base.Issue) { 111 if assert.Len(t, actual, len(expected)) { 112 for i := range expected { 113 assertIssueEqual(t, expected[i], actual[i]) 114 } 115 } 116} 117 118func assertPullRequestEqual(t *testing.T, expected, actual *base.PullRequest) { 119 assert.Equal(t, expected.Number, actual.Number) 120 assert.Equal(t, expected.Title, actual.Title) 121 assert.Equal(t, expected.PosterID, actual.PosterID) 122 assert.Equal(t, expected.PosterName, actual.PosterName) 123 assert.Equal(t, expected.PosterEmail, actual.PosterEmail) 124 assert.Equal(t, expected.Content, actual.Content) 125 assert.Equal(t, expected.Milestone, actual.Milestone) 126 assert.Equal(t, expected.State, actual.State) 127 assertTimeEqual(t, expected.Created, actual.Created) 128 assertTimeEqual(t, expected.Updated, actual.Updated) 129 assertTimePtrEqual(t, expected.Closed, actual.Closed) 130 assertLabelsEqual(t, expected.Labels, actual.Labels) 131 assert.Equal(t, expected.PatchURL, actual.PatchURL) 132 assert.Equal(t, expected.Merged, actual.Merged) 133 assertTimePtrEqual(t, expected.MergedTime, actual.MergedTime) 134 assert.Equal(t, expected.MergeCommitSHA, actual.MergeCommitSHA) 135 assertPullRequestBranchEqual(t, expected.Head, actual.Head) 136 assertPullRequestBranchEqual(t, expected.Base, actual.Base) 137 assert.ElementsMatch(t, expected.Assignees, actual.Assignees) 138 assert.Equal(t, expected.IsLocked, actual.IsLocked) 139 assertReactionsEqual(t, expected.Reactions, actual.Reactions) 140} 141 142func assertPullRequestsEqual(t *testing.T, expected, actual []*base.PullRequest) { 143 if assert.Len(t, actual, len(expected)) { 144 for i := range expected { 145 assertPullRequestEqual(t, expected[i], actual[i]) 146 } 147 } 148} 149 150func assertPullRequestBranchEqual(t *testing.T, expected, actual base.PullRequestBranch) { 151 assert.Equal(t, expected.CloneURL, actual.CloneURL) 152 assert.Equal(t, expected.Ref, actual.Ref) 153 assert.Equal(t, expected.SHA, actual.SHA) 154 assert.Equal(t, expected.RepoName, actual.RepoName) 155 assert.Equal(t, expected.OwnerName, actual.OwnerName) 156} 157 158func assertReactionEqual(t *testing.T, expected, actual *base.Reaction) { 159 assert.Equal(t, expected.UserID, actual.UserID) 160 assert.Equal(t, expected.UserName, actual.UserName) 161 assert.Equal(t, expected.Content, actual.Content) 162} 163 164func assertReactionsEqual(t *testing.T, expected, actual []*base.Reaction) { 165 if assert.Len(t, actual, len(expected)) { 166 for i := range expected { 167 assertReactionEqual(t, expected[i], actual[i]) 168 } 169 } 170} 171 172func assertReleaseAssetEqual(t *testing.T, expected, actual *base.ReleaseAsset) { 173 assert.Equal(t, expected.ID, actual.ID) 174 assert.Equal(t, expected.Name, actual.Name) 175 assert.Equal(t, expected.ContentType, actual.ContentType) 176 assert.Equal(t, expected.Size, actual.Size) 177 assert.Equal(t, expected.DownloadCount, actual.DownloadCount) 178 assertTimeEqual(t, expected.Created, actual.Created) 179 assertTimeEqual(t, expected.Updated, actual.Updated) 180 assert.Equal(t, expected.DownloadURL, actual.DownloadURL) 181} 182 183func assertReleaseAssetsEqual(t *testing.T, expected, actual []*base.ReleaseAsset) { 184 if assert.Len(t, actual, len(expected)) { 185 for i := range expected { 186 assertReleaseAssetEqual(t, expected[i], actual[i]) 187 } 188 } 189} 190 191func assertReleaseEqual(t *testing.T, expected, actual *base.Release) { 192 assert.Equal(t, expected.TagName, actual.TagName) 193 assert.Equal(t, expected.TargetCommitish, actual.TargetCommitish) 194 assert.Equal(t, expected.Name, actual.Name) 195 assert.Equal(t, expected.Body, actual.Body) 196 assert.Equal(t, expected.Draft, actual.Draft) 197 assert.Equal(t, expected.Prerelease, actual.Prerelease) 198 assert.Equal(t, expected.PublisherID, actual.PublisherID) 199 assert.Equal(t, expected.PublisherName, actual.PublisherName) 200 assert.Equal(t, expected.PublisherEmail, actual.PublisherEmail) 201 assertReleaseAssetsEqual(t, expected.Assets, actual.Assets) 202 assertTimeEqual(t, expected.Created, actual.Created) 203 assertTimeEqual(t, expected.Published, actual.Published) 204} 205 206func assertReleasesEqual(t *testing.T, expected, actual []*base.Release) { 207 if assert.Len(t, actual, len(expected)) { 208 for i := range expected { 209 assertReleaseEqual(t, expected[i], actual[i]) 210 } 211 } 212} 213 214func assertRepositoryEqual(t *testing.T, expected, actual *base.Repository) { 215 assert.Equal(t, expected.Name, actual.Name) 216 assert.Equal(t, expected.Owner, actual.Owner) 217 assert.Equal(t, expected.IsPrivate, actual.IsPrivate) 218 assert.Equal(t, expected.IsMirror, actual.IsMirror) 219 assert.Equal(t, expected.Description, actual.Description) 220 assert.Equal(t, expected.CloneURL, actual.CloneURL) 221 assert.Equal(t, expected.OriginalURL, actual.OriginalURL) 222 assert.Equal(t, expected.DefaultBranch, actual.DefaultBranch) 223} 224 225func assertReviewEqual(t *testing.T, expected, actual *base.Review) { 226 assert.Equal(t, expected.ID, actual.ID, "ID") 227 assert.Equal(t, expected.IssueIndex, actual.IssueIndex, "IsssueIndex") 228 assert.Equal(t, expected.ReviewerID, actual.ReviewerID, "ReviewerID") 229 assert.Equal(t, expected.ReviewerName, actual.ReviewerName, "ReviewerName") 230 assert.Equal(t, expected.Official, actual.Official, "Official") 231 assert.Equal(t, expected.CommitID, actual.CommitID, "CommitID") 232 assert.Equal(t, expected.Content, actual.Content, "Content") 233 assert.WithinDuration(t, expected.CreatedAt, actual.CreatedAt, 10*time.Second) 234 assert.Equal(t, expected.State, actual.State, "State") 235 assertReviewCommentsEqual(t, expected.Comments, actual.Comments) 236} 237 238func assertReviewsEqual(t *testing.T, expected, actual []*base.Review) { 239 if assert.Len(t, actual, len(expected)) { 240 for i := range expected { 241 assertReviewEqual(t, expected[i], actual[i]) 242 } 243 } 244} 245 246func assertReviewCommentEqual(t *testing.T, expected, actual *base.ReviewComment) { 247 assert.Equal(t, expected.ID, actual.ID) 248 assert.Equal(t, expected.InReplyTo, actual.InReplyTo) 249 assert.Equal(t, expected.Content, actual.Content) 250 assert.Equal(t, expected.TreePath, actual.TreePath) 251 assert.Equal(t, expected.DiffHunk, actual.DiffHunk) 252 assert.Equal(t, expected.Position, actual.Position) 253 assert.Equal(t, expected.Line, actual.Line) 254 assert.Equal(t, expected.CommitID, actual.CommitID) 255 assert.Equal(t, expected.PosterID, actual.PosterID) 256 assertReactionsEqual(t, expected.Reactions, actual.Reactions) 257 assertTimeEqual(t, expected.CreatedAt, actual.CreatedAt) 258 assertTimeEqual(t, expected.UpdatedAt, actual.UpdatedAt) 259} 260 261func assertReviewCommentsEqual(t *testing.T, expected, actual []*base.ReviewComment) { 262 if assert.Len(t, actual, len(expected)) { 263 for i := range expected { 264 assertReviewCommentEqual(t, expected[i], actual[i]) 265 } 266 } 267} 268