diff --git a/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj b/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj
index ad6ede9..322c295 100644
--- a/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj
+++ b/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj
@@ -53,14 +53,12 @@
-
-
-
+
+
+
-
-
diff --git a/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack004_ReleaseTest.cs b/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack004_ReleaseTest.cs
index f69b637..3ffb898 100644
--- a/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack004_ReleaseTest.cs
+++ b/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack004_ReleaseTest.cs
@@ -6,7 +6,7 @@
using Contentstack.Management.Core.Tests.Model;
using Contentstack.Management.Core.Queryable;
using Microsoft.VisualStudio.TestTools.UnitTesting;
-using Newtonsoft.Json.Linq;
+using System.Text.Json.Nodes;
using Contentstack.Management.Core.Exceptions;
namespace Contentstack.Management.Core.Tests.IntegrationTest
@@ -168,7 +168,7 @@ private string CreateTestRelease()
};
ContentstackResponse contentstackResponse = _stack.Release().Create(releaseModel);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
if (!contentstackResponse.IsSuccessStatusCode || response?["release"] == null)
{
@@ -195,7 +195,7 @@ public void Test001_Should_Create_Release()
Assert.IsNotNull(releaseUid);
ContentstackResponse contentstackResponse = _stack.Release(releaseUid).Fetch();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -239,7 +239,7 @@ private async Task CreateTestReleaseAsync()
};
ContentstackResponse contentstackResponse = await _stack.Release().CreateAsync(releaseModel);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
if (!contentstackResponse.IsSuccessStatusCode || response?["release"] == null)
{
@@ -274,7 +274,7 @@ private List CreateSixNumberedReleases()
};
ContentstackResponse contentstackResponse = _stack.Release().Create(releaseModel);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
if (!contentstackResponse.IsSuccessStatusCode || response?["release"] == null)
{
@@ -322,7 +322,7 @@ private async Task> CreateSixNumberedReleasesAsync()
};
ContentstackResponse contentstackResponse = await _stack.Release().CreateAsync(releaseModel);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
if (!contentstackResponse.IsSuccessStatusCode || response?["release"] == null)
{
@@ -402,7 +402,7 @@ public async Task Test002_Should_Create_Release_Async()
Assert.IsNotNull(releaseUid);
ContentstackResponse contentstackResponse = await _stack.Release(releaseUid).FetchAsync();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -440,13 +440,13 @@ public void Test003_Should_Query_All_Releases()
releaseUids = CreateSixNumberedReleases();
ContentstackResponse contentstackResponse = _stack.Release().Query().Find();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
Assert.IsNotNull(response["releases"]);
- var releases = response["releases"] as JArray;
+ var releases = response["releases"] as JsonArray;
Assert.IsNotNull(releases);
Assert.IsTrue(releases.Count >= 6, $"Expected at least 6 releases, but found {releases.Count}");
@@ -479,13 +479,13 @@ public async Task Test004_Should_Query_All_Releases_Async()
releaseUids = await CreateSixNumberedReleasesAsync();
ContentstackResponse contentstackResponse = await _stack.Release().Query().FindAsync();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
Assert.IsNotNull(response["releases"]);
- var releases = response["releases"] as JArray;
+ var releases = response["releases"] as JsonArray;
Assert.IsNotNull(releases);
Assert.IsTrue(releases.Count >= 6, $"Expected at least 6 releases, but found {releases.Count}");
@@ -519,7 +519,7 @@ public void Test005_Should_Fetch_Release()
string releaseToFetch = releaseUids[2];
ContentstackResponse contentstackResponse = _stack.Release(releaseToFetch).Fetch();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -549,7 +549,7 @@ public async Task Test006_Should_Fetch_Release_Async()
string releaseToFetch = releaseUids[4];
ContentstackResponse contentstackResponse = await _stack.Release(releaseToFetch).FetchAsync();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -586,7 +586,7 @@ public void Test007_Should_Update_Release()
};
ContentstackResponse contentstackResponse = _stack.Release(releaseUid).Update(updateModel);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -631,7 +631,7 @@ public async Task Test008_Should_Update_Release_Async()
};
ContentstackResponse contentstackResponse = await _stack.Release(releaseUid).UpdateAsync(updateModel);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -672,7 +672,7 @@ public void Test009_Should_Clone_Release()
string cloneDescription = _testReleaseDescription + " (Cloned)";
ContentstackResponse contentstackResponse = _stack.Release(originalReleaseUid).Clone(cloneName, cloneDescription);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -726,7 +726,7 @@ public async Task Test010_Should_Clone_Release_Async()
string cloneDescription = _testReleaseDescription + " (Cloned Async)";
ContentstackResponse contentstackResponse = await _stack.Release(originalReleaseUid).CloneAsync(cloneName, cloneDescription);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -778,7 +778,7 @@ public void Test011_Should_Query_Release_With_Parameters()
parameters.Add("limit", "5");
ContentstackResponse contentstackResponse = _stack.Release().Query().Limit(5).Find();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -803,7 +803,7 @@ public async Task Test012_Should_Query_Release_With_Parameters_Async()
parameters.Add("limit", "5");
ContentstackResponse contentstackResponse = await _stack.Release().Query().Limit(5).FindAsync();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -834,7 +834,7 @@ public void Test013_Should_Create_Release_With_ParameterCollection()
parameters.Add("include_count", "true");
ContentstackResponse contentstackResponse = _stack.Release().Create(releaseModel, parameters);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -869,7 +869,7 @@ public async Task Test014_Should_Create_Release_With_ParameterCollection_Async()
parameters.Add("include_count", "true");
ContentstackResponse contentstackResponse = await _stack.Release().CreateAsync(releaseModel, parameters);
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -896,7 +896,7 @@ public void Test015_Should_Get_Release_Items()
releaseUid = CreateTestRelease();
ContentstackResponse contentstackResponse = _stack.Release(releaseUid).Item().GetAll();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -930,7 +930,7 @@ public async Task Test016_Should_Get_Release_Items_Async()
releaseUid = await CreateTestReleaseAsync();
ContentstackResponse contentstackResponse = await _stack.Release(releaseUid).Item().GetAllAsync();
- var response = contentstackResponse.OpenJObjectResponse();
+ var response = contentstackResponse.OpenJsonObjectResponse();
Assert.IsNotNull(response);
Assert.IsTrue(contentstackResponse.IsSuccessStatusCode);
@@ -997,7 +997,7 @@ public void Test019_Should_Delete_Release()
};
ContentstackResponse createResponse = _stack.Release().Create(releaseModel);
- var createResponseJson = createResponse.OpenJObjectResponse();
+ var createResponseJson = createResponse.OpenJsonObjectResponse();
string releaseToDeleteUid = createResponseJson["release"]["uid"].ToString();
ContentstackResponse contentstackResponse = _stack.Release(releaseToDeleteUid).Delete();
@@ -1026,7 +1026,7 @@ public async Task Test020_Should_Delete_Release_Async()
};
ContentstackResponse createResponse = await _stack.Release().CreateAsync(releaseModel);
- var createResponseJson = createResponse.OpenJObjectResponse();
+ var createResponseJson = createResponse.OpenJsonObjectResponse();
string releaseToDeleteUid = createResponseJson["release"]["uid"].ToString();
ContentstackResponse contentstackResponse = await _stack.Release(releaseToDeleteUid).DeleteAsync();
@@ -1059,7 +1059,7 @@ public void Test021_Should_Delete_Release_Without_Content_Type_Header()
};
ContentstackResponse createResponse = _stack.Release().Create(releaseModel);
- var createResponseJson = createResponse.OpenJObjectResponse();
+ var createResponseJson = createResponse.OpenJsonObjectResponse();
Assert.IsTrue(createResponse.IsSuccessStatusCode, "Create release must succeed.");
string releaseToDeleteUid = createResponseJson["release"]["uid"].ToString();
@@ -1103,7 +1103,7 @@ public async Task Test022_Should_Delete_Release_Async_Without_Content_Type_Heade
};
ContentstackResponse createResponse = await _stack.Release().CreateAsync(releaseModel);
- var createResponseJson = createResponse.OpenJObjectResponse();
+ var createResponseJson = createResponse.OpenJsonObjectResponse();
Assert.IsTrue(createResponse.IsSuccessStatusCode, "Create release must succeed.");
string releaseToDeleteUid = createResponseJson["release"]["uid"].ToString();
diff --git a/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack015_BulkOperationTest.cs b/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack015_BulkOperationTest.cs
index da6030b..12f40d3 100644
--- a/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack015_BulkOperationTest.cs
+++ b/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack015_BulkOperationTest.cs
@@ -194,16 +194,15 @@ private static Stack GetStack()
public static void ClassInitialize(TestContext context)
{
_client = Contentstack.CreateAuthenticatedClient();
- // Stack.Workflow() not yet migrated — commented out
- //try
- //{
- // Stack stack = GetStack();
- // EnsureBulkTestWorkflowAndPublishingRuleAsync(stack).GetAwaiter().GetResult();
- //}
- //catch (Exception)
- //{
- // // Workflow/publish rule setup failed (e.g. auth, plan limits); tests can still run without them
- //}
+ try
+ {
+ Stack stack = GetStack();
+ EnsureBulkTestWorkflowAndPublishingRuleAsync(stack).GetAwaiter().GetResult();
+ }
+ catch (Exception)
+ {
+ // Workflow/publish rule setup failed (e.g. auth, plan limits); tests can still run without them
+ }
}
[ClassCleanup]
@@ -231,31 +230,29 @@ public async Task Initialize()
Console.WriteLine($"[Initialize] CreateTestEnvironment skipped: HTTP {(int)ex.StatusCode} ({ex.StatusCode}). ErrorCode: {ex.ErrorCode}. Message: {ex.ErrorMessage ?? ex.Message}");
}
- // Stack.Release() not yet migrated — commented out
- //try
- //{
- // await CreateTestRelease();
- //}
- //catch (ContentstackErrorException ex)
- //{
- // Console.WriteLine($"[Initialize] CreateTestRelease skipped: HTTP {(int)ex.StatusCode} ({ex.StatusCode}). ErrorCode: {ex.ErrorCode}. Message: {ex.ErrorMessage ?? ex.Message}");
- //}
+ try
+ {
+ await CreateTestRelease();
+ }
+ catch (ContentstackErrorException ex)
+ {
+ Console.WriteLine($"[Initialize] CreateTestRelease skipped: HTTP {(int)ex.StatusCode} ({ex.StatusCode}). ErrorCode: {ex.ErrorCode}. Message: {ex.ErrorMessage ?? ex.Message}");
+ }
- // Stack.Workflow() not yet migrated — commented out
- //if (string.IsNullOrEmpty(_bulkTestWorkflowUid))
- //{
- // try
- // {
- // EnsureBulkTestWorkflowAndPublishingRuleAsync(_stack).GetAwaiter().GetResult();
- // }
- // catch (Exception ex)
- // {
- // _bulkTestWorkflowSetupError = ex is ContentstackErrorException cex
- // ? $"HTTP {(int)cex.StatusCode} ({cex.StatusCode}). ErrorCode: {cex.ErrorCode}. Message: {cex.ErrorMessage ?? cex.Message}"
- // : ex.Message;
- // Console.WriteLine($"[Initialize] Workflow setup failed: {_bulkTestWorkflowSetupError}");
- // }
- //}
+ if (string.IsNullOrEmpty(_bulkTestWorkflowUid))
+ {
+ try
+ {
+ EnsureBulkTestWorkflowAndPublishingRuleAsync(_stack).GetAwaiter().GetResult();
+ }
+ catch (Exception ex)
+ {
+ _bulkTestWorkflowSetupError = ex is ContentstackErrorException cex
+ ? $"HTTP {(int)cex.StatusCode} ({cex.StatusCode}). ErrorCode: {cex.ErrorCode}. Message: {cex.ErrorMessage ?? cex.Message}"
+ : ex.Message;
+ Console.WriteLine($"[Initialize] Workflow setup failed: {_bulkTestWorkflowSetupError}");
+ }
+ }
}
// Stack.Workflow() not yet migrated — Test000a commented out
@@ -1134,24 +1131,24 @@ public void Test009_Should_Cleanup_Test_Resources()
}
}
- // 3. Stack.Workflow() not yet migrated — commented out
- //CleanupBulkTestWorkflowAndPublishingRule(_stack);
- //Console.WriteLine("[Cleanup] Workflow and publishing rule cleanup done.");
-
- // 4. Stack.Release() not yet migrated — commented out
- //if (!string.IsNullOrEmpty(_testReleaseUid))
- //{
- // try
- // {
- // _stack.Release(_testReleaseUid).Delete();
- // Console.WriteLine($"[Cleanup] Deleted release: {_testReleaseUid}");
- // _testReleaseUid = null;
- // }
- // catch (Exception ex)
- // {
- // Console.WriteLine($"[Cleanup] Failed to delete release {_testReleaseUid}: {ex.Message}");
- // }
- //}
+ // 3. Cleanup workflow and publishing rule
+ CleanupBulkTestWorkflowAndPublishingRule(_stack);
+ Console.WriteLine("[Cleanup] Workflow and publishing rule cleanup done.");
+
+ // 4. Cleanup release
+ if (!string.IsNullOrEmpty(_testReleaseUid))
+ {
+ try
+ {
+ _stack.Release(_testReleaseUid).Delete();
+ Console.WriteLine($"[Cleanup] Deleted release: {_testReleaseUid}");
+ _testReleaseUid = null;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"[Cleanup] Failed to delete release {_testReleaseUid}: {ex.Message}");
+ }
+ }
// 5. Delete the test environment
if (!string.IsNullOrEmpty(_testEnvironmentUid))
@@ -3653,22 +3650,21 @@ private async Task CreateTestEnvironment()
private async Task CreateTestRelease()
{
- // Stack.Release() not yet migrated — commented out
- //try
- //{
- // var releaseModel = new ReleaseModel
- // {
- // Name = "bulk_test_release",
- // Description = "Release for testing bulk operations",
- // Locked = false,
- // Archived = false
- // };
- // ContentstackResponse response = _stack.Release().Create(releaseModel);
- // var responseJson = response.OpenJsonObjectResponse();
- // if (response.IsSuccessStatusCode && responseJson["release"] != null)
- // _testReleaseUid = responseJson["release"]["uid"].ToString();
- //}
- //catch (Exception e) { }
+ try
+ {
+ var releaseModel = new ReleaseModel
+ {
+ Name = "bulk_test_release",
+ Description = "Release for testing bulk operations",
+ Locked = false,
+ Archived = false
+ };
+ ContentstackResponse response = _stack.Release().Create(releaseModel);
+ var responseJson = response.OpenJsonObjectResponse();
+ if (response.IsSuccessStatusCode && responseJson["release"] != null)
+ _testReleaseUid = responseJson["release"]["uid"].ToString();
+ }
+ catch (Exception e) { }
await Task.CompletedTask;
}
@@ -3928,8 +3924,163 @@ private static async Task EnsureBulkTestEnvironmentAsync(Stack stack)
///
private static async Task EnsureBulkTestWorkflowAndPublishingRuleAsync(Stack stack)
{
- // Stack.Workflow() not yet migrated — commented out
- await Task.CompletedTask;
+ if (string.IsNullOrEmpty(_bulkTestEnvironmentUid))
+ await EnsureBulkTestEnvironmentAsync(stack);
+
+ const string workflowName = "workflow_test";
+
+ // Try to find an existing workflow with the same name
+ try
+ {
+ ContentstackResponse listResponse = stack.Workflow().FindAll();
+ if (listResponse.IsSuccessStatusCode)
+ {
+ var listJson = listResponse.OpenJsonObjectResponse();
+ var existing = listJson["workflows"]?.AsArray() ?? listJson["workflow"]?.AsArray();
+ if (existing != null)
+ {
+ foreach (var wf in existing)
+ {
+ if (wf["name"]?.ToString() == workflowName && wf["uid"] != null)
+ {
+ _bulkTestWorkflowUid = wf["uid"].ToString();
+ var existingStages = wf["workflow_stages"]?.AsArray();
+ if (existingStages != null && existingStages.Count >= 2)
+ {
+ _bulkTestWorkflowStage1Uid = existingStages[0]["uid"]?.ToString();
+ _bulkTestWorkflowStage2Uid = existingStages[1]["uid"]?.ToString();
+ _bulkTestWorkflowStageUid = _bulkTestWorkflowStage2Uid;
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ catch { /* If listing fails, proceed to create */ }
+
+ if (string.IsNullOrEmpty(_bulkTestWorkflowUid))
+ {
+ var sysAcl = new Dictionary
+ {
+ ["roles"] = new Dictionary { ["uids"] = new List() },
+ ["users"] = new Dictionary { ["uids"] = new List { "$all" } },
+ ["others"] = new Dictionary()
+ };
+
+ var workflowModel = new WorkflowModel
+ {
+ Name = workflowName,
+ Enabled = true,
+ Branches = new List { "main" },
+ ContentTypes = new List { "$all" },
+ AdminUsers = new Dictionary { ["users"] = new List