Skip to content
Draft
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
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## [v0.7.0](https://github.com/contentstack/contentstack-management-dotnet/tree/v0.7.0)
- Feat
- **Bulk publish/unpublish: query parameters (DX-3233)**
- `skip_workflow_stage_check` and `approvals` are now sent as query parameters instead of headers for bulk publish and bulk unpublish
- Unit tests updated to assert on `QueryResources` for these flags (BulkPublishServiceTest, BulkUnpublishServiceTest, BulkOperationServicesTest)
- Integration tests: bulk publish with skipWorkflowStage and approvals (Test003a), bulk unpublish with skipWorkflowStage and approvals (Test004a), and helper `EnsureBulkTestContentTypeAndEntriesAsync()` so bulk tests can run in any order

## [v0.6.1](https://github.com/contentstack/contentstack-management-dotnet/tree/v0.6.1) (2026-02-02)
- Fix
- Release DELETE request no longer includes Content-Type header to comply with API requirements
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<PackageReference Include="AutoFixture.AutoMoq" Version="4.18.1" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.3.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
</ItemGroup>

<ItemGroup>
Expand All @@ -35,14 +36,17 @@
<ItemGroup>
<EmbeddedResource Include="Mock\*.json" />
</ItemGroup>

<ItemGroup>
<Content Include="appsettings.json">
<Content Include="appSettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why remove this?


<ItemGroup>
<None Remove="Microsoft.AspNetCore.Http" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Contentstack.Management.Core\contentstack.management.core.csproj" />
</ItemGroup>
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,25 @@ public void Should_Create_Service_With_Valid_Parameters()
}

[TestMethod]
public void Should_Set_Skip_Workflow_Stage_Header_When_True()
public void Should_Set_Skip_Workflow_Stage_Query_Parameter_When_True()
{
var details = new BulkPublishDetails();
var service = new BulkPublishService(serializer, new Management.Core.Models.Stack(null), details, skipWorkflowStage: true);

Assert.IsNotNull(service);
Assert.IsTrue(service.Headers.ContainsKey("skip_workflow_stage_check"));
Assert.AreEqual("true", service.Headers["skip_workflow_stage_check"]);
Assert.IsTrue(service.QueryResources.ContainsKey("skip_workflow_stage_check"));
Assert.AreEqual("true", service.QueryResources["skip_workflow_stage_check"]);
}

[TestMethod]
public void Should_Set_Approvals_Header_When_True()
public void Should_Set_Approvals_Query_Parameter_When_True()
{
var details = new BulkPublishDetails();
var service = new BulkPublishService(serializer, new Management.Core.Models.Stack(null), details, approvals: true);

Assert.IsNotNull(service);
Assert.IsTrue(service.Headers.ContainsKey("approvals"));
Assert.AreEqual("true", service.Headers["approvals"]);
Assert.IsTrue(service.QueryResources.ContainsKey("approvals"));
Assert.AreEqual("true", service.QueryResources["approvals"]);
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,25 @@ public void Should_Create_Service_With_Valid_Parameters()
}

[TestMethod]
public void Should_Set_Skip_Workflow_Stage_Header_When_True()
public void Should_Set_Skip_Workflow_Stage_Query_Parameter_When_True()
{
var details = new BulkPublishDetails();
var service = new BulkUnpublishService(serializer, new Management.Core.Models.Stack(null), details, skipWorkflowStage: true);

Assert.IsNotNull(service);
Assert.IsTrue(service.Headers.ContainsKey("skip_workflow_stage_check"));
Assert.AreEqual("true", service.Headers["skip_workflow_stage_check"]);
Assert.IsTrue(service.QueryResources.ContainsKey("skip_workflow_stage_check"));
Assert.AreEqual("true", service.QueryResources["skip_workflow_stage_check"]);
}

[TestMethod]
public void Should_Set_Approvals_Header_When_True()
public void Should_Set_Approvals_Query_Parameter_When_True()
{
var details = new BulkPublishDetails();
var service = new BulkUnpublishService(serializer, new Management.Core.Models.Stack(null), details, approvals: true);

Assert.IsNotNull(service);
Assert.IsTrue(service.Headers.ContainsKey("approvals"));
Assert.AreEqual("true", service.Headers["approvals"]);
Assert.IsTrue(service.QueryResources.ContainsKey("approvals"));
Assert.AreEqual("true", service.QueryResources["approvals"]);
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,10 @@ public void Test004_BulkPublishService_Initialization()
Assert.IsNotNull(service);
Assert.AreEqual("/bulk/publish", service.ResourcePath);
Assert.AreEqual("POST", service.HttpMethod);
Assert.IsTrue(service.Headers.ContainsKey("skip_workflow_stage_check"));
Assert.IsTrue(service.Headers.ContainsKey("approvals"));
Assert.AreEqual("true", service.Headers["skip_workflow_stage_check"]);
Assert.AreEqual("true", service.Headers["approvals"]);
Assert.IsTrue(service.QueryResources.ContainsKey("skip_workflow_stage_check"));
Assert.IsTrue(service.QueryResources.ContainsKey("approvals"));
Assert.AreEqual("true", service.QueryResources["skip_workflow_stage_check"]);
Assert.AreEqual("true", service.QueryResources["approvals"]);
}

[TestMethod]
Expand Down Expand Up @@ -197,10 +197,10 @@ public void Test006_BulkPublishService_With_All_Flags()
var service = new BulkPublishService(_serializer, _stack, publishDetails, true, true, true);

Assert.IsNotNull(service);
Assert.IsTrue(service.Headers.ContainsKey("skip_workflow_stage_check"));
Assert.IsTrue(service.Headers.ContainsKey("approvals"));
Assert.AreEqual("true", service.Headers["skip_workflow_stage_check"]);
Assert.AreEqual("true", service.Headers["approvals"]);
Assert.IsTrue(service.QueryResources.ContainsKey("skip_workflow_stage_check"));
Assert.IsTrue(service.QueryResources.ContainsKey("approvals"));
Assert.AreEqual("true", service.QueryResources["skip_workflow_stage_check"]);
Assert.AreEqual("true", service.QueryResources["approvals"]);
}

[TestMethod]
Expand All @@ -218,8 +218,8 @@ public void Test007_BulkPublishService_Without_Flags()
var service = new BulkPublishService(_serializer, _stack, publishDetails, false, false, false);

Assert.IsNotNull(service);
Assert.IsFalse(service.Headers.ContainsKey("skip_workflow_stage_check"));
Assert.IsFalse(service.Headers.ContainsKey("approvals"));
Assert.IsFalse(service.QueryResources.ContainsKey("skip_workflow_stage_check"));
Assert.IsFalse(service.QueryResources.ContainsKey("approvals"));
}

[TestMethod]
Expand Down Expand Up @@ -248,8 +248,8 @@ public void Test008_BulkUnpublishService_Initialization()
Assert.IsNotNull(service);
Assert.AreEqual("/bulk/unpublish", service.ResourcePath);
Assert.AreEqual("POST", service.HttpMethod);
Assert.IsTrue(service.Headers.ContainsKey("skip_workflow_stage_check"));
Assert.IsTrue(service.Headers.ContainsKey("approvals"));
Assert.IsTrue(service.QueryResources.ContainsKey("skip_workflow_stage_check"));
Assert.IsTrue(service.QueryResources.ContainsKey("approvals"));
}

[TestMethod]
Expand Down
4 changes: 2 additions & 2 deletions Contentstack.Management.Core/Models/Workflow.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using Contentstack.Management.Core.Queryable;
using Contentstack.Management.Core.Services.Models;
Expand All @@ -9,7 +9,7 @@ namespace Contentstack.Management.Core.Models
public class Workflow: BaseModel<WorkflowModel>
{
internal Workflow(Stack stack, string uid)
: base(stack, "workflows", uid)
: base(stack, "workflow", uid)
{
resourcePath = uid == null ? "/workflows" : $"/workflows/{uid}";
}
Expand Down
4 changes: 2 additions & 2 deletions Contentstack.Management.Core/Models/WorkflowModel.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace Contentstack.Management.Core.Models
{
Expand Down Expand Up @@ -37,7 +37,7 @@ public class WorkflowStage
public bool AllUsers { get; set; } = true;
[JsonProperty(propertyName: "specificStages")]
public bool SpecificStages { get; set; } = false;
[JsonProperty(propertyName: "enabspecificUsersled")]
[JsonProperty(propertyName: "specificUsers")]
public bool SpecificUsers { get; set; } = false;
[JsonProperty(propertyName: "entry_lock")]
public string EntryLock { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ public BulkPublishService(JsonSerializer serializer, Contentstack.Management.Cor
ResourcePath = "/bulk/publish";
HttpMethod = "POST";

// Set headers based on parameters
// Set query parameters based on options
if (_skipWorkflowStage)
{
Headers["skip_workflow_stage_check"] = "true";
AddQueryResource("skip_workflow_stage_check", "true");
}

if (_approvals)
{
Headers["approvals"] = "true";
AddQueryResource("approvals", "true");
}

if (_isNested)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ public BulkUnpublishService(JsonSerializer serializer, Contentstack.Management.C
// Set headers based on parameters
if (_skipWorkflowStage)
{
Headers["skip_workflow_stage_check"] = "true";
AddQueryResource("skip_workflow_stage_check", "true");
}

if (_approvals)
{
Headers["approvals"] = "true";
AddQueryResource("approvals", "true");
}

if (_isNested)
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<Project>
<PropertyGroup>
<Version>0.6.1</Version>
<Version>0.7.0</Version>
</PropertyGroup>
</Project>
Loading