예제 #1
0
        public void GetIdPath_Returns_In_Correct_Order_For_Schemas()
        {
            //mock hive
            IReadonlyEntityRepositoryGroup <IContentStore> readonlyEntitySession;
            IReadonlySchemaRepositoryGroup <IContentStore> readonlySchemaSession;
            IEntityRepositoryGroup <IContentStore>         entityRepository;
            ISchemaRepositoryGroup <IContentStore>         schemaSession;
            var hive   = MockHiveManager.GetManager().MockContentStore(out readonlyEntitySession, out readonlySchemaSession, out entityRepository, out schemaSession);
            var schema = new EntitySchema {
                Id = new HiveId(100)
            };

            schemaSession.Get <EntitySchema>(Arg.Any <bool>(), Arg.Any <HiveId[]>()).Returns(new[] { schema });
            schemaSession.GetAncestorRelations(new HiveId(100), FixedRelationTypes.DefaultRelationType)
            .Returns(new[]
            {
                new Relation(FixedRelationTypes.DefaultRelationType, new EntitySchema {
                    Id = new HiveId(99)
                }, schema),
                new Relation(FixedRelationTypes.DefaultRelationType, new EntitySchema {
                    Id = new HiveId(98)
                }, new EntitySchema {
                    Id = new HiveId(99)
                }),
                new Relation(FixedRelationTypes.DefaultRelationType, new EntitySchema {
                    Id = new HiveId(97)
                }, new EntitySchema {
                    Id = new HiveId(98)
                }),
            });

            using (var uow = hive.OpenWriter <IContentStore>())
            {
                var path = uow.Repositories.Schemas.GetEntityPath <EntitySchema>(new HiveId(100), FixedRelationTypes.DefaultRelationType);
                Assert.AreEqual(new HiveId(97), path.ElementAt(0));
                Assert.AreEqual(new HiveId(98), path.ElementAt(1));
                Assert.AreEqual(new HiveId(99), path.ElementAt(2));
                Assert.AreEqual(new HiveId(100), path.ElementAt(3));
            }
        }
        public void Initialize()
        {
            #region Vars

            IReadonlyEntityRepositoryGroup <IContentStore> readonlyContentStoreRepository;
            IReadonlySchemaRepositoryGroup <IContentStore> readonlyContentStoreSchemaRepository;
            IEntityRepositoryGroup <IContentStore>         contentStoreRepository;
            ISchemaRepositoryGroup <IContentStore>         contentStoreSchemaRepository;

            IReadonlyEntityRepositoryGroup <IFileStore> readonlyFileStoreRepository;
            IReadonlySchemaRepositoryGroup <IFileStore> readonlyFileStoreSchemaRepository;
            IEntityRepositoryGroup <IFileStore>         fileStoreRepository;
            ISchemaRepositoryGroup <IFileStore>         fileStoreSchemaRepository;

            #endregion

            var hive = MockHiveManager.GetManager()
                       .MockContentStore(out readonlyContentStoreRepository, out readonlyContentStoreSchemaRepository, out contentStoreRepository, out contentStoreSchemaRepository)
                       .MockFileStore(out readonlyFileStoreRepository, out readonlyFileStoreSchemaRepository, out fileStoreRepository, out fileStoreSchemaRepository);

            //Setup file store
            var fileId = new HiveId("storage", "file-uploader", new HiveIdValue("test.jpg"));
            var file   = new File
            {
                Id           = fileId,
                Name         = "test.jpg",
                ContentBytes = Encoding.UTF8.GetBytes("test")
            };

            readonlyFileStoreRepository
            .Get <File>(true, Arg.Any <HiveId[]>())
            .Returns(new[] { file });

            var thumbnailId = new HiveId("storage", "file-uploader", new HiveIdValue("test_100.jpg"));
            var thumbnail   = new File
            {
                Id           = thumbnailId,
                Name         = "test_100.jpg",
                ContentBytes = Encoding.UTF8.GetBytes("test_100")
            };

            var relation = Substitute.For <IReadonlyRelation <IRelatableEntity, IRelatableEntity> >();
            relation.MetaData.Returns(new RelationMetaDataCollection(new[] { new RelationMetaDatum("size", "100") }));
            relation.Source.Returns(file);
            relation.SourceId.Returns(fileId);
            relation.Destination.Returns(thumbnail);
            relation.DestinationId.Returns(thumbnailId);

            readonlyFileStoreRepository.GetLazyChildRelations(fileId, FixedRelationTypes.ThumbnailRelationType)
            .Returns(new[] { relation });

            //Setup media store
            var mediaPickerAttributeDefType = new AttributeType {
                RenderTypeProvider = CorePluginConstants.FileUploadPropertyEditorId
            };
            var mediaPickerAttributeDef = new AttributeDefinition("rebelFile", "")
            {
                Id = FixedHiveIds.FileUploadAttributeType, AttributeType = mediaPickerAttributeDefType
            };
            var mediaPickerProperty = new TypedAttribute(mediaPickerAttributeDef, fileId.ToString());

            var mediaId     = new HiveId("0A647849-BF5C-413B-9420-7AB4C9521505");
            var mediaEntity = new TypedEntity {
                Id = mediaId
            };
            //mediaEntity.SetupFromSchema(FixedSchemas.MediaImageSchema);
            mediaEntity.Attributes.Add(mediaPickerProperty);
            mediaEntity.Attributes["rebelFile"].Values["MediaId"] = "0A647849-BF5C-413B-9420-7AB4C9521505";

            //readonlyContentStoreRepository
            //    .Get<TypedEntity>(true, Arg.Any<HiveId[]>())
            //    .Returns(new[] { mediaEntity });

            //readonlyContentStoreRepository
            //    .SingleOrDefault<TypedEntity>(Arg.Any<Expression<Func<TypedEntity, bool>>>())
            //    .Returns(mediaEntity);

            var mediaEntityList = new List <TypedEntity> {
                mediaEntity
            };
            readonlyContentStoreRepository
            .Query()
            .Returns(mediaEntityList.AsQueryable());

            // Setup application
            var appContext = Substitute.For <IRebelApplicationContext>();
            appContext.Hive.Returns(hive);

            // Setup back office request
            _backOfficeRequestContext = Substitute.For <IBackOfficeRequestContext>();
            _backOfficeRequestContext.Application.Returns(appContext);

            var member = new Member {
                Id = new HiveId("0285372B-AB14-45B6-943A-8709476AB655"), Username = "******"
            };

            // Setup fake HttpContext (Just needed to fake current member)
            var identity = new GenericIdentity(member.Username);
            var user     = new GenericPrincipal(identity, new string[0]);
            var wp       = new SimpleWorkerRequest("/virtual", "c:\\inetpub\\wwwroot\\physical\\", "page.aspx", "query", new StringWriter());
            HttpContext.Current = new HttpContext(wp)
            {
                User = user
            };

            appContext.Security.Members.GetByUsername(member.Username).Returns(member);

            appContext.Security.PublicAccess.GetPublicAccessStatus(member.Id, mediaEntity.Id)
            .Returns(new PublicAccessStatusResult(mediaEntity.Id, true));
        }
        public void Initialize()
        {
            //Seup permissions
            _permissions = new Permission[] { new SavePermission(), new PublishPermission(), new HostnamesPermission(),
                                              new CopyPermission(), new MovePermission(), new BackOfficeAccessPermission() }
            .Select(x => new Lazy <Permission, PermissionMetadata>(() => x, new PermissionMetadata(new Dictionary <string, object>
            {
                { "Id", x.Id },
                { "Name", x.Name },
                { "Type", x.Type }
            })));

            //Setup user groups
            _userGroups = new List <UserGroup>
            {
                new UserGroup
                {
                    Id   = new HiveId("9DB63B97-4C8F-489C-98C7-017DC6AD869A"),
                    Name = "Administrator"
                },
                new UserGroup
                {
                    Id   = new HiveId("F61E4B62-513B-4858-91BF-D873401AD3CA"),
                    Name = "Editor"
                },
                new UserGroup
                {
                    Id   = new HiveId("8B65EF91-D49B-43A3-AFD9-6A47D5341B7D"),
                    Name = "Writter"
                }
            };

            // Setup user id
            _userId = new HiveId("857BD0F6-49DC-4378-84C1-6CD8AE14301D");

            //Setup content nodes
            _systemRootNode = new TypedEntity {
                Id = FixedHiveIds.SystemRoot
            };
            _childContentNode = new TypedEntity {
                Id = new HiveId("00E55027-402F-41CF-9052-B8D8F3DBCD76")
            };

            //Setup relations
            var systemRootPermissionRelations = new List <RelationById>
            {
                new RelationById(
                    _userGroups.First().Id,
                    _systemRootNode.Id,
                    FixedRelationTypes.PermissionRelationType,
                    0,
                    new RelationMetaDatum(FixedPermissionIds.BackOfficeAccess, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Copy, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Save, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Publish, PermissionStatus.Deny.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Hostnames, PermissionStatus.Inherit.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Move, PermissionStatus.Inherit.ToString())
                    ),
                new RelationById(
                    _userGroups.Last().Id,
                    _systemRootNode.Id,
                    FixedRelationTypes.PermissionRelationType,
                    0,
                    new RelationMetaDatum(FixedPermissionIds.Copy, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Save, PermissionStatus.Deny.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Publish, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Hostnames, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Move, PermissionStatus.Inherit.ToString())
                    )
            };

            var childContentNodePermissionRelations = new List <RelationById>
            {
                new RelationById(
                    _userGroups.Skip(1).First().Id,
                    _childContentNode.Id,
                    FixedRelationTypes.PermissionRelationType,
                    0,
                    new RelationMetaDatum(FixedPermissionIds.BackOfficeAccess, PermissionStatus.Deny.ToString()),     // Back office access is not an entity action so this should get ignored
                    new RelationMetaDatum(FixedPermissionIds.Copy, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Save, PermissionStatus.Deny.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Publish, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Hostnames, PermissionStatus.Allow.ToString()),
                    new RelationMetaDatum(FixedPermissionIds.Move, PermissionStatus.Inherit.ToString())
                    )
            };

            var childContentNodeAncestorRelations = new List <RelationById>
            {
                new RelationById(
                    _systemRootNode.Id,
                    _childContentNode.Id,
                    FixedRelationTypes.DefaultRelationType,
                    0)
            };

            var userGroupRelations = new List <RelationById>
            {
                new RelationById(
                    _userGroups.First().Id,
                    _userId,
                    FixedRelationTypes.UserGroupRelationType,
                    0),
                new RelationById(
                    _userGroups.Skip(1).First().Id,
                    _userId,
                    FixedRelationTypes.UserGroupRelationType,
                    0),
                new RelationById(
                    _userGroups.Last().Id,
                    _userId,
                    FixedRelationTypes.UserGroupRelationType,
                    0)
            };

            _membershipService = Substitute.For <IMembershipService <User> >();
            _membershipService.GetById(_userId, true).Returns(new User
            {
                Id       = _userId,
                Username = "******",
                Groups   = _userGroups.Select(x => x.Id).ToArray()
            });


            //Setup hive
            _hive = MockHiveManager.GetManager()
                    .MockContentStore(out _readonlyContentStoreSession, out _readonlyContentStoreSchemaSession, out _contentStoreRepository, out _contentStoreSchemaRepository)
                    .MockSecurityStore(out _readonlySecurityStoreSession, out _readonlySecurityStoreSchemaSession, out _securityStoreRepository, out _securityStoreSchemaRepository);

            //Setup content store
            _readonlyContentStoreSession.Exists <TypedEntity>(HiveId.Empty).ReturnsForAnyArgs(true);

            _readonlySecurityStoreSession
            .Get <UserGroup>(true, Arg.Any <HiveId[]>())
            .Returns(MockHiveManager.MockReturnForGet <UserGroup>());

            _readonlyContentStoreSession
            .Get <UserGroup>(true, Arg.Any <HiveId[]>())
            .Returns(MockHiveManager.MockReturnForGet <UserGroup>());

            _securityStoreRepository
            .Get <UserGroup>(true, Arg.Any <HiveId[]>())
            .Returns(MockHiveManager.MockReturnForGet <UserGroup>());

            _contentStoreRepository
            .Get <UserGroup>(true, Arg.Any <HiveId[]>())
            .Returns(MockHiveManager.MockReturnForGet <UserGroup>());

            //Setup security store
            _readonlySecurityStoreSession.GetParentRelations(_systemRootNode.Id, FixedRelationTypes.PermissionRelationType).Returns(systemRootPermissionRelations);
            _readonlySecurityStoreSession.GetParentRelations(_childContentNode.Id, FixedRelationTypes.PermissionRelationType).Returns(childContentNodePermissionRelations);
            _readonlySecurityStoreSession.GetAncestorRelations(_childContentNode.Id, FixedRelationTypes.DefaultRelationType).Returns(childContentNodeAncestorRelations);
            _readonlySecurityStoreSession.GetParentRelations(_userId, FixedRelationTypes.UserGroupRelationType).Returns(userGroupRelations);

            _readonlySecurityStoreSession.Query <UserGroup>().Returns(x => Enumerable.Repeat(new UserGroup()
            {
                Name = "Administrator"
            }, 1).AsQueryable());
        }
        public void Initialize()
        {
            #region Vars

            IReadonlyEntityRepositoryGroup <IContentStore> readonlyContentStoreRepository;
            IReadonlySchemaRepositoryGroup <IContentStore> readonlyContentStoreSchemaRepository;
            IEntityRepositoryGroup <IContentStore>         contentStoreRepository;
            ISchemaRepositoryGroup <IContentStore>         contentStoreSchemaRepository;

            IReadonlyEntityRepositoryGroup <IFileStore> readonlyFileStoreRepository;
            IReadonlySchemaRepositoryGroup <IFileStore> readonlyFileStoreSchemaRepository;
            IEntityRepositoryGroup <IFileStore>         fileStoreRepository;
            ISchemaRepositoryGroup <IFileStore>         fileStoreSchemaRepository;

            #endregion

            var hive = MockHiveManager.GetManager()
                       .MockContentStore(out readonlyContentStoreRepository, out readonlyContentStoreSchemaRepository, out contentStoreRepository, out contentStoreSchemaRepository)
                       .MockFileStore(out readonlyFileStoreRepository, out readonlyFileStoreSchemaRepository, out fileStoreRepository, out fileStoreSchemaRepository);

            //Setup file store
            var fileId = new HiveId("storage", "file-uploader", new HiveIdValue("test.jpg"));
            var file   = new File
            {
                Id           = fileId,
                Name         = "test.jpg",
                ContentBytes = Encoding.UTF8.GetBytes("test")
            };

            readonlyFileStoreRepository
            .Get <File>(true, Arg.Any <HiveId[]>())
            .Returns(new[] { file });

            var thumbnailId = new HiveId("storage", "file-uploader", new HiveIdValue("test_100.jpg"));
            var thumbnail   = new File
            {
                Id           = thumbnailId,
                Name         = "test_100.jpg",
                ContentBytes = Encoding.UTF8.GetBytes("test_100")
            };

            var relation = Substitute.For <IReadonlyRelation <IRelatableEntity, IRelatableEntity> >();
            relation.MetaData.Returns(new RelationMetaDataCollection(new[] { new RelationMetaDatum("size", "100") }));
            relation.Source.Returns(file);
            relation.SourceId.Returns(fileId);
            relation.Destination.Returns(thumbnail);
            relation.DestinationId.Returns(thumbnailId);

            readonlyFileStoreRepository.GetLazyChildRelations(fileId, FixedRelationTypes.ThumbnailRelationType)
            .Returns(new[] { relation });

            //Setup media store
            var mediaPickerAttributeDefType = new AttributeType {
                RenderTypeProvider = CorePluginConstants.FileUploadPropertyEditorId
            };
            var mediaPickerAttributeDef = new AttributeDefinition("umbracoFile", "")
            {
                Id = FixedHiveIds.FileUploadAttributeType, AttributeType = mediaPickerAttributeDefType
            };
            var mediaPickerProperty = new TypedAttribute(mediaPickerAttributeDef, fileId.ToString());

            var mediaId     = new HiveId("0A647849-BF5C-413B-9420-7AB4C9521505");
            var mediaEntity = new TypedEntity {
                Id = mediaId
            };
            mediaEntity.Attributes.Add(mediaPickerProperty);

            //readonlyContentStoreRepository
            //    .Get<TypedEntity>(true, Arg.Any<HiveId[]>())
            //    .Returns(new[] { mediaEntity });

            //readonlyContentStoreRepository
            //    .SingleOrDefault<TypedEntity>(Arg.Any<Expression<Func<TypedEntity, bool>>>())
            //    .Returns(mediaEntity);

            var mediaEntityList = new List <TypedEntity> {
                mediaEntity
            };
            readonlyContentStoreRepository
            .Provider
            .Returns(mediaEntityList.AsQueryable().Provider);

            // Setup application
            var appContext = Substitute.For <IUmbracoApplicationContext>();
            appContext.Hive.Returns(hive);

            // Setup back office request
            _backOfficeRequestContext = Substitute.For <IBackOfficeRequestContext>();
            _backOfficeRequestContext.Application.Returns(appContext);
        }