Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EN-261 Add schedule publish and unpublish endpoint to Management API SDK #275

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,46 @@ public async void SchedulePublishingOfLanguageVariantAsync_NoIdentifier_Throws()
await client.Invoking(x => x.SchedulePublishingOfLanguageVariantAsync(null, schedule)).Should().ThrowAsync<ArgumentNullException>();
}

[Theory]
[ClassData(typeof(CombinationOfVariantIdentifiersAndUrl))]
public async void SchedulePublishingAndUnpublishingOfLanguageVariantAsync_SchedulesVariant(LanguageVariantIdentifier variantIdentifier, string expectedUrl)
{
var client = _scenario.CreateManagementClient();

var schedule = new SchedulePublishAndUnpublishModel()
{
PublishDisplayTimeZone = "prague",
PublishScheduledTo = DateTimeOffset.UtcNow,
UnpublishDisplayTimeZone = "prague",
UnpublishScheduledTo = DateTimeOffset.UtcNow.AddDays(10)
};

await client.SchedulePublishingAndUnpublishingOfLanguageVariantAsync(variantIdentifier, schedule);

_scenario
.CreateExpectations()
.HttpMethod(HttpMethod.Put)
.RequestPayload(schedule)
.Url($"{expectedUrl}/schedule-publish-and-unpublish")
.Validate();
}

[Fact]
public async void SchedulePublishingAndUnpublishingOfLanguageVariantAsync_NoIdentifier_Throws()
{
var client = _scenario.CreateManagementClient();

var schedule = new SchedulePublishAndUnpublishModel()
{
PublishDisplayTimeZone = "prague",
PublishScheduledTo = DateTimeOffset.UtcNow,
UnpublishDisplayTimeZone = "prague",
UnpublishScheduledTo = DateTimeOffset.UtcNow.AddDays(10)
};

await client.Invoking(x => x.SchedulePublishingAndUnpublishingOfLanguageVariantAsync(null, schedule)).Should().ThrowAsync<ArgumentNullException>();
}

[Fact]
public async void SchedulePublishingOfLanguageVariantAsync_ScheduleModelIsNull_Throws()
{
Expand Down
7 changes: 7 additions & 0 deletions Kontent.Ai.Management/IManagementClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,13 @@ public interface IManagementClient
/// <param name="scheduleModel">The time when the language variant will be unpublished</param>
Task ScheduleUnpublishingOfLanguageVariantAsync(LanguageVariantIdentifier identifier, ScheduleModel scheduleModel);

/// <summary>
/// Schedules publish and unpublish of language variant.
/// </summary>
/// <param name="identifier">The identifier of the language variant that should be scheduled.</param>
/// <param name="schedule">The interval in which the variant should be published</param>
Task SchedulePublishingAndUnpublishingOfLanguageVariantAsync(LanguageVariantIdentifier identifier, SchedulePublishAndUnpublishModel schedule);

/// <summary>
/// Unpublishes the language variant.
/// </summary>
Expand Down
12 changes: 12 additions & 0 deletions Kontent.Ai.Management/ManagementClient.Publishing.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,18 @@ public async Task SchedulePublishingOfLanguageVariantAsync(LanguageVariantIdenti

await _actionInvoker.InvokeMethodAsync(endpointUrl, HttpMethod.Put, scheduleModel);
}

/// <inheritdoc />
public async Task SchedulePublishingAndUnpublishingOfLanguageVariantAsync(LanguageVariantIdentifier identifier, SchedulePublishAndUnpublishModel schedule)
{
ArgumentNullException.ThrowIfNull(identifier);

ArgumentNullException.ThrowIfNull(schedule);

var endpointUrl = _urlBuilder.BuildSchedulePublishAndUnpublishVariantUrl(identifier);

await _actionInvoker.InvokeMethodAsync(endpointUrl, HttpMethod.Put, schedule);
}

/// <inheritdoc />
public async Task CancelPublishingOfLanguageVariantAsync(LanguageVariantIdentifier identifier)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using Newtonsoft.Json;
using System;

namespace Kontent.Ai.Management.Models.Publishing;

/// <summary>
/// Represents the schedule interval model.
/// </summary>
public class SchedulePublishAndUnpublishModel
{
/// <summary>
/// Gets or sets ISO-8601 formatted date-time for scheduled publishing.
/// If you do not provide this property, the publishing schedule won't be updated
/// </summary>
[JsonProperty(PropertyName = "publish_scheduled_to")]
public DateTimeOffset? PublishScheduledTo { get; set; }

/// <summary>
/// IANA time zone name used to display time offset of the scheduled publish date in the UI.
/// </summary>
[JsonProperty(PropertyName = "publish_display_timezone")]
public string PublishDisplayTimeZone { get; set; }

/// <summary>
/// Gets or sets ISO-8601 formatted date-time for scheduled unpublishing.
/// If you do not provide this property, the unpublishing schedule won't be updated
/// </summary>
[JsonProperty(PropertyName = "unpublish_scheduled_to")]
public DateTimeOffset? UnpublishScheduledTo { get; set; }

/// <summary>
/// IANA time zone name used to display time offset of the scheduled publish date in the UI.
/// </summary>
[JsonProperty(PropertyName = "unpublish_display_timezone")]
public string UnpublishDisplayTimeZone { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ public string BuildPublishVariantUrl(LanguageVariantIdentifier identifier) => Ge
_variantTemplate.GetIdentifierUrlSegment(identifier.LanguageIdentifier),
"/publish"));

public string BuildSchedulePublishAndUnpublishVariantUrl(LanguageVariantIdentifier identifier) => GetEnvironmentUrl(
string.Concat(
_itemTemplate.GetIdentifierUrlSegment(identifier.ItemIdentifier),
_variantTemplate.GetIdentifierUrlSegment(identifier.LanguageIdentifier),
"/schedule-publish-and-unpublish"));

public string BuildCancelPublishingVariantUrl(LanguageVariantIdentifier identifier) => GetEnvironmentUrl(
string.Concat(
_itemTemplate.GetIdentifierUrlSegment(identifier.ItemIdentifier),
Expand Down