Select Git revision
clients.pb.go
object_id_test.go 6.48 KiB
package id
import (
"testing"
"git.perx.ru/perxis/perxis-go/pkg/items"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_ParseID(t *testing.T) {
tests := []struct {
name string
id any
result *ObjectId
wantError bool
}{
{
name: "SpaceId",
id: "/spaces/<space_id>",
result: MustObjectId("/spaces/<space_id>"),
},
{
name: "ServiceID",
id: "/services/<service_id>",
result: MustObjectId("/services/<service_id>"),
},
{
name: "UserID",
id: "/users/<user_id>",
result: MustObjectId("/users/<user_id>"),
},
{
name: "OrganizationID",
id: "/orgs/<org_id>",
result: MustObjectId("/orgs/<org_id>"),
},
{
name: "ClientID",
id: "/spaces/<space_id>/clients/<client_id>",
result: MustObjectId("/spaces/<space_id>/clients/<client_id>"),
},
{
name: "RoleID",
id: "/spaces/<space_id>/roles/<role_id>",
result: MustObjectId("/spaces/<space_id>/roles/<role_id>"),
},
{
name: "LocaleID",
id: "/spaces/<space_id>/locales/<locale_id>",
result: MustObjectId("/spaces/<space_id>/locales/<locale_id>"),
},
{
name: "EnvironmentID",
id: "/spaces/<space_id>/envs/<env_id>",
result: MustObjectId("/spaces/<space_id>/envs/<env_id>"),
},
{
name: "CollectionId",
id: "/spaces/<space_id>/envs/<env_id>/cols/<collection_id>",
result: MustObjectId("/spaces/<space_id>/envs/<env_id>/cols/<collection_id>"),
},
{
name: "SchemaID",
id: "/spaces/<space_id>/envs/<env_id>/schema/<collection_id>",
result: MustObjectId("/spaces/<space_id>/envs/<env_id>/schema/<collection_id>"),
},
{
name: "ItemId",
id: "/spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>", result: MustObjectId("/spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>"),
},
{
name: "RevisionID",
id: "/spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/revs/<rev_id>",
result: MustObjectId("/spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/revs/<rev_id>"),
},
{
name: "FieldId",
id: "/spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/fields/<field_name>",
result: MustObjectId("/spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/fields/<field_name>"),
},
{
name: "With error #1: no backslash in the beginning of id",
id: "spaces/<space_id>",
result: nil,
wantError: true,
},
{
name: "With error #2: backslash in the end of id",
id: "/spaces/<space_id>/",
result: nil,
wantError: true,
},
{
name: "With error #3: typo in 'spaces'",
id: "/space/<space_id>",
result: nil,
wantError: true,
},
{
name: "With error #4: no space_id in id",
id: "/spaces",
result: nil,
wantError: true,
},
{
name: "With error #5: multiple backslashes in the end of id",
id: "/spaces/<space_id>///",
result: nil,
wantError: true,
},
{
name: "With error #6: nil value",
id: nil,
wantError: true,
},
{
name: "With error #7: nil object value",
id: (*items.Item)(nil),
wantError: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
id, err := NewObjectId(tt.id)
if tt.wantError {
require.Error(t, err)
return
}
require.NoError(t, err)
require.Equal(t, tt.result, id)
require.Equal(t, tt.id, id.String())
})
}
}
func Test_Map(t *testing.T) {
tests := []struct {
name string id *ObjectId
}{
{
name: "ServiceID",
id: &ObjectId{Descriptor: &ServiceId{ServiceID: "<service_id>"}},
},
{
name: "UserID",
id: &ObjectId{Descriptor: &UserId{UserID: "<user_id>"}},
},
{
name: "OrganizationID",
id: &ObjectId{Descriptor: &OrganizationId{OrganizationID: "<org_id>"}},
},
{
name: "SpaceId",
id: &ObjectId{Descriptor: &SpaceId{SpaceID: "<space_id>"}},
},
{
name: "ClientID",
id: &ObjectId{Descriptor: &ClientId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
ClientID: "<client_id>",
}},
},
{
name: "RoleID",
id: &ObjectId{Descriptor: &RoleId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
RoleID: "<role_id>",
}},
},
{
name: "LocaleID",
id: &ObjectId{Descriptor: &LocaleID{
SpaceId: SpaceId{SpaceID: "<space_id>"},
LocaleID: "<locale_id>",
}},
},
{
name: "EnvironmentID",
id: &ObjectId{Descriptor: &EnvironmentId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
}},
},
{
name: "CollectionId",
id: &ObjectId{Descriptor: &CollectionId{
EnvironmentId: EnvironmentId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
}},
},
{
name: "Schema ID",
id: &ObjectId{Descriptor: &SchemaId{
EnvironmentId: EnvironmentId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
}},
},
{
name: "ItemId",
id: &ObjectId{Descriptor: &ItemId{
CollectionId: CollectionId{ EnvironmentId: EnvironmentId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
},
ItemID: "<item_id>",
}},
},
{
name: "RevisionID",
id: &ObjectId{Descriptor: &RevisionId{
ItemId: ItemId{
CollectionId: CollectionId{
EnvironmentId: EnvironmentId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
},
ItemID: "<item_id>",
},
RevisionID: "<rev_id>",
}},
},
{
name: "FieldId",
id: &ObjectId{Descriptor: &FieldId{
ItemId: ItemId{
CollectionId: CollectionId{
EnvironmentId: EnvironmentId{
SpaceId: SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
},
ItemID: "<item_id>",
},
Field: "<field_name>",
}},
},
{
name: "SystemID",
id: &ObjectId{Descriptor: &SystemId{}},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
v, err := FromMap(tt.id.Map())
require.NoError(t, err)
assert.Equal(t, tt.id, v, "проверка FromMap для типа ID, должен быть равен исходному значению")
assert.Equal(t, v.Map(), tt.id.Map())
})
}
}