bug: don't serialize multiple time the author, only once in OperationPack

Michael Muré created

Change summary

bug/op_add_comment_test.go  | 10 ++++------
bug/op_create_test.go       |  3 +--
bug/op_edit_comment_test.go |  3 +--
bug/op_label_change_test.go |  3 +--
bug/op_noop_test.go         |  3 +--
bug/op_set_metadata_test.go |  3 +--
bug/op_set_status_test.go   |  3 +--
bug/op_set_title_test.go    |  3 +--
bug/operation.go            | 10 +---------
9 files changed, 12 insertions(+), 29 deletions(-)

Detailed changes

bug/op_add_comment_test.go 🔗

@@ -5,7 +5,6 @@ import (
 	"testing"
 	"time"
 
-	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 
 	"github.com/MichaelMure/git-bug/identity"
@@ -22,18 +21,17 @@ func TestAddCommentSerialize(t *testing.T) {
 	before := NewAddCommentOp(rene, unix, "message", nil)
 
 	data, err := json.Marshal(before)
-	assert.NoError(t, err)
+	require.NoError(t, err)
 
 	var after AddCommentOperation
 	err = json.Unmarshal(data, &after)
-	assert.NoError(t, err)
+	require.NoError(t, err)
 
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	assert.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
-	assert.Equal(t, before, &after)
+	require.Equal(t, before, &after)
 }

bug/op_create_test.go 🔗

@@ -76,8 +76,7 @@ func TestCreateSerialize(t *testing.T) {
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	require.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
 	require.Equal(t, before, &after)

bug/op_edit_comment_test.go 🔗

@@ -93,8 +93,7 @@ func TestEditCommentSerialize(t *testing.T) {
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	require.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
 	require.Equal(t, before, &after)

bug/op_label_change_test.go 🔗

@@ -30,8 +30,7 @@ func TestLabelChangeSerialize(t *testing.T) {
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	require.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
 	require.Equal(t, before, &after)

bug/op_noop_test.go 🔗

@@ -32,8 +32,7 @@ func TestNoopSerialize(t *testing.T) {
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	assert.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
 	assert.Equal(t, before, &after)

bug/op_set_metadata_test.go 🔗

@@ -119,8 +119,7 @@ func TestSetMetadataSerialize(t *testing.T) {
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	require.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
 	require.Equal(t, before, &after)

bug/op_set_status_test.go 🔗

@@ -30,8 +30,7 @@ func TestSetStatusSerialize(t *testing.T) {
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	require.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
 	require.Equal(t, before, &after)

bug/op_set_title_test.go 🔗

@@ -30,8 +30,7 @@ func TestSetTitleSerialize(t *testing.T) {
 	// enforce creating the ID
 	before.Id()
 
-	// Replace the identity stub with the real thing
-	require.Equal(t, rene.Id(), after.Author().Id())
+	// Replace the identity as it's not serialized
 	after.Author_ = rene
 
 	require.Equal(t, before, &after)

bug/operation.go 🔗

@@ -135,7 +135,7 @@ func operationUnmarshaller(author identity.Interface, raw json.RawMessage, resol
 // OpBase implement the common code for all operations
 type OpBase struct {
 	OperationType OperationType      `json:"type"`
-	Author_       identity.Interface `json:"author"`
+	Author_       identity.Interface `json:"-"` // not serialized
 	// TODO: part of the data model upgrade, this should eventually be a timestamp + lamport
 	UnixTime int64             `json:"timestamp"`
 	Metadata map[string]string `json:"metadata,omitempty"`
@@ -178,7 +178,6 @@ func (base *OpBase) UnmarshalJSON(data []byte) error {
 
 	aux := struct {
 		OperationType OperationType     `json:"type"`
-		Author        json.RawMessage   `json:"author"`
 		UnixTime      int64             `json:"timestamp"`
 		Metadata      map[string]string `json:"metadata,omitempty"`
 		Nonce         []byte            `json:"nonce"`
@@ -188,14 +187,7 @@ func (base *OpBase) UnmarshalJSON(data []byte) error {
 		return err
 	}
 
-	// delegate the decoding of the identity
-	author, err := identity.UnmarshalJSON(aux.Author)
-	if err != nil {
-		return err
-	}
-
 	base.OperationType = aux.OperationType
-	base.Author_ = author
 	base.UnixTime = aux.UnixTime
 	base.Metadata = aux.Metadata
 	base.Nonce = aux.Nonce