From 6660f1be809272dc9527db622bc923b7b2b460d1 Mon Sep 17 00:00:00 2001 From: Daniel Cazzulino Date: Tue, 22 Apr 2014 17:45:17 -0300 Subject: [PATCH] Added GetMembers to retrieve all team members. --- .../Clients/IObservableTeamsClient.cs | 11 ++++++++ .../Clients/ObservableTeamsClient.cs | 14 +++++++++++ .../Clients/TeamsClientTests.cs | 25 +++++++++++++++++++ Octokit.Tests/Clients/TeamsClientTests.cs | 14 +++++++++++ Octokit/Clients/ITeamsClient.cs | 10 ++++++++ Octokit/Clients/TeamsClient.cs | 14 +++++++++++ Octokit/Helpers/ApiUrls.cs | 11 +++++++- 7 files changed, 98 insertions(+), 1 deletion(-) diff --git a/Octokit.Reactive/Clients/IObservableTeamsClient.cs b/Octokit.Reactive/Clients/IObservableTeamsClient.cs index 67db723d..d11df786 100644 --- a/Octokit.Reactive/Clients/IObservableTeamsClient.cs +++ b/Octokit.Reactive/Clients/IObservableTeamsClient.cs @@ -31,6 +31,17 @@ namespace Octokit.Reactive /// A list of the orgs's teams s. IObservable GetAll(string org); + /// + /// Returns all members of the given team. + /// + /// The team identifier + /// + /// https://developer.github.com/v3/orgs/teams/#list-team-members + /// + /// Thrown when a general API error occurs. + /// A list of the team's member s. + IObservable GetMembers(int id); + /// /// Returns newly created for the current org. /// diff --git a/Octokit.Reactive/Clients/ObservableTeamsClient.cs b/Octokit.Reactive/Clients/ObservableTeamsClient.cs index b295ac1a..bdbdff8c 100644 --- a/Octokit.Reactive/Clients/ObservableTeamsClient.cs +++ b/Octokit.Reactive/Clients/ObservableTeamsClient.cs @@ -51,6 +51,20 @@ namespace Octokit.Reactive return _connection.GetAndFlattenAllPages(ApiUrls.OrganizationTeams(org)); } + /// + /// Returns all members of the given team. + /// + /// The team identifier + /// + /// https://developer.github.com/v3/orgs/teams/#list-team-members + /// + /// Thrown when a general API error occurs. + /// A list of the team's member s. + public IObservable GetMembers(int id) + { + return _connection.GetAndFlattenAllPages(ApiUrls.TeamMembers(id)); + } + /// /// Returns newly created for the current org. /// diff --git a/Octokit.Tests.Integration/Clients/TeamsClientTests.cs b/Octokit.Tests.Integration/Clients/TeamsClientTests.cs index 8e2f8d24..82acd4e3 100644 --- a/Octokit.Tests.Integration/Clients/TeamsClientTests.cs +++ b/Octokit.Tests.Integration/Clients/TeamsClientTests.cs @@ -120,4 +120,29 @@ public class TeamsClientTests Assert.False(isMember); } } + + public class TheGetMembersMethod + { + readonly Team team; + + public TheGetMembersMethod() + { + var github = new GitHubClient(new ProductHeaderValue("OctokitTests")) { Credentials = Helper.Credentials }; + + team = github.Organization.Team.GetAll(Helper.Organization).Result.First(); + } + + [OrganizationTest] + public async Task GetsAllMembersWhenAuthenticated() + { + var github = new GitHubClient(new ProductHeaderValue("OctokitTests")) + { + Credentials = Helper.Credentials + }; + + var members = await github.Organization.Team.GetMembers(team.Id); + + Assert.Contains(Helper.UserName, members.Select(u => u.Login)); + } + } } diff --git a/Octokit.Tests/Clients/TeamsClientTests.cs b/Octokit.Tests/Clients/TeamsClientTests.cs index 377dd2a6..d49e6a5f 100644 --- a/Octokit.Tests/Clients/TeamsClientTests.cs +++ b/Octokit.Tests/Clients/TeamsClientTests.cs @@ -43,6 +43,20 @@ namespace Octokit.Tests.Clients } } + public class TheGetMembersMethod + { + [Fact] + public void RequestsTheCorrectUrl() + { + var connection = Substitute.For(); + var client = new TeamsClient(connection); + + client.GetMembers(1); + + connection.Received().GetAll(Arg.Is(u => u.ToString() == "teams/1/members")); + } + } + public class TheCreateTeamMethod { [Fact] diff --git a/Octokit/Clients/ITeamsClient.cs b/Octokit/Clients/ITeamsClient.cs index be759a8e..91b44aea 100644 --- a/Octokit/Clients/ITeamsClient.cs +++ b/Octokit/Clients/ITeamsClient.cs @@ -33,6 +33,16 @@ namespace Octokit /// A list of the orgs's teams s. Task> GetAll(string org); + /// + /// Returns all members of the given team. + /// + /// The team identifier + /// + /// https://developer.github.com/v3/orgs/teams/#list-team-members + /// + /// A list of the team's member s. + Task> GetMembers(int id); + /// /// Returns newly created for the current org. /// diff --git a/Octokit/Clients/TeamsClient.cs b/Octokit/Clients/TeamsClient.cs index 48310ff5..a2dcceab 100644 --- a/Octokit/Clients/TeamsClient.cs +++ b/Octokit/Clients/TeamsClient.cs @@ -52,6 +52,20 @@ namespace Octokit return ApiConnection.GetAll(endpoint); } + /// + /// Returns all members of the given team. + /// + /// The team identifier + /// + /// https://developer.github.com/v3/orgs/teams/#list-team-members + /// + /// A list of the team's member s. + public Task> GetMembers(int id) + { + var endpoint = ApiUrls.TeamMembers(id); + + return ApiConnection.GetAll(endpoint); + } /// /// Returns newly created for the current org. diff --git a/Octokit/Helpers/ApiUrls.cs b/Octokit/Helpers/ApiUrls.cs index 5f872867..3d863ef9 100644 --- a/Octokit/Helpers/ApiUrls.cs +++ b/Octokit/Helpers/ApiUrls.cs @@ -946,7 +946,7 @@ namespace Octokit } /// - /// returns the for team members + /// returns the for team member /// /// The team id /// The user login. @@ -955,6 +955,15 @@ namespace Octokit return "teams/{0}/members/{1}".FormatUri(id, login); } + /// + /// returns the for team members list + /// + /// The team id + public static Uri TeamMembers(int id) + { + return "teams/{0}/members".FormatUri(id); + } + /// /// returns the for teams /// use for update or deleting a team