diff --git a/spdx/v2/common/package.go b/spdx/v2/common/package.go index b9ee2c5..45c7367 100644 --- a/spdx/v2/common/package.go +++ b/spdx/v2/common/package.go @@ -86,11 +86,11 @@ func (o *Originator) UnmarshalJSON(data []byte) error { func (o Originator) MarshalJSON() ([]byte, error) { if o.Originator == "NOASSERTION" { return marshal.JSON(o.Originator) - } else if o.Originator != "" { + } else if o.OriginatorType != "" && o.Originator != "" { return marshal.JSON(fmt.Sprintf("%s: %s", o.OriginatorType, o.Originator)) } - return []byte{}, nil + return []byte{}, fmt.Errorf("failed to marshal invalid Originator: %+v", o) } type PackageVerificationCode struct { diff --git a/spdx/v2/common/package_test.go b/spdx/v2/common/package_test.go index 7856dc3..e35e09a 100644 --- a/spdx/v2/common/package_test.go +++ b/spdx/v2/common/package_test.go @@ -45,3 +45,45 @@ func TestOriginator_UnmarshalJSON(t *testing.T) { }) } } + +func TestOriginator_MarshalJSON(t *testing.T) { + type mock struct { + *Originator + } + tt := []struct { + name string + data Originator + wantErr bool + }{ + { + name: "valid originator", + data: Originator{ + Originator: "John Doe", + OriginatorType: "Person", + }, + wantErr: false, + }, + { + name: "originator with no type", + data: Originator{ + Originator: "John Doe", + }, + wantErr: true, + }, + { + name: "invalid originator with type but no entity", + data: Originator{ + OriginatorType: "Person", + }, + wantErr: true, + }, + } + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + _, err := tc.data.MarshalJSON() + if (err != nil) != tc.wantErr { + t.Errorf("Originator.MarshalJSON() error = %v, wantErr %v", err, tc.wantErr) + } + }) + } +}