Skip to content

Commit

Permalink
Add hub sites
Browse files Browse the repository at this point in the history
  • Loading branch information
pschaeflein committed Feb 16, 2024
1 parent 0113290 commit 4f89aba
Show file tree
Hide file tree
Showing 15 changed files with 332 additions and 33 deletions.
3 changes: 3 additions & 0 deletions src/Models/Hub.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ public class Hub
/// </summary>
public string Targets { get; set; }

public bool HideNameInNavigation { get; set; }
public string ParentHubSiteId { get; set; }
public bool RequiresJoinApproval { get; set; }
public string SiteDesignId { get; set; }
}
}
30 changes: 15 additions & 15 deletions src/Requests/Hubs/HubCollectionRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

namespace Graph.Community
{
public class HubCollectionRequest:BaseSharePointAPIRequest, IHubCollectionRequest
public class HubCollectionRequest : BaseSharePointAPIRequest, IHubCollectionRequest
{
public HubCollectionRequest(
string requestUrl,
Expand All @@ -17,22 +17,22 @@ public class HubCollectionRequest:BaseSharePointAPIRequest, IHubCollectionReques
this.Headers.Add(new HeaderOption(SharePointAPIRequestConstants.Headers.ODataVersionHeaderName, SharePointAPIRequestConstants.Headers.ODataVersionHeaderValue));
}

public Task<IHubCollectionPage> GetAsync()
{
return this.GetAsync(CancellationToken.None);
}

public async Task<IHubCollectionPage> GetAsync(CancellationToken cancellationToken)
{
this.ContentType = "application/json";
var response = await this.SendAsync<SharePointAPICollectionResponse<IHubCollectionPage>>(null, cancellationToken).ConfigureAwait(false);

if (response?.Value?.CurrentPage != null)
public Task<IHubCollectionPage> GetAsync()
{
return response.Value;
return this.GetAsync(CancellationToken.None);
}

return null;
public async Task<IHubCollectionPage> GetAsync(CancellationToken cancellationToken)
{
this.ContentType = "application/json";
var response = await this.SendAsync<SharePointAPICollectionResponse<IHubCollectionPage>>(null, cancellationToken).ConfigureAwait(false);

if (response?.Value?.CurrentPage != null)
{
return response.Value;
}

return null;
}
}
}
}
29 changes: 28 additions & 1 deletion src/Requests/Hubs/HubCollectionRequestBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Graph;

namespace Graph.Community
Expand All @@ -18,14 +17,42 @@ public class HubCollectionRequestBuilder : BaseRequestBuilder, IHubCollectionReq
this.options = options;
}

/// <summary>
/// Builds the request.
/// </summary>
/// <returns>The built request.</returns>
public IHubCollectionRequest Request()
{
return this.Request(options);
}

/// <summary>
/// Builds the request.
/// </summary>
/// <param name="options">The query and header options for the request.</param>
/// <returns>The built request.</returns>
public IHubCollectionRequest Request(IEnumerable<Option> options)
{
return new HubCollectionRequest(this.AppendSegmentToRequestUrl("HubSites"), this.Client, options);
}

/// <summary>
/// Gets an <see cref="IHubRequestBuilder"/> for the specified Hub
/// </summary>
/// <param name="id">The ID for the Hub</param>
/// <returns>The <see cref="IHubRequestBuilder"/>.</returns>
public IHubRequestBuilder this[string id]
{
get
{
if (string.IsNullOrEmpty(id))
{
throw new ArgumentNullException(nameof(id));
}

List<QueryOption> options = [new("hubSiteId", $"'{id}'")];
return new HubRequestBuilder(this.AppendSegmentToRequestUrl("HubSites/GetById"), this.Client, options);
}
}
}
}
32 changes: 32 additions & 0 deletions src/Requests/Hubs/HubRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Graph;

namespace Graph.Community
{
public class HubRequest:BaseSharePointAPIRequest, IHubRequest
{
public HubRequest(
string requestUrl,
IBaseClient client,
IEnumerable<Option> options)
: base("Hub", requestUrl, client, options)
{
this.Headers.Add(new HeaderOption(SharePointAPIRequestConstants.Headers.AcceptHeaderName, SharePointAPIRequestConstants.Headers.AcceptHeaderValue));
this.Headers.Add(new HeaderOption(SharePointAPIRequestConstants.Headers.ODataVersionHeaderName, SharePointAPIRequestConstants.Headers.ODataVersionHeaderValue));
}

public Task<Hub> GetAsync()
{
return this.GetAsync(CancellationToken.None);
}

public async Task<Hub> GetAsync(CancellationToken cancellationToken)
{
this.ContentType = "application/json";
var entity = await this.SendAsync<Hub>(null, cancellationToken).ConfigureAwait(false);
return entity;
}
}
}
38 changes: 38 additions & 0 deletions src/Requests/Hubs/HubRequestBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using System.Collections.Generic;
using Microsoft.Graph;

namespace Graph.Community
{
public class HubRequestBuilder : BaseRequestBuilder,IHubRequestBuilder
{
private readonly IEnumerable<Option> options;

public HubRequestBuilder(
string requestUrl,
IBaseClient client,
IEnumerable<Option> options = null)
: base(requestUrl, client)
{
this.options = options;
}

/// <summary>
/// Builds the request.
/// </summary>
/// <returns>The built request.</returns>
public IHubRequest Request()
{
return this.Request(this.options);
}

/// <summary>
/// Builds the request.
/// </summary>
/// <param name="options">The query and header options for the request.</param>
/// <returns>The built request.</returns>
public IHubRequest Request(IEnumerable<Option> options)
{
return new HubRequest(this.RequestUrl, this.Client, options);
}
}
}
2 changes: 1 addition & 1 deletion src/Requests/Hubs/IHubCollectionPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace Graph.Community
{
[InterfaceConverter(typeof(InterfaceConverter<HubCollectionPage>))]
public interface IHubCollectionPage:ICollectionPage<Hub>
public interface IHubCollectionPage : ICollectionPage<Hub>
{
}
}
2 changes: 1 addition & 1 deletion src/Requests/Hubs/IHubCollectionRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Graph.Community
{
public interface IHubCollectionRequest:IBaseRequest
public interface IHubCollectionRequest : IBaseRequest
{
Task<IHubCollectionPage> GetAsync();
Task<IHubCollectionPage> GetAsync(CancellationToken cancellationToken);
Expand Down
18 changes: 17 additions & 1 deletion src/Requests/Hubs/IHubCollectionRequestBuilder .cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,26 @@

namespace Graph.Community
{
public interface IHubCollectionRequestBuilder:IBaseRequestBuilder
public interface IHubCollectionRequestBuilder : IBaseRequestBuilder
{
/// <summary>
/// Builds the request.
/// </summary>
/// <returns>The built request.</returns>
IHubCollectionRequest Request();

/// <summary>
/// Builds the request.
/// </summary>
/// <param name="options">The query and header options for the request.</param>
/// <returns>The built request.</returns>
IHubCollectionRequest Request(IEnumerable<Option> options);

/// <summary>
/// Gets a <see cref="IHubRequestBuilder"/> for the specified Hub.
/// </summary>
/// <param name="id">The ID for the Hub.</param>
/// <returns>The <see cref="IHubRequestBuilder"/>.</returns>
IHubRequestBuilder this[string id] { get; }
}
}
12 changes: 12 additions & 0 deletions src/Requests/Hubs/IHubRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Threading.Tasks;
using System.Threading;
using Microsoft.Graph;

namespace Graph.Community
{
public interface IHubRequest : IBaseRequest
{
Task<Hub> GetAsync();
Task<Hub> GetAsync(CancellationToken cancellationToken);
}
}
21 changes: 21 additions & 0 deletions src/Requests/Hubs/IHubRequestBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System.Collections.Generic;
using Microsoft.Graph;

namespace Graph.Community
{
public interface IHubRequestBuilder : IBaseRequestBuilder
{
/// <summary>
/// Builds the request.
/// </summary>
/// <returns>The built request.</returns>
IHubRequest Request();

/// <summary>
/// Builds the request.
/// </summary>
/// <param name="options">The query and header options for the request.</param>
/// <returns>The built request.</returns>
IHubRequest Request(IEnumerable<Option> options);
}
}
1 change: 1 addition & 0 deletions test/Graph.Community.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<EmbeddedResource Include="Mocks\CreateSiteScriptResponse.json" />
<EmbeddedResource Include="Mocks\EnsureUserResponse.json" />
<EmbeddedResource Include="Mocks\GetChangesResponse.json" />
<EmbeddedResource Include="Mocks\GetHubResponse.json" />
<EmbeddedResource Include="Mocks\GetHubsResponse.json" />
<EmbeddedResource Include="Mocks\GetListFieldsResponse.json" />
<EmbeddedResource Include="Mocks\GetListItemResponse.json" />
Expand Down
21 changes: 11 additions & 10 deletions test/HubCollectionRequestTests.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
using Moq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net;
using System.Text;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
Expand Down Expand Up @@ -80,17 +78,20 @@ public async Task Get_ReturnsCorrectResponse()
Assert.IsAssignableFrom<IList<Hub>>(actual);
Assert.Equal(2, actual.Count);

var testHub = actual[1];
var testHub = actual[0];
Assert.IsType<Graph.Community.Hub>(testHub);
Assert.Equal("d8ab01e9-1634-44dd-91fe-1e6ff8385c34", testHub.Id);
Assert.Equal("Contoso Department Hub", testHub.Title);
Assert.Null(testHub.Description);
Assert.Equal("https://contoso.sharepoint.com/sites/ContosoDepartment/SiteAssets/__sitelogo__keep_calm_hit_refresh.png", testHub.LogoUrl);
Assert.Equal("https://contoso.sharepoint.com/sites/ContosoDepartment", testHub.SiteUrl);
Assert.False(testHub.HideNameInNavigation);
Assert.Equal("82e8cb67-c4f1-4b38-80aa-0342294f5ece", testHub.Id);
Assert.Equal("https://contoso.sharepoint.com/sites/ContosoTravelMarketing/SiteAssets/__hubLogo____hubLogo__.png", testHub.LogoUrl);
Assert.Equal("205ef8f5-25bb-4547-827b-6bedb219eca2", testHub.ParentHubSiteId);
Assert.False(testHub.RequiresJoinApproval);
Assert.Equal(Guid.Empty.ToString(), testHub.SiteDesignId);
Assert.Equal("82e8cb67-c4f1-4b38-80aa-0342294f5ece", testHub.SiteId);
Assert.Equal("https://contoso.sharepoint.com/sites/ContosoTravelMarketing", testHub.SiteUrl);
Assert.Null(testHub.Targets);
Assert.Equal(Guid.Empty.ToString(), testHub.TenantInstanceId);
Assert.True(testHub.RequiresJoinApproval);
Assert.Equal("55d9bf03-671c-45c1-8f60-c6ed9e441468", testHub.TenantInstanceId);
Assert.Equal("Contoso Travel Marketing", testHub.Title);
}
}

Expand Down
Loading

0 comments on commit 4f89aba

Please sign in to comment.