Select Git revision
extension.go
bson_test.go 5.81 KiB
package id
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.mongodb.org/mongo-driver/bson"
)
func TestID_MarshalBSON(t *testing.T) {
tests := []struct {
name string
id ID
want string
}{
{
name: "OrganizationID",
id: ID{Descriptor: &OrganizationID{OrganizationID: "1"}},
want: `"/orgs/1"`,
},
{
name: "UserID",
id: ID{Descriptor: &UserID{UserID: "1"}},
want: `"/users/1"`,
},
{
name: "ServiceID",
id: ID{Descriptor: &ServiceID{ServiceID: "1"}},
want: `"/services/1"`,
},
{
name: "SpaceID",
id: ID{Descriptor: &SpaceID{SpaceID: "1"}},
want: `"/spaces/1"`,
},
{
name: "EnvironmentID",
id: ID{Descriptor: &EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}},
want: `"/spaces/1/envs/1"`,
},
{
name: "ClientID",
id: ID{Descriptor: &ClientID{ClientID: "1", SpaceID: SpaceID{SpaceID: "1"}}},
want: `"/spaces/1/clients/1"`,
},
{
name: "RoleID",
id: ID{Descriptor: &RoleID{RoleID: "1", SpaceID: SpaceID{SpaceID: "1"}}},
want: `"/spaces/1/roles/1"`,
},
{
name: "CollectionID",
id: ID{Descriptor: &CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}},
want: `"/spaces/1/envs/1/cols/1"`,
},
{
name: "SchemaID",
id: ID{Descriptor: &SchemaID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}},
want: `"/spaces/1/envs/1/schema/1"`,
},
{
name: "ItemID",
id: ID{Descriptor: &ItemID{ItemID: "1", CollectionID: CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}}},
want: `"/spaces/1/envs/1/cols/1/items/1"`,
},
{
name: "RevisionID",
id: ID{Descriptor: &RevisionID{RevisionID: "1", ItemID: ItemID{ItemID: "1", CollectionID: CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}}}},
want: `"/spaces/1/envs/1/cols/1/items/1/revs/1"`,
},
{
name: "FieldID",
id: ID{Descriptor: &FieldID{FieldName: "1", ItemID: ItemID{ItemID: "1", CollectionID: CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}}}},
want: `"/spaces/1/envs/1/cols/1/items/1/fields/1"`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := bson.Marshal(tt.id)
require.NoError(t, err)
assert.Equal(t, tt.want, string(got))
})
}
}
func TestID_UnmarshalBSON(t *testing.T) {
tests := []struct {
id string
want ID
b []byte
}{
{
id: "OrganizationID",
want: ID{Descriptor: &OrganizationID{OrganizationID: "1"}},
b: []byte(`"/orgs/1"`),
},
{
id: "UserID",
want: ID{Descriptor: &UserID{UserID: "1"}},
b: []byte(`"/users/1"`),
},
{
id: "ServiceID",
want: ID{Descriptor: &ServiceID{ServiceID: "1"}},
b: []byte(`"/services/1"`),
},
{
id: "SpaceID",
want: ID{Descriptor: &SpaceID{SpaceID: "1"}},
b: []byte(`"/spaces/1"`),
},
{
id: "EnvironmentID",
want: ID{Descriptor: &EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}},
b: []byte(`"/spaces/1/envs/1"`),
},
{
id: "ClientID",
want: ID{Descriptor: &ClientID{ClientID: "1", SpaceID: SpaceID{SpaceID: "1"}}},
b: []byte(`"/spaces/1/clients/1"`),
},
{
id: "RoleID",
want: ID{Descriptor: &RoleID{RoleID: "1", SpaceID: SpaceID{SpaceID: "1"}}},
b: []byte(`"/spaces/1/roles/1"`),
},
{
id: "CollectionID",
want: ID{Descriptor: &CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}},
b: []byte(`"/spaces/1/envs/1/cols/1"`),
},
{
id: "SchemaID",
want: ID{Descriptor: &SchemaID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}},
b: []byte(`"/spaces/1/envs/1/schema/1"`),
},
{
id: "ItemID",
want: ID{Descriptor: &ItemID{ItemID: "1", CollectionID: CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}}},
b: []byte(`"/spaces/1/envs/1/cols/1/items/1"`),
},
{
id: "RevisionID",
want: ID{Descriptor: &RevisionID{RevisionID: "1", ItemID: ItemID{ItemID: "1", CollectionID: CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}}}},
b: []byte(`"/spaces/1/envs/1/cols/1/items/1/revs/1"`),
},
{
id: "FieldID",
want: ID{Descriptor: &FieldID{FieldName: "1", ItemID: ItemID{ItemID: "1", CollectionID: CollectionID{CollectionID: "1", EnvironmentID: EnvironmentID{EnvironmentID: "1", SpaceID: SpaceID{SpaceID: "1"}}}}}},
b: []byte(`"/spaces/1/envs/1/cols/1/items/1/fields/1"`),
},
}
for _, tt := range tests {
t.Run(tt.id, func(t *testing.T) {
var i ID
//require.NoError(t, i.UnmarshalBSON(tt.b))
assert.Equal(t, tt.want, i)
})
}
}
func TestID_BSON(t *testing.T) {
type data struct {
ID *ID
Text string
Number int
}
test1 := &data{
ID: &ID{Descriptor: &SpaceID{SpaceID: Space}},
Text: "text",
Number: 1,
}
b, err := bson.Marshal(test1)
require.NoError(t, err)
str := string(b)
_ = str
test2 := new(data)
err = bson.Unmarshal(b, &test2)
require.NoError(t, err)
assert.Equal(t, test1, test2, "после Unmarshal объект должен совпадать с исходным")
test1 = &data{
ID: &ID{Descriptor: &OrganizationID{OrganizationID: Organization}},
Text: "text2",
Number: 2,
}
b, err = bson.Marshal(test1)
require.NoError(t, err)
test2 = new(data)
err = bson.Unmarshal(b, &test2)
require.NoError(t, err)
assert.Equal(t, test1, test2, "после Unmarshal объект должен совпадать с исходным")
}