Skip to content
Snippets Groups Projects
Select Git revision
  • 57960fb21ce399cd14490a0ce77d1491c36538ad
  • master default protected
  • feature/PRXS-3156-SaveRevision
  • PRXS-3421-RecursiveReferences
  • feature/PRXS-NotifyAttachment
  • feature/PRXS-3170-TemplateFuncsFix
  • feature/PRXS-3143-3235-ReferenceOptions
  • feature/PRXS-1869-SuperUser
  • feature/PRXS-3106-NoCache
  • release/0.33
  • feature/2781-SpacesLoggingMiddleware
  • feature/PRXS-3143-LimitReferenceFields
  • feature/PRXS-3234-FeaturePruneIdents
  • feature/3109-SerializeFeature
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • v0.34.0
  • v0.33.2
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
41 results

Storage.go

Blame
  • 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())
    		})
    	}
    }