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