public void HandlesJObject()
        {
            var contentType = new ContentTypeDescriptor("lorem", typeof(MyContent), "ipsum");
            var property    = new PropertyDefinitionDescriptor(nameof(MyContent.ObjectProperty), typeof(MyItem), o => ((MyContent)o).ObjectProperty, (o, v) => ((MyContent)o).ObjectProperty = (MyItem)v, Enumerable.Empty <object>());
            var propertyDefinitionProvider = Mock.Of <IPropertyDefinitionProvider>();

            Mock.Get(propertyDefinitionProvider).Setup(p => p.GetFor(contentType.Id)).Returns(new List <PropertyDefinitionDescriptor> {
                property
            });
            var value    = "dolor";
            var document = new Document {
                GlobalFacet = new DocumentFacet {
                    Properties = new Dictionary <string, object> {
                        [nameof(MyContent.ObjectProperty)] = new JObject {
                            ["value"] = value
                        }
                    }
                }
            };
            var contentTypeCoreInterfaceProvider = Mock.Of <IContentTypeCoreInterfaceProvider>();

            Mock.Get(contentTypeCoreInterfaceProvider).Setup(p => p.GetFor(It.IsAny <string>())).Returns(Enumerable.Empty <CoreInterfaceDescriptor>());

            var result = (MyContent) new ContentDeserializer(propertyDefinitionProvider, contentTypeCoreInterfaceProvider).Deserialize(document, contentType, null);

            Assert.NotNull(result.ObjectProperty);
            Assert.Equal(value, result.ObjectProperty.Value);
        }
        public void FindsContentTypes()
        {
            var typeA        = new ContentTypeDescriptor("ipsum", typeof(ContentTypeA), "dolor");
            var typeB        = new ContentTypeDescriptor("sit", typeof(ContentTypeB), "amet");
            var typeProvider = Mock.Of <IContentTypeProvider>();

            Mock.Get(typeProvider).Setup(p => p.GetAll()).Returns(new List <ContentTypeDescriptor> {
                typeA, typeB
            });

            var groupA        = new ContentTypeGroupDescriptor("lorem", typeof(ContentTypeGroupA));
            var groupB        = new ContentTypeGroupDescriptor("adipiscing", typeof(ContentTypeGroupB));
            var groupProvider = Mock.Of <IContentTypeGroupProvider>();

            Mock.Get(groupProvider).Setup(p => p.Get("lorem")).Returns(groupA);
            Mock.Get(groupProvider).Setup(p => p.Get("adipiscing")).Returns(groupB);

            var sut = new ContentTypeGroupMatcher(typeProvider, groupProvider);

            Assert.Equal(new List <ContentTypeDescriptor> {
                typeA
            }, sut.GetContentTypesFor("lorem"));
            Assert.Equal(new List <ContentTypeDescriptor> {
                typeA, typeB
            }, sut.GetContentTypesFor("adipiscing"));
        }
Beispiel #3
0
        public void SavesOnlyAutoGeneratedFields()
        {
            var contentTypeId = "amet";
            var container     = "vestibulum";

            var propertyDefinitions = new List <PropertyDefinitionDescriptor>
            {
                new PropertyDefinitionDescriptor(nameof(MyContent.Generated), typeof(string), c => ((MyContent)c).Generated, (c, v) => ((MyContent)c).Generated          = (string)v, typeof(MyContent).GetProperty(nameof(MyContent.Generated)).GetCustomAttributes()),
                new PropertyDefinitionDescriptor(nameof(MyContent.NotGenerated), typeof(string), c => ((MyContent)c).NotGenerated, (c, v) => ((MyContent)c).NotGenerated = (string)v, typeof(MyContent).GetProperty(nameof(MyContent.NotGenerated)).GetCustomAttributes()),
            };

            var propertyDefinitionProvider = Mock.Of <IPropertyDefinitionProvider>();

            Mock.Get(propertyDefinitionProvider).Setup(p => p.GetFor(contentTypeId)).Returns(propertyDefinitions);

            var contentType = new ContentTypeDescriptor(contentTypeId, typeof(MyContent), container);

            var contentTypeRepository = Mock.Of <IContentTypeProvider>();

            Mock.Get(contentTypeRepository).Setup(r => r.Get(contentTypeId)).Returns(contentType);

            var id = "lorem";

            var a = new MyContent
            {
                Id           = id,
                Generated    = "ipsum",
                NotGenerated = "dolor",
            };

            var b = new MyContent
            {
                Id           = id,
                Generated    = "sit",
                NotGenerated = null,
            };

            var body = new ContentAppController.SaveContentRequestBody
            {
                Id            = id,
                ContentTypeId = contentTypeId,
                Content       = JsonConvert.SerializeObject(b),
            };

            var containerSpecificContentUpdater = Mock.Of <IContainerSpecificContentUpdater>();

            Mock.Get(containerSpecificContentUpdater).Setup(u => u.Update(It.IsAny <MyContent>(), container)).Callback <IContent, string>((content, _) => {
                Assert.Equal(b.Generated, ((MyContent)content).Generated);
                Assert.Equal(a.NotGenerated, ((MyContent)content).NotGenerated);
            });

            var containerSpecificContentGetter = Mock.Of <IContainerSpecificContentGetter>();

            Mock.Get(containerSpecificContentGetter).Setup(g => g.Get <MyContent>(id, null, container)).Returns(a);

            new ContentAppController(contentTypeRepository, containerSpecificContentGetter, null, containerSpecificContentUpdater, null, null, null, null, null, null, null, null, null, propertyDefinitionProvider).SaveContent(body);

            Mock.Get(containerSpecificContentUpdater).Verify(u => u.Update(It.IsAny <MyContent>(), container));
        }
        public object Create(ContentTypeDescriptor contentType)
        {
            var content = Activator.CreateInstance(contentType.Type);

            foreach (var initializer in Initializers)
            {
                initializer.Initialize(content, contentType);
            }

            return(content);
        }
Beispiel #5
0
        public Document Serialize(IContent content, ContentTypeDescriptor contentType)
        {
            var globalInterfaces = new List <DocumentInterface>();

            foreach (var coreInterface in contentType.CoreInterfaces)
            {
                globalInterfaces.Add(DocumentInterface.CreateFrom(coreInterface.Id, GetProperties(content, coreInterface.PropertyDefinitions)));
            }

            var global = DocumentFacet.CreateFrom(DocumentLanguageConstants.Global, globalInterfaces, GetProperties(content, contentType.PropertyDefinitions));

            return(Document.CreateFrom(content.Id, global, Enumerable.Empty <DocumentFacet>().ToDictionary(f => f.Language, f => f)));
        }
Beispiel #6
0
        public void ThrowsOnContentTypes()
        {
            var contentTypeA        = new ContentTypeDescriptor("lorem", typeof(ContentTypeA));
            var contentTypeProvider = Mock.Of <IContentTypeProvider>();

            Mock.Get(contentTypeProvider).Setup(p => p.GetAll()).Returns(new List <ContentTypeDescriptor> {
                contentTypeA
            });

            var formProvider = Mock.Of <IFormProvider>();

            Mock.Get(formProvider).Setup(p => p.GetAll()).Returns(new List <FormDescriptor> {
            });

            Assert.Throws <CannotInlineContentTypesException>(() => new PolymorphicFormFinder(contentTypeProvider, formProvider).FindFor(typeof(ContentTypeInterface)));
        }
        public IContent Deserialize(Document document, ContentTypeDescriptor contentType, string language)
        {
            var content = (IContent)Activator.CreateInstance(contentType.Type);

            foreach (var coreInterface in contentType.CoreInterfaces)
            {
                if (document.GlobalFacet.Interfaces.TryGetValue(coreInterface.Id, out var languageIndependentInterface))
                {
                    SetProperties(content, coreInterface.PropertyDefinitions, languageIndependentInterface.Properties);
                }
            }

            SetProperties(content, contentType.PropertyDefinitions, document.GlobalFacet.Properties);

            return(content);
        }
        public IEnumerable <ContentRouteDescriptor> GetFor(ContentTypeDescriptor contentType)
        {
            var result = new List <ContentRouteDescriptor>();

            foreach (var contentRoute in ContentRouteProvider.GetAll())
            {
                if (!contentRoute.ContentTypes.Any(c => c.Id == contentType.Id))
                {
                    continue;
                }

                result.Add(contentRoute);
            }

            return(result.AsReadOnly());
        }
        public void FindsContentTypeGroups()
        {
            var contentTypeA        = new ContentTypeDescriptor("ipsum", typeof(ContentTypeA), "dolor");
            var contentTypeProvider = Mock.Of <IContentTypeProvider>();

            Mock.Get(contentTypeProvider).Setup(p => p.Get("ipsum")).Returns(contentTypeA);

            var contentTypeGroupA        = new ContentTypeGroupDescriptor("lorem", typeof(ContentTypeGroupA));
            var contentTypeGroupProvider = Mock.Of <IContentTypeGroupProvider>();

            Mock.Get(contentTypeGroupProvider).Setup(p => p.GetAll()).Returns(new List <ContentTypeGroupDescriptor> {
                contentTypeGroupA
            });

            var result = new ContentTypeGroupMatcher(contentTypeProvider, contentTypeGroupProvider).GetContentTypeGroupsFor("ipsum");

            Assert.Equal(new List <ContentTypeGroupDescriptor> {
                contentTypeGroupA
            }, result);
        }
Beispiel #10
0
        ContentTypeResponseItem GetItem(ContentTypeDescriptor contentType)
        {
            var    name = contentType.Type.GetCustomAttribute <DisplayAttribute>()?.Name ?? contentType.Type.Name;
            string pluralName;

            if (name.Contains(':') && !contentType.Id.Contains(':'))
            {
                var nameSplit = name.Split(':');

                name       = nameSplit.First();
                pluralName = nameSplit.Last();
            }
            else
            {
                name       = Humanizer.Humanize(name);
                pluralName = Pluralizer.Pluralize(name);
            }

            var singleton = SingletonProvider.Get(contentType.Id);

            var item = new ContentTypeResponseItem
            {
                Id                       = contentType.Id,
                Name                     = name,
                LowerCaseName            = name.Substring(0, 1).ToLower() + name.Substring(1),
                PluralName               = pluralName,
                LowerCasePluralName      = pluralName.Substring(0, 1).ToLower() + pluralName.Substring(1),
                IsNameable               = typeof(INameable).IsAssignableFrom(contentType.Type),
                NameablePropertyName     = typeof(INameable).IsAssignableFrom(contentType.Type) ? CamelCaseNamingStrategy.GetPropertyName(NameExpressionParser.Parse(contentType.Type), false) : null,
                IsImageable              = typeof(IImageable).IsAssignableFrom(contentType.Type),
                ImageablePropertyName    = typeof(IImageable).IsAssignableFrom(contentType.Type) ? CamelCaseNamingStrategy.GetPropertyName(ImageExpressionParser.Parse(contentType.Type), false) : null,
                IsRoutable               = typeof(IRoutable).IsAssignableFrom(contentType.Type),
                IsSingleton              = singleton != null,
                Count                    = -1,
                ContentTypeActionModules = ContentTypeActionModuleProvider.GetContentTypeActionModulesFor(contentType.Id),
                ListActionModules        = ListActionModuleProvider.GetListActionModulesFor(contentType.Id),
                ContentTypeGroups        = ContentTypeGroupMatcher.GetContentTypeGroupsFor(contentType.Id).Select(t => t.Id).ToList().AsReadOnly(),
            };

            return(item);
        }
Beispiel #11
0
        public void MatchesType()
        {
            var contentTypeA = new ContentTypeDescriptor("lorem", typeof(string));
            var contentTypeB = new ContentTypeDescriptor("ipsum", typeof(string));

            var routeA = new ContentRouteDescriptor("template", new List <ContentTypeDescriptor> {
                contentTypeA
            });
            var routeB = new ContentRouteDescriptor("template", new List <ContentTypeDescriptor> {
            });
            var contentRouteProvider = Mock.Of <IContentRouteProvider>();

            Mock.Get(contentRouteProvider).Setup(p => p.GetAll()).Returns(new List <ContentRouteDescriptor> {
                routeA, routeB
            });

            var sut = new ContentRouteMatcher(contentRouteProvider);

            Assert.Equal(new List <ContentRouteDescriptor> {
                routeA
            }, sut.GetFor(contentTypeA));
            Assert.Empty(sut.GetFor(contentTypeB));
        }
Beispiel #12
0
        public void CreatesRoutes(string pattern, string resultingTemplate, string resultingTypes)
        {
            var contentTypeA = new ContentTypeDescriptor("sit", typeof(ContentTypeA));
            var contentTypeB = new ContentTypeDescriptor("dol", typeof(ContentTypeB));

            var contentTypeProvider = Mock.Of <IContentTypeProvider>();

            Mock.Get(contentTypeProvider).Setup(p => p.GetAll()).Returns(new List <ContentTypeDescriptor> {
                contentTypeA, contentTypeB
            });

            var contentTypeExpander = Mock.Of <IContentTypeExpander>();

            Mock.Get(contentTypeExpander).Setup(e => e.Expand("expandToDol")).Returns(new List <ContentTypeDescriptor> {
                contentTypeB
            });

            var endpoint   = new RouteEndpoint(async context => { }, RoutePatternFactory.Parse(pattern), 0, null, null);
            var dataSource = new CompositeEndpointDataSource(new List <EndpointDataSource> {
                new DefaultEndpointDataSource(endpoint)
            });

            var results = new ContentRouteCreator(Mock.Of <ILogger <ContentRouteCreator> >(), dataSource, contentTypeProvider, contentTypeExpander).Create();

            if (resultingTemplate == null)
            {
                Assert.Empty(results);
                return;
            }

            Assert.Single(results);

            var result = results.Single();

            Assert.Equal(resultingTemplate, result.Template);
            Assert.Equal(resultingTypes, string.Join(",", result.ContentTypes.Select(t => t.Id)));
        }
 public SingletonWithIdIsOfWrongType(string id, ContentTypeDescriptor contentType, Type wrongType, string wrongContentTypeId) : base($"Singleton {id} should be of type {contentType.Type} ({contentType.Id}), but was {wrongType} ({wrongContentTypeId})")
 {
 }
Beispiel #14
0
 public CannotInlineContentTypesException(Type type, ContentTypeDescriptor contentType) : base($"Type {type} resolved to {contentType.Type} ({contentType.Id}), which is a content type. Content types cannot be inlined; only [Form]s. If you want a content type, change the data type to a string and store its id by using a [UIHint(\"select('content', 'content-type-or-group-id')\"]")
 {
 }
        public async void SavesOnlyAutoGeneratedFields()
        {
            var contentTypeId = "amet";

            var propertyDefinitions = new List <PropertyDefinitionDescriptor>
            {
                new PropertyDefinitionDescriptor(nameof(MyContent.Generated), typeof(string), c => ((MyContent)c).Generated, (c, v) => ((MyContent)c).Generated          = (string)v, typeof(MyContent).GetProperty(nameof(MyContent.Generated)).GetCustomAttributes()),
                new PropertyDefinitionDescriptor(nameof(MyContent.NotGenerated), typeof(string), c => ((MyContent)c).NotGenerated, (c, v) => ((MyContent)c).NotGenerated = (string)v, typeof(MyContent).GetProperty(nameof(MyContent.NotGenerated)).GetCustomAttributes()),
            };

            var propertyDefinitionProvider = Mock.Of <IPropertyDefinitionProvider>();

            Mock.Get(propertyDefinitionProvider).Setup(p => p.GetFor(contentTypeId)).Returns(propertyDefinitions);

            var contentType = new ContentTypeDescriptor(contentTypeId, typeof(MyContent));

            var contentTypeRepository = Mock.Of <IContentTypeProvider>();

            Mock.Get(contentTypeRepository).Setup(r => r.Get(contentTypeId)).Returns(contentType);

            var id = new string[] { "lorem" };

            var a = new MyContent
            {
                KeyValues    = id,
                Generated    = "ipsum",
                NotGenerated = "dolor",
            };

            var b = new MyContent
            {
                KeyValues    = id,
                Generated    = "sit",
                NotGenerated = null,
            };

            var body = new SaveContentController.SaveContentRequestBody
            {
                KeyValues     = id,
                ContentTypeId = contentTypeId,
                Content       = JsonConvert.SerializeObject(b),
            };

            var containerSpecificContentUpdater = Mock.Of <IContentUpdater>();

            Mock.Get(containerSpecificContentUpdater).Setup(u => u.UpdateAsync(It.IsAny <MyContent>())).Callback <object, string>((content, _) => {
                Assert.Equal(b.Generated, ((MyContent)content).Generated);
                Assert.Equal(a.NotGenerated, ((MyContent)content).NotGenerated);
            });

            var contentGetter = Mock.Of <IContentGetter>();

            Mock.Get(contentGetter).Setup(g => g.GetAsync <MyContent>(id)).Returns(Task.FromResult(a));

            var contentTypeCoreInterfaceProvider = Mock.Of <IContentTypeCoreInterfaceProvider>();

            var formProvider = Mock.Of <IPolymorphicCandidateProvider>();

            Mock.Get(formProvider).Setup(p => p.GetAll()).Returns(new List <PolymorphicCandidateDescriptor> {
            });

            await new SaveContentController(contentTypeRepository, null, null, contentGetter, contentTypeCoreInterfaceProvider, propertyDefinitionProvider, containerSpecificContentUpdater, null, new PolymorphicFormConverter(Mock.Of <ILogger <PolymorphicFormConverter> >(), formProvider, Mock.Of <IHumanizer>())).SaveContent(body);

            Mock.Get(containerSpecificContentUpdater).Verify(u => u.UpdateAsync(It.IsAny <MyContent>()));
        }
Beispiel #16
0
        public void Initialize(object content, ContentTypeDescriptor contentType)
        {
            var form = FormProvider.Get(contentType.Type);

            FormInstanceInitializer.Initialize(content, form);
        }
 public string Generate(ContentTypeDescriptor contentType)
 {
     return($"Cloudy.CMS.Content[type={contentType.Id}]");
 }
Beispiel #18
0
 /*==========================================================================================================================
 | METHOD: SET CONTENT TYPE DESCRIPTORS (PROXY)
 \-------------------------------------------------------------------------------------------------------------------------*/
 /// <inheritdoc cref="TopicRepositoryBase.SetContentTypeDescriptors(ContentTypeDescriptor)" />
 public ContentTypeDescriptorCollection SetContentTypeDescriptorsProxy(ContentTypeDescriptor topicGraph) =>
   base.SetContentTypeDescriptors(topicGraph);