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); } }
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); }
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); } }