entity_test.go

  1package entity
  2
  3import (
  4	"encoding/json"
  5	"fmt"
  6	"testing"
  7
  8	"github.com/stretchr/testify/require"
  9
 10	"github.com/MichaelMure/git-bug/repository"
 11)
 12
 13// func TestFoo(t *testing.T) {
 14// 	repo, err := repository.OpenGoGitRepo("~/dev/git-bug", nil)
 15// 	require.NoError(t, err)
 16//
 17// 	b, err := ReadBug(repo, Id("8b22e548c93a6ed23c31fd4e337c6286c3d1e5c9cae5537bc8e5842e11bd1099"))
 18// 	require.NoError(t, err)
 19//
 20// 	fmt.Println(b)
 21// }
 22
 23type op1 struct {
 24	OperationType int    `json:"type"`
 25	Field1        string `json:"field_1"`
 26}
 27
 28func newOp1(field1 string) *op1 {
 29	return &op1{OperationType: 1, Field1: field1}
 30}
 31
 32func (o op1) Id() Id {
 33	data, _ := json.Marshal(o)
 34	return DeriveId(data)
 35}
 36
 37func (o op1) Validate() error { return nil }
 38
 39type op2 struct {
 40	OperationType int    `json:"type"`
 41	Field2        string `json:"field_2"`
 42}
 43
 44func newOp2(field2 string) *op2 {
 45	return &op2{OperationType: 2, Field2: field2}
 46}
 47
 48func (o op2) Id() Id {
 49	data, _ := json.Marshal(o)
 50	return DeriveId(data)
 51}
 52
 53func (o op2) Validate() error { return nil }
 54
 55var def = Definition{
 56	typename:             "foo",
 57	namespace:            "foos",
 58	operationUnmarshaler: unmarshaller,
 59	formatVersion:        1,
 60}
 61
 62func unmarshaller(raw json.RawMessage) (Operation, error) {
 63	var t struct {
 64		OperationType int `json:"type"`
 65	}
 66
 67	if err := json.Unmarshal(raw, &t); err != nil {
 68		return nil, err
 69	}
 70
 71	switch t.OperationType {
 72	case 1:
 73		op := &op1{}
 74		err := json.Unmarshal(raw, &op)
 75		return op, err
 76	case 2:
 77		op := &op2{}
 78		err := json.Unmarshal(raw, &op)
 79		return op, err
 80	default:
 81		return nil, fmt.Errorf("unknown operation type %v", t.OperationType)
 82	}
 83}
 84
 85func TestWriteRead(t *testing.T) {
 86	repo := repository.NewMockRepo()
 87
 88	entity := New(def)
 89	require.False(t, entity.NeedCommit())
 90
 91	entity.Append(newOp1("foo"))
 92	entity.Append(newOp2("bar"))
 93
 94	require.True(t, entity.NeedCommit())
 95	require.NoError(t, entity.CommitAdNeeded(repo))
 96	require.False(t, entity.NeedCommit())
 97
 98	entity.Append(newOp2("foobar"))
 99	require.True(t, entity.NeedCommit())
100	require.NoError(t, entity.CommitAdNeeded(repo))
101	require.False(t, entity.NeedCommit())
102
103	read, err := Read(def, repo, entity.Id())
104	require.NoError(t, err)
105
106	fmt.Println(*read)
107}