diff --git a/HubSpot.Api.Test/Crm/ProductTests.cs b/HubSpot.Api.Test/Crm/ProductTests.cs index c9cbea0..1ccfc80 100644 --- a/HubSpot.Api.Test/Crm/ProductTests.cs +++ b/HubSpot.Api.Test/Crm/ProductTests.cs @@ -52,4 +52,4 @@ public async void SearchAsync_ByName_Succeeds() page.Results.Should().NotBeEmpty(); } -} +} \ No newline at end of file diff --git a/HubSpot.Api.Test/Crm/TaskTests.cs b/HubSpot.Api.Test/Crm/TaskTests.cs new file mode 100644 index 0000000..459897e --- /dev/null +++ b/HubSpot.Api.Test/Crm/TaskTests.cs @@ -0,0 +1,62 @@ +using System.Net; +using FluentAssertions; +using HubSpot.Api.Exceptions; +using HubSpot.Api.Models; +using Xunit.Abstractions; + +namespace HubSpot.Api.Test.Crm; + +public class TaskTests(ITestOutputHelper testOutputHelper) : TestBase(testOutputHelper) +{ + [Fact] + public async void CreateReadUpdateAndDelete_Succeeds() + { + var createRequest = new CreateRequest + { + Properties = new Dictionary + { + { "hs_timestamp", "2019-10-30T03:30:17.883Z" }, + { "hs_task_body", """ +

Send Proposal

+ Example + """ }, + { "hs_task_subject", "Follow-up for Brian Buyer" }, + { "hs_task_status", "NOT_STARTED" }, + { "hs_task_priority", "HIGH" }, + { "hs_task_type", "TODO" } + }, + Associations = [] + }; + + HubSpotObject createdObject; + try + { + createdObject = await Client.Crm.Tasks.CreateAsync(createRequest); + createdObject.Should().NotBeNull(); + } + catch (HubSpotApiErrorException e) when (e.StatusCode == HttpStatusCode.Conflict) + { + e.Error.Category.Should().Be(ErrorCategory.Conflict); + createdObject = new HubSpotObject + { + Id = e.Message.Split(' ').Last(), + Properties = createRequest.Properties, + Archived = false, + CreatedAt = DateTime.UtcNow, + UpdatedAt = DateTime.UtcNow + }; + } + + // Re-read the item + var readObject = await Client.Crm.Tasks.GetAsync(createdObject.Id); + readObject.Should().NotBeNull(); + readObject.Id.Should().Be(createdObject.Id); + readObject.Properties.Should().NotBeEmpty(); + + // Delete the item + await Client + .Crm + .Tasks + .ArchiveAsync(createdObject.Id); + } +} \ No newline at end of file diff --git a/HubSpot.Api/Interfaces/Crm/IDeals.cs b/HubSpot.Api/Interfaces/Crm/IDeals.cs index 91cf6a6..fe96888 100644 --- a/HubSpot.Api/Interfaces/Crm/IDeals.cs +++ b/HubSpot.Api/Interfaces/Crm/IDeals.cs @@ -56,5 +56,4 @@ Task SearchAsync( [Body] SearchRequest searchRequest, CancellationToken cancellationToken = default ); -} - +} \ No newline at end of file diff --git a/HubSpot.Api/Interfaces/Crm/ITasks.cs b/HubSpot.Api/Interfaces/Crm/ITasks.cs new file mode 100644 index 0000000..391b6ca --- /dev/null +++ b/HubSpot.Api/Interfaces/Crm/ITasks.cs @@ -0,0 +1,55 @@ +using HubSpot.Api.Models; +using Refit; + +namespace HubSpot.Api.Interfaces.Crm; + +public interface ITasks +{ + // https://developers.hubspot.com/docs/guides/api/crm/engagements/tasks + + [Post("/crm/v3/objects/tasks")] + Task CreateAsync( + [Body] CreateRequest createRequest, + CancellationToken cancellationToken = default + ); + + [Get("/crm/v3/objects/tasks/{id}")] + Task GetAsync( + string id, + [Query] IReadOnlyList? properties = null, + [Query] IReadOnlyList? propertiesWithHistory = null, + [Query] IReadOnlyList? associations = null, + [Query] bool? archived = null, + CancellationToken cancellationToken = default + ); + + [Patch("/crm/v3/objects/tasks/{id}")] + Task PatchAsync( + string id, + [Body] HubSpotPatchObject hubSpotObject, + CancellationToken cancellationToken = default + ); + + [Get("/crm/v3/objects/tasks")] + Task GetPageAsync( + int? limit = null, + string? after = null, + ICollection? properties = null, + ICollection? propertiesWithHistory = null, + ICollection? associations = null, + bool? archived = null, + CancellationToken cancellationToken = default + ); + + [Delete("/crm/v3/objects/tasks/{id}")] + Task ArchiveAsync( + string id, + CancellationToken cancellationToken = default + ); + + [Post("/crm/v3/objects/tasks/search")] + Task SearchAsync( + [Body] SearchRequest searchRequest, + CancellationToken cancellationToken = default + ); +} \ No newline at end of file diff --git a/HubSpot.Api/Sections/Crm.cs b/HubSpot.Api/Sections/Crm.cs index 19a03d1..43fcfe7 100644 --- a/HubSpot.Api/Sections/Crm.cs +++ b/HubSpot.Api/Sections/Crm.cs @@ -31,4 +31,7 @@ public class Crm(HttpClient httpClient, RefitSettings refitSettings) public ITickets Tickets { get; init; } = RestService.For(httpClient, refitSettings); + + public ITasks Tasks { get; init; } + = RestService.For(httpClient, refitSettings); } diff --git a/README.md b/README.md index 7131852..4b5c272 100644 --- a/README.md +++ b/README.md @@ -53,46 +53,47 @@ Key: | :green_square: | Full | -| Type | Object | Documentation | HubSpot API Status | Nuget Coverage | -| - | - | - | - | - | -| Analytics | Analytics | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/events/v3/send) | Developer Preview | :black_circle: | -| Auth | Auth | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/oauth/v1) | Latest | :black_circle: | -| Automation | Automation | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/automation/v4/actions) | Latest | :black_circle: | -| Business Units | Business Units | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/business-units/v3) | Stable | :black_circle: | +| Type | Object | Documentation | HubSpot API Status | Nuget Coverage | +| - |---------------------------| - | - | - | +| Analytics | Analytics | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/events/v3/send) | Developer Preview | :black_circle: | +| Auth | Auth | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/oauth/v1) | Latest | :black_circle: | +| Automation | Automation | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/automation/v4/actions) | Latest | :black_circle: | +| Business Units | Business Units | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/business-units/v3) | Stable | :black_circle: | | Communication Preferences | Communication Preferences | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/communication-preferences/v3) | Developer Preview | :black_circle: | -| Conversations | Conversations | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/conversations/v3/visitor-identification) | Latest | :black_circle: | -| CMS | Domains | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/domains) | Developer Preview | :yellow_circle: | -| CMS | Source Code | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/source-code) | Developer Preview | :black_circle: | -| CMS | Blog Posts | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/blogs/blog-posts) | Developer Preview | :black_circle: | -| CMS | Authors | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/blogs/authors) | Developer Preview | :black_circle: | -| CMS | URL Redirects | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/url-redirects) | Developer Preview | :black_circle: | -| CMS | Performance | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/performance) | Developer Preview | :black_circle: | -| CMS | Hubdb | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/hubdb) | Developer Preview | :black_circle: | -| CMS | Tags | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/blogs/tags) | Developer Preview | :black_circle: | -| CMS | Audit Logs | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/audit-logs) | Developer Preview | :black_circle: | -| CMS | Site Search | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/site-search) | Developer Preview | :black_circle: | -| CRM | Accounting | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/extensions/accounting) | Latest | :black_circle: | -| CRM | Associations | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/associations) | Latest | :black_circle: | -| CRM | Associations (v4) | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v4/associations) | Stable | :black_circle: | -| CRM | Calling | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/extensions/calling) | Latest | :black_circle: | -| CRM | Companies | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/companies) | Latest | :yellow_circle: | -| CRM | Contacts | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/contacts) | Latest | :yellow_circle: | -| CRM | Extensions | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/extensions/sales-objects/v1/object-types) | Latest | :black_circle: | -| CRM | Deals | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/deals) | Latest | :yellow_circle: | -| CRM | Feedback Submissions | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/feedback_submissions) | Developer Preview | :yellow_circle: | -| CRM | Imports | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/imports) | Latest | :black_circle: | -| CRM | Line Items | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/line_items) | Latest | :yellow_circle: | -| CRM | Objects | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects) | Latest | :black_circle: | -| CRM | Owners | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/owners) | Latest | :black_circle: | -| CRM | Pipelines | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/pipelines) | Latest | :black_circle: | -| CRM | Properties | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/properties) | Latest | :black_circle: | -| CRM | Quotes | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/quotes) | Latest | :black_circle: | -| CRM | Schemas | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/schemas) | Latest | :black_circle: | -| CRM | Tickets | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/tickets) | Latest | :yellow_circle: | -| CRM | Timeline | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/timeline) | Latest | :black_circle: | -| CRM | Videoconferencing | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/extensions/videoconferencing) | Latest | :black_circle: | -| Events | Events | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/events/v3/events) | Developer Preview | :black_circle: | -| Marketing | Marketing Events (beta) | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/marketing/v3/marketing-events-beta) | Latest | :black_circle: | -| Marketing | Transactional | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/marketing/v3/transactional) | Latest | :black_circle: | -| Webhooks | Webhooks | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/webhooks/v3) | Latest | :black_circle: | +| Conversations | Conversations | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/conversations/v3/visitor-identification) | Latest | :black_circle: | +| CMS | Domains | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/domains) | Developer Preview | :yellow_circle: | +| CMS | Source Code | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/source-code) | Developer Preview | :black_circle: | +| CMS | Blog Posts | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/blogs/blog-posts) | Developer Preview | :black_circle: | +| CMS | Authors | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/blogs/authors) | Developer Preview | :black_circle: | +| CMS | URL Redirects | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/url-redirects) | Developer Preview | :black_circle: | +| CMS | Performance | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/performance) | Developer Preview | :black_circle: | +| CMS | Hubdb | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/hubdb) | Developer Preview | :black_circle: | +| CMS | Tags | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/blogs/tags) | Developer Preview | :black_circle: | +| CMS | Audit Logs | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/audit-logs) | Developer Preview | :black_circle: | +| CMS | Site Search | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/cms/v3/site-search) | Developer Preview | :black_circle: | +| CRM | Accounting | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/extensions/accounting) | Latest | :black_circle: | +| CRM | Associations | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/associations) | Latest | :black_circle: | +| CRM | Associations (v4) | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v4/associations) | Stable | :black_circle: | +| CRM | Calling | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/extensions/calling) | Latest | :black_circle: | +| CRM | Companies | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/companies) | Latest | :yellow_circle: | +| CRM | Contacts | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/contacts) | Latest | :yellow_circle: | +| CRM | Extensions | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/extensions/sales-objects/v1/object-types) | Latest | :black_circle: | +| CRM | Deals | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/deals) | Latest | :yellow_circle: | +| CRM | Feedback Submissions | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/feedback_submissions) | Developer Preview | :yellow_circle: | +| CRM | Imports | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/imports) | Latest | :black_circle: | +| CRM | Line Items | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/line_items) | Latest | :yellow_circle: | +| CRM | Objects | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects) | Latest | :black_circle: | +| CRM | Owners | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/owners) | Latest | :black_circle: | +| CRM | Pipelines | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/pipelines) | Latest | :black_circle: | +| CRM | Properties | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/properties) | Latest | :black_circle: | +| CRM | Quotes | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/quotes) | Latest | :black_circle: | +| CRM | Schemas | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/schemas) | Latest | :black_circle: | +| CRM | Tickets | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/tickets) | Latest | :yellow_circle: | +| CRM | Timeline | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/timeline) | Latest | :black_circle: | +| CRM | Videoconferencing | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/extensions/videoconferencing) | Latest | :black_circle: | +| CRM | Tasks | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/crm/v3/objects/tasks) | Latest | :yellow_circle: | +| Events | Events | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/events/v3/events) | Developer Preview | :black_circle: | +| Marketing | Marketing Events (beta) | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/marketing/v3/marketing-events-beta) | Latest | :black_circle: | +| Marketing | Transactional | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/marketing/v3/transactional) | Latest | :black_circle: | +| Webhooks | Webhooks | [Link](https://api.hubspot.com/api-catalog-public/v1/apis/webhooks/v3) | Latest | :black_circle: | \ No newline at end of file