public async Task Create_MissingProperties_Throws(string title, string siteScriptId, string webTemplate)
        {
            var siteScriptIds = string.IsNullOrEmpty(siteScriptId)
                            ? null
                            : new System.Collections.Generic.List <Guid>()
            {
                new Guid(siteScriptId)
            };

            var newSiteDesign = new SiteDesignMetadata()
            {
                Title               = title,
                Description         = "mockSiteDesignDescription",
                SiteScriptIds       = siteScriptIds,
                WebTemplate         = webTemplate,
                PreviewImageUrl     = "https://mock.sharepoint.com",
                PreviewImageAltText = "mockPreviewImageAltText"
            };

            using (var response = new HttpResponseMessage())
                using (var gsc = GraphServiceTestClient.Create(response))
                {
                    await Assert.ThrowsAsync <ArgumentException>(
                        async() => await gsc.GraphServiceClient
                        .SharePointAPI(mockWebUrl)
                        .SiteDesigns
                        .Request()
                        .CreateAsync(newSiteDesign)
                        );
                }
        }
        public async Task CreateSiteDesign_ReturnsCorrectResponse()
        {
            // ARRANGE
            var newSiteDesign = new SiteDesignMetadata()
            {
                Title         = "mockSiteDesign",
                Description   = "mockSiteDesignDescription",
                SiteScriptIds = new System.Collections.Generic.List <Guid>()
                {
                    new Guid("a0da01a9-8b93-496e-9bbd-1b53009e543e")
                },
                WebTemplate         = "64",
                PreviewImageUrl     = "https://mock.sharepoint.com",
                PreviewImageAltText = "mockPreviewImageAltText"
            };
            var responseContent = ResourceManager.GetHttpResponseContent("CreateSiteDesignResponse.json");
            var responseMessage = new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(responseContent),
            };

            using (responseMessage)
                using (var gsc = GraphServiceTestClient.Create(responseMessage))
                {
                    // ACT
                    var response = await gsc.GraphServiceClient
                                   .SharePointAPI(mockWebUrl)
                                   .SiteDesigns
                                   .Request()
                                   .CreateAsync(newSiteDesign);

                    var actual = response;

                    // ASSERT
                    Assert.Equal("d3e90db2-9a67-4d24-b59f-7c54388a9cfa", actual.Id);
                    Assert.Equal("mockSiteDesign", actual.Title);
                    Assert.Equal("mockSiteDesignDescription", actual.Description);
                    Assert.Equal(Guid.Empty, actual.DesignPackageId);
                    Assert.False(actual.IsDefault);
                    Assert.Equal("mockPreviewImageAltText", actual.PreviewImageAltText);
                    Assert.Equal("https://mock.sharepoint.com", actual.PreviewImageUrl);
                    Assert.Equal("64", actual.WebTemplate);
                    Assert.Single(actual.SiteScriptIds);
                    Assert.Equal(new Guid("a0da01a9-8b93-496e-9bbd-1b53009e543e"), actual.SiteScriptIds[0]);
                }
        }
        public async Task Create_GeneratesCorrectRequest()
        {
            // ARRANGE
            var newSiteDesign = new SiteDesignMetadata()
            {
                Title         = "mockSiteDesign",
                Description   = "mockSiteDesignDescription",
                SiteScriptIds = new System.Collections.Generic.List <Guid>()
                {
                    new Guid("a0da01a9-8b93-496e-9bbd-1b53009e543e")
                },
                WebTemplate         = "64",
                PreviewImageUrl     = "https://mock.sharepoint.com",
                PreviewImageAltText = "mockPreviewImageAltText"
            };
            var expectedUri     = new Uri($"{mockWebUrl}/_api/Microsoft.Sharepoint.Utilities.WebTemplateExtensions.SiteScriptUtility.CreateSiteDesign");
            var expectedContent = "{\"info\":{\"Title\":\"mockSiteDesign\",\"Description\":\"mockSiteDesignDescription\",\"SiteScriptIds\":[\"a0da01a9-8b93-496e-9bbd-1b53009e543e\"],\"WebTemplate\":\"64\",\"PreviewImageUrl\":\"https://mock.sharepoint.com\",\"PreviewImageAltText\":\"mockPreviewImageAltText\"}}";

            using (var response = new HttpResponseMessage())
                using (var gsc = GraphServiceTestClient.Create(response))
                {
                    // ACT
                    await gsc.GraphServiceClient
                    .SharePointAPI(mockWebUrl)
                    .SiteDesigns
                    .Request()
                    .CreateAsync(newSiteDesign);

                    var actualContent = gsc.HttpProvider.ContentAsString;

                    // ASSERT
                    gsc.HttpProvider.Verify(
                        provider => provider.SendAsync(
                            It.Is <HttpRequestMessage>(req =>
                                                       req.Method == HttpMethod.Post &&
                                                       req.RequestUri == expectedUri &&
                                                       req.Headers.Authorization != null
                                                       ),
                            It.IsAny <HttpCompletionOption>(),
                            It.IsAny <CancellationToken>()
                            ),
                        Times.Exactly(1)
                        );

                    Assert.Equal(expectedContent, actualContent);
                }
        }
コード例 #4
0
        public static async Task Run()
        {
            /////////////////////////////
            //
            // Programmer configuration
            //
            /////////////////////////////

            var sharepointDomain   = "demo.sharepoint.com";
            var siteCollectionPath = "/sites/SiteDesignTest";

            ////////////////////////////////
            //
            // Azure AD Configuration
            //
            ////////////////////////////////

            AzureAdOptions azureAdOptions = new AzureAdOptions();

            var settingsFilename = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "appsettings.json");
            var builder          = new ConfigurationBuilder()
                                   .AddJsonFile(settingsFilename, optional: false)
                                   .AddUserSecrets <Program>();
            var config = builder.Build();

            config.Bind("AzureAd", azureAdOptions);

            /////////////////////////////////////
            //
            // Client Application Configuration
            //
            /////////////////////////////////////

            var options = new PublicClientApplicationOptions()
            {
                AadAuthorityAudience = AadAuthorityAudience.AzureAdMyOrg,
                AzureCloudInstance   = AzureCloudInstance.AzurePublic,
                ClientId             = azureAdOptions.ClientId,
                TenantId             = azureAdOptions.TenantId,
                RedirectUri          = "http://localhost"
            };

            // Create the public client application (desktop app), with a default redirect URI
            var pca = PublicClientApplicationBuilder
                      .CreateWithApplicationOptions(options)
                      .Build();

            // Enable a simple token cache serialiation so that the user does not need to
            // re-sign-in each time the application is run
            TokenCacheHelper.EnableSerialization(pca.UserTokenCache);

            ///////////////////////////////////////////////
            //
            //  Auth Provider - Device Code in this sample
            //
            ///////////////////////////////////////////////

            // Create an authentication provider to attach the token to requests
            var scopes = new string[] { $"https://{sharepointDomain}/AllSites.FullControl" };
            IAuthenticationProvider ap = new DeviceCodeProvider(pca, scopes);

            ////////////////////////////////////////////////////////////
            //
            // Graph Client with Logger and SharePoint service handler
            //
            ////////////////////////////////////////////////////////////

            var logger = new StringBuilderHttpMessageLogger();

            /*
             *  Could also use the Console if preferred...
             *
             *  var logger = new ConsoleHttpMessageLogger();
             */

            // Configure our client
            CommunityGraphClientOptions clientOptions = new CommunityGraphClientOptions()
            {
                UserAgent = "SiteDesignSample"
            };
            var graphServiceClient = CommunityGraphClientFactory.Create(clientOptions, logger, ap);

            ///////////////////////////////////////
            //
            // Setup is complete, run the sample
            //
            ///////////////////////////////////////

            var WebUrl = $"https://{sharepointDomain}{siteCollectionPath}";

            var siteScript = new SiteScriptMetadata()
            {
                Title       = "Green Theme",
                Description = "Apply the Green Theme",
                Content     = "{\"$schema\": \"schema.json\",\"actions\": [{\"verb\": \"applyTheme\",\"themeName\": \"Green\"}],\"bindata\": { },\"version\": 1}",
            };

            var createdScript = await graphServiceClient
                                .SharePointAPI(WebUrl)
                                .SiteScripts
                                .Request()
                                .CreateAsync(siteScript);

            var siteDesign = new SiteDesignMetadata()
            {
                Title         = "Green Theme",
                Description   = "Apply the Green theme",
                SiteScriptIds = new System.Collections.Generic.List <Guid>()
                {
                    new Guid(createdScript.Id)
                },
                WebTemplate = "64"                 // 64 = Team Site, 68 = Communication Site, 1 = Groupless Team Site
            };

            var createdDesign = await graphServiceClient
                                .SharePointAPI(WebUrl)
                                .SiteDesigns
                                .Request()
                                .CreateAsync(siteDesign);

            var applySiteDesignRequest = new ApplySiteDesignRequest
            {
                SiteDesignId = createdDesign.Id,
                WebUrl       = WebUrl
            };

            var applySiteDesignResponse = await graphServiceClient
                                          .SharePointAPI(WebUrl)
                                          .SiteDesigns.Request()
                                          .ApplyAsync(applySiteDesignRequest);

            foreach (var outcome in applySiteDesignResponse.ActionOutcomes)
            {
                Console.WriteLine(outcome.OutcomeText);
            }


            Console.WriteLine("Press enter to show log");
            Console.ReadLine();
            Console.WriteLine();
            var log = logger.GetLog();

            Console.WriteLine(log);
        }
コード例 #5
0
        public static async Task Run()
        {
            /////////////////////////////
            //
            // Programmer configuration
            //
            /////////////////////////////

            var sharepointDomain   = "demo.sharepoint.com";
            var siteCollectionPath = "/sites/SiteDesignTest";

            /////////////////
            //
            // Configuration
            //
            /////////////////

            AzureAdOptions azureAdOptions = new AzureAdOptions();

            var settingsFilename = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "appsettings.json");
            var builder          = new ConfigurationBuilder()
                                   .AddJsonFile(settingsFilename, optional: false)
                                   .AddUserSecrets <Program>();
            var config = builder.Build();

            config.Bind("AzureAd", azureAdOptions);

            ////////////////////////////
            //
            // Graph Client with Logger
            //
            ////////////////////////////

            var logger = new StringBuilderHttpMessageLogger();

            /*
             *  Could also use the Console if preferred...
             *
             *  var logger = new ConsoleHttpMessageLogger();
             */

            var pca = PublicClientApplicationBuilder
                      .Create(azureAdOptions.ClientId)
                      .WithTenantId(azureAdOptions.TenantId)
                      .Build();

            var scopes = new string[] { $"https://{sharepointDomain}/AllSites.FullControl" };
            IAuthenticationProvider ap = new DeviceCodeProvider(pca, scopes);

            using (LoggingMessageHandler loggingHandler = new LoggingMessageHandler(logger))
                using (HttpProvider hp = new HttpProvider(loggingHandler, false, new Serializer()))
                {
                    GraphServiceClient graphServiceClient = new GraphServiceClient(ap, hp);

                    ////////////////////////////
                    //
                    // Setup is complete, run the sample
                    //
                    ////////////////////////////

                    var WebUrl = $"https://{sharepointDomain}{siteCollectionPath}";

                    var siteScript = new SiteScriptMetadata()
                    {
                        Title       = "Green Theme",
                        Description = "Apply the Green Theme",
                        Content     = "{\"$schema\": \"schema.json\",\"actions\": [{\"verb\": \"applyTheme\",\"themeName\": \"Green\"}],\"bindata\": { },\"version\": 1}",
                    };

                    var createdScript = await graphServiceClient
                                        .SharePointAPI(WebUrl)
                                        .SiteScripts
                                        .Request()
                                        .CreateAsync(siteScript);

                    var siteDesign = new SiteDesignMetadata()
                    {
                        Title         = "Green Theme",
                        Description   = "Apply the Green theme",
                        SiteScriptIds = new System.Collections.Generic.List <Guid>()
                        {
                            new Guid(createdScript.Id)
                        },
                        WebTemplate = "64"                 // 64 = Team Site, 68 = Communication Site, 1 = Groupless Team Site
                    };

                    var createdDesign = await graphServiceClient
                                        .SharePointAPI(WebUrl)
                                        .SiteDesigns
                                        .Request()
                                        .CreateAsync(siteDesign);

                    var applySiteDesignRequest = new ApplySiteDesignRequest
                    {
                        SiteDesignId = createdDesign.Id,
                        WebUrl       = WebUrl
                    };

                    var applySiteDesignResponse = await graphServiceClient
                                                  .SharePointAPI(WebUrl)
                                                  .SiteDesigns.Request()
                                                  .ApplyAsync(applySiteDesignRequest);

                    foreach (var outcome in applySiteDesignResponse.ActionOutcomes)
                    {
                        Console.WriteLine(outcome.OutcomeText);
                    }


                    Console.WriteLine("Press enter to show log");
                    Console.ReadLine();
                    Console.WriteLine();
                    var log = logger.GetLog();
                    Console.WriteLine(log);
                }
        }