Esempio n. 1
0
        public void Can_Provision_Incrementally_With_AutoDetection_As_SSOM()
        {
            var provisionRunner  = new SSOMProvisionRunner();
            var provisionService = provisionRunner.ProvisionService;

            var incrementalModelId = "m2.regression." + Guid.NewGuid().ToString("N");

            provisionRunner.WithSSOMFarmContext(farm =>
            {
                for (var i = 0; i < 3; i++)
                {
                    var incrementalProvisionConfig = new IncrementalProvisionConfig();
                    incrementalProvisionConfig.AutoDetectSharePointPersistenceStorage = true;

                    provisionService.SetIncrementalProvisionMode(incrementalProvisionConfig);

                    var model = SPMeta2Model.NewFarmModel(site =>
                    {
                    });

                    model.SetIncrementalProvisionModelId(incrementalModelId);


                    provisionService.DeployModel(SPMeta2.SSOM.ModelHosts.FarmModelHost.FromFarm(farm), model);
                }
            });


            provisionRunner.WebApplicationUrls.ForEach(url =>
            {
                provisionRunner.WithSSOMWebApplicationContext(url, spWebApp =>
                {
                    for (var i = 0; i < 3; i++)
                    {
                        var incrementalProvisionConfig = new IncrementalProvisionConfig();
                        incrementalProvisionConfig.AutoDetectSharePointPersistenceStorage = true;

                        provisionService.SetIncrementalProvisionMode(incrementalProvisionConfig);

                        var model = SPMeta2Model.NewWebApplicationModel(site =>
                        {
                        });

                        model.SetIncrementalProvisionModelId(incrementalModelId);


                        provisionService.DeployModel(SPMeta2.SSOM.ModelHosts.WebApplicationModelHost.FromWebApplication(spWebApp), model);
                    }
                });
            });

            provisionRunner.SiteUrls.ForEach(siteUrl =>
            {
                provisionRunner.WithSSOMSiteAndWebContext((spSite, spWeb) =>
                {
                    for (var i = 0; i < 3; i++)
                    {
                        var incrementalProvisionConfig = new IncrementalProvisionConfig();
                        incrementalProvisionConfig.AutoDetectSharePointPersistenceStorage = true;

                        provisionService.SetIncrementalProvisionMode(incrementalProvisionConfig);

                        var model = SPMeta2Model.NewSiteModel(site =>
                        {
                        });

                        model.SetIncrementalProvisionModelId(incrementalModelId);


                        provisionService.DeployModel(SPMeta2.SSOM.ModelHosts.WebModelHost.FromWeb(spWeb), model);
                    }
                });
            });
        }
        private void DeployWebpartOnSupportedHosts <TWebpartType>()
            where TWebpartType : WebPartDefinitionBase, new()
        {
            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddSiteFeature(BuiltInSiteFeatures.SharePointServerPublishingInfrastructure.Inherit(def =>
                {
                    def.Enable        = true;
                    def.ForceActivate = true;
                }));

                site.AddSiteFeature(BuiltInSiteFeatures.EnableAppSideLoading.Inherit(def =>
                {
                    def.Enable        = true;
                    def.ForceActivate = true;
                }));
            });

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web.AddWebFeature(BuiltInWebFeatures.SharePointServerPublishing.Inherit(def =>
                {
                    def.Enable        = true;
                    def.ForceActivate = true;
                }));

                web.AddWebFeature(BuiltInWebFeatures.WikiPageHomePage.Inherit(def =>
                {
                    def.Enable        = true;
                    def.ForceActivate = true;
                }));

                // always deploy to root web
                FillWebWithTheTestwebPartSuite <TWebpartType>(web);

                if (UseSubWebs)
                {
                    // and then sub web too
                    web.AddRandomWeb(subWeb =>
                    {
                        subWeb.AddWebFeature(BuiltInWebFeatures.SharePointServerPublishing.Inherit(def =>
                        {
                            def.Enable        = true;
                            def.ForceActivate = true;
                        }));

                        subWeb.AddWebFeature(BuiltInWebFeatures.WikiPageHomePage.Inherit(def =>
                        {
                            def.Enable        = true;
                            def.ForceActivate = true;
                        }));

                        FillWebWithTheTestwebPartSuite <TWebpartType>(subWeb);
                    });
                }
            });

            WithDisabledPropertyUpdateValidation(() =>
            {
                TestModel(siteModel, model);
            });
        }
        protected LookupFieldEnvironment GetLookupFieldEnvironment(Action <LookupFieldEnvironment> action)
        {
            var result = new LookupFieldEnvironment();

            var dataList = ModelGeneratorService.GetRandomDefinition <ListDefinition>(def =>
            {
                def.TemplateType = BuiltInListTemplateTypeId.GenericList;
            });

            var masterList = ModelGeneratorService.GetRandomDefinition <ListDefinition>(def =>
            {
                def.TemplateType = BuiltInListTemplateTypeId.GenericList;
            });

            var lookupField = GetSingleSelectLookupDefinition(def =>
            {
                def.Indexed = false;
                //def.LookupListTitle = dataList.Title;
            });

            ModelNode childListNode = null;

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddField(lookupField);
            });

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddField(lookupField);
            });

            var childWebModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddList(dataList, list =>
                {
                    childListNode = list;

                    list
                    .AddRandomListItem()
                    .AddRandomListItem()
                    .AddRandomListItem();
                });
            });

            var masterWebModel = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddList(masterList, list =>
                {
                    list.AddListFieldLink(lookupField);
                });
            });

            result.LookupField = lookupField;

            result.ChildList      = dataList;
            result.ChildListNode  = childListNode;
            result.ChildListModel = childWebModel;


            result.MasterList      = masterList;
            result.MasterListModel = masterWebModel;

            result.SiteModel = siteModel;
            result.WebModel  = webModel;

            if (action != null)
            {
                action(result);
            }

            return(result);
        }
Esempio n. 4
0
        public void Create_Package_SPMeta2()
        {
            // Follows NuGet spec design - https://docs.nuget.org/ndocs/schema/nuspec
            // Solution package is a container for SERIALIZED models.
            var solutionPackage = new SolutionPackageBase();

            solutionPackage.Name  = "Contoso Intranet SPMeta2 - Site Fields";
            solutionPackage.Title = "Contoso Intranet SPMeta2 - Site Fields";

            solutionPackage.Description = "Contains site level fields for Contoso intranet";
            solutionPackage.Id          = "Contoso.Intranet.SiteFields.SPMeta2";
            solutionPackage.Authors     = "SubPoint Solutions";
            solutionPackage.Company     = "SubPoint Solutions";
            solutionPackage.Version     = "1.0.0.0";
            solutionPackage.Owners      = "SubPoint Solutions";

            solutionPackage.ReleaseNotes = "Initial set of the site fields for Contoso Intranet";
            solutionPackage.Summary      = "All site fields required for Contoso intranet";
            solutionPackage.ProjectUrl   = "https://github.com/SubPointSolutions/DefinitelyPacked";
            solutionPackage.IconUrl      = "https://github.com/SubPointSolutions/metapack/metapack.png";
            solutionPackage.LicenseUrl   = "https://opensource.org/licenses/MIT";

            solutionPackage.Copyright = "All yours";
            solutionPackage.Tags      = "MetaPack SPMeta2 SiteFields Taxonomy";

            // here are all your SPMeta2 models
            var models = new List <ModelNode>();

            // create a new ModelContainerBase for every model
            // and then add to solution package
            // you can put "Order" option to control deployment order of the models

            for (var index = 0; index < models.Count; index++)
            {
                var model      = models[index];
                var xmlContext = SPMeta2Model.ToXML(model);

                // create ModelContainerBase, put serialized model there
                var modelContainer = new ModelContainerBase
                {
                    Model = Encoding.UTF8.GetBytes(xmlContext),
                };

                // add sort order to control deployment order of the models
                modelContainer.AdditionalOptions.Add(new OptionValue
                {
                    Name  = DefaultOptions.Model.Order.Id,
                    Value = index.ToString()
                });

                // add model container to solution
                solutionPackage.AddModel(modelContainer);
            }

            // flag a provider which will be used for solution package deployment
            solutionPackage.AdditionalOptions.Add(new OptionValue
            {
                Name  = DefaultOptions.SolutionToolPackage.PackageId.Id,
                Value = "MetaPack.SPMeta2"
            });

            var solutionPackageService = new SPMeta2SolutionPackageService();

            // save your NuGet solution package as stream
            var nuGetPackageStream = solutionPackageService.Pack(solutionPackage, null);

            // or save it straight to file, for instance, on shared folder
            solutionPackageService.PackToFile(solutionPackage, "Contoso.Intranet.SiteFields.SPMeta2.nupkg");

            // or push it straight to NuGet gallery you've got - http://NuGet.org or http://MyGet.org
            // follow instructions on how obtain Url/Key for a specific NuGet Gallery
            var nuGetGallery_ApiUrl = "";
            var nuGetGallery_ApiKey = "";

            solutionPackageService.Push(solutionPackage, nuGetGallery_ApiUrl, nuGetGallery_ApiKey);
        }
        public void CanDeploy_DependentLookupField_OnContentType()
        {
            var lookupField = ModelGeneratorService.GetRandomDefinition<LookupFieldDefinition>(def =>
            {
                def.ShowInNewForm = true;
                def.ShowInDisplayForm = true;
                def.ShowInEditForm = true;
                def.ShowInListSettings = true;
                def.ShowInViewForms = true;

                def.Hidden = false;
                def.Required = false;
                def.AllowMultipleValues = false;
            });

            var contentTypeWithDepLookup = ModelGeneratorService.GetRandomDefinition<ContentTypeDefinition>(def =>
            {
                def.Hidden = false;
            });

            var dependentIdLookupField = ModelGeneratorService.GetRandomDefinition<DependentLookupFieldDefinition>(
                def =>
                {
                    def.LookupField = BuiltInInternalFieldNames.ID;
                    def.PrimaryLookupFieldId = lookupField.Id;
                    def.LookupWebId = lookupField.LookupWebId;
                    def.LookupWebUrl = lookupField.LookupWebUrl;
                    def.LookupList = lookupField.LookupList;
                    def.LookupListTitle = lookupField.LookupListTitle;
                    def.LookupListUrl = lookupField.LookupListUrl;
                });

            var dependentTitleLookupField = ModelGeneratorService.GetRandomDefinition<DependentLookupFieldDefinition>(
                def =>
                {
                    def.LookupField = BuiltInInternalFieldNames.Title;
                    def.PrimaryLookupFieldId = lookupField.Id;
                    def.LookupWebId = lookupField.LookupWebId;
                    def.LookupWebUrl = lookupField.LookupWebUrl;
                    def.LookupList = lookupField.LookupList;
                    def.LookupListTitle = lookupField.LookupListTitle;
                    def.LookupListUrl = lookupField.LookupListUrl;
                });

            var masterList = ModelGeneratorService.GetRandomDefinition<ListDefinition>();
            var childList = ModelGeneratorService.GetRandomDefinition<ListDefinition>(list =>
            {
                list.ContentTypesEnabled = true;
            });

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddLookupField(lookupField);

                site.AddDependentLookupField(dependentIdLookupField);
                site.AddDependentLookupField(dependentTitleLookupField);

                site.AddContentType(contentTypeWithDepLookup, contentType =>
                {
                    contentType
                        .AddContentTypeFieldLink(lookupField)
                        .AddContentTypeFieldLink(dependentIdLookupField)
                        .AddContentTypeFieldLink(dependentTitleLookupField);
                });
            });

            TestModel(siteModel);

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddList(masterList, list =>
                {
                    for (var i = 0; i < 10; i++)
                    {
                        list.AddListItem(new ListItemDefinition
                        {
                            Title = string.Format("master item {0} - {1}", i, Rnd.String())
                        });
                    }
                });

                web.AddList(childList, list =>
                {
                    // list.AddListFieldLink(lookupField);
                });
            });

            TestModel(webModel);

            // rebind lookup 
#pragma warning disable 618
            lookupField.LookupListUrl = masterList.GetListUrl();
#pragma warning restore 618

            TestModel(siteModel);

            // add dep field
            var depWebModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddList(childList, list =>
                {
                    list.AddContentTypeLink(contentTypeWithDepLookup);
                    list.AddUniqueContentTypeOrder(new UniqueContentTypeOrderDefinition
                    {
                        ContentTypes = new List<ContentTypeLinkValue>
                        {
                            new ContentTypeLinkValue { ContentTypeName = contentTypeWithDepLookup.Name }
                        }
                    });

                    //list.AddListFieldLink(dependentIdLookupField);
                    //list.AddListFieldLink(dependentTitleLookupField);

                    list.AddListView(new ListViewDefinition
                    {
                        Title = "Test View",
                        Fields = new Collection<string>
                        {
                            BuiltInInternalFieldNames.Edit,
                            BuiltInInternalFieldNames.ID,
                            BuiltInInternalFieldNames.Title,
                            lookupField.InternalName,
                            dependentIdLookupField.InternalName,
                            dependentTitleLookupField.InternalName
                        },
                        IsDefault = true
                    });
                });
            });

            TestModel(depWebModel);
        }
Esempio n. 6
0
        public void CanDeploy_Custom_WebTemplate_As_SaveAsTemplate()
        {
            // should be uploaded manually yet
            var customWebAsTemplateSolution = new SandboxSolutionDefinition
            {
                FileName   = Rnd.WspFileName(),
                Content    = File.ReadAllBytes(DefaultContainers.WebTemplates.M2CustomWebAsTemplate.FilePath),
                Activate   = true,
                SolutionId = DefaultContainers.WebTemplates.M2CustomWebAsTemplate.SolutionId
            };

            var customTeamSiteTemplateSolution = new SandboxSolutionDefinition
            {
                FileName   = Rnd.WspFileName(),
                Content    = File.ReadAllBytes(DefaultContainers.WebTemplates.M2CustomTeamSite.FilePath),
                Activate   = true,
                SolutionId = DefaultContainers.WebTemplates.M2CustomWebAsTemplate.SolutionId
            };

            var mainWeb = ModelGeneratorService.GetRandomDefinition <WebDefinition>(def =>
            {
                def.WebTemplate       = string.Empty;
                def.CustomWebTemplate = DefaultContainers.WebTemplates.M2CustomWebAsTemplate.WebTemplateName;
            });

            var subWeb = ModelGeneratorService.GetRandomDefinition <WebDefinition>(def =>
            {
                def.WebTemplate       = string.Empty;
                def.CustomWebTemplate = DefaultContainers.WebTemplates.M2CustomWebAsTemplate.WebTemplateName;
            });

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                // required by the team site template
                // might not be eabled due to publishing site collection
                var targetSiteFeatureIds = new[]
                {
                    new Guid("14aafd3a-fcb9-4bb7-9ad7-d8e36b663bbd"),
                    new Guid("b21b090c-c796-4b0f-ac0f-7ef1659c20ae"),
                    new Guid("{5f3b0127-2f1d-4cfd-8dd2-85ad1fb00bfc}"),
                    new Guid("{2ed1c45e-a73b-4779-ae81-1524e4de467a}"),
                    new Guid("{39d18bbf-6e0f-4321-8f16-4e3b51212393}"),

                    new Guid("{4248e21f-a816-4c88-8cab-79d82201da7b}"),
                    new Guid("{43f41342-1a37-4372-8ca0-b44d881e4434}"),
                    new Guid("{5a979115-6b71-45a5-9881-cdc872051a69}"),
                    new Guid("{3cb475e7-4e87-45eb-a1f3-db96ad7cf313}"),
                    new Guid("{4c42ab64-55af-4c7c-986a-ac216a6e0c0e}"),
                    new Guid("{9fec40ea-a949-407d-be09-6cba26470a0c}"),
                    new Guid("{875d1044-c0cf-4244-8865-d2a0039c2a49}"),
                    new Guid("{5eac763d-fbf5-4d6f-a76b-eded7dd7b0a5}"),
                    new Guid("{6e8f2b8d-d765-4e69-84ea-5702574c11d6}"),
                    new Guid("{744b5fd3-3b09-4da6-9bd1-de18315b045d}"),

                    new Guid("{8581a8a7-cf16-4770-ac54-260265ddb0b2}"),
                    new Guid("{2fcd5f8a-26b7-4a6a-9755-918566dba90a}"),
                    new Guid("{e995e28b-9ba8-4668-9933-cf5c146d7a9f}"),

                    //new Guid("{c9c9515d-e4e2-4001-9050-74f980f93160}"),
                };

                foreach (var featureId in targetSiteFeatureIds)
                {
                    site.AddSiteFeature(new FeatureDefinition
                    {
                        Id     = featureId,
                        Enable = true,
                        Scope  = FeatureDefinitionScope.Site
                    });
                }

                //site.AddSandboxSolution(solution);
            });

            var model = SPMeta2Model.NewWebModel(rootWeb =>
            {
                rootWeb.AddWeb(mainWeb, web =>
                {
                    web.AddWeb(subWeb);
                });
            });

            TestModel(siteModel, model);
        }
Esempio n. 7
0
        public void CanDeploy_ListFieldLink_AsAddToAllContentTypes()
        {
            var field = ModelGeneratorService.GetRandomDefinition <FieldDefinition>();

            field.AddToDefaultView = true;

            var listFieldLink = new ListFieldLinkDefinition
            {
                FieldId          = field.Id,
                AddFieldOptions  = BuiltInAddFieldOptions.AddToAllContentTypes,
                AddToDefaultView = true
            };

            var ct_1 = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.ParentContentTypeId = BuiltInContentTypeId.Item;
            });

            var ct_2 = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.ParentContentTypeId = BuiltInContentTypeId.Item;
            });

            var ct_3 = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.ParentContentTypeId = BuiltInContentTypeId.Item;
            });

            var genericList = ModelGeneratorService.GetRandomDefinition <ListDefinition>(def =>
            {
                def.ContentTypesEnabled = true;
                def.TemplateType        = BuiltInListTemplateTypeId.GenericList;
            });

            var siteModel = SPMeta2Model
                            .NewSiteModel(site =>
            {
                site.AddContentType(ct_1);
                site.AddContentType(ct_2);
                site.AddContentType(ct_3);

                site.AddField(field);
            });

            var webModel = SPMeta2Model
                           .NewWebModel(web =>
            {
                web.AddList(genericList, list =>
                {
                    list.AddContentTypeLink(ct_1);
                    list.AddContentTypeLink(ct_2);
                    list.AddContentTypeLink(ct_3);

                    list.AddListFieldLink(listFieldLink);
                });
            });

            // content types are deployed after fields
            // so, to test AddToAllContentTypes, we need to deploy content type first, and then the rest
            //var fieldLinkModel = SPMeta2Model
            //       .NewWebModel(web =>
            //       {
            //           web.AddHostList(genericList, list =>
            //           {

            //           });
            //       });

            TestModels(new[] { siteModel, webModel });
        }
        public void CanDeploy_ListViewWebPart_As_Calender_With_DateRangesOverlap()
        {
            // ListViewWebPartDefinition doesn't show calendar view #988
            // https://github.com/SubPointSolutions/spmeta2/issues/988

            var contentTypeDef = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.ParentContentTypeId = BuiltInContentTypeId.DocumentSet_Correct;
            });

            var listDef = ModelGeneratorService.GetRandomDefinition <ListDefinition>(def =>
            {
                //def.TemplateName = BuiltInListTemplates.DocumentLibrary.InternalName;
                //def.TemplateType = BuiltInListTemplateTypeId.DocumentLibrary;

                def.TemplateType        = BuiltInListTemplateTypeId.DocumentLibrary;
                def.ContentTypesEnabled = true;
            });

            var listViewDef = ModelGeneratorService.GetRandomDefinition <ListViewDefinition>(def =>
            {
                def.IsDefault = true;
                //def.MobileDefaultView = true;

                def.RowLimit = 2147483647;
                def.Query    = @"<Where>
                                <DateRangesOverlap>
                                    <FieldRef Name=""StartDate"" />
                                    <FieldRef Name=""_EndDate"" />
                                    <FieldRef Name=""RecurrenceID"" />
                                    <Value Type=""DateTime"">
                                        <Month />
                                    </Value>
                                </DateRangesOverlap>
                            </Where>";

                def.ViewData = @"<FieldRef Name=""Title"" Type=""CalendarMonthTitle""/>
<FieldRef Name=""Title"" Type=""CalendarWeekTitle""/>
<FieldRef Name=""Location"" Type=""CalendarWeekLocation""/>
<FieldRef Name=""Title"" Type=""CalendarDayTitle""/>
<FieldRef Name=""Location"" Type=""CalendarDayLocation""/>";

                def.IsPaged   = false;
                def.IsDefault = false;

                def.Fields = new System.Collections.ObjectModel.Collection <string> {
                    BuiltInFieldDefinitions.Title.InternalName,
                    BuiltInFieldDefinitions.StartDate.InternalName,
                    BuiltInFieldDefinitions._EndDate.InternalName,
                    BuiltInFieldDefinitions.Title.InternalName,

                    BuiltInFieldDefinitions.Location.InternalName,
                    BuiltInFieldDefinitions.fAllDayEvent.InternalName,
                    BuiltInFieldDefinitions.fRecurrence.InternalName,
                    BuiltInFieldDefinitions.EventType.InternalName
                };

                def.Type  = @"Html";
                def.Types = new Collection <string> {
                    "Calendar",
                    "Recurrence"
                };
            });


            var webpartPageDef = ModelGeneratorService.GetRandomDefinition <WebPartPageDefinition>(def =>
            {
            });

            var calendarWebPart = ModelGeneratorService.GetRandomDefinition <ListViewWebPartDefinition>(def =>
            {
                def.ListId  = null;
                def.ListUrl = null;

                def.ListTitle  = listDef.Title;
                def.ViewName   = listViewDef.Title;
                def.ChromeType = @"Default";

                //def.ZoneId = @"LeftColumn",
                //ZoneIndex = 0,
            });

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddContentType(contentTypeDef, contentType =>
                {
                    contentType
                    .AddContentTypeFieldLink(SPMeta2.BuiltInDefinitions.BuiltInFieldDefinitions.Title)
                    .AddContentTypeFieldLink(SPMeta2.BuiltInDefinitions.BuiltInFieldDefinitions.StartDate)
                    .AddContentTypeFieldLink(SPMeta2.BuiltInDefinitions.BuiltInFieldDefinitions._EndDate);
                });
            });

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddList(listDef, list =>
                {
                    list
                    .AddListFieldLink(BuiltInFieldDefinitions.Location)
                    .AddListFieldLink(BuiltInFieldDefinitions.fAllDayEvent)
                    .AddListFieldLink(BuiltInFieldDefinitions.fRecurrence)
                    .AddListFieldLink(BuiltInFieldDefinitions.EventType)

                    .AddContentTypeLink(contentTypeDef)
                    .AddListView(listViewDef);
                })
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list
                    .AddWebPartPage(webpartPageDef, page =>
                    {
                        page.AddWebPart(calendarWebPart);
                    });
                });
            });

            TestModel(siteModel, webModel);
        }
        public void Can_Reverse_Terms()
        {
            var siteTermStore = new TaxonomyTermStoreDefinition
            {
                Id   = null,
                Name = string.Empty,
                UseDefaultSiteCollectionTermStore = true
            };

            var termGroup1 = new TaxonomyTermGroupDefinition
            {
                Name = Rnd.String(),
                Id   = Rnd.Guid()
            };

            var termSet1 = new TaxonomyTermSetDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Contact     = Rnd.String(),
                Description = Rnd.String()
            };

            var term1 = new TaxonomyTermDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Description = Rnd.String()
            };

            var term2 = new TaxonomyTermDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Description = Rnd.String()
            };

            var term3 = new TaxonomyTermDefinition
            {
                Name        = Rnd.String(),
                Id          = Rnd.Guid(),
                Description = Rnd.String()
            };

            // only witin a tes term group
            // performance boost
            var groupName = termGroup1.Name;
            var options   = ReverseOptions.Default
                            .AddFilterOption <TaxonomyTermGroupDefinition>(g => g.Name == groupName);

            var model = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddTaxonomyTermStore(siteTermStore, store =>
                {
                    store.AddTaxonomyTermGroup(termGroup1, group =>
                    {
                        group.AddTaxonomyTermSet(termSet1, termSet =>
                        {
                            termSet.AddTaxonomyTerm(term1, t =>
                            {
                                t.AddTaxonomyTerm(term3);
                            });
                            termSet.AddTaxonomyTerm(term2);
                        });
                    });
                });
            });

            DeployReverseAndTestModel(model, options);
        }
Esempio n. 10
0
        public void CanDeploy_Default_PublishingPage_WithRequiredFields()
        {
            var siteFeature = BuiltInSiteFeatures.SharePointServerPublishingInfrastructure.Inherit(f => f.Enable());
            var webFeature  = BuiltInWebFeatures.SharePointServerPublishing.Inherit(f => f.Enable());

            var publishingPageLayoutContentType = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.Name   = string.Format("Required - {0}", Environment.TickCount);
                def.Hidden = false;
                def.ParentContentTypeId = BuiltInPublishingContentTypeId.ArticlePage;
            });

            var requiredText = ModelGeneratorService.GetRandomDefinition <TextFieldDefinition>(def =>
            {
                def.ShowInDisplayForm    = true;
                def.ShowInEditForm       = true;
                def.ShowInListSettings   = true;
                def.ShowInNewForm        = true;
                def.ShowInVersionHistory = true;
                def.ShowInViewForms      = true;

                def.ValidationFormula = null;
                def.ValidationMessage = null;

                def.Hidden = false;

                def.DefaultValue = string.Empty;
                def.Required     = true;
            });

            var publishingPageLayout = ModelGeneratorService.GetRandomDefinition <PublishingPageLayoutDefinition>(def =>
            {
                def.AssociatedContentTypeId = publishingPageLayoutContentType.GetContentTypeId();
            });

            var page = ModelGeneratorService.GetRandomDefinition <PublishingPageDefinition>(def =>
            {
                def.PageLayoutFileName = publishingPageLayout.FileName;

                def.DefaultValues.Add(new FieldValue()
                {
                    FieldName = requiredText.InternalName,
                    Value     = Rnd.String()
                });
            });

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddSiteFeature(siteFeature);

                site.AddField(requiredText);

                site.AddContentType(publishingPageLayoutContentType, contentType =>
                {
                    contentType.AddContentTypeFieldLink(requiredText);
                });
            });

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddWebFeature(webFeature);

                web.AddHostList(BuiltInListDefinitions.Calalogs.MasterPage, list =>
                {
                    list.AddPublishingPageLayout(publishingPageLayout);
                });

                web.AddHostList(BuiltInListDefinitions.Pages, list =>
                {
                    list.AddContentTypeLink(publishingPageLayoutContentType);

                    list.AddPublishingPage(page);
                });
            });

            TestModels(new[] { siteModel, webModel });
        }
        public void CanDeploy_XsltListViewWebPart_As_GridView()
        {
            // CSOM issue to get GridView on the XsltLIstViewWebPart done #725
            // https://github.com/SubPointSolutions/spmeta2/issues/725

            var sourceList = ModelGeneratorService.GetRandomDefinition <ListDefinition>(def =>
            {
                def.TemplateType = BuiltInListTemplateTypeId.GenericList;
            });

            var sourceListView = ModelGeneratorService.GetRandomDefinition <ListViewDefinition>(def =>
            {
                def.Title = Rnd.String();
                def.Type  = BuiltInViewType.Grid;

                def.IsDefault = false;

                def.TabularView = null;

                def.Fields = new Collection <string>
                {
                    BuiltInInternalFieldNames.ID,
                    BuiltInInternalFieldNames.Title
                };
            });

            var listViewWebpart = ModelGeneratorService.GetRandomDefinition <XsltListViewWebPartDefinition>(def =>
            {
                def.ListId    = Guid.Empty;
                def.ListTitle = sourceList.Title;
                def.ListUrl   = string.Empty;

                def.ViewName = sourceListView.Title;
                def.ViewId   = null;
            });

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddList(sourceList, list =>
                {
                    list.AddListView(sourceListView);
                })
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    var pageName = string.Empty;

                    list.AddRandomWebPartPage(page =>
                    {
                        pageName = (page.Value as WebPartPageDefinition).FileName;

                        page.AddXsltListViewWebPart(listViewWebpart);
                    });

                    list.AddDefinitionNode(new XsltListViewWebPartGridModePresenceDefinition
                    {
                        PageFileName       = pageName,
                        WebPartDefinitions = new List <WebPartDefinitionBase>(new[] { listViewWebpart })
                    }, def =>
                    {
                        def.RegExcludeFromEventsValidation();
                    });
                });
            });

            TestModel(model);
        }
        public void CanDeploy_WebNavigationSettings_As_TaxonomyProvider()
        {
            var globalTerm   = Rnd.String();
            var currentlTerm = Rnd.String();

            var currentNavigationGroup = new TaxonomyTermGroupDefinition
            {
                Name = string.Format("{0}", globalTerm)
            };

            var currentNavigationTermSet = new TaxonomyTermSetDefinition
            {
                Name = string.Format("{0}", globalTerm)
            };

            var globalNavigationGroup = new TaxonomyTermGroupDefinition
            {
                Name = string.Format("{0}", currentlTerm)
            };

            var globalNavigationTermSet = new TaxonomyTermSetDefinition
            {
                Name = string.Format("{0}", currentlTerm)
            };

            var taxWeb = ModelGeneratorService.GetRandomDefinition <WebDefinition>(def =>
            {
            });

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddSiteFeature(BuiltInSiteFeatures.SharePointServerPublishingInfrastructure.Inherit(def =>
                {
                    def.Enable = true;
                }));

                site.AddTaxonomyTermStore(new TaxonomyTermStoreDefinition
                {
                    UseDefaultSiteCollectionTermStore = true
                },
                                          store =>
                {
                    store.AddTaxonomyTermGroup(currentNavigationGroup, group =>
                    {
                        group.AddTaxonomyTermSet(currentNavigationTermSet, termSet =>
                        {
                            termSet.AddRandomTerm();
                            termSet.AddRandomTerm();
                            termSet.AddRandomTerm();
                        });
                    });

                    store.AddTaxonomyTermGroup(globalNavigationGroup, group =>
                    {
                        group.AddTaxonomyTermSet(globalNavigationTermSet, termSet =>
                        {
                            termSet.AddRandomTerm();
                            termSet.AddRandomTerm();
                            termSet.AddRandomTerm();
                        });
                    });
                });
            });

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddWeb(taxWeb, subWeb =>
                {
                    subWeb.AddSiteFeature(BuiltInWebFeatures.SharePointServerPublishing.Inherit(def =>
                    {
                        def.Enable = true;
                    }));

                    subWeb.AddWebNavigationSettings(new WebNavigationSettingsDefinition()
                    {
                        CurrentNavigationSource = BuiltInStandardNavigationSources.TaxonomyProvider,

                        CurrentNavigationUseDefaultSiteCollectionTermStore = true,
                        CurrentNavigationTermSetName = currentNavigationGroup.Name,

                        GlobalNavigationSource = BuiltInStandardNavigationSources.TaxonomyProvider,

                        GlobalNavigationUseDefaultSiteCollectionTermStore = true,
                        GlobalNavigationTermSetName = globalNavigationGroup.Name,

                        DisplayShowHideRibbonAction = true
                    });
                });
            });

            TestModel(siteModel, webModel);
        }
        private void Internal_TaxonomyFieldBinded_ById_Within_SiteCollectionGroup(bool isTermSet, bool isTerm)
        {
            var termSetName = Rnd.String();
            var termName    = Rnd.String();

            var termSet1Id = Rnd.Guid();
            var termSet2Id = Rnd.Guid();
            var termSet3Id = Rnd.Guid();

            var term1Id = Rnd.Guid();
            var term2Id = Rnd.Guid();
            var term3Id = Rnd.Guid();

            // same same names
            var termSet1 = new TaxonomyTermSetDefinition
            {
                Name        = termSetName,
                Description = Rnd.String(),
            };

            var termSet2 = new TaxonomyTermSetDefinition
            {
                Name        = termSetName,
                Id          = termSet2Id,
                Description = Rnd.String(),
            };

            var termSet3 = new TaxonomyTermSetDefinition
            {
                Name        = termSetName,
                Description = Rnd.String(),
            };

            var term1 = new TaxonomyTermDefinition
            {
                Name        = termName,
                Description = Rnd.String(),
                Id          = term1Id
            };

            var term2 = new TaxonomyTermDefinition
            {
                Name        = termName,
                Description = Rnd.String(),
                Id          = term2Id,
            };

            var term3 = new TaxonomyTermDefinition
            {
                Name        = termName,
                Description = Rnd.String(),
                Id          = term3Id
            };

            var termGroup1 = ModelGeneratorService.GetRandomDefinition <TaxonomyTermGroupDefinition>(def =>
            {
            });

            var termGroup2 = ModelGeneratorService.GetRandomDefinition <TaxonomyTermGroupDefinition>(def =>
            {
                def.IsSiteCollectionGroup = true;
            });

            var termGroup3 = ModelGeneratorService.GetRandomDefinition <TaxonomyTermGroupDefinition>(def =>
            {
            });

            // binding to the 2nd one
            var taxField = ModelGeneratorService.GetRandomDefinition <TaxonomyFieldDefinition>(def =>
            {
                def.IsSiteCollectionGroup = true;

                // these should be resolvbed as we are scoped to the 2nd group within site collection group

                if (isTermSet)
                {
                    def.TermSetId = termSet2.Id;
                }

                if (isTerm)
                {
                    def.TermId = term2.Id;
                }
            });

            var taxonomyModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddRandomTermStore(termStore =>
                {
                    termStore.AddTaxonomyTermGroup(termGroup1, group =>
                    {
                        group.AddTaxonomyTermSet(termSet1, t =>
                        {
                            t.AddTaxonomyTerm(term1);
                        });
                    });

                    termStore.AddTaxonomyTermGroup(termGroup2, group =>
                    {
                        group.AddTaxonomyTermSet(termSet2, t =>
                        {
                            t.AddTaxonomyTerm(term2);
                        });
                    });

                    termStore.AddTaxonomyTermGroup(termGroup3, group =>
                    {
                        group.AddTaxonomyTermSet(termSet3, t =>
                        {
                            t.AddTaxonomyTerm(term3);
                        });
                    });
                });
            });

            var fieldModel = SPMeta2Model
                             .NewSiteModel(site =>
            {
                site.AddTaxonomyField(taxField);
            });

            TestModels(new ModelNode[] { taxonomyModel, fieldModel });
        }
Esempio n. 14
0
        public void BooleanFieldDefinition_ShouldCheck_DefaultValue()
        {
            // Enhance BooleanFieldDefinition - add DefaultValue property validation #792
            // When creating a BooleanFieldDefinition you have to use "0" and "1" for DefaultValue
            // else it won't work. Neither "false" nor false.ToString() work,
            // so there should be an BuiltIn option for this.
            var checksTrueResult  = false;
            var checksFalseResult = false;

            var checks1Result = false;
            var checks0Result = false;

            var invalidData = new Dictionary <string, bool>();

            invalidData.Add("true", false);
            invalidData.Add("false", false);
            invalidData.Add("-1", false);
            invalidData.Add("-2", false);

            var validData = new Dictionary <string, bool>();

            validData.Add("1", false);
            validData.Add("0", false);

            // expected exception
            foreach (var data in invalidData.Keys.ToArray())
            {
                var booleanFieldDef = ModelGeneratorService.GetRandomDefinition <BooleanFieldDefinition>(def =>
                {
                });

                var model = SPMeta2Model.NewSiteModel(site =>
                {
                    site.AddField(booleanFieldDef);
                });

                var hasException = false;

                try
                {
                    booleanFieldDef.DefaultValue = data;
                    TestModel(model);
                }
                catch (Exception ex)
                {
                    hasException      = true;
                    invalidData[data] = IsValidException(ex);
                }

                if (!hasException)
                {
                    Assert.Fail(string.Format("Fail validating value:[{0}]", data));
                }
            }

            // no exception
            foreach (var data in validData.Keys.ToArray())
            {
                var booleanFieldDef = ModelGeneratorService.GetRandomDefinition <BooleanFieldDefinition>(def =>
                {
                });

                var model = SPMeta2Model.NewSiteModel(site =>
                {
                    site.AddField(booleanFieldDef);
                });

                var hasException = false;

                try
                {
                    booleanFieldDef.DefaultValue = data;
                    TestModel(model);
                }
                catch (Exception ex)
                {
                    hasException = true;
                }

                if (hasException)
                {
                    Assert.Fail(string.Format("Fail validating value:[{0}]", data));
                }

                validData[data] = true;
            }

            // sum up
            Assert.IsTrue(validData.Values.All(v => v == true) &&
                          invalidData.Values.All(v => v == true));
        }
Esempio n. 15
0
        public void CanPassTypedSyntax_SiteLevel()
        {
            var model = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddSharePointDesignerSettings(new SharePointDesignerSettingsDefinition());

                site.AddCoreProperty(new CorePropertyDefinition())
                .AddCoreProperty(new CorePropertyDefinition(), property =>
                {
                    property.AddProfileTypeProperty(new ProfileTypePropertyDefinition());
                });


                site.AddAuditSettings(new AuditSettingsDefinition());
                site.AddImageRendition(new ImageRenditionDefinition());

                site.AddRootWeb(new RootWebDefinition());

                site.AddEventReceiver(new EventReceiverDefinition());

                site
                .AddProperty(new PropertyDefinition())
                .AddProperty(new PropertyDefinition());

                site.AddFeature(new FeatureDefinition());
                site.AddSiteFeature(new FeatureDefinition());

                site.AddSecurityGroup(new SecurityGroupDefinition(), group =>
                {
                    group
                    .AddUser(new UserDefinition())
                    .AddUser(new UserDefinition());

                    // TODO

                    // .AddSecurityRoleLink() is missed on SecurityGroup #601
                    // https://github.com/SubPointSolutions/spmeta2/issues/601
                    group.AddSecurityRoleLink(new SecurityRoleLinkDefinition());
                    group.AddSecurityRoleLink(new SecurityRoleLinkDefinition());
                });

                site.AddSecurityRole(new SecurityRoleDefinition());

                site.AddWeb(new WebDefinition());

                site.AddField(new FieldDefinition());
                site.AddContentType(new ContentTypeDefinition(), contentType =>
                {
                    contentType
                    .AddContentTypeFieldLink(new ContentTypeFieldLinkDefinition())
                    .AddModuleFile(new ModuleFileDefinition())

                    .AddUniqueContentTypeFieldsOrder(new UniqueContentTypeFieldsOrderDefinition())
                    .AddHideContentTypeFieldLinks(new HideContentTypeFieldLinksDefinition())
                    .AddRemoveContentTypeFieldLinks(new RemoveContentTypeFieldLinksDefinition());
                });

                site.AddSandboxSolution(new SandboxSolutionDefinition());

                site.AddTaxonomyTermStore(new TaxonomyTermStoreDefinition(), store =>
                {
                    store.AddTaxonomyTermGroup(new TaxonomyTermGroupDefinition(), group =>
                    {
                        group.AddTaxonomyTermSet(new TaxonomyTermSetDefinition(), termSet =>
                        {
                            termSet.AddTaxonomyTerm(new TaxonomyTermDefinition(), term =>
                            {
                                term.AddTaxonomyTerm(new TaxonomyTermDefinition());

                                // .AddTaxonomyTermLabel() is missed on TaxonomyTermDefinition #602
                                // https://github.com/SubPointSolutions/spmeta2/issues/602
                                term.AddTaxonomyTermLabel(new TaxonomyTermLabelDefinition());
                            });
                        });
                    });
                });

                site.AddRootWeb(new RootWebDefinition());
                site.AddWeb(new WebDefinition());

                site.AddUserCustomAction(new UserCustomActionDefinition());
            });
        }
Esempio n. 16
0
        public void CanDeploy_Default_PublishingPageLayout_With_RequiredFieldValues()
        {
            var siteFeature = BuiltInSiteFeatures.SharePointServerPublishingInfrastructure.Inherit(f => f.Enable());
            var webFeature  = BuiltInWebFeatures.SharePointServerPublishing.Inherit(f => f.Enable());

            var requiredText = RItemValues.GetRequiredTextField(ModelGeneratorService);

            var text1 = RItemValues.GetRandomTextField(ModelGeneratorService);
            var text2 = RItemValues.GetRandomTextField(ModelGeneratorService);

            var contentTypeDef = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.ParentContentTypeId = BuiltInPublishingContentTypeId.PageLayout;
            });

            var publishingPageLayoutContentType = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.Name   = string.Format("Required - {0}", Environment.TickCount);
                def.Hidden = false;
                def.ParentContentTypeId = BuiltInPublishingContentTypeId.PageLayout;
            });

            var itemDef = ModelGeneratorService.GetRandomDefinition <PublishingPageLayoutDefinition>(def =>
            {
                def.ContentTypeName         = contentTypeDef.Name;
                def.AssociatedContentTypeId = publishingPageLayoutContentType.GetContentTypeId();

                def.DefaultValues.Add(new FieldValue()
                {
                    FieldName = requiredText.InternalName,
                    Value     = Rnd.String()
                });


                def.Values.Add(new FieldValue()
                {
                    FieldName = text1.InternalName,
                    Value     = Rnd.String()
                });

                def.Values.Add(new FieldValue()
                {
                    FieldName = text2.InternalName,
                    Value     = Rnd.String()
                });
            });

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddFeature(siteFeature);

                site.AddField(requiredText);
                site.AddField(text1);
                site.AddField(text2);

                site.AddContentType(contentTypeDef, contentType =>
                {
                    contentType.AddContentTypeFieldLink(requiredText);
                    contentType.AddContentTypeFieldLink(text1);
                    contentType.AddContentTypeFieldLink(text2);
                });
                site.AddContentType(publishingPageLayoutContentType);
            });

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddFeature(webFeature);

                web.AddList(BuiltInListDefinitions.Catalogs.MasterPage.Inherit(d =>
                {
                    d.ContentTypesEnabled = true;
                }), list =>
                {
                    list.AddContentTypeLink(contentTypeDef);
                    list.AddContentTypeLink(publishingPageLayoutContentType);

                    list.AddPublishingPageLayout(itemDef);
                });
            });

            TestModels(new ModelNode[] { siteModel, webModel });
        }
        public void ShouldPass_On_Valid_Xml()
        {
            var model = SPMeta2Model.NewWebModel(web =>
            {
                web.AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    // #1, web part XML
                    list.AddRandomWebPartPage(page =>
                    {
                        // web parts v2
                        page.AddWebPart(new WebPartDefinition
                        {
                            WebpartXmlTemplate = BuiltInWebPartTemplates.ContentEditorWebPart
                        });

                        // web parts v3
                        page.AddWebPart(new WebPartDefinition
                        {
                            WebpartXmlTemplate = BuiltInWebPartTemplates.ScriptEditorWebPart
                        });
                    });

                    // #2.1, bit of CAML in list view
                    list.AddRandomListView();

                    // #2.2 views with custom CAML
                    list.AddListView(new ListViewDefinition
                    {
                        Title = "Custom View",
                        Query = @"<GroupBy Collapse='TRUE' GroupLimit='30'>
                                    <FieldRef Name='STW_FAQCategory' />
                                    <FieldRef Name='STW_FAQQuestion' />
                                    </GroupBy>
                                    <OrderBy>
                                    <FieldRef Name='ID' />
                                    <FieldRef Name='STW_FAQQuestion' />
                                    </OrderBy>"
                    });

                    // #3.1, Raw field XML
                    list.AddField(new FieldDefinition
                    {
                        Id           = Guid.NewGuid(),
                        InternalName = Guid.NewGuid().ToString(),
                        FieldType    = BuiltInFieldTypes.Boolean,
                        RawXml       = @"<Field ID='{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}'
                                     Name='Amount'
                                     DisplayName='Amount'
                                     Type='Currency'
                                     Decimals='2'
                                     Min='0'
                                     Required='FALSE'
                                     Group='Financial Columns' />"
                    });

                    // #3.2, Raw field XML
                    list.AddField(new FieldDefinition
                    {
                        Id           = Guid.NewGuid(),
                        InternalName = Guid.NewGuid().ToString(),
                        FieldType    = BuiltInFieldTypes.Boolean,
                        RawXml       = @"<Field ID='{943E7530-5E2B-4C02-8259-CCD93A9ECB18}'
                                         Name='CostCenter'
                                         DisplayName='Cost Center'
                                         Type='Choice'
                                         Required='FALSE'
                                         Group='Financial Columns'>
                                    <CHOICES>
                                      <CHOICE>Administration</CHOICE>
                                      <CHOICE>Information</CHOICE>
                                      <CHOICE>Facilities</CHOICE>
                                      <CHOICE>Operations</CHOICE>
                                      <CHOICE>Sales</CHOICE>
                                      <CHOICE>Marketing</CHOICE>
                                    </CHOICES>
                                  </Field>"
                    });
                });
            });

            Service.DeployModel(null, model);
        }
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeploySimpleTaxonomyTerms()
        {
            // define term store
            var defaultSiteTermStore = new TaxonomyTermStoreDefinition
            {
                UseDefaultSiteCollectionTermStore = true
            };

            // define group
            var clientsGroup = new TaxonomyTermGroupDefinition
            {
                Name = "Clients"
            };

            // define term sets
            var smallBusiness = new TaxonomyTermSetDefinition
            {
                Name = "Small Business"
            };

            var mediumBusiness = new TaxonomyTermSetDefinition
            {
                Name = "Medium Business"
            };

            var enterpriseBusiness = new TaxonomyTermSetDefinition
            {
                Name = "Enterprise Business"
            };

            // define terms
            var microsoft = new TaxonomyTermDefinition
            {
                Name = "Microsoft"
            };

            var apple = new TaxonomyTermDefinition
            {
                Name = "Apple"
            };

            var oracle = new TaxonomyTermDefinition
            {
                Name = "Oracle"
            };

            var subPointSolutions = new TaxonomyTermDefinition
            {
                Name = "SubPoint Solutions"
            };

            // setup the model
            var model = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddTaxonomyTermStore(defaultSiteTermStore, termStore =>
                {
                    termStore.AddTaxonomyTermGroup(clientsGroup, group =>
                    {
                        group
                        .AddTaxonomyTermSet(smallBusiness, termSet =>
                        {
                            termSet.AddTaxonomyTerm(subPointSolutions);
                        })
                        .AddTaxonomyTermSet(mediumBusiness)
                        .AddTaxonomyTermSet(enterpriseBusiness, termSet =>
                        {
                            termSet
                            .AddTaxonomyTerm(microsoft)
                            .AddTaxonomyTerm(apple)
                            .AddTaxonomyTerm(oracle);
                        });
                    });
                });
            });

            DeployModel(model);
        }
Esempio n. 19
0
        public void OnModelProcessing_ProcessedModelNodeCount()
        {
            // ProcessedModelNodeCount is different for single provision operation #1066
            // https://github.com/SubPointSolutions/spmeta2/issues/1066

            var provisionService = new TestModelServiceBase();

            var hasProcessingEventHit = false;
            var hasProcessedEventHit  = false;

            var expectedProcessingReults = new Dictionary <int, int>()
            {
                { 1, 3 },
                { 2, 3 },
                { 3, 3 }
            };

            var expectedProcessedReults = new Dictionary <int, int>()
            {
                { 1, 3 },
                { 2, 3 },
                { 3, 3 }
            };

            var processingResults = new Dictionary <int, int>();
            var processedResults  = new Dictionary <int, int>();

            provisionService.OnModelNodeProcessing += (s, e) =>
            {
                processingResults.Add(e.ProcessedModelNodeCount, e.TotalModelNodeCount);
                hasProcessingEventHit = true;
            };

            provisionService.OnModelNodeProcessed += (s, e) =>
            {
                processedResults.Add(e.ProcessedModelNodeCount, e.TotalModelNodeCount);
                hasProcessedEventHit = true;
            };

            var model = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddRandomField();
                site.AddRandomField();
            });

            provisionService.ModelHandlers.Add(typeof(SiteDefinition), new EmptyModelhandler());
            provisionService.ModelHandlers.Add(typeof(FieldDefinition), new EmptyModelhandler());

            provisionService.DeployModel(null, model);

            // hits
            Assert.IsTrue(hasProcessingEventHit);
            Assert.IsTrue(hasProcessedEventHit);

            // processing / processed results
            foreach (var result in processingResults.Keys)
            {
                var resultTotal = processingResults[result];

                Assert.IsTrue(expectedProcessedReults.ContainsKey(result));
                Assert.IsTrue(expectedProcessedReults[result] == resultTotal);
            }

            foreach (var result in processedResults.Keys)
            {
                var resultTotal = processedResults[result];

                Assert.IsTrue(processedResults.ContainsKey(result));
                Assert.IsTrue(processedResults[result] == resultTotal);
            }
        }
        public void CanDeploy_CanSetupUniqueContentTypeFieldsOrder_At_OOTB_List_Scope()
        {
            var fieldDef = ModelGeneratorService.GetRandomDefinition <FieldDefinition>(def =>
            {
                def.Hidden = false;

                def.ShowInDisplayForm  = true;
                def.ShowInEditForm     = true;
                def.ShowInListSettings = true;
                def.ShowInNewForm      = true;
                def.ShowInViewForms    = true;

                def.AddFieldOptions = BuiltInAddFieldOptions.AddToAllContentTypes
                                      | BuiltInAddFieldOptions.AddFieldInternalNameHint;
            });

            var listDef = ModelGeneratorService.GetRandomDefinition <ListDefinition>(def =>
            {
                def.ContentTypesEnabled = false;
                def.TemplateType        = BuiltInListTemplateTypeId.GenericList;
            });

            var contentTypeLinkDef = new ContentTypeLinkDefinition
            {
                ContentTypeName = BuiltInContentTypeNames.Item,
                ContentTypeId   = BuiltInContentTypeId.Item
            };

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                // adding field first
                web.AddList(listDef, list =>
                {
                    list.AddField(fieldDef, field =>
                    {
                    });
                });

                // then working with the content type
                web.AddList(listDef.Inherit(), list =>
                {
                    list.AddContentTypeLink(contentTypeLinkDef, contenTypeLink =>
                    {
                        contenTypeLink.RegExcludeFromEventsValidation();

                        contenTypeLink.AddUniqueContentTypeFieldsOrder(new UniqueContentTypeFieldsOrderDefinition
                        {
                            Fields = new List <FieldLinkValue>
                            {
                                new FieldLinkValue {
                                    InternalName = fieldDef.InternalName
                                },
                                new FieldLinkValue {
                                    InternalName = "Title"
                                },
                            }
                        });
                    });
                });
            });

            TestModel(webModel);
        }
Esempio n. 21
0
        private ContentTypeEnvironment GetContentTypeLinksSandbox(
            Action <ModelNode, ContentTypeEnvironment> siteModelConfig,
            Action <ModelNode, ContentTypeEnvironment> webModelConfig,
            Action <ModelNode, ContentTypeEnvironment> listModelConfig)
        {
            var result = new ContentTypeEnvironment();

            // site model

            ContentTypeDefinition ctFirst  = null;
            ContentTypeDefinition ctSecond = null;
            ContentTypeDefinition ctThird  = null;

            var siteModel = SPMeta2Model
                            .NewSiteModel(site =>
            {
                site
                .AddRandomContentType(ct => { ctFirst = ct.Value as ContentTypeDefinition; })
                .AddRandomContentType(ct => { ctSecond = ct.Value as ContentTypeDefinition; })
                .AddRandomContentType(ct => { ctThird = ct.Value as ContentTypeDefinition; });
            });

            ctFirst.Name  = "first_" + ctFirst.Name;
            ctSecond.Name = "second_" + ctSecond.Name;
            ctThird.Name  = "third_" + ctThird.Name;

            result.First  = ctFirst;
            result.Second = ctSecond;
            result.Third  = ctThird;

            result.SiteModel = siteModel;

            if (siteModelConfig != null)
            {
                siteModelConfig(result.SiteModel, result);
            }

            // web model
            var webModel = SPMeta2Model
                           .NewWebModel(web =>
            {
                web
                .AddRandomList(list =>
                {
                    list
                    .AddContentTypeLink(ctFirst, link =>
                    {
                        result.FirstLink = link;
                        link.Options.RequireSelfProcessing = link.Value.RequireSelfProcessing = true;
                    })
                    .AddContentTypeLink(ctSecond, link =>
                    {
                        result.SecondLink = link;
                        link.Options.RequireSelfProcessing = link.Value.RequireSelfProcessing = true;
                    })
                    .AddContentTypeLink(ctThird, link =>
                    {
                        result.ThirdLink = link;
                        link.Options.RequireSelfProcessing = link.Value.RequireSelfProcessing = true;
                    });

                    result.List = list.Value as ListDefinition;

                    if (listModelConfig != null)
                    {
                        listModelConfig(list, result);
                    }
                });
            });

            result.WebModel = webModel;

            if (webModelConfig != null)
            {
                webModelConfig(result.WebModel, result);
            }

            return(result);
        }
        public void CanDeploy_CanSetupUniqueContentTypeFieldsOrder_At_List_Scope()
        {
            // Support 'UniqueContentTypeFieldsOrderDefinition' at list level content types #742
            // https://github.com/SubPointSolutions/spmeta2/issues/742

            WithDisabledPropertyUpdateValidation(() =>
            {
                var first  = string.Empty;
                var second = string.Empty;

                var env = GetContentTypeSandbox(
                    (siteModel, e) =>
                {
                },
                    (contentTypeModel, e) =>
                {
                    first  = e.First.InternalName;
                    second = e.Second.InternalName;

                    contentTypeModel
                    .AddUniqueContentTypeFieldsOrder(new UniqueContentTypeFieldsOrderDefinition
                    {
                        Fields = new List <FieldLinkValue>
                        {
                            new FieldLinkValue {
                                InternalName = e.Second.InternalName
                            },
                            new FieldLinkValue {
                                InternalName = e.First.InternalName
                            },
                        }
                    });
                });

                var webModel = SPMeta2Model.NewWebModel(web =>
                {
                    web.AddRandomList(list =>
                    {
                        (list.Value as ListDefinition).ContentTypesEnabled = true;

                        list.AddContentTypeLink(env.ContentType, contenTypeLink =>
                        {
                            contenTypeLink.AddUniqueContentTypeFieldsOrder(new UniqueContentTypeFieldsOrderDefinition
                            {
                                Fields = new List <FieldLinkValue>
                                {
                                    new FieldLinkValue {
                                        InternalName = first
                                    },
                                    new FieldLinkValue {
                                        InternalName = second
                                    },
                                }
                            });
                        });
                    });
                });

                TestModel(env.SiteModel, webModel);
            });
        }
Esempio n. 23
0
        public void CanDeploy_Default_WebPartPage_With_RequiredFieldValues()
        {
            var requiredText = RItemValues.GetRequiredTextField(ModelGeneratorService);

            var text1 = RItemValues.GetRandomTextField(ModelGeneratorService);
            var text2 = RItemValues.GetRandomTextField(ModelGeneratorService);


            var contentTypeDef = ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>(def =>
            {
                def.ParentContentTypeId = BuiltInContentTypeId.Item;
            });

            var itemDef = ModelGeneratorService.GetRandomDefinition <WebPartPageDefinition>(def =>
            {
                def.ContentTypeName = contentTypeDef.Name;

                def.DefaultValues.Add(new FieldValue()
                {
                    FieldName = requiredText.InternalName,
                    Value     = Rnd.String()
                });

                def.Values.Add(new FieldValue()
                {
                    FieldName = text1.InternalName,
                    Value     = Rnd.String()
                });

                def.Values.Add(new FieldValue()
                {
                    FieldName = text2.InternalName,
                    Value     = Rnd.String()
                });
            });

            var listDef = ModelGeneratorService.GetRandomDefinition <ListDefinition>(def =>
            {
                def.ContentTypesEnabled = true;
                def.TemplateType        = BuiltInListTemplateTypeId.DocumentLibrary;
            });

            var siteModel = SPMeta2Model.NewSiteModel(site =>
            {
                site.AddField(requiredText);
                site.AddField(text1);
                site.AddField(text2);

                site.AddContentType(contentTypeDef, contentType =>
                {
                    contentType.AddContentTypeFieldLink(requiredText);
                    contentType.AddContentTypeFieldLink(text1);
                    contentType.AddContentTypeFieldLink(text2);
                });
            });

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddHostList(BuiltInListDefinitions.SitePages.Inherit(d =>
                {
                    d.ContentTypesEnabled = true;
                }), list =>
                {
                    list.AddContentTypeLink(contentTypeDef);
                    list.AddWebPartPage(itemDef);
                });
            });

            TestModel(siteModel, webModel);
        }
        public void CanDeploy_ContentType_And_Rename()
        {
            // Enhance ContentTypeDefinition - support Name renaming #924
            // https://github.com/SubPointSolutions/spmeta2/issues/924

            // we should be able to deploy and then rename content types
            // 3 waves of deployment: original, and two renames
            // all should work, including model validations with the new Names

            // we need to add content type field links to ensure two paths:
            // 1) model handler provisions content types
            // 2) model handler resolves content type to pass further to the provision flow

            var originalContentTypes = new List <ContentTypeDefinition>();

            originalContentTypes.Add(ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>());
            originalContentTypes.Add(ModelGeneratorService.GetRandomDefinition <ContentTypeDefinition>());

            var firstRenames = originalContentTypes.Select(d =>
            {
                return(d.Inherit(def =>
                {
                    def.Name = Rnd.String();
                }));
            });

            var secondRenames = originalContentTypes.Select(d =>
            {
                return(d.Inherit(def =>
                {
                    def.Name = Rnd.String();
                }));
            });

            // deploy and test original content types
            var originalModel = SPMeta2Model.NewSiteModel(site =>
            {
                foreach (var ct in originalContentTypes)
                {
                    site.AddContentType(ct, contentType =>
                    {
                        contentType.AddContentTypeFieldLink(BuiltInFieldId.Title);
                    });
                }
            });

            TestModel(originalModel);

            // deploy and test first renames
            var firstRenamesModel = SPMeta2Model.NewSiteModel(site =>
            {
                foreach (var ct in firstRenames)
                {
                    site.AddContentType(ct, contentType =>
                    {
                        contentType.AddContentTypeFieldLink(BuiltInFieldId.Title);
                    });
                }
            });

            TestModel(firstRenamesModel);

            // deploy and test first renames
            var secondRenamesModel = SPMeta2Model.NewSiteModel(site =>
            {
                foreach (var ct in secondRenames)
                {
                    site.AddContentType(ct, contentType =>
                    {
                        contentType.AddContentTypeFieldLink(BuiltInFieldId.Title);
                    });
                }
            });

            TestModel(secondRenamesModel);
        }
        public void CanDeploy_DependentLookupField_OnList()
        {
            var masterList = ModelGeneratorService.GetRandomDefinition<ListDefinition>();
            var childList = ModelGeneratorService.GetRandomDefinition<ListDefinition>();

            var lookupField = ModelGeneratorService.GetRandomDefinition<LookupFieldDefinition>(def =>
            {
                def.ShowInNewForm = true;
                def.ShowInDisplayForm = true;
                def.ShowInEditForm = true;
                def.ShowInListSettings = true;
                def.ShowInViewForms = true;

                def.Hidden = false;
                def.Required = false;
                def.AllowMultipleValues = false;

#pragma warning disable 618
                def.LookupListUrl = masterList.GetListUrl();
#pragma warning restore 618
            });

            var dependentIdLookupField = ModelGeneratorService.GetRandomDefinition<DependentLookupFieldDefinition>(
                def =>
                {
                    def.LookupField = BuiltInInternalFieldNames.ID;
                    def.PrimaryLookupFieldId = lookupField.Id;
                });

            var dependentTitleLookupField = ModelGeneratorService.GetRandomDefinition<DependentLookupFieldDefinition>(
                def =>
                {
                    def.LookupField = BuiltInInternalFieldNames.Title;
                    def.PrimaryLookupFieldId = lookupField.Id;
                });

            var webModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddList(masterList, list =>
                {
                    for (var i = 0; i < 10; i++)
                    {
                        list.AddListItem(new ListItemDefinition
                        {
                            Title = string.Format("master item {0} - {1}", i, Rnd.String())
                        });
                    }
                });

                web.AddList(childList, list =>
                {
                    list.AddField(lookupField);
                });
            });

            TestModel(webModel);

            // add dep field
            var depWebModel = SPMeta2Model.NewWebModel(web =>
            {
                web.AddList(childList, list =>
                {
                    list.AddField(dependentIdLookupField);
                    list.AddField(dependentTitleLookupField);

                    list.AddListView(new ListViewDefinition
                    {
                        Title = "Test View",
                        Fields = new Collection<string>
                        {
                            BuiltInInternalFieldNames.Edit,
                            BuiltInInternalFieldNames.ID,
                            BuiltInInternalFieldNames.Title,
                            lookupField.InternalName,
                            dependentIdLookupField.InternalName,
                            dependentTitleLookupField.InternalName
                        },
                        IsDefault = true
                    });
                });
            });

            TestModel(depWebModel);
        }
        public void CanDeploy_WebpartToWikiPageContent_As_AddToPageContent()
        {
            // Some web part provision on wiki page give empty markup
            // https://github.com/SubPointSolutions/spmeta2/issues/693

            // web part ID, zone and AddToPageContent must be as such
            // you can move these params into your web part definition

            var listViewWebPartDef = new ListViewWebPartDefinition
            {
                Title            = String.Format("ListViewWebPartDefinition - {0}", Rnd.String()),
                Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_'),
                ZoneIndex        = 10,
                ZoneId           = "wpz",
                AddToPageContent = true,
                ListUrl          = BuiltInListDefinitions.SitePages.CustomUrl
            };

            var webModel = SPMeta2Model
                           .NewWebModel(web =>
            {
                web
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list
                    .AddRandomWikiPage(page =>
                    {
                        page.RegExcludeFromValidation();

                        page
                        .AddListViewWebPart(listViewWebPartDef)
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');
                            wp.ZoneId           = "wpz";
                            wp.AddToPageContent = true;
                        })
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');
                            wp.ZoneId           = "wpz";
                            wp.AddToPageContent = true;
                        })
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');
                            wp.ZoneId           = "wpz";
                            wp.AddToPageContent = true;
                        })
                        ;
                    });
                });
            });

            TestModel(webModel);
        }
Esempio n. 27
0
        private ContentTypeEnvironment GetContentTypeSandbox(
            Action <ModelNode, ContentTypeEnvironment> siteModelConfig,
            Action <ModelNode, ContentTypeEnvironment> contentTypeModelConfig)
        {
            var result = new ContentTypeEnvironment();

            // site model

            FieldDefinition fldFirst  = null;
            FieldDefinition fldSecond = null;
            FieldDefinition fldThird  = null;

            var siteModel = SPMeta2Model
                            .NewSiteModel(site =>
            {
                site
                .AddRandomField(ct => { fldFirst = ct.Value as FieldDefinition; })
                .AddRandomField(ct => { fldSecond = ct.Value as FieldDefinition; })
                .AddRandomField(ct => { fldThird = ct.Value as FieldDefinition; })
                .AddRandomContentType(contentType =>
                {
                    fldFirst.Title  = "first_" + fldFirst.Title;
                    fldSecond.Title = "second_" + fldSecond.Title;
                    fldThird.Title  = "third_" + fldThird.Title;

                    result.First  = fldFirst;
                    result.Second = fldSecond;
                    result.Third  = fldThird;

                    result.ContentType = contentType.Value as ContentTypeDefinition;

                    contentType
                    .AddContentTypeFieldLink(fldFirst, link =>
                    {
                        result.FirstLink = link;
                        link.Options.RequireSelfProcessing = link.Value.RequireSelfProcessing = true;
                    })
                    .AddContentTypeFieldLink(fldSecond, link =>
                    {
                        result.SecondLink = link;
                        link.Options.RequireSelfProcessing = link.Value.RequireSelfProcessing = true;
                    })
                    .AddContentTypeFieldLink(fldThird, link =>
                    {
                        result.ThirdLink = link;
                        link.Options.RequireSelfProcessing = link.Value.RequireSelfProcessing = true;
                    });

                    if (contentTypeModelConfig != null)
                    {
                        contentTypeModelConfig(contentType, result);
                    }
                });
            });

            result.SiteModel = siteModel;

            if (siteModelConfig != null)
            {
                siteModelConfig(result.SiteModel, result);
            }

            return(result);
        }
Esempio n. 28
0
        public void CanPassTypedSyntax_WebLevel()
        {
            var model = SPMeta2Model.NewWebModel(web =>
            {
                web.AddClearRecycleBin(new ClearRecycleBinDefinition());

                web
                .AddAnonymousAccessSettings(new AnonymousAccessSettingsDefinition())
                .AddAnonymousAccessSettings(new AnonymousAccessSettingsDefinition());

                web.AddAuditSettings(new AuditSettingsDefinition());
                web.AddWebNavigationSettings(new WebNavigationSettingsDefinition());
                web.AddPageLayoutAndSiteTemplateSettings(new PageLayoutAndSiteTemplateSettingsDefinition());

                web.AddRootWeb(new RootWebDefinition());

                web.AddComposedLookItemLink(new ComposedLookItemLinkDefinition());

                web.AddTreeViewSettings(new TreeViewSettingsDefinition());

                web.AddTopNavigationNode(new TopNavigationNodeDefinition());
                web.AddQuickLaunchNavigationNode(new QuickLaunchNavigationNodeDefinition());

                web.AddMasterPageSettings(new MasterPageSettingsDefinition());
                web.AddRegionalSettings(new RegionalSettingsDefinition());

                web.AddSP2013Workflow(new SP2013WorkflowDefinition());
                web.AddWelcomePage(new WelcomePageDefinition());

                web.AddEventReceiver(new EventReceiverDefinition());

                web
                .AddProperty(new PropertyDefinition())
                .AddProperty(new PropertyDefinition());

                web.AddFeature(new FeatureDefinition());
                web.AddWebFeature(new FeatureDefinition());

                //web.AddSecurityGroup(new SecurityGroupDefinition());
                //web.AddSecurityRole(new SecurityRoleDefinition());

                web.AddWeb(new WebDefinition());

                web.AddField(new FieldDefinition());
                web.AddContentType(new ContentTypeDefinition());

                web.AddUserCustomAction(new UserCustomActionDefinition());

                web.AddList(new ListDefinition(), list =>
                {
                    list.AddDiscussionItem(new DiscussionItemDefinition(), item =>
                    {
                        item.AddDiscussionReplyItem(new DiscussionReplyItemDefinition());
                    });

                    list.AddDocumentSet(new DocumentSetDefinition());

                    list.AddAuditSettings(new AuditSettingsDefinition());

                    list.AddMasterPage(new MasterPageDefinition());
                    list.AddHtmlMasterPage(new HtmlMasterPageDefinition());

                    list
                    .AddProperty(new PropertyDefinition())
                    .AddProperty(new PropertyDefinition());


                    list.AddUniqueContentTypeOrder(new UniqueContentTypeOrderDefinition());
                    list.AddHideContentTypeLinks(new HideContentTypeLinksDefinition());
                    list.AddRemoveContentTypeLinks(new RemoveContentTypeLinksDefinition());

                    list.AddModuleFile(new ModuleFileDefinition(), moduleFile =>
                    {
                        moduleFile.AddSecurityGroupLink(new SecurityGroupDefinition(), group =>
                        {
                            group
                            .AddSecurityRoleLink(BuiltInSecurityRoleNames.Edit)
                            .AddSecurityRoleLink(BuiltInSecurityRoleNames.Design)
                            .AddSecurityRoleLink(BuiltInSecurityRoleNames.Approve);
                        });
                    });

                    list.AddUserCustomAction(new UserCustomActionDefinition());

                    list.AddReusableHTMLItem(new ReusableHTMLItemDefinition());
                    list.AddReusableTextItem(new ReusableTextItemDefinition());

                    list.AddPublishingPage(new PublishingPageDefinition());
                    list.AddPublishingPageLayout(new PublishingPageLayoutDefinition());

                    list.AddComposedLookItem(new ComposedLookItemDefinition());

                    list.AddWelcomePage(new WelcomePageDefinition());

                    list.AddEventReceiver(new EventReceiverDefinition());

                    list.AddField(new FieldDefinition());
                    list.AddContentTypeLink(new ContentTypeLinkDefinition());

                    list.AddListView(new ListViewDefinition(), listView =>
                    {
                        // Enhance 'WebPartDefinition' provision - enabne privision under list views #590
                        // https://github.com/SubPointSolutions/spmeta2/issues/590

                        listView.AddDeleteWebParts(new DeleteWebPartsDefinition());
                        listView.AddWebPart(new WebPartDefinition());
                    });

                    list.AddListItem(new ListItemDefinition(), listItem =>
                    {
                        listItem
                        .AddListItemFieldValue(new ListItemFieldValueDefinition())
                        .AddListItemFieldValues(new ListItemFieldValuesDefinition());
                    });

                    list.AddFolder(new FolderDefinition(), folder =>
                    {
                        folder
                        .AddProperty(new PropertyDefinition())
                        .AddProperty(new PropertyDefinition())

                        .AddDocumentSet(new DocumentSetDefinition())

                        .AddWelcomePage(new WelcomePageDefinition())
                        .AddFolder(new FolderDefinition())
                        .AddListItem(new ListItemDefinition());
                    });

                    list.AddWebPartPage(new WebPartPageDefinition(), page =>
                    {
                        page.AddDeleteWebParts(new DeleteWebPartsDefinition());
                        page.AddWebPart(new WebPartDefinition());
                    });

                    list.AddWikiPage(new WikiPageDefinition(), page =>
                    {
                        page.AddDeleteWebParts(new DeleteWebPartsDefinition());
                        page.AddWebPart(new WebPartDefinition());
                    });

                    list.AddPublishingPage(new PublishingPageDefinition(), page =>
                    {
                        page.AddDeleteWebParts(new DeleteWebPartsDefinition());
                        page.AddWebPart(new WebPartDefinition());
                    });
                });
            });
        }
Esempio n. 29
0
        public void CanDeploy_WebpartToPublishingPageContent()
        {
            var webModel = SPMeta2Model
                           .NewWebModel(web =>
            {
                web
                .AddHostList(BuiltInListDefinitions.Pages, list =>
                {
                    list
                    .AddRandomPublishingPage(page =>
                    {
                        var id_1 = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');
                        var id_2 = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');

                        var id_3 = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');

                        var wpId11 = id_1
                                     .Replace("g_", string.Empty)
                                     .Replace("_", "-");

                        var wpId22 = id_2
                                     .Replace("g_", string.Empty)
                                     .Replace("_", "-");

                        var pageTemplate = new StringBuilder();

                        pageTemplate.AppendFormat("​​​​​​​​​​​​​​​​​​​​​​<div class='ms-rtestate-read ms-rte-wpbox' contentEditable='false'>");
                        pageTemplate.AppendFormat("     <div class='ms-rtestate-read {0}' id='div_{0}'>", wpId11);
                        pageTemplate.AppendFormat("     </div>");
                        pageTemplate.AppendFormat("</div>");

                        pageTemplate.AppendFormat("<div>");
                        pageTemplate.AppendFormat(" SPMeta2 publishing page.");
                        pageTemplate.AppendFormat("</div>");

                        pageTemplate.AppendFormat("​​​​​​​​​​​​​​​​​​​​​​<div class='ms-rtestate-read ms-rte-wpbox' contentEditable='false'>");
                        pageTemplate.AppendFormat("     <div class='ms-rtestate-read {0}' id='div_{0}'>", wpId22);
                        pageTemplate.AppendFormat("     </div>");
                        pageTemplate.AppendFormat("</div>");

                        (page.Value as PublishingPageDefinition).Content = pageTemplate.ToString();

                        page
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.ZoneId           = "wpz";
                            wp.Id               = id_1;
                            wp.AddToPageContent = true;
                        })
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.ZoneId           = "wpz";
                            wp.Id               = id_2;
                            wp.AddToPageContent = true;
                        })
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.ZoneId           = "wpz";
                            wp.Id               = id_3;
                            wp.AddToPageContent = true;
                        });
                    });
                });
            });

            TestModel(webModel);
        }
        protected virtual IEnumerable<Stream> CreateMetaPackPackages()
        {
            var result = new List<Stream>();

            // pack model
            var solutionPackage = GetSolutionPackageTemplate();

            // update version and add model
            solutionPackage.Version = "0.1.0-beta1";

            var assemblyDirectoryPath = Path.GetDirectoryName(GetType().Assembly.Location);
            var jQueryDirectoryPath = Path.Combine(assemblyDirectoryPath, "jQuery");

            if (!Directory.Exists(jQueryDirectoryPath))
                throw new Exception(string.Format("Cannot find directory:[{0}]", jQueryDirectoryPath));

            var jQueryVersionFolderPaths = Directory.GetDirectories(jQueryDirectoryPath);

            foreach (var versionFolderPath in jQueryVersionFolderPaths)
            {
                var jQueryVersion = Path.GetFileName(versionFolderPath);

                var versionFolderName = (new DirectoryInfo(versionFolderPath)).Name;
                var filePaths = Directory.GetFiles(versionFolderPath, "*.*");

                // create model
                var webModel = SPMeta2Model.NewWebModel(web =>
                {
                    web.AddHostList(BuiltInListDefinitions.StyleLibrary, list =>
                    {
                        list.AddFolder(new FolderDefinition { Name = "jQuery" }, jQueryFolder =>
                        {
                            jQueryFolder.AddFolder(new FolderDefinition { Name = versionFolderName }, folder =>
                            {
                                foreach (var filePath in filePaths)
                                {
                                    folder.AddModuleFile(new ModuleFileDefinition
                                    {
                                        FileName = Path.GetFileName(filePath),
                                        Content = File.ReadAllBytes(filePath)
                                    });
                                }
                            });
                        });
                    });
                });

                // save solution to XML file
                var xmlContext = SPMeta2Model.ToXML(webModel);



                // create ModelContainerBase, put serialized model there
                var modelContainer = new ModelContainerBase
                {
                    Model = Encoding.UTF8.GetBytes(xmlContext),
                };

                modelContainer.AdditionalOptions.Add(new OptionValue
                {
                    Name = "_metapack.model.id",
                    Value = string.Format("jQuery.{0}", jQueryVersion)
                });

                solutionPackage.AddModel(modelContainer);
            }

            // pack to NuGet package
            var packageService = new SPMeta2SolutionPackageService();
            var solutionPackageStream = packageService.Pack(solutionPackage);

            // add to result strems
            result.Add(solutionPackageStream);

            return result;
        }