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")); }
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); }
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))); }
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); }
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); }
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)); }
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})") { }
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>())); }
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}]"); }
/*========================================================================================================================== | METHOD: SET CONTENT TYPE DESCRIPTORS (PROXY) \-------------------------------------------------------------------------------------------------------------------------*/ /// <inheritdoc cref="TopicRepositoryBase.SetContentTypeDescriptors(ContentTypeDescriptor)" /> public ContentTypeDescriptorCollection SetContentTypeDescriptorsProxy(ContentTypeDescriptor topicGraph) => base.SetContentTypeDescriptors(topicGraph);