github.com/wrgl/wrgl@v0.14.0/pkg/ref/helpers/testing.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright © 2022 Wrangle Ltd 3 4 package refhelpers 5 6 import ( 7 "bytes" 8 "io" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 "github.com/wrgl/wrgl/pkg/encoding/objline" 15 "github.com/wrgl/wrgl/pkg/objects" 16 "github.com/wrgl/wrgl/pkg/ref" 17 "github.com/wrgl/wrgl/pkg/testutils" 18 ) 19 20 var tg = testutils.CreateTimeGen() 21 22 func SaveTestCommit(t *testing.T, db objects.Store, parents [][]byte) (sum []byte, commit *objects.Commit) { 23 t.Helper() 24 commit = &objects.Commit{ 25 Table: testutils.SecureRandomBytes(16), 26 AuthorName: "John Doe", 27 AuthorEmail: "john@doe.com", 28 Time: tg(), 29 Message: testutils.BrokenRandomAlphaNumericString(40), 30 Parents: parents, 31 } 32 buf := bytes.NewBuffer(nil) 33 _, err := commit.WriteTo(buf) 34 require.NoError(t, err) 35 sum, err = objects.SaveCommit(db, buf.Bytes()) 36 require.NoError(t, err) 37 commit.Sum = sum 38 return sum, commit 39 } 40 41 func AssertLatestReflogEqual(t *testing.T, s ref.Store, name string, rl *ref.Reflog) { 42 t.Helper() 43 r, err := s.LogReader(name) 44 require.NoError(t, err) 45 defer r.Close() 46 obj, err := r.Read() 47 require.NoError(t, err) 48 AssertReflogEqual(t, rl, obj) 49 } 50 51 func RandomReflog() *ref.Reflog { 52 return &ref.Reflog{ 53 OldOID: testutils.SecureRandomBytes(16), 54 NewOID: testutils.SecureRandomBytes(16), 55 AuthorName: testutils.BrokenRandomLowerAlphaString(10), 56 AuthorEmail: testutils.BrokenRandomLowerAlphaString(10), 57 Time: time.Now(), 58 Action: testutils.BrokenRandomLowerAlphaString(5), 59 Message: testutils.BrokenRandomLowerAlphaString(10), 60 } 61 } 62 63 func AssertReflogEqual(t *testing.T, a, b *ref.Reflog) { 64 t.Helper() 65 assert.Equal(t, a.OldOID, b.OldOID, "OldOID not equal") 66 assert.Equal(t, a.NewOID, b.NewOID, "NewOID not equal") 67 assert.Equal(t, a.AuthorName, b.AuthorName, "AuthorName not equal") 68 assert.Equal(t, a.AuthorEmail, b.AuthorEmail, "AuthorEmail not equal") 69 assert.Equal(t, a.Action, b.Action, "Action not equal") 70 assert.Equal(t, a.Message, b.Message, "Message not equal") 71 assert.Equal(t, a.Txid, b.Txid, "Txid not equal") 72 if !a.Time.IsZero() { 73 assert.Equal(t, objline.EncodeTime(a.Time), objline.EncodeTime(b.Time), "Time not equal") 74 } 75 } 76 77 func AssertReflogReaderContains(t *testing.T, rs ref.Store, name string, logs ...*ref.Reflog) { 78 t.Helper() 79 reader, err := rs.LogReader(name) 80 require.NoError(t, err) 81 defer reader.Close() 82 for _, l := range logs { 83 v, err := reader.Read() 84 require.NoError(t, err) 85 AssertReflogEqual(t, l, v) 86 } 87 _, err = reader.Read() 88 assert.Equal(t, io.EOF, err) 89 } 90 91 func AssertTransactionEqual(t *testing.T, a, b *ref.Transaction) { 92 t.Helper() 93 require.Equal(t, a.ID, b.ID, "id not equal") 94 require.Equal(t, a.Status, b.Status, "status not equal") 95 testutils.AssertTimeEqual(t, a.Begin, b.Begin, "begin not equal") 96 testutils.AssertTimeEqual(t, a.End, b.End, "end not equal") 97 } 98 99 func AssertTransactionSliceEqual(t *testing.T, a, b []*ref.Transaction) { 100 t.Helper() 101 require.Len(t, a, len(b)) 102 for i, v := range a { 103 AssertTransactionEqual(t, v, b[i]) 104 } 105 }