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 }