code.gitea.io/gitea@v1.19.3/modules/repository/commits_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repository 5 6 import ( 7 "crypto/md5" 8 "fmt" 9 "testing" 10 "time" 11 12 "code.gitea.io/gitea/models/db" 13 repo_model "code.gitea.io/gitea/models/repo" 14 system_model "code.gitea.io/gitea/models/system" 15 "code.gitea.io/gitea/models/unittest" 16 "code.gitea.io/gitea/modules/git" 17 "code.gitea.io/gitea/modules/setting" 18 19 "github.com/stretchr/testify/assert" 20 ) 21 22 func TestPushCommits_ToAPIPayloadCommits(t *testing.T) { 23 assert.NoError(t, unittest.PrepareTestDatabase()) 24 25 pushCommits := NewPushCommits() 26 pushCommits.Commits = []*PushCommit{ 27 { 28 Sha1: "69554a6", 29 CommitterEmail: "user2@example.com", 30 CommitterName: "User2", 31 AuthorEmail: "user2@example.com", 32 AuthorName: "User2", 33 Message: "not signed commit", 34 }, 35 { 36 Sha1: "27566bd", 37 CommitterEmail: "user2@example.com", 38 CommitterName: "User2", 39 AuthorEmail: "user2@example.com", 40 AuthorName: "User2", 41 Message: "good signed commit (with not yet validated email)", 42 }, 43 { 44 Sha1: "5099b81", 45 CommitterEmail: "user2@example.com", 46 CommitterName: "User2", 47 AuthorEmail: "user2@example.com", 48 AuthorName: "User2", 49 Message: "good signed commit", 50 }, 51 } 52 pushCommits.HeadCommit = &PushCommit{Sha1: "69554a6"} 53 54 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 16}) 55 payloadCommits, headCommit, err := pushCommits.ToAPIPayloadCommits(git.DefaultContext, repo.RepoPath(), "/user2/repo16") 56 assert.NoError(t, err) 57 assert.Len(t, payloadCommits, 3) 58 assert.NotNil(t, headCommit) 59 60 assert.Equal(t, "69554a6", payloadCommits[0].ID) 61 assert.Equal(t, "not signed commit", payloadCommits[0].Message) 62 assert.Equal(t, "/user2/repo16/commit/69554a6", payloadCommits[0].URL) 63 assert.Equal(t, "User2", payloadCommits[0].Committer.Name) 64 assert.Equal(t, "user2", payloadCommits[0].Committer.UserName) 65 assert.Equal(t, "User2", payloadCommits[0].Author.Name) 66 assert.Equal(t, "user2", payloadCommits[0].Author.UserName) 67 assert.EqualValues(t, []string{}, payloadCommits[0].Added) 68 assert.EqualValues(t, []string{}, payloadCommits[0].Removed) 69 assert.EqualValues(t, []string{"readme.md"}, payloadCommits[0].Modified) 70 71 assert.Equal(t, "27566bd", payloadCommits[1].ID) 72 assert.Equal(t, "good signed commit (with not yet validated email)", payloadCommits[1].Message) 73 assert.Equal(t, "/user2/repo16/commit/27566bd", payloadCommits[1].URL) 74 assert.Equal(t, "User2", payloadCommits[1].Committer.Name) 75 assert.Equal(t, "user2", payloadCommits[1].Committer.UserName) 76 assert.Equal(t, "User2", payloadCommits[1].Author.Name) 77 assert.Equal(t, "user2", payloadCommits[1].Author.UserName) 78 assert.EqualValues(t, []string{}, payloadCommits[1].Added) 79 assert.EqualValues(t, []string{}, payloadCommits[1].Removed) 80 assert.EqualValues(t, []string{"readme.md"}, payloadCommits[1].Modified) 81 82 assert.Equal(t, "5099b81", payloadCommits[2].ID) 83 assert.Equal(t, "good signed commit", payloadCommits[2].Message) 84 assert.Equal(t, "/user2/repo16/commit/5099b81", payloadCommits[2].URL) 85 assert.Equal(t, "User2", payloadCommits[2].Committer.Name) 86 assert.Equal(t, "user2", payloadCommits[2].Committer.UserName) 87 assert.Equal(t, "User2", payloadCommits[2].Author.Name) 88 assert.Equal(t, "user2", payloadCommits[2].Author.UserName) 89 assert.EqualValues(t, []string{"readme.md"}, payloadCommits[2].Added) 90 assert.EqualValues(t, []string{}, payloadCommits[2].Removed) 91 assert.EqualValues(t, []string{}, payloadCommits[2].Modified) 92 93 assert.Equal(t, "69554a6", headCommit.ID) 94 assert.Equal(t, "not signed commit", headCommit.Message) 95 assert.Equal(t, "/user2/repo16/commit/69554a6", headCommit.URL) 96 assert.Equal(t, "User2", headCommit.Committer.Name) 97 assert.Equal(t, "user2", headCommit.Committer.UserName) 98 assert.Equal(t, "User2", headCommit.Author.Name) 99 assert.Equal(t, "user2", headCommit.Author.UserName) 100 assert.EqualValues(t, []string{}, headCommit.Added) 101 assert.EqualValues(t, []string{}, headCommit.Removed) 102 assert.EqualValues(t, []string{"readme.md"}, headCommit.Modified) 103 } 104 105 func enableGravatar(t *testing.T) { 106 err := system_model.SetSettingNoVersion(db.DefaultContext, system_model.KeyPictureDisableGravatar, "false") 107 assert.NoError(t, err) 108 setting.GravatarSource = "https://secure.gravatar.com/avatar" 109 err = system_model.Init(db.DefaultContext) 110 assert.NoError(t, err) 111 } 112 113 func TestPushCommits_AvatarLink(t *testing.T) { 114 assert.NoError(t, unittest.PrepareTestDatabase()) 115 116 pushCommits := NewPushCommits() 117 pushCommits.Commits = []*PushCommit{ 118 { 119 Sha1: "abcdef1", 120 CommitterEmail: "user2@example.com", 121 CommitterName: "User Two", 122 AuthorEmail: "user4@example.com", 123 AuthorName: "User Four", 124 Message: "message1", 125 }, 126 { 127 Sha1: "abcdef2", 128 CommitterEmail: "user2@example.com", 129 CommitterName: "User Two", 130 AuthorEmail: "user2@example.com", 131 AuthorName: "User Two", 132 Message: "message2", 133 }, 134 } 135 136 enableGravatar(t) 137 138 assert.Equal(t, 139 "https://secure.gravatar.com/avatar/ab53a2911ddf9b4817ac01ddcd3d975f?d=identicon&s=84", 140 pushCommits.AvatarLink(db.DefaultContext, "user2@example.com")) 141 142 assert.Equal(t, 143 "https://secure.gravatar.com/avatar/"+ 144 fmt.Sprintf("%x", md5.Sum([]byte("nonexistent@example.com")))+ 145 "?d=identicon&s=84", 146 pushCommits.AvatarLink(db.DefaultContext, "nonexistent@example.com")) 147 } 148 149 func TestCommitToPushCommit(t *testing.T) { 150 now := time.Now() 151 sig := &git.Signature{ 152 Email: "example@example.com", 153 Name: "John Doe", 154 When: now, 155 } 156 const hexString = "0123456789abcdef0123456789abcdef01234567" 157 sha1, err := git.NewIDFromString(hexString) 158 assert.NoError(t, err) 159 pushCommit := CommitToPushCommit(&git.Commit{ 160 ID: sha1, 161 Author: sig, 162 Committer: sig, 163 CommitMessage: "Commit Message", 164 }) 165 assert.Equal(t, hexString, pushCommit.Sha1) 166 assert.Equal(t, "Commit Message", pushCommit.Message) 167 assert.Equal(t, "example@example.com", pushCommit.AuthorEmail) 168 assert.Equal(t, "John Doe", pushCommit.AuthorName) 169 assert.Equal(t, "example@example.com", pushCommit.CommitterEmail) 170 assert.Equal(t, "John Doe", pushCommit.CommitterName) 171 assert.Equal(t, now, pushCommit.Timestamp) 172 } 173 174 func TestListToPushCommits(t *testing.T) { 175 now := time.Now() 176 sig := &git.Signature{ 177 Email: "example@example.com", 178 Name: "John Doe", 179 When: now, 180 } 181 182 const hexString1 = "0123456789abcdef0123456789abcdef01234567" 183 hash1, err := git.NewIDFromString(hexString1) 184 assert.NoError(t, err) 185 const hexString2 = "fedcba9876543210fedcba9876543210fedcba98" 186 hash2, err := git.NewIDFromString(hexString2) 187 assert.NoError(t, err) 188 189 l := []*git.Commit{ 190 { 191 ID: hash1, 192 Author: sig, 193 Committer: sig, 194 CommitMessage: "Message1", 195 }, 196 { 197 ID: hash2, 198 Author: sig, 199 Committer: sig, 200 CommitMessage: "Message2", 201 }, 202 } 203 204 pushCommits := GitToPushCommits(l) 205 if assert.Len(t, pushCommits.Commits, 2) { 206 assert.Equal(t, "Message1", pushCommits.Commits[0].Message) 207 assert.Equal(t, hexString1, pushCommits.Commits[0].Sha1) 208 assert.Equal(t, "example@example.com", pushCommits.Commits[0].AuthorEmail) 209 assert.Equal(t, now, pushCommits.Commits[0].Timestamp) 210 211 assert.Equal(t, "Message2", pushCommits.Commits[1].Message) 212 assert.Equal(t, hexString2, pushCommits.Commits[1].Sha1) 213 assert.Equal(t, "example@example.com", pushCommits.Commits[1].AuthorEmail) 214 assert.Equal(t, now, pushCommits.Commits[1].Timestamp) 215 } 216 } 217 218 // TODO TestPushUpdate