예제 #1
0
        public void GetById_GetsById()
        {
            var id       = Guid.NewGuid();
            var metaData = new Models.UI.MetaData
            {
                DisplayInfo = new Models.UI.DisplayInfo
                {
                    PageTemplateId     = "my-template-id",
                    SystemRequirements = new List <Models.UI.SystemRequirement>
                    {
                        new Models.UI.SystemRequirement {
                            Name = "TestRequirement", Value = "TestValue"
                        }
                    }
                }
            };

            using (var db = TestHarness.GetPortalContext())
            {
                db.Packages.AddRange(
                    TestHarness.CreatePackageModel(id: id, metaData: metaData, platformIds: new List <string> {
                    TestPlatformId
                }),
                    TestHarness.CreatePackageModel(platformIds: new List <string> {
                    TestPlatformId
                })
                    );

                db.SaveChanges();
            }

            var package = service.GetById(id).GetAwaiter().GetResult();

            Assert.IsNotNull(package);
            Assert.AreEqual(id, package.Id);

            Assert.IsNotNull(package.DisplayInfo);
            Assert.AreEqual(metaData.DisplayInfo.PageTemplateId, package.DisplayInfo.PageTemplateId);
            Assert.AreEqual(1, package.DisplayInfo.SystemRequirements.Count);
            Assert.AreEqual("TestRequirement", package.DisplayInfo.SystemRequirements[0].Name);
            Assert.AreEqual("TestValue", package.DisplayInfo.SystemRequirements[0].Value);
        }
예제 #2
0
        public void GetFromQuery_FiltersOutPreviewProperly()
        {
            var metaData = new Models.UI.MetaData
            {
                DisplayInfo = new Models.UI.DisplayInfo
                {
                    PageTemplateId     = "my-template-id",
                    SystemRequirements = new List <Models.UI.SystemRequirement>
                    {
                        new Models.UI.SystemRequirement {
                            Name = "TestRequirement", Value = "TestValue"
                        }
                    }
                }
            };

            using (var db = TestHarness.GetPortalContext())
            {
                db.Packages.AddRange(
                    TestHarness.CreatePackageModel(preview: true, platformIds: new List <string> {
                    TestPlatformId
                }),
                    TestHarness.CreatePackageModel(platformIds: new List <string> {
                    TestPlatformId
                })
                    );
                db.SaveChanges();
            }

            var packages = service.GetFromQuery().GetAwaiter().GetResult();

            Assert.AreEqual(1, packages.Count());

            packages = service.GetFromQuery(doIncludePreview: true).GetAwaiter().GetResult();
            Assert.AreEqual(2, packages.Count());
        }
        public void SeedDevData()
        {
            Platforms.Add(new Platform
            {
                Id = "LOOKBOOK"
            });

            Categories.AddRange(new Category
            {
                Id          = "ORGANIZATION",
                DisplayName = "Organization",
            },
                                new Category
            {
                Id          = "DEPARTMENT",
                DisplayName = "Department",
            },
                                new Category
            {
                Id          = "TEAM",
                DisplayName = "Team",
            },
                                new Category
            {
                Id          = "COMMUNITY",
                DisplayName = "Community",
            });


            PageTemplates.AddRange(
                new PageTemplate
            {
                Id   = "template-1",
                Html = @"<div [slbDetailsPageTemplateContext]=""context"" class=""page-wrapper"">
        <section class=""container-fluid"">
            <div class=""row"">
                <div class=""col-lg-6 col-xl-5"">
                    <div class=""h7 text-uppercase mb-8px"">
                        <slb-package-title></slb-package-title>
                    </div>

                    <h4 class=""mb-32px"">
                        <slb-site-descriptor></slb-site-descriptor>
                    </h4>

                    <div>
                        <slb-package-description></slb-package-description>
                    </div>

                    <div class=""subsection template-info"">
                        <slb-expandable-panel *slbDisplayForCategory=""'Features'; let items=items"">
                            <slb-expandable-panel-header>
                                Site features
                            </slb-expandable-panel-header>

                            <div class=""mt-16px mb-24px"">
                                <ul class=""list-unstyled"">
                                    <li *ngFor=""let item of items"">
                                        <slb-detail-item [item]=""item""></slb-detail-item>
                                    </li>
                                </ul>
                            </div>
                        </slb-expandable-panel>

                        <slb-expandable-panel *slbDisplayForCategory=""'Webparts'; let items=items"">
                            <slb-expandable-panel-header>
                                Web parts used
                            </slb-expandable-panel-header>

                            <div class=""mt-16px mb-24px"">
                                <ul class=""list-unstyled"">
                                    <li *ngFor=""let item of items"">
                                        <slb-detail-item [item]=""item""></slb-detail-item>
                                    </li>
                                </ul>
                            </div>
                        </slb-expandable-panel>

                        <slb-expandable-panel *slbDisplayForCategory=""'Site Content'; let items=items"">
                            <slb-expandable-panel-header>
                                Content included
                            </slb-expandable-panel-header>

                            <div class=""mt-16px mb-24px"">
                                <p>Adding this design to your tenant will create the following content:</p>

                                <ul class=""mt-16px site-content-list"">
                                    <li *ngFor=""let item of items"">
                                        {{ item.name }}
                                    </li>
                                </ul>
                            </div>
                        </slb-expandable-panel>
                    </div>

                    <div class=""subsection slb-font-size-smaller add-to-tenant-subsection"">
                        <slb-sticky-header>
                            <div slbStickyHeaderContentClass=""container-fluid stickied-header-content"">
                                <div class=""d-flex w-100 align-items-center justify-content-between"">
                                    <h4 class=""m-0"">
                                        <slb-package-title></slb-package-title>
                                    </h4>
                                    <button slb-cta-button slbAddToTenantButton>Add to your tenant</button>
                                </div>
                            </div>
                        </slb-sticky-header>

                        <div class=""mt-16px"">
                            <slb-permission-message></slb-permission-message>
                        </div>
                    </div>

                    <div class=""subsection"" *slbDisplayForCategory=""'Resources'; let items=items"">
                        <h4>Resources</h4>

                        <p>
                            Whether you're starting from scratch or you've installed this example on your tenant, here
                            are some resources to help you create and personalize your site.
                        </p>

                        <div *ngFor=""let item of items"">
                            <a [href]=""item.url"">
                                {{ item.name }}
                                <p>
                                    {{ item.description }}
                                </p>
                            </a>
                        </div>
                    </div>

                    <div class=""subsection"">
                        <h4 class=""mb-3"">System Requirements</h4>
                        <slb-system-requirements-table class=""w-100""></slb-system-requirements-table>
                    </div>
                </div>

                <div class=""col-lg-6 col-xl-7 image-container"">
                    <picture class=""d-block animate-slide-left-fade-in"">
                        <img slbTemplatePreviewImage class=""w-100 box-shadow-elevation-1"" />
                    </picture>
                </div>
            </div>
        </section>
    </div>",
                Css  = @".page-wrapper {
    /* hide image sliding in from right offpage */
    overflow-x: hidden;
}

.image-container {
    margin-top: 64px;
}

@media (min-width: 992px) {
    .image-container {
        margin-top: 0;
    }
}

.add-to-tenant-subsection h4 {
    display: none;
}

.site-content-list {
    margin-bottom: 0;
    padding-inline-start: 30px;
}

li:not(:first-child) {
    margin-top: 20px;
}"
            },
                new PageTemplate
            {
                Id   = "template-2",
                Html = @"<div [slbDetailsPageTemplateContext]=""context"" class=""page-wrapper"">
    <section class=""container-fluid"">
        <div class=""row flex-wrap-reverse"">
            <div class=""col-lg-6 col-xl-7"">
                <picture class=""d-block animate-slide-right-fade-in"">
                    <img slbTemplatePreviewImage class=""w-100 box-shadow-elevation-1"" />
                </picture>
            </div>

            <div class=""col-lg-6 col-xl-5"">
                <h1>
                    <slb-package-title></slb-package-title>
                </h1>

                <div class=""detail-text"">
                    <slb-package-description></slb-package-description>
                </div>

                <div class=""subsection slb-font-size-smaller add-to-tenant-subsection"">
                    <slb-sticky-header>
                        <div slbStickyHeaderContentClass=""container-fluid stickied-header-content"">
                            <div class=""d-flex w-100 align-items-center justify-content-between"">
                                <h1 class=""m-0"">
                                    <slb-package-title></slb-package-title>
                                </h1>
                                <button slb-cta-button slbAddToTenantButton>Add to your tenant</button>
                            </div>
                        </div>
                    </slb-sticky-header>
                </div>

                <div class=""subsection"" *ngFor=""let category of context.detailItemCategories"">
                    <h2>{{ category.name }}</h2>

                    <div class=""d-flex flex-wrap"">
                        <div class=""w-50 pr-3 mt-3"" *ngFor=""let item of category.items"">
                            <slb-detail-item [item]=""item""></slb-detail-item>
                        </div>
                    </div>
                </div>

                <div class=""subsection"">
                    <slb-permission-message></slb-permission-message>
                </div>

                <div class=""subsection"">
                    <h4 class=""mb-3"">System Requirements</h4>
                    <slb-system-requirements-table></slb-system-requirements-table>
                </div>
            </div>
        </div>
    </section>
</div>",
                Css  = @".page-wrapper {
    /* hide image sliding in from right offpage */
    overflow-x: hidden;
}

.image-container {
    margin-top: 48px;
}

@media (min-width: 1200px) {
    .image-container {
        margin-top: 0;
    }
}

.slb-detail-item ::ng-deep a {
    color: rgb(172, 0, 215);
}

.add-to-tenant-subsection h1 {
    display: none;
}

.slb-system-requirements-table ::ng-deep table {
    border-top: solid 1px rgba(0, 103, 184, 0.75);
}

.slb-system-requirements-table ::ng-deep table tr {
    border-bottom: solid 1px rgba(0, 103, 184, 0.75);
}

.slb-system-requirements-table ::ng-deep table td {
    padding: 0.75rem 0;
}
"
            }
                );

            SaveChanges();

            var metaDataObject1 = new Models.UI.MetaData
            {
                DisplayInfo = new Models.UI.DisplayInfo
                {
                    PageTemplateId = "template-1",
                    SiteDescriptor = "News, Lists, More",
                    PreviewImages  = new List <Models.UI.PreviewImage>
                    {
                        new Models.UI.PreviewImage {
                            Type = "fullpage", AltText = "", Url = "../../assets/images/HubConnected.png"
                        },
                        new Models.UI.PreviewImage {
                            Type = "cardpreview", AltText = "", Url = "../../assets/images/HubConnected.png"
                        }
                    },
                    DetailItemCategories = new List <Models.UI.DetailItemCategory>
                    {
                        new Models.UI.DetailItemCategory
                        {
                            Name  = "Webparts",
                            Items = new List <Models.UI.DetailItem>
                            {
                                new Models.UI.DetailItem {
                                    Name        = "Events",
                                    Description = "Compact layout",
                                    Url         = "https://support.office.com/en-us/article/use-the-events-web-part-5fe4da93-5fa9-4695-b1ee-b0ae4c981909"
                                },
                                new Models.UI.DetailItem {
                                    Name        = "Group Calendar",
                                    Description = "Office 365 group calendar",
                                    Url         = "https://support.office.com/en-us/article/use-the-group-calendar-web-part-eaf3c04d-5699-48cb-8b5e-3caa887d51ce"
                                },
                                new Models.UI.DetailItem {
                                    Name        = "Highlighted Content",
                                    Description = "Sourced library, card view",
                                    Url         = "https://support.office.com/en-us/article/use-the-highlighted-content-web-part-e34199b0-ff1a-47fb-8f4d-dbcaed329efd"
                                },
                                new Models.UI.DetailItem  {
                                    Name      = "Instagram",
                                    BadgeText = "Custom Web Part"
                                },
                                new Models.UI.DetailItem   {
                                    Name        = "News",
                                    Description = "Carousel, top story layouts",
                                    Url         = "https://support.office.com/en-us/article/use-the-news-web-part-on-a-sharepoint-page-c2dcee50-f5d7-434b-8cb9-a7feefd9f165"
                                }
                            }
                        },
                        new Models.UI.DetailItemCategory
                        {
                            Name  = "Features",
                            Items = new List <Models.UI.DetailItem>
                            {
                                new Models.UI.DetailItem {
                                    Name = "Header background"
                                },
                                new Models.UI.DetailItem {
                                    Name = "Section background"
                                },
                                new Models.UI.DetailItem {
                                    Name = "Footer",
                                    Url  = "https://support.office.com/en-us/article/change-the-look-of-your-sharepoint-site-06bbadc3-6b04-4a60-9d14-894f6a170818"
                                },
                                new Models.UI.DetailItem {
                                    Name      = "Custom logo",
                                    BadgeText = "Coming Soon"
                                }
                            }
                        },
                        new Models.UI.DetailItemCategory
                        {
                            Name  = "Site Content",
                            Items = new List <Models.UI.DetailItem>
                            {
                                new Models.UI.DetailItem {
                                    Name = "New site collection using communication site template, unless applied on top of existing site"
                                },
                                new Models.UI.DetailItem {
                                    Name = "Custom welcome page"
                                },
                                new Models.UI.DetailItem {
                                    Name = "7 news articles with example content"
                                },
                                new Models.UI.DetailItem {
                                    Name = "Sample image content used in the template"
                                }
                            }
                        },
                        new Models.UI.DetailItemCategory
                        {
                            Name  = "Resources",
                            Items = new List <Models.UI.DetailItem>
                            {
                                new Models.UI.DetailItem {
                                    Name = "Walkthrough", Description = "A walkthrough of the site"
                                }
                            }
                        },
                        new Models.UI.DetailItemCategory
                        {
                            Name  = "Extras",
                            Items = new List <Models.UI.DetailItem>
                            {
                                new Models.UI.DetailItem {
                                    Name = "Just an extra item for no reason."
                                }
                            }
                        }
                    },
                    SystemRequirements = new List <Models.UI.SystemRequirement>
                    {
                        new Models.UI.SystemRequirement {
                            Name = "OS", Value = "SharePoint"
                        },
                        new Models.UI.SystemRequirement {
                            Name = "Permission required", Value = "Tenant Admin"
                        },
                        new Models.UI.SystemRequirement {
                            Name = "Site language", Value = "English"
                        },
                    }
                }
            };

            var metaDataObject2 = new Models.UI.MetaData
            {
                DisplayInfo = new Models.UI.DisplayInfo
                {
                    PageTemplateId       = "template-2",
                    DetailItemCategories = metaDataObject1.DisplayInfo.DetailItemCategories,
                    PreviewImages        = new List <Models.UI.PreviewImage>
                    {
                        new Models.UI.PreviewImage {
                            AltText = "Giving Site Preview", Type = "cardpreview", Url = "../../assets/images/[email protected]"
                        },
                        new Models.UI.PreviewImage {
                            AltText = "Giving Site Layout", Type = "fullpage", Url = "../../assets/images/[email protected]"
                        }
                    },
                    SystemRequirements = metaDataObject1.DisplayInfo.SystemRequirements
                }
            };

            // do the thing
            Packages.AddRange(new Package
            {
                Id                 = Guid.Parse("c715eb26-3b70-48b6-b4cf-a18aea24bd10"),
                Visible            = true,
                DisplayName        = "Contoso Enterprise Landing",
                Abstract           = "Put the <b>power</b> of your content, people and information in easy reach of everyone in your organization. Use a distributed news system and a variety of web parts to highlight what's happening in your organization as well as events and social conversations.",
                Description        = "",
                Version            = "",
                ImagePreviewUrl    = "",
                PackageUrl         = "",
                PropertiesMetadata = metaDataObject1
            },
                              new Package
            {
                Id              = Guid.Parse("4efc407e-7820-400b-92f7-1b83ed32443d"),
                Visible         = true,
                DisplayName     = "Contoso Drone Landing",
                Abstract        = "See how you can setup a welcome site using the communication site template and webparts.",
                Description     = "",
                Version         = "",
                ImagePreviewUrl = "",
                PackageUrl      = ""
            },
                              new Package
            {
                Id              = Guid.Parse("8d4bce19-cee0-4a81-9e06-048d60dd1eda"),
                Visible         = true,
                DisplayName     = "Leadership connection",
                Abstract        = "Communicate leadership's vision with a dedicated homepage offering content in multiple formats. Use Hero webparts to curate key topics and video to bring vision messages directly from leadership.",
                Description     = "",
                Version         = "",
                ImagePreviewUrl = "",
                PackageUrl      = ""
            },
                              new Package
            {
                Id              = Guid.Parse("f27a6142-7787-4715-a81b-c08f63a8f9c1"),
                Visible         = true,
                DisplayName     = "Team Site",
                Abstract        = "This template is an example of enabling collaboration at a team level.  It has many parts including news, files, and team calendar.",
                Description     = "",
                Version         = "",
                ImagePreviewUrl = "",
                PackageUrl      = ""
            },
                              new Package
            {
                Id                 = Guid.Parse("1cf1d7d2-d5c8-4c79-813e-59025b0e208b"),
                Visible            = true,
                DisplayName        = "Giving campaign site",
                Abstract           = "Create a strong call to action for everyone in your organization. Use of images and clear message make this page a resource in a giving campaign, or other focused goal that requires orgnaization wide participation.",
                Description        = "",
                Version            = "",
                ImagePreviewUrl    = "",
                PackageUrl         = "",
                PropertiesMetadata = metaDataObject2
            },
                              new Package
            {
                Id              = Guid.Parse("dab9ebf5-8460-46f4-b65a-e5b692c30963"),
                Visible         = true,
                DisplayName     = "Workshop site",
                Abstract        = "Create a focused training site on a single page that doesn't distract by leading users away with off-page navigation. This example also uses a Bing maps web part to provide up-to-date location information.",
                Description     = "",
                Version         = "",
                ImagePreviewUrl = "",
                PackageUrl      = ""
            },
                              new Package
            {
                Id              = Guid.Parse("190f3fd5-df92-4ec4-8e5e-9012d8c38ea1"),
                Visible         = true,
                DisplayName     = "SharePoint success site",
                Abstract        = "This template shows how a generic workshop centric site could look like in SharePoint Online.",
                Description     = "",
                Version         = "",
                ImagePreviewUrl = "",
                PackageUrl      = ""
            },
                              new Package
            {
                Id              = Guid.Parse("e538154c-8155-4171-8bdb-f9390458be3d"),
                Visible         = true,
                DisplayName     = "Marketing Landing",
                Abstract        = "This template is designed to demonstrate how a typical marketing site could look like in the SharePoint Online. It has a relatively simple structure with some example pages and content to get you started on updating the template based on your specific requirements.",
                Description     = "",
                Version         = "",
                ImagePreviewUrl = "",
                PackageUrl      = ""
            });

            SaveChanges();

            PackagesPlatforms.AddRange(
                new PackagePlatform
            {
                PackageId  = Guid.Parse("c715eb26-3b70-48b6-b4cf-a18aea24bd10"),
                PlatformId = "LOOKBOOK"
            },
                new PackagePlatform
            {
                PackageId  = Guid.Parse("4efc407e-7820-400b-92f7-1b83ed32443d"),
                PlatformId = "LOOKBOOK"
            },
                new PackagePlatform
            {
                PackageId  = Guid.Parse("8d4bce19-cee0-4a81-9e06-048d60dd1eda"),
                PlatformId = "LOOKBOOK"
            },
                new PackagePlatform
            {
                PackageId  = Guid.Parse("f27a6142-7787-4715-a81b-c08f63a8f9c1"),
                PlatformId = "LOOKBOOK"
            },
                new PackagePlatform
            {
                PackageId  = Guid.Parse("1cf1d7d2-d5c8-4c79-813e-59025b0e208b"),
                PlatformId = "LOOKBOOK"
            },
                new PackagePlatform
            {
                PackageId  = Guid.Parse("dab9ebf5-8460-46f4-b65a-e5b692c30963"),
                PlatformId = "LOOKBOOK"
            },
                new PackagePlatform
            {
                PackageId  = Guid.Parse("190f3fd5-df92-4ec4-8e5e-9012d8c38ea1"),
                PlatformId = "LOOKBOOK"
            },
                new PackagePlatform
            {
                PackageId  = Guid.Parse("e538154c-8155-4171-8bdb-f9390458be3d"),
                PlatformId = "LOOKBOOK"
            }
                );

            PackagesCategories.AddRange(
                new PackageCategory
            {
                PackageId  = Guid.Parse("c715eb26-3b70-48b6-b4cf-a18aea24bd10"),
                CategoryId = "COMMUNITY"
            },
                new PackageCategory
            {
                PackageId  = Guid.Parse("4efc407e-7820-400b-92f7-1b83ed32443d"),
                CategoryId = "DEPARTMENT"
            },
                new PackageCategory
            {
                PackageId  = Guid.Parse("8d4bce19-cee0-4a81-9e06-048d60dd1eda"),
                CategoryId = "TEAM"
            },
                new PackageCategory
            {
                PackageId  = Guid.Parse("f27a6142-7787-4715-a81b-c08f63a8f9c1"),
                CategoryId = "DEPARTMENT"
            },
                new PackageCategory
            {
                PackageId  = Guid.Parse("1cf1d7d2-d5c8-4c79-813e-59025b0e208b"),
                CategoryId = "ORGANIZATION"
            },
                new PackageCategory
            {
                PackageId  = Guid.Parse("dab9ebf5-8460-46f4-b65a-e5b692c30963"),
                CategoryId = "ORGANIZATION"
            },
                new PackageCategory
            {
                PackageId  = Guid.Parse("190f3fd5-df92-4ec4-8e5e-9012d8c38ea1"),
                CategoryId = "ORGANIZATION"
            },
                new PackageCategory
            {
                PackageId  = Guid.Parse("e538154c-8155-4171-8bdb-f9390458be3d"),
                CategoryId = "ORGANIZATION"
            }
                );

            SaveChanges();
        }
        public static Models.Package CreatePackageModel(Guid?id = null, bool preview = false, bool isVisible = true, List <string> platformIds = null, Models.UI.MetaData metaData = null)
        {
            if (!id.HasValue)
            {
                id = Guid.NewGuid();
            }

            return(new Models.Package
            {
                Id = id.Value,
                Version = "",
                DisplayName = "",
                Abstract = "",
                Description = "",
                ImagePreviewUrl = "",
                PackageUrl = "",
                Preview = preview,
                PropertiesMetadata = metaData,
                Visible = isVisible,
                PackagePlatforms = platformIds?.Select(platformId => new Models.PackagePlatform {
                    PlatformId = platformId
                }).ToList()
            });
        }