github.com/wrgl/wrgl@v0.14.0/pkg/objects/helpers/commit.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright © 2022 Wrangle Ltd
     3  
     4  package objhelpers
     5  
     6  import (
     7  	"sort"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/stretchr/testify/require"
    12  	"github.com/wrgl/wrgl/pkg/objects"
    13  	"github.com/wrgl/wrgl/pkg/testutils"
    14  )
    15  
    16  func RandomCommit() *objects.Commit {
    17  	return &objects.Commit{
    18  		Table:       testutils.SecureRandomBytes(16),
    19  		AuthorName:  "John Doe",
    20  		AuthorEmail: "john@doe.com",
    21  		Time:        time.Now(),
    22  		Message:     "new commit",
    23  		Parents: [][]byte{
    24  			testutils.SecureRandomBytes(16),
    25  		},
    26  	}
    27  }
    28  
    29  func AssertCommitEqual(t *testing.T, a, b *objects.Commit) {
    30  	t.Helper()
    31  	require.Equal(t, a.Table, b.Table, "table not equal")
    32  	require.Equal(t, a.AuthorName, b.AuthorName, "author name not equal")
    33  	require.Equal(t, a.AuthorEmail, b.AuthorEmail, "author email not equal")
    34  	require.Equal(t, a.Message, b.Message, "message not equal")
    35  	require.Equal(t, a.Parents, b.Parents, "parents not equal")
    36  	require.Equal(t, a.Time.Unix(), b.Time.Unix(), "time not equal")
    37  	require.Equal(t, a.Time.Format("-0700"), b.Time.Format("-0700"), "time not equal")
    38  }
    39  
    40  func AssertCommitsEqual(t *testing.T, sla, slb []*objects.Commit, ignoreOrder bool) {
    41  	t.Helper()
    42  	require.Equal(t, len(sla), len(slb), "number of commits does not match")
    43  	if ignoreOrder {
    44  		sortedCopy := func(obj []*objects.Commit) []*objects.Commit {
    45  			sl := make([]*objects.Commit, len(obj))
    46  			copy(sl, obj)
    47  			sort.Slice(sl, func(i, j int) bool {
    48  				a, b := sl[i], sl[j]
    49  				if string(a.Table) != string(b.Table) {
    50  					return string(a.Table) < string(b.Table)
    51  				}
    52  				if a.AuthorName != b.AuthorName {
    53  					return a.AuthorName < b.AuthorName
    54  				}
    55  				if a.AuthorEmail != b.AuthorEmail {
    56  					return a.AuthorEmail < b.AuthorEmail
    57  				}
    58  				if a.Message != b.Message {
    59  					return a.Message < b.Message
    60  				}
    61  				if !a.Time.Equal(b.Time) {
    62  					return a.Time.Before(b.Time)
    63  				}
    64  				if len(a.Parents) != len(b.Parents) {
    65  					return len(a.Parents) < len(b.Parents)
    66  				}
    67  				for k, p := range a.Parents {
    68  					if string(p) != string(b.Parents[k]) {
    69  						return string(p) < string(b.Parents[k])
    70  					}
    71  				}
    72  				return false
    73  			})
    74  			return sl
    75  		}
    76  		sla = sortedCopy(sla)
    77  		slb = sortedCopy(slb)
    78  	}
    79  	for i, a := range sla {
    80  		AssertCommitEqual(t, a, slb[i])
    81  	}
    82  }