Skip to content

Commit

Permalink
feat: add GET /organizations/{id}/flow endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidRouyer committed Sep 3, 2020
1 parent 0738343 commit 48769b0
Show file tree
Hide file tree
Showing 6 changed files with 156 additions and 2 deletions.
Expand Up @@ -343,8 +343,8 @@ public async Task ReturnsCorrectCountWithStart()
StartPage = 1
};

var deals = await pipedrive.Organization.GetActivities(5, options);
Assert.Equal(2, deals.Count);
var activities = await pipedrive.Organization.GetActivities(5, options);
Assert.Equal(2, activities.Count);
}

[IntegrationTest]
Expand Down Expand Up @@ -372,5 +372,64 @@ public async Task ReturnsDistinctInfosBasedOnStartPage()
Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
}
}

public class TheGetUpdatesMethod
{
[IntegrationTest]
public async Task ReturnsCorrectCountWithoutStart()
{
var pipedrive = Helper.GetAuthenticatedClient();

var options = new OrganizationUpdateFilters
{
PageSize = 3,
PageCount = 1
};

var organizationUpdates = await pipedrive.Organization.GetUpdates(5, options);
Assert.Equal(3, organizationUpdates.Count);
}

[IntegrationTest]
public async Task ReturnsCorrectCountWithStart()
{
var pipedrive = Helper.GetAuthenticatedClient();

var options = new OrganizationUpdateFilters
{
PageSize = 2,
PageCount = 1,
StartPage = 1
};

var updates = await pipedrive.Organization.GetUpdates(5, options);
Assert.Equal(2, updates.Count);
}

[IntegrationTest]
public async Task ReturnsDistinctInfosBasedOnStartPage()
{
var pipedrive = Helper.GetAuthenticatedClient();

var startOptions = new OrganizationUpdateFilters
{
PageSize = 1,
PageCount = 1
};

var firstPage = await pipedrive.Organization.GetUpdates(5, startOptions);

var skipStartOptions = new OrganizationUpdateFilters
{
PageSize = 1,
PageCount = 1,
StartPage = 1
};

var secondPage = await pipedrive.Organization.GetUpdates(5, skipStartOptions);

Assert.NotEqual(firstPage[0].Data.Id, secondPage[0].Data.Id);
}
}
}
}
38 changes: 38 additions & 0 deletions src/Pipedrive.net.Tests/Clients/OrganizationsClientTests.cs
Expand Up @@ -383,5 +383,43 @@ public async Task RequestsCorrectUrl()
});
}
}

public class TheGetUpdatesMethod
{
[Fact]
public async Task EnsuresNonNullArguments()
{
var client = new OrganizationsClient(Substitute.For<IApiConnection>());

await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetUpdates(1, null));
}

[Fact]
public async Task RequestsCorrectUrl()
{
var connection = Substitute.For<IApiConnection>();
var client = new OrganizationsClient(connection);

var filters = new OrganizationUpdateFilters
{
PageSize = 1,
PageCount = 1,
StartPage = 0,
};

await client.GetUpdates(123, filters);

Received.InOrder(async () =>
{
await connection.GetAll<DealUpdateFlow>(
Arg.Is<Uri>(u => u.ToString() == "organizations/123/flow"),
Arg.Is<Dictionary<string, string>>(d => d.Count == 1
&& d["id"] == "123"),
Arg.Is<ApiOptions>(o => o.PageSize == 1
&& o.PageCount == 1
&& o.StartPage == 0));
});
}
}
}
}
2 changes: 2 additions & 0 deletions src/Pipedrive.net/Clients/IOrganizationsClient.cs
Expand Up @@ -35,5 +35,7 @@ public interface IOrganizationsClient
Task DeleteFollower(long dealId, long followerId);

Task<IReadOnlyList<DealActivity>> GetActivities(long id, OrganizationActivityFilters filters);

Task<IReadOnlyList<DealUpdateFlow>> GetUpdates(long dealId, OrganizationUpdateFilters filters);
}
}
16 changes: 16 additions & 0 deletions src/Pipedrive.net/Clients/OrganizationsClient.cs
Expand Up @@ -169,5 +169,21 @@ public Task<IReadOnlyList<DealActivity>> GetActivities(long id, OrganizationActi

return ApiConnection.GetAll<DealActivity>(ApiUrls.OrganizationActivities(id), parameters, options);
}

public Task<IReadOnlyList<DealUpdateFlow>> GetUpdates(long dealId, OrganizationUpdateFilters filters)
{
Ensure.ArgumentNotNull(filters, nameof(filters));

var parameters = filters.Parameters;
parameters.Add("id", dealId.ToString());
var options = new ApiOptions
{
StartPage = filters.StartPage,
PageCount = filters.PageCount,
PageSize = filters.PageSize
};

return ApiConnection.GetAll<DealUpdateFlow>(ApiUrls.OrganizationUpdates(dealId), parameters, options);
}
}
}
9 changes: 9 additions & 0 deletions src/Pipedrive.net/Helpers/ApiUrls.cs
Expand Up @@ -334,6 +334,15 @@ public static Uri OrganizationActivities(long id)
return new Uri($"organizations/{id}/activities", UriKind.Relative);
}

/// <summary>
/// Returns the <see cref="Uri"/> for all the updates of the specified organization.
/// </summary>
/// <param name="id">The id of the organization</param>
public static Uri OrganizationUpdates(long id)
{
return new Uri($"organizations/{id}/flow", UriKind.Relative);
}

/// <summary>
/// Returns the <see cref="Uri"/> that returns all of the organization fields in response to a GET request.
/// </summary>
Expand Down
30 changes: 30 additions & 0 deletions src/Pipedrive.net/Models/Request/OrganizationUpdateFilters.cs
@@ -0,0 +1,30 @@
using System.Collections.Generic;

namespace Pipedrive
{
public class OrganizationUpdateFilters
{
public static OrganizationUpdateFilters None
{
get { return new OrganizationUpdateFilters(); }
}

public int? StartPage { get; set; }

public int? PageCount { get; set; }

public int? PageSize { get; set; }

/// <summary>
/// Get the query parameters that will be appending onto the search
/// </summary>
public IDictionary<string, string> Parameters
{
get
{
var d = new Dictionary<string, string>();
return d;
}
}
}
}

0 comments on commit 48769b0

Please sign in to comment.