Skip to content
Snippets Groups Projects
Commit f7c69e43 authored by Alex Petraky's avatar Alex Petraky :basketball_player_tone1: Committed by Pavel Antonov
Browse files

Перенесено содержимое пакета pkg/id на уровень выше в пакет id

parent 5910977e
No related branches found
No related tags found
No related merge requests found
File moved
File moved
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())
})
}
}
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/roles" "git.perx.ru/perxis/perxis-go/pkg/roles"
"git.perx.ru/perxis/perxis-go/pkg/spaces" "git.perx.ru/perxis/perxis-go/pkg/spaces"
"git.perx.ru/perxis/perxis-go/pkg/users" "git.perx.ru/perxis/perxis-go/pkg/users"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
...@@ -886,3 +887,259 @@ func Test_LocaleId(t *testing.T) { ...@@ -886,3 +887,259 @@ func Test_LocaleId(t *testing.T) {
}) })
} }
} }
func Test_ParseID(t *testing.T) {
tests := []struct {
name string
id any
result *id.ObjectId
wantError bool
}{
{
name: "SpaceId",
id: "/spaces/<space_id>",
result: id.MustObjectId("/spaces/<space_id>"),
},
{
name: "ServiceID",
id: "/services/<service_id>",
result: id.MustObjectId("/services/<service_id>"),
},
{
name: "UserID",
id: "/users/<user_id>",
result: id.MustObjectId("/users/<user_id>"),
},
{
name: "OrganizationID",
id: "/orgs/<org_id>",
result: id.MustObjectId("/orgs/<org_id>"),
},
{
name: "ClientID",
id: "/spaces/<space_id>/clients/<client_id>",
result: id.MustObjectId("/spaces/<space_id>/clients/<client_id>"),
},
{
name: "RoleID",
id: "/spaces/<space_id>/roles/<role_id>",
result: id.MustObjectId("/spaces/<space_id>/roles/<role_id>"),
},
{
name: "LocaleID",
id: "/spaces/<space_id>/locales/<locale_id>",
result: id.MustObjectId("/spaces/<space_id>/locales/<locale_id>"),
},
{
name: "EnvironmentID",
id: "/spaces/<space_id>/envs/<env_id>",
result: id.MustObjectId("/spaces/<space_id>/envs/<env_id>"),
},
{
name: "CollectionId",
id: "/spaces/<space_id>/envs/<env_id>/cols/<collection_id>",
result: id.MustObjectId("/spaces/<space_id>/envs/<env_id>/cols/<collection_id>"),
},
{
name: "SchemaID",
id: "/spaces/<space_id>/envs/<env_id>/schema/<collection_id>",
result: id.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: id.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: id.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: id.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 := id.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 *id.ObjectId
}{
{
name: "ServiceID",
id: &id.ObjectId{Descriptor: &id.ServiceId{ServiceID: "<service_id>"}},
},
{
name: "UserID",
id: &id.ObjectId{Descriptor: &id.UserId{UserID: "<user_id>"}},
},
{
name: "OrganizationID",
id: &id.ObjectId{Descriptor: &id.OrganizationId{OrganizationID: "<org_id>"}},
},
{
name: "SpaceId",
id: &id.ObjectId{Descriptor: &id.SpaceId{SpaceID: "<space_id>"}},
},
{
name: "ClientID",
id: &id.ObjectId{Descriptor: &id.ClientId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
ClientID: "<client_id>",
}},
},
{
name: "RoleID",
id: &id.ObjectId{Descriptor: &id.RoleId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
RoleID: "<role_id>",
}},
},
{
name: "LocaleID",
id: &id.ObjectId{Descriptor: &id.LocaleID{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
LocaleID: "<locale_id>",
}},
},
{
name: "EnvironmentID",
id: &id.ObjectId{Descriptor: &id.EnvironmentId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
}},
},
{
name: "CollectionId",
id: &id.ObjectId{Descriptor: &id.CollectionId{
EnvironmentId: id.EnvironmentId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
}},
},
{
name: "Schema ID",
id: &id.ObjectId{Descriptor: &id.SchemaId{
EnvironmentId: id.EnvironmentId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
}},
},
{
name: "ItemId",
id: &id.ObjectId{Descriptor: &id.ItemId{
CollectionId: id.CollectionId{
EnvironmentId: id.EnvironmentId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
},
ItemID: "<item_id>",
}},
},
{
name: "RevisionID",
id: &id.ObjectId{Descriptor: &id.RevisionId{
ItemId: id.ItemId{
CollectionId: id.CollectionId{
EnvironmentId: id.EnvironmentId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
},
ItemID: "<item_id>",
},
RevisionID: "<rev_id>",
}},
},
{
name: "FieldId",
id: &id.ObjectId{Descriptor: &id.FieldId{
ItemId: id.ItemId{
CollectionId: id.CollectionId{
EnvironmentId: id.EnvironmentId{
SpaceId: id.SpaceId{SpaceID: "<space_id>"},
EnvironmentID: "<env_id>",
},
CollectionID: "<collection_id>",
},
ItemID: "<item_id>",
},
Field: "<field_name>",
}},
},
{
name: "SystemID",
id: &id.ObjectId{Descriptor: &id.SystemId{}},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
v, err := id.FromMap(tt.id.Map())
require.NoError(t, err)
assert.Equal(t, tt.id, v, "проверка FromMap для типа ID, должен быть равен исходному значению")
assert.Equal(t, v.Map(), tt.id.Map())
})
}
}
...@@ -4,9 +4,8 @@ import ( ...@@ -4,9 +4,8 @@ import (
"fmt" "fmt"
"slices" "slices"
oid "git.perx.ru/perxis/perxis-go/id" "git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/logs" "git.perx.ru/perxis/perxis-go/logs"
"git.perx.ru/perxis/perxis-go/pkg/id"
"git.perx.ru/perxis/perxis-go/zap" "git.perx.ru/perxis/perxis-go/zap"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
) )
...@@ -60,9 +59,9 @@ func (enc *entryEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field ...@@ -60,9 +59,9 @@ func (enc *entryEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field
case "event": case "event":
ent.Event = clone.fields[i].String ent.Event = clone.fields[i].String
case "object": case "object":
ent.ObjectID, _ = clone.fields[i].Interface.(*oid.ObjectId) ent.ObjectID, _ = clone.fields[i].Interface.(*id.ObjectId)
case "caller": case "caller":
ent.CallerID, _ = clone.fields[i].Interface.(*oid.ObjectId) ent.CallerID, _ = clone.fields[i].Interface.(*id.ObjectId)
case "attr": case "attr":
ent.Attr = clone.fields[i].Interface ent.Attr = clone.fields[i].Interface
case "error": case "error":
......
...@@ -4,9 +4,8 @@ import ( ...@@ -4,9 +4,8 @@ import (
"fmt" "fmt"
"maps" "maps"
oid "git.perx.ru/perxis/perxis-go/id" "git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/logs" "git.perx.ru/perxis/perxis-go/logs"
"git.perx.ru/perxis/perxis-go/pkg/id"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
) )
...@@ -51,8 +50,8 @@ func (enc *entryEncoderSlow) EncodeEntry(entry zapcore.Entry, fields []zapcore.F ...@@ -51,8 +50,8 @@ func (enc *entryEncoderSlow) EncodeEntry(entry zapcore.Entry, fields []zapcore.F
ent.Category, _ = clone.Fields["category"].(string) ent.Category, _ = clone.Fields["category"].(string)
ent.Component, _ = clone.Fields["component"].(string) ent.Component, _ = clone.Fields["component"].(string)
ent.Event, _ = clone.Fields["event"].(string) ent.Event, _ = clone.Fields["event"].(string)
ent.ObjectID, _ = clone.Fields["object"].(*oid.ObjectId) ent.ObjectID, _ = clone.Fields["object"].(*id.ObjectId)
ent.CallerID, _ = clone.Fields["caller"].(*oid.ObjectId) ent.CallerID, _ = clone.Fields["caller"].(*id.ObjectId)
ent.Attr = clone.Fields["attr"] ent.Attr = clone.Fields["attr"]
if err, _ := clone.Fields["error"].(error); err != nil { if err, _ := clone.Fields["error"].(error); err != nil {
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
"strings" "strings"
"time" "time"
"git.perx.ru/perxis/perxis-go/pkg/id" "git.perx.ru/perxis/perxis-go/id"
"github.com/gosimple/slug" "github.com/gosimple/slug"
) )
......
...@@ -5,7 +5,7 @@ import ( ...@@ -5,7 +5,7 @@ import (
"testing" "testing"
"time" "time"
"git.perx.ru/perxis/perxis-go/pkg/id" "git.perx.ru/perxis/perxis-go/id"
"github.com/expr-lang/expr" "github.com/expr-lang/expr"
"github.com/expr-lang/expr/ast" "github.com/expr-lang/expr/ast"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
"strings" "strings"
"text/template" "text/template"
"git.perx.ru/perxis/perxis-go/pkg/id" "git.perx.ru/perxis/perxis-go/id"
) )
const ( const (
......
...@@ -5,9 +5,9 @@ import ( ...@@ -5,9 +5,9 @@ import (
"fmt" "fmt"
"time" "time"
"git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/pkg/errors" "git.perx.ru/perxis/perxis-go/pkg/errors"
grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc" grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
"git.perx.ru/perxis/perxis-go/pkg/id"
"git.perx.ru/perxis/perxis-go/proto/common" "git.perx.ru/perxis/perxis-go/proto/common"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
......
...@@ -5,8 +5,8 @@ import ( ...@@ -5,8 +5,8 @@ import (
"sync" "sync"
"time" "time"
"git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/pkg/errors" "git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/id"
) )
const ( const (
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment