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