diff --git a/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj b/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj index 295d80b..e38c043 100644 --- a/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj +++ b/Contentstack.Management.Core.Tests/Contentstack.Management.Core.Tests.csproj @@ -58,6 +58,5 @@ - diff --git a/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack019_RoleTest.cs b/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack019_RoleTest.cs index 7d6921a..f48b1f7 100644 --- a/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack019_RoleTest.cs +++ b/Contentstack.Management.Core.Tests/IntegrationTest/Contentstack019_RoleTest.cs @@ -8,7 +8,7 @@ using Contentstack.Management.Core.Tests.Helpers; using Contentstack.Management.Core.Tests.Model; using Microsoft.VisualStudio.TestTools.UnitTesting; -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; namespace Contentstack.Management.Core.Tests.IntegrationTest { @@ -66,7 +66,7 @@ private static RoleModel BuildMinimalRoleModel(string uniqueName) private static string ParseRoleUid(ContentstackResponse response) { - var jo = response.OpenJObjectResponse(); + var jo = response.OpenJsonObjectResponse(); return jo?["role"]?["uid"]?.ToString(); } @@ -87,7 +87,7 @@ private void SafeDelete(string roleUid) } } - private static bool RolesArrayContainsUid(JArray roles, string uid) + private static bool RolesArrayContainsUid(JsonArray roles, string uid) { if (roles == null || string.IsNullOrEmpty(uid)) { @@ -324,7 +324,7 @@ public void Test001_Should_Create_Role_Sync() roleUid = ParseRoleUid(response); AssertLogger.IsNotNull(roleUid, "role uid"); - var jo = response.OpenJObjectResponse(); + var jo = response.OpenJsonObjectResponse(); AssertLogger.AreEqual(name, jo["role"]?["name"]?.ToString(), "Response name should match", "RoleName"); } finally @@ -349,7 +349,7 @@ public void Test002_Should_Fetch_Role_Sync() ContentstackResponse fetchResponse = _stack.Role(roleUid).Fetch(); AssertLogger.IsTrue(fetchResponse.IsSuccessStatusCode, "Fetch should succeed", "FetchSyncSuccess"); - var role = fetchResponse.OpenJObjectResponse()?["role"]; + var role = fetchResponse.OpenJsonObjectResponse()?["role"]; AssertLogger.AreEqual(name, role?["name"]?.ToString(), "Fetched name should match", "FetchedName"); AssertLogger.AreEqual(roleUid, role?["uid"]?.ToString(), "Fetched uid should match", "FetchedUid"); } @@ -375,7 +375,7 @@ public void Test003_Should_Query_Roles_Sync() ContentstackResponse queryResponse = _stack.Role().Query().Find(); AssertLogger.IsTrue(queryResponse.IsSuccessStatusCode, "Query Find should succeed", "QueryFindSuccess"); - var roles = queryResponse.OpenJObjectResponse()?["roles"] as JArray; + var roles = queryResponse.OpenJsonObjectResponse()?["roles"] as JsonArray; AssertLogger.IsNotNull(roles, "roles array"); AssertLogger.IsTrue( RolesArrayContainsUid(roles, roleUid), @@ -408,7 +408,7 @@ public void Test004_Should_Update_Role_Sync() ContentstackResponse fetchResponse = _stack.Role(roleUid).Fetch(); AssertLogger.IsTrue(fetchResponse.IsSuccessStatusCode, "Fetch after update should succeed", "FetchAfterUpdate"); - var role = fetchResponse.OpenJObjectResponse()?["role"]; + var role = fetchResponse.OpenJsonObjectResponse()?["role"]; AssertLogger.AreEqual(updatedName, role?["name"]?.ToString(), "Name should reflect update", "UpdatedName"); } finally @@ -466,7 +466,7 @@ public async Task Test006_Should_Create_Role_Async() roleUid = ParseRoleUid(response); AssertLogger.IsNotNull(roleUid, "role uid"); - var jo = response.OpenJObjectResponse(); + var jo = response.OpenJsonObjectResponse(); AssertLogger.AreEqual(name, jo["role"]?["name"]?.ToString(), "Response name should match", "RoleName"); } finally @@ -491,7 +491,7 @@ public async Task Test007_Should_Fetch_Role_Async() ContentstackResponse fetchResponse = await _stack.Role(roleUid).FetchAsync(); AssertLogger.IsTrue(fetchResponse.IsSuccessStatusCode, "FetchAsync should succeed", "FetchAsyncSuccess"); - var role = fetchResponse.OpenJObjectResponse()?["role"]; + var role = fetchResponse.OpenJsonObjectResponse()?["role"]; AssertLogger.AreEqual(name, role?["name"]?.ToString(), "Fetched name should match", "FetchedName"); AssertLogger.AreEqual(roleUid, role?["uid"]?.ToString(), "Fetched uid should match", "FetchedUid"); } @@ -517,7 +517,7 @@ public async Task Test008_Should_Query_Roles_Async() ContentstackResponse queryResponse = await _stack.Role().Query().FindAsync(); AssertLogger.IsTrue(queryResponse.IsSuccessStatusCode, "Query FindAsync should succeed", "QueryFindAsyncSuccess"); - var roles = queryResponse.OpenJObjectResponse()?["roles"] as JArray; + var roles = queryResponse.OpenJsonObjectResponse()?["roles"] as JsonArray; AssertLogger.IsNotNull(roles, "roles array"); AssertLogger.IsTrue( RolesArrayContainsUid(roles, roleUid), @@ -550,7 +550,7 @@ public async Task Test009_Should_Update_Role_Async() ContentstackResponse fetchResponse = await _stack.Role(roleUid).FetchAsync(); AssertLogger.IsTrue(fetchResponse.IsSuccessStatusCode, "FetchAsync after update should succeed", "FetchAsyncAfterUpdate"); - var role = fetchResponse.OpenJObjectResponse()?["role"]; + var role = fetchResponse.OpenJsonObjectResponse()?["role"]; AssertLogger.AreEqual(updatedName, role?["name"]?.ToString(), "Name should reflect update", "UpdatedName"); } finally @@ -888,11 +888,11 @@ public void Test023_Should_Accept_Create_Role_With_Null_Rules_Sync() AssertLogger.IsNotNull(roleUid, "NullRulesAccepted"); // Verify API accepted the request - detailed rule validation is optional - var responseContent = response.OpenJObjectResponse(); + var responseContent = response.OpenJsonObjectResponse(); if (responseContent?["role"] != null) { var role = responseContent["role"]; - var rules = role["rules"] as JArray; + var rules = role["rules"] as JsonArray; if (rules != null && rules.Count > 0) { AssertLogger.IsTrue(true, "DefaultRulesAdded"); @@ -941,7 +941,7 @@ public void Test024_Should_Accept_Create_Role_With_Empty_Rules_Sync() AssertLogger.IsNotNull(roleUid, "EmptyRulesAccepted"); // Verify API accepted the request - detailed rule validation is optional - var responseContent = response.OpenJObjectResponse(); + var responseContent = response.OpenJsonObjectResponse(); if (responseContent?["role"] != null) { AssertLogger.IsTrue(true, "EmptyRulesHandledByAPI"); @@ -985,7 +985,7 @@ public void Test025_Should_Accept_Create_Role_With_Empty_Branches_Sync() AssertLogger.IsNotNull(roleUid, "EmptyBranchesAccepted"); // Verify API accepted the request - detailed branch validation is optional - var responseContent = response.OpenJObjectResponse(); + var responseContent = response.OpenJsonObjectResponse(); if (responseContent?["role"] != null) { AssertLogger.IsTrue(true, "EmptyBranchesHandledByAPI"); @@ -1029,7 +1029,7 @@ public void Test026_Should_Accept_Create_Role_With_Nonexistent_Branch_Sync() AssertLogger.IsNotNull(roleUid, "NonexistentBranchAccepted"); // Verify API accepted the request - detailed branch validation is optional - var responseContent = response.OpenJObjectResponse(); + var responseContent = response.OpenJsonObjectResponse(); if (responseContent?["role"] != null) { AssertLogger.IsTrue(true, "NonexistentBranchHandledByAPI"); @@ -1144,7 +1144,7 @@ public void Test029_Should_Accept_Update_Role_With_Empty_Name_Sync() AssertLogger.IsTrue(true, "EmptyNameUpdateAccepted"); // Verify API preserved original name when empty name provided - var role = updateResponse.OpenJObjectResponse()?["role"]; + var role = updateResponse.OpenJsonObjectResponse()?["role"]; var currentName = role?["name"]?.ToString(); AssertLogger.AreEqual(originalName, currentName, "OriginalNamePreserved"); AssertLogger.IsTrue(!string.IsNullOrEmpty(currentName), "NameNotEmpty"); @@ -1401,7 +1401,7 @@ public async Task Test035_Should_Accept_Update_Role_With_Empty_Name_Async() AssertLogger.IsTrue(true, "EmptyNameUpdateAcceptedAsync"); // Verify API preserved original name when empty name provided - var role = updateResponse.OpenJObjectResponse()?["role"]; + var role = updateResponse.OpenJsonObjectResponse()?["role"]; var currentName = role?["name"]?.ToString(); AssertLogger.AreEqual(originalName, currentName, "OriginalNamePreservedAsync"); AssertLogger.IsTrue(!string.IsNullOrEmpty(currentName), "NameNotEmptyAsync"); @@ -2264,7 +2264,7 @@ public void Test054_Should_Handle_Unicode_Characters_In_Role_Name_Sync() ContentstackResponse fetchResponse = _stack.Role(roleUid).Fetch(); if (fetchResponse.IsSuccessStatusCode) { - var role = fetchResponse.OpenJObjectResponse()?["role"]; + var role = fetchResponse.OpenJsonObjectResponse()?["role"]; var fetchedName = role?["name"]?.ToString(); AssertLogger.AreEqual(unicodeName, fetchedName, "Unicode name should be preserved", "UnicodePreserved"); } @@ -2360,7 +2360,7 @@ public void Test056_Should_Handle_Stack_Role_Limits_Sync() else if (response.StatusCode == (HttpStatusCode)422) // Unprocessable Entity { // Check for role limit error (Error Code 157) - var errorContent = response.OpenJObjectResponse(); + var errorContent = response.OpenJsonObjectResponse(); var errorCode = errorContent?["error_code"]?.ToString(); if (errorCode == "157") @@ -2574,7 +2574,7 @@ public void Test059_Should_Handle_Concurrent_Role_Modifications_Sync() ContentstackResponse fetchResponse = _stack.Role(roleUid).Fetch(); if (fetchResponse.IsSuccessStatusCode) { - var role = fetchResponse.OpenJObjectResponse()?["role"]; + var role = fetchResponse.OpenJsonObjectResponse()?["role"]; AssertLogger.IsNotNull(role, "ConcurrentFinalState"); } diff --git a/Contentstack.Management.Core.Unit.Tests/Models/RoleTest.cs b/Contentstack.Management.Core.Unit.Tests/Models/RoleTest.cs index db9d1f3..dbc4fd7 100644 --- a/Contentstack.Management.Core.Unit.Tests/Models/RoleTest.cs +++ b/Contentstack.Management.Core.Unit.Tests/Models/RoleTest.cs @@ -59,7 +59,7 @@ public void Should_Create_Role() ContentstackResponse response = _stack.Role().Create(_fixture.Create()); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -68,7 +68,7 @@ public async System.Threading.Tasks.Task Should_Create_Role_Async() ContentstackResponse response = await _stack.Role().CreateAsync(_fixture.Create()); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -77,7 +77,7 @@ public void Should_Query_Role() ContentstackResponse response = _stack.Role().Query().Find(); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -86,7 +86,7 @@ public async System.Threading.Tasks.Task Should_Query_Role_Async() ContentstackResponse response = await _stack.Role().Query().FindAsync(); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -95,7 +95,7 @@ public void Should_Fetch_Role() ContentstackResponse response = _stack.Role(_fixture.Create()).Fetch(); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -104,7 +104,7 @@ public async System.Threading.Tasks.Task Should_Find_Role_Async() ContentstackResponse response = await _stack.Role(_fixture.Create()).FetchAsync(); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -113,7 +113,7 @@ public void Should_Update_Role() ContentstackResponse response = _stack.Role(_fixture.Create()).Update(_fixture.Create()); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -122,7 +122,7 @@ public async System.Threading.Tasks.Task Should_Update_Role_Async() ContentstackResponse response = await _stack.Role(_fixture.Create()).UpdateAsync(_fixture.Create()); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -131,7 +131,7 @@ public void Should_Delete_Role() ContentstackResponse response = _stack.Role(_fixture.Create()).Delete(); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -140,7 +140,7 @@ public async System.Threading.Tasks.Task Should_Delete_Role_Async() ContentstackResponse response = await _stack.Role(_fixture.Create()).DeleteAsync(); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -149,7 +149,7 @@ public void Should_Create_Role_With_Taxonomy_Permissions() ContentstackResponse response = _stack.Role().Create(_fixture.Create()); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } [TestMethod] @@ -158,7 +158,7 @@ public void Should_Update_Role_With_Taxonomy_Permissions() ContentstackResponse response = _stack.Role(_fixture.Create()).Update(_fixture.Create()); Assert.AreEqual(_contentstackResponse.OpenResponse(), response.OpenResponse()); - Assert.AreEqual(_contentstackResponse.OpenJObjectResponse().ToString(), response.OpenJObjectResponse().ToString()); + Assert.AreEqual(_contentstackResponse.OpenJsonObjectResponse().ToString(), response.OpenJsonObjectResponse().ToString()); } } } diff --git a/Contentstack.Management.Core/Models/RoleModel.cs b/Contentstack.Management.Core/Models/RoleModel.cs index 13c0d25..f8c3de1 100644 --- a/Contentstack.Management.Core/Models/RoleModel.cs +++ b/Contentstack.Management.Core/Models/RoleModel.cs @@ -1,107 +1,106 @@ using System.Collections.Generic; -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace Contentstack.Management.Core.Models { - [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] public class RoleModel { - [JsonProperty(propertyName: "name")] + [JsonPropertyName("name")] public string? Name { get; set; } - [JsonProperty(propertyName: "description")] + [JsonPropertyName("description")] public string? Description { get; set; } - [JsonProperty(propertyName: "rules")] + [JsonPropertyName("rules")] public List? Rules { get; set; } - [JsonProperty(propertyName: "deploy_content")] + [JsonPropertyName("deploy_content")] public bool DeployContent { get; set; } = true; } public class Rule { - [JsonProperty(propertyName: "acl")] + [JsonPropertyName("acl")] public Dictionary? ACL { get; } - [JsonProperty(propertyName: "restrict")] + [JsonPropertyName("restrict")] public bool Restrict { get; } } public class ContentTypeRules: Rule { - [JsonProperty(propertyName: "module")] + [JsonPropertyName("module")] public string Module { get; } = "content_type"; - [JsonProperty(propertyName: "content_types")] + [JsonPropertyName("content_types")] public List? ContentTypes { get; set; } } public class BranchRules : Rule { - [JsonProperty(propertyName: "module")] + [JsonPropertyName("module")] public string Module { get; } = "branch"; - [JsonProperty(propertyName: "branches")] + [JsonPropertyName("branches")] public List? Branches { get; set; } } public class BranchAliasRules : Rule { - [JsonProperty(propertyName: "module")] + [JsonPropertyName("module")] public string Module { get; } = "branch_alias"; - [JsonProperty(propertyName: "branch_aliases")] + [JsonPropertyName("branch_aliases")] public List? BranchAliases { get; set; } } public class AssetRules : Rule { - [JsonProperty(propertyName: "module")] + [JsonPropertyName("module")] public string Module { get; } = "asset"; - [JsonProperty(propertyName: "assets")] + [JsonPropertyName("assets")] public List? Assets { get; set; } } public class FolderRules : Rule { - [JsonProperty(propertyName: "module")] + [JsonPropertyName("module")] public string Module { get; } = "folder"; - [JsonProperty(propertyName: "folders")] + [JsonPropertyName("folders")] public List? Folders { get; set; } } public class EnvironmentRules : Rule { - [JsonProperty(propertyName: "module")] + [JsonPropertyName("module")] public string Module { get; } = "environment"; - [JsonProperty(propertyName: "environments")] + [JsonPropertyName("environments")] public List? Environments { get; set; } } public class TaxonomyContentType { - [JsonProperty(propertyName: "uid")] + [JsonPropertyName("uid")] public string? Uid { get; set; } - [JsonProperty(propertyName: "acl")] + [JsonPropertyName("acl")] public Dictionary? ACL { get; } } public class TaxonomyRules : Rule { - [JsonProperty(propertyName: "module")] + [JsonPropertyName("module")] public string Module { get; } = "taxonomy"; - [JsonProperty(propertyName: "taxonomies")] + [JsonPropertyName("taxonomies")] public List? Taxonomies { get; set; } - [JsonProperty(propertyName: "terms")] + [JsonPropertyName("terms")] public List? Terms { get; set; } - [JsonProperty(propertyName: "content_types")] + [JsonPropertyName("content_types")] public List? ContentTypes { get; set; } } } diff --git a/Contentstack.Management.Core/Models/Stack.cs b/Contentstack.Management.Core/Models/Stack.cs index ade5aea..12d0352 100644 --- a/Contentstack.Management.Core/Models/Stack.cs +++ b/Contentstack.Management.Core/Models/Stack.cs @@ -818,15 +818,13 @@ public ManagementToken ManagementTokens(string? uid = null) /// /// /// The - /* - public Role Role(string uid = null) + public Role Role(string? uid = null) { ThrowIfNotLoggedIn(); ThrowIfAPIKeyEmpty(); return new Role(this, uid); } - */ /// /// A is a set of entries and assets that needs to be deployed (published or unpublished) all at once to a particular environment. diff --git a/Contentstack.Management.Core/contentstack.management.core.csproj b/Contentstack.Management.Core/contentstack.management.core.csproj index d917a71..e508703 100644 --- a/Contentstack.Management.Core/contentstack.management.core.csproj +++ b/Contentstack.Management.Core/contentstack.management.core.csproj @@ -91,7 +91,7 @@ - +