Skip to content

Commit

Permalink
feat: add getDeals for organizations and persons
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidRouyer committed Dec 16, 2018
1 parent d042643 commit 4169e03
Show file tree
Hide file tree
Showing 11 changed files with 340 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -153,5 +153,64 @@ public async Task CanDelete()
Assert.False(deletedOrganization.ActiveFlag);
}
}

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

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

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

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

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

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

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

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

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

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

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

Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
}
}
}
}
59 changes: 59 additions & 0 deletions src/Pipedrive.net.Tests.Integration/Clients/PersonsClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,64 @@ public async Task CanDelete()
Assert.False(deletedPerson.ActiveFlag);
}
}

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

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

var stageDeals = await pipedrive.Person.GetDeals(6, options);
Assert.Equal(3, stageDeals.Count);
}

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

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

var deals = await pipedrive.Person.GetDeals(6, options);
Assert.Equal(2, deals.Count);
}

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

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

var firstPage = await pipedrive.Person.GetDeals(6, startOptions);

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

var secondPage = await pipedrive.Person.GetDeals(6, skipStartOptions);

Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
}
}
}
}
39 changes: 39 additions & 0 deletions src/Pipedrive.net.Tests/Clients/OrganizationsClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,5 +191,44 @@ public void DeletesCorrectUrl()
connection.Received().Delete(Arg.Is<Uri>(u => u.ToString() == "organizations/123"));
}
}

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

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

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

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

await client.GetDeals(123, filters);

Received.InOrder(async () =>
{
await connection.GetAll<Deal>(
Arg.Is<Uri>(u => u.ToString() == "organizations/123/deals"),
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)
);
});
}
}
}
}
39 changes: 39 additions & 0 deletions src/Pipedrive.net.Tests/Clients/PersonsClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -212,5 +212,44 @@ public void DeletesCorrectUrl()
connection.Received().Delete(Arg.Is<Uri>(u => u.ToString() == "persons/123"));
}
}

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

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

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

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

await client.GetDeals(123, filters);

Received.InOrder(async () =>
{
await connection.GetAll<Deal>(
Arg.Is<Uri>(u => u.ToString() == "persons/123/deals"),
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
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,7 @@ public interface IOrganizationsClient
Task<Organization> Edit(long id, OrganizationUpdate data);

Task Delete(long id);

Task<IReadOnlyList<Deal>> GetDeals(long organizationId, OrganizationDealFilters filters);
}
}
2 changes: 2 additions & 0 deletions src/Pipedrive.net/Clients/IPersonsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,7 @@ public interface IPersonsClient
Task<Person> Edit(long id, PersonUpdate data);

Task Delete(long id);

Task<IReadOnlyList<Deal>> GetDeals(long personId, PersonDealFilters filters);
}
}
16 changes: 16 additions & 0 deletions src/Pipedrive.net/Clients/OrganizationsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,5 +81,21 @@ public Task Delete(long id)
{
return ApiConnection.Delete(ApiUrls.Organization(id));
}

public Task<IReadOnlyList<Deal>> GetDeals(long personId, OrganizationDealFilters filters)
{
Ensure.ArgumentNotNull(filters, nameof(filters));

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

return ApiConnection.GetAll<Deal>(ApiUrls.OrganizationDeal(personId), parameters, options);
}
}
}
16 changes: 16 additions & 0 deletions src/Pipedrive.net/Clients/PersonsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,5 +91,21 @@ public Task Delete(long id)
{
return ApiConnection.Delete(ApiUrls.Person(id));
}

public Task<IReadOnlyList<Deal>> GetDeals(long personId, PersonDealFilters filters)
{
Ensure.ArgumentNotNull(filters, nameof(filters));

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

return ApiConnection.GetAll<Deal>(ApiUrls.PersonDeal(personId), parameters, options);
}
}
}
18 changes: 18 additions & 0 deletions src/Pipedrive.net/Helpers/ApiUrls.cs
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,15 @@ public static Uri Organization(long id)
return new Uri($"organizations/{id}", UriKind.Relative);
}

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

/// <summary>
/// Returns the <see cref="Uri"/> that returns all of the organization fields in response to a GET request.
/// </summary>
Expand Down Expand Up @@ -271,6 +280,15 @@ public static Uri Person(long id)
return new Uri($"persons/{id}", UriKind.Relative);
}

/// <summary>
/// Returns the <see cref="Uri"/> for all the deals of the specified person.
/// </summary>
/// <param name="id">The id of the person</param>
public static Uri PersonDeal(long id)
{
return new Uri($"persons/{id}/deals", UriKind.Relative);
}

/// <summary>
/// Returns the <see cref="Uri"/> that returns all of the person fields in response to a GET request.
/// </summary>
Expand Down
48 changes: 48 additions & 0 deletions src/Pipedrive.net/Models/Request/OrganizationDealFilters.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using System.Collections.Generic;

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

public int? StartPage { get; set; }

public int? PageCount { get; set; }

public int? PageSize { get; set; }

public DealStatus? Status { get; set; }

public string Sort { get; set; }

public bool? OnlyPrimaryAssociation { 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>();
if (Status.HasValue)
{
d.Add("status", Status.Value.ToString());
}
if (!string.IsNullOrWhiteSpace(Sort))
{
d.Add("sort", Sort);
}
if (OnlyPrimaryAssociation.HasValue)
{
d.Add("only_primary_association", OnlyPrimaryAssociation.Value.ToString());
}
return d;
}
}
}
}
Loading

0 comments on commit 4169e03

Please sign in to comment.