code.gitea.io/gitea@v1.22.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 "strconv" 10 "testing" 11 "time" 12 13 "code.gitea.io/gitea/models/db" 14 repo_model "code.gitea.io/gitea/models/repo" 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 TestPushCommits_AvatarLink(t *testing.T) { 106 assert.NoError(t, unittest.PrepareTestDatabase()) 107 108 pushCommits := NewPushCommits() 109 pushCommits.Commits = []*PushCommit{ 110 { 111 Sha1: "abcdef1", 112 CommitterEmail: "user2@example.com", 113 CommitterName: "User Two", 114 AuthorEmail: "user4@example.com", 115 AuthorName: "User Four", 116 Message: "message1", 117 }, 118 { 119 Sha1: "abcdef2", 120 CommitterEmail: "user2@example.com", 121 CommitterName: "User Two", 122 AuthorEmail: "user2@example.com", 123 AuthorName: "User Two", 124 Message: "message2", 125 }, 126 } 127 128 setting.GravatarSource = "https://secure.gravatar.com/avatar" 129 setting.OfflineMode = true 130 131 assert.Equal(t, 132 "/avatars/avatar2?size="+strconv.Itoa(28*setting.Avatar.RenderedSizeFactor), 133 pushCommits.AvatarLink(db.DefaultContext, "user2@example.com")) 134 135 assert.Equal(t, 136 fmt.Sprintf("https://secure.gravatar.com/avatar/%x?d=identicon&s=%d", md5.Sum([]byte("nonexistent@example.com")), 28*setting.Avatar.RenderedSizeFactor), 137 pushCommits.AvatarLink(db.DefaultContext, "nonexistent@example.com")) 138 } 139 140 func TestCommitToPushCommit(t *testing.T) { 141 now := time.Now() 142 sig := &git.Signature{ 143 Email: "example@example.com", 144 Name: "John Doe", 145 When: now, 146 } 147 const hexString = "0123456789abcdef0123456789abcdef01234567" 148 sha1, err := git.NewIDFromString(hexString) 149 assert.NoError(t, err) 150 pushCommit := CommitToPushCommit(&git.Commit{ 151 ID: sha1, 152 Author: sig, 153 Committer: sig, 154 CommitMessage: "Commit Message", 155 }) 156 assert.Equal(t, hexString, pushCommit.Sha1) 157 assert.Equal(t, "Commit Message", pushCommit.Message) 158 assert.Equal(t, "example@example.com", pushCommit.AuthorEmail) 159 assert.Equal(t, "John Doe", pushCommit.AuthorName) 160 assert.Equal(t, "example@example.com", pushCommit.CommitterEmail) 161 assert.Equal(t, "John Doe", pushCommit.CommitterName) 162 assert.Equal(t, now, pushCommit.Timestamp) 163 } 164 165 func TestListToPushCommits(t *testing.T) { 166 now := time.Now() 167 sig := &git.Signature{ 168 Email: "example@example.com", 169 Name: "John Doe", 170 When: now, 171 } 172 173 const hexString1 = "0123456789abcdef0123456789abcdef01234567" 174 hash1, err := git.NewIDFromString(hexString1) 175 assert.NoError(t, err) 176 const hexString2 = "fedcba9876543210fedcba9876543210fedcba98" 177 hash2, err := git.NewIDFromString(hexString2) 178 assert.NoError(t, err) 179 180 l := []*git.Commit{ 181 { 182 ID: hash1, 183 Author: sig, 184 Committer: sig, 185 CommitMessage: "Message1", 186 }, 187 { 188 ID: hash2, 189 Author: sig, 190 Committer: sig, 191 CommitMessage: "Message2", 192 }, 193 } 194 195 pushCommits := GitToPushCommits(l) 196 if assert.Len(t, pushCommits.Commits, 2) { 197 assert.Equal(t, "Message1", pushCommits.Commits[0].Message) 198 assert.Equal(t, hexString1, pushCommits.Commits[0].Sha1) 199 assert.Equal(t, "example@example.com", pushCommits.Commits[0].AuthorEmail) 200 assert.Equal(t, now, pushCommits.Commits[0].Timestamp) 201 202 assert.Equal(t, "Message2", pushCommits.Commits[1].Message) 203 assert.Equal(t, hexString2, pushCommits.Commits[1].Sha1) 204 assert.Equal(t, "example@example.com", pushCommits.Commits[1].AuthorEmail) 205 assert.Equal(t, now, pushCommits.Commits[1].Timestamp) 206 } 207 } 208 209 // TODO TestPushUpdate