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  }