From 27bdaaebb9f213105f88d18bf91cd615c95dc88b Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 2 Jul 2024 17:47:04 +0530 Subject: [PATCH 1/4] chore: taxonomy permission testcase added --- .../contentstack/cms/stack/RoleAPITest.java | 50 +++++++++++- .../contentstack/cms/stack/RoleUnitTest.java | 36 ++++++++- src/test/resources/mockrole/createRole.json | 66 ++++++++++++++++ src/test/resources/mockrole/updateRole.json | 78 +++++++++++++++++++ src/test/resources/mocktaxonomy/create.json | 4 +- src/test/resources/mocktaxonomy/update.json | 2 +- 6 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 src/test/resources/mockrole/createRole.json create mode 100644 src/test/resources/mockrole/updateRole.json diff --git a/src/test/java/com/contentstack/cms/stack/RoleAPITest.java b/src/test/java/com/contentstack/cms/stack/RoleAPITest.java index c22260a6..f67430f8 100644 --- a/src/test/java/com/contentstack/cms/stack/RoleAPITest.java +++ b/src/test/java/com/contentstack/cms/stack/RoleAPITest.java @@ -1,14 +1,21 @@ package com.contentstack.cms.stack; +import com.contentstack.cms.Contentstack; import com.contentstack.cms.TestClient; +import com.contentstack.cms.Utils; import com.contentstack.cms.core.Util; +import com.google.gson.JsonObject; + import okhttp3.Request; import okhttp3.ResponseBody; import org.json.simple.JSONObject; import org.junit.jupiter.api.*; + +import retrofit2.Call; import retrofit2.Response; import java.io.IOException; +import java.util.HashMap; @Tag("api") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -19,15 +26,22 @@ class RoleAPITest { protected static String _uid = TestClient.AUTHTOKEN; protected static String MANAGEMENT_TOKEN = TestClient.MANAGEMENT_TOKEN; protected static Roles roles; - static Stack stack; + protected static String Taxonomy_uid = "sample_two"; + protected static Taxonomy taxonomy; + protected static Terms term; + protected static Stack stack; @BeforeAll static void setup() { - stack = TestClient.getStack(); - stack.addHeader(Util.API_KEY, API_KEY); - stack.addHeader(Util.AUTHORIZATION, MANAGEMENT_TOKEN); + final String AUTHTOKEN = TestClient.AUTHTOKEN; + HashMap headers = new HashMap<>(); + headers.put(Util.API_KEY, API_KEY); + headers.put(Util.AUTHORIZATION, MANAGEMENT_TOKEN); + stack = new Contentstack.Builder().setAuthtoken(AUTHTOKEN).build().stack(headers); roles = stack.roles(_uid); + taxonomy = stack.taxonomy(); + term = stack.taxonomy(Taxonomy_uid).terms(); } @Test @@ -111,5 +125,33 @@ void deleteRole() { Assertions.assertNull(request.url().encodedQuery()); Assertions.assertEquals("https://api.contentstack.io/v3/roles/" + _uid, request.url().toString()); } + @Test + void createRoleWithRule1() throws IOException{ + JSONObject requestTaxonomy = Utils.readJson("mocktaxonomy/create.json"); + taxonomy.addHeader(Util.API_KEY, API_KEY); + taxonomy.addHeader(Util.AUTHORIZATION, MANAGEMENT_TOKEN); + Call responseTaxonomy = taxonomy.create(requestTaxonomy); + Response response1 = responseTaxonomy.execute(); + System.out.println("Taxonomy created" + response1.body().string()); + + } + @Test + void createRoleWithRule2() throws IOException{ + JSONObject requestTerm = Utils.readJson("mocktaxonomy/createTerm.json"); + + Response response2 = term.create(requestTerm).execute(); + System.out.println("Term created" + response2.toString()); + + } + @Test + void createRoleWithTaxonomy() throws IOException{ + JSONObject requestBody = Utils.readJson("mockrole/createRole.json"); + + Call responseCall = roles.create(requestBody); + Response response = responseCall.execute(); + System.out.println("Role created" + response.body().string()); + + + } } diff --git a/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java b/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java index 42d335af..d16f2454 100644 --- a/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java +++ b/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java @@ -2,13 +2,19 @@ import com.contentstack.cms.Contentstack; import com.contentstack.cms.TestClient; +import com.contentstack.cms.Utils; import com.contentstack.cms.core.Util; import okhttp3.Request; +import okhttp3.ResponseBody; +import retrofit2.Call; +import retrofit2.Response; + import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.junit.jupiter.api.*; +import java.io.IOException; import java.util.HashMap; @Tag("unit") @@ -206,8 +212,11 @@ void singleRole() { @Test @Order(8) - void createRole() { + void createRole() throws IOException { Request request = roles.create(body).request(); + Call responseBody = roles.create(body); + Response resp = responseBody.execute(); + System.out.println(resp.toString()); Assertions.assertEquals(0, request.headers().names().size()); Assertions.assertEquals("POST", request.method()); Assertions.assertTrue(request.url().isHttps()); @@ -220,9 +229,30 @@ void createRole() { "https://api.contentstack.io/v3/roles", request.url().toString()); } - @Test @Order(9) + void createRoleWithTaxonomy() throws IOException { + JSONObject roleBody = Utils.readJson("mockrole/createRole.json"); + Request request = roles.create(roleBody).request(); + // Call responseBody = roles.create(roleBody); + // Response resp = responseBody.execute(); + // System.out.println(resp.toString()); + System.out.println(request.toString()); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("POST", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(2, request.url().pathSegments().size()); + Assertions.assertEquals("roles", request.url().pathSegments().get(1)); + Assertions.assertNotNull(request.body()); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals( + "https://api.contentstack.io/v3/roles", + request.url().toString()); + } + + @Test + @Order(10) void updateRole() { Request request = roles.update(body).request(); Assertions.assertEquals(0, request.headers().names().size()); @@ -236,7 +266,7 @@ void updateRole() { } @Test - @Order(10) + @Order(11) void deleteRole() { Request request = roles.delete().request(); Assertions.assertEquals(1, request.headers().names().size()); diff --git a/src/test/resources/mockrole/createRole.json b/src/test/resources/mockrole/createRole.json new file mode 100644 index 00000000..a9ad3185 --- /dev/null +++ b/src/test/resources/mockrole/createRole.json @@ -0,0 +1,66 @@ +{ + "role": { + "name": "test", + "description": "Test for taxonomy permissions", + "rules": [ + { + "module": "branch", + "branches": [ + "main" + ], + "acl": { + "read": true + } + }, + { + "module": "environment", + "environments": [], + "acl": { + "read": true + } + }, + { + "module": "locale", + "locales": [], + "acl": { + "read": true + } + }, + { + "module": "taxonomy", + "taxonomies": [ + "sample_two" + ], + "terms": [ + "term_a" + ], + "content_types": [ + { + "uid": "$all", + "acl": { + "read": true, + "sub_acl": { + "read": true, + "create": true, + "update": true, + "delete": true, + "publish": true + } + } + } + ], + "acl": { + "read": true, + "sub_acl": { + "read": true, + "create": true, + "update": true, + "delete": true, + "publish": true + } + } + } + ], + "uid": "role_uid" + } +} \ No newline at end of file diff --git a/src/test/resources/mockrole/updateRole.json b/src/test/resources/mockrole/updateRole.json new file mode 100644 index 00000000..b01c471b --- /dev/null +++ b/src/test/resources/mockrole/updateRole.json @@ -0,0 +1,78 @@ +{ + "role":{ + "name":"sample111", + "description":"This is a test role.", + "rules":[ + { + "module":"branch", + "branches":[ + "main" + ], + "acl":{ + "read":true + } + }, + { + "module":"content_type", + "content_types":[ + "$all" + ], + "acl":{ + "read":true, + "sub_acl":{ + "read":true + } + } + }, + { + "module":"asset", + "assets":[ + "$all" + ], + "acl":{ + "read":true, + "update":true, + "publish":true, + "delete":true + } + }, + { + "module":"folder", + "folders":[ + "$all" + ], + "acl":{ + "read":true, + "update":true, + "publish":true, + "delete":true, + "sub_acl":{ + "read":true, + "update":true, + "publish":true, + "delete":true + } + } + }, + { + "module":"environment", + "environments":[ + "$all" + ], + "acl":{ + "read":true + } + }, + { + "module":"locale", + "locales":[ + "$all" + ], + "acl":{ + "read":true + } + } + ], + "uid":"blt668fa7872710da7c" + } + } \ No newline at end of file diff --git a/src/test/resources/mocktaxonomy/create.json b/src/test/resources/mocktaxonomy/create.json index 9e0c2a8e..d452e367 100644 --- a/src/test/resources/mocktaxonomy/create.json +++ b/src/test/resources/mocktaxonomy/create.json @@ -1,8 +1,8 @@ { "taxonomy": { - "uid": "sample_one", - "name": "Sample One", + "uid": "sample_two", + "name": "Sample Two", "description": "Description for the sample one taxonomy." } } \ No newline at end of file diff --git a/src/test/resources/mocktaxonomy/update.json b/src/test/resources/mocktaxonomy/update.json index ece28e56..99f965db 100644 --- a/src/test/resources/mocktaxonomy/update.json +++ b/src/test/resources/mocktaxonomy/update.json @@ -1,6 +1,6 @@ { "taxonomy": { - "name": "Updated Sample One", + "name": "Updated Sample Two", "description": "Updated description for the sample one taxonomy." } } \ No newline at end of file From f88c21b359d08db24d3267ee8538478378a19a18 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 2 Jul 2024 17:49:08 +0530 Subject: [PATCH 2/4] chore: slack integration part has been commented --- pom.xml | 12 +- .../com/contentstack/cms/SanityReport.java | 206 +++++++++--------- .../cms/SlackReportingListener.java | 58 ++--- testng.xml | 4 +- 4 files changed, 140 insertions(+), 140 deletions(-) diff --git a/pom.xml b/pom.xml index 156ef235..66a913f2 100644 --- a/pom.xml +++ b/pom.xml @@ -214,12 +214,12 @@ slack-app-backend 1.38.0 - + @@ -234,12 +234,12 @@ maven-surefire-plugin 3.0.0-M5 - - + + ${project.build.directory}/surefire-reports true diff --git a/src/test/java/com/contentstack/cms/SanityReport.java b/src/test/java/com/contentstack/cms/SanityReport.java index 52c005bf..b5abf8d5 100644 --- a/src/test/java/com/contentstack/cms/SanityReport.java +++ b/src/test/java/com/contentstack/cms/SanityReport.java @@ -1,120 +1,120 @@ -package com.contentstack.cms; -import com.slack.api.Slack; -import com.slack.api.methods.SlackApiException; -import com.slack.api.methods.response.chat.ChatPostMessageResponse; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.net.http.HttpRequest.BodyPublishers; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; +// package com.contentstack.cms; +// import com.slack.api.Slack; +// import com.slack.api.methods.SlackApiException; +// import com.slack.api.methods.response.chat.ChatPostMessageResponse; +// import org.jsoup.Jsoup; +// import org.jsoup.nodes.Document; +// import org.jsoup.nodes.Element; +// import java.io.File; +// import java.io.IOException; +// import java.net.URI; +// import java.net.http.HttpClient; +// import java.net.http.HttpRequest; +// import java.net.http.HttpResponse; +// import java.net.http.HttpRequest.BodyPublishers; +// import java.nio.file.Files; +// import java.nio.file.Path; +// import java.nio.file.Paths; +// import java.util.HashMap; +// import java.util.Map; -public class SanityReport { +// public class SanityReport { - public static String buildSlackMessage(File input) throws IOException { - Document doc = Jsoup.parse(input, "UTF-8"); - Element summaryTable = doc.select("table.bodyTable").first(); - Element summaryRow = summaryTable.select("tr.b").first(); +// public static String buildSlackMessage(File input) throws IOException { +// Document doc = Jsoup.parse(input, "UTF-8"); +// Element summaryTable = doc.select("table.bodyTable").first(); +// Element summaryRow = summaryTable.select("tr.b").first(); - String totalCount = summaryRow.select("td").get(0).text().trim(); - String totalErrors = summaryRow.select("td").get(1).text().trim(); - String totalFailures = summaryRow.select("td").get(2).text().trim(); - String totalSkipped = summaryRow.select("td").get(3).text().trim(); - String totalTime = summaryRow.select("td").get(5).text().trim(); +// String totalCount = summaryRow.select("td").get(0).text().trim(); +// String totalErrors = summaryRow.select("td").get(1).text().trim(); +// String totalFailures = summaryRow.select("td").get(2).text().trim(); +// String totalSkipped = summaryRow.select("td").get(3).text().trim(); +// String totalTime = summaryRow.select("td").get(5).text().trim(); - int durationInMinutes = 0; - int durationInSeconds = 0; - if (!totalTime.isEmpty()) { - float timeInSeconds = Float.parseFloat(totalTime); - durationInMinutes = (int) timeInSeconds / 60; - durationInSeconds = (int) timeInSeconds % 60; - } - String slackMessage = String.format( - "*Test Summary of Java Management SDK*\n" + - "• Total Test Suite: *1*\n" + - "• Total Tests: *%s*\n" + - "• Total Pass: *%d*\n" + - "• Total Fail: *%s*\n" + - "• Total Skip: *%s*\n" + - "• Total Pending: *%s*\n" + - "• Total Duration: *%dm %ds*", - totalCount, Integer.parseInt(totalCount) - (Integer.parseInt(totalErrors) + Integer.parseInt(totalFailures)), totalFailures, totalSkipped, totalErrors, durationInMinutes, durationInSeconds - ); - return slackMessage; - } +// int durationInMinutes = 0; +// int durationInSeconds = 0; +// if (!totalTime.isEmpty()) { +// float timeInSeconds = Float.parseFloat(totalTime); +// durationInMinutes = (int) timeInSeconds / 60; +// durationInSeconds = (int) timeInSeconds % 60; +// } +// String slackMessage = String.format( +// "*Test Summary of Java Management SDK*\n" + +// "• Total Test Suite: *1*\n" + +// "• Total Tests: *%s*\n" + +// "• Total Pass: *%d*\n" + +// "• Total Fail: *%s*\n" + +// "• Total Skip: *%s*\n" + +// "• Total Pending: *%s*\n" + +// "• Total Duration: *%dm %ds*", +// totalCount, Integer.parseInt(totalCount) - (Integer.parseInt(totalErrors) + Integer.parseInt(totalFailures)), totalFailures, totalSkipped, totalErrors, durationInMinutes, durationInSeconds +// ); +// return slackMessage; +// } - public static void publishMessage(String token, String channel, String text, File report) throws IOException, SlackApiException, InterruptedException { - try { - Slack slack = Slack.getInstance(); +// public static void publishMessage(String token, String channel, String text, File report) throws IOException, SlackApiException, InterruptedException { +// try { +// Slack slack = Slack.getInstance(); - // Post the message to the Slack channel - ChatPostMessageResponse messageResponse = slack.methods(token).chatPostMessage(req -> req - .channel(channel) - .text(text) - ); - // Check if posting message was successful - if (!messageResponse.isOk()) { - System.out.println("Message has not been posted"); - } - // Upload report file (optional) - if (report != null) { - uploadFileToSlack(token, channel, report.getAbsolutePath()); - } - } catch (IOException | SlackApiException e) { - System.out.println(e); - } - } +// // Post the message to the Slack channel +// ChatPostMessageResponse messageResponse = slack.methods(token).chatPostMessage(req -> req +// .channel(channel) +// .text(text) +// ); +// // Check if posting message was successful +// if (!messageResponse.isOk()) { +// System.out.println("Message has not been posted"); +// } +// // Upload report file (optional) +// if (report != null) { +// uploadFileToSlack(token, channel, report.getAbsolutePath()); +// } +// } catch (IOException | SlackApiException e) { +// System.out.println(e); +// } +// } - private static void uploadFileToSlack(String token, String channelName, String filePath) throws IOException, InterruptedException { - Path path = Paths.get(filePath); - String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"; - Map params = new HashMap<>(); - params.put("channels", channelName); - params.put("filename", new File(filePath).getName()); - params.put("filetype", "text"); - params.put("initial_comment", "Here is the report generated."); - params.put("title", "Reports File"); +// private static void uploadFileToSlack(String token, String channelName, String filePath) throws IOException, InterruptedException { +// Path path = Paths.get(filePath); +// String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"; +// Map params = new HashMap<>(); +// params.put("channels", channelName); +// params.put("filename", new File(filePath).getName()); +// params.put("filetype", "text"); +// params.put("initial_comment", "Here is the report generated."); +// params.put("title", "Reports File"); - String body = buildMultipartBody(params, Files.readAllBytes(path), boundary); +// String body = buildMultipartBody(params, Files.readAllBytes(path), boundary); - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("https://slack.com/api/files.upload")) - .header("Authorization", "Bearer " + token) - .header("Content-Type", "multipart/form-data; boundary=" + boundary) - .POST(BodyPublishers.ofString(body)) - .build(); +// HttpRequest request = HttpRequest.newBuilder() +// .uri(URI.create("https://slack.com/api/files.upload")) +// .header("Authorization", "Bearer " + token) +// .header("Content-Type", "multipart/form-data; boundary=" + boundary) +// .POST(BodyPublishers.ofString(body)) +// .build(); - HttpClient client = HttpClient.newHttpClient(); - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); +// HttpClient client = HttpClient.newHttpClient(); +// HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - } +// } - private static String buildMultipartBody(Map params, byte[] fileContent, String boundary) { - StringBuilder sb = new StringBuilder(); +// private static String buildMultipartBody(Map params, byte[] fileContent, String boundary) { +// StringBuilder sb = new StringBuilder(); - for (Map.Entry entry : params.entrySet()) { - sb.append("--").append(boundary).append("\r\n"); - sb.append("Content-Disposition: form-data; name=\"").append(entry.getKey()).append("\"\r\n\r\n"); - sb.append(entry.getValue()).append("\r\n"); - } - sb.append("--").append(boundary).append("\r\n"); - sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"").append(params.get("filename")).append("\"\r\n"); - sb.append("Content-Type: application/octet-stream\r\n\r\n"); - sb.append(new String(fileContent)).append("\r\n"); - sb.append("--").append(boundary).append("--"); - return sb.toString(); - } +// for (Map.Entry entry : params.entrySet()) { +// sb.append("--").append(boundary).append("\r\n"); +// sb.append("Content-Disposition: form-data; name=\"").append(entry.getKey()).append("\"\r\n\r\n"); +// sb.append(entry.getValue()).append("\r\n"); +// } +// sb.append("--").append(boundary).append("\r\n"); +// sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"").append(params.get("filename")).append("\"\r\n"); +// sb.append("Content-Type: application/octet-stream\r\n\r\n"); +// sb.append(new String(fileContent)).append("\r\n"); +// sb.append("--").append(boundary).append("--"); +// return sb.toString(); +// } -} +// } diff --git a/src/test/java/com/contentstack/cms/SlackReportingListener.java b/src/test/java/com/contentstack/cms/SlackReportingListener.java index 4a73bd14..c966c9dd 100644 --- a/src/test/java/com/contentstack/cms/SlackReportingListener.java +++ b/src/test/java/com/contentstack/cms/SlackReportingListener.java @@ -1,31 +1,31 @@ -package com.contentstack.cms; -import com.contentstack.cms.SanityReport; -import io.github.cdimascio.dotenv.Dotenv; -import java.io.File; -import java.io.IOException; +// package com.contentstack.cms; +// import com.contentstack.cms.SanityReport; +// import io.github.cdimascio.dotenv.Dotenv; +// import java.io.File; +// import java.io.IOException; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.testng.ITestContext; -import org.testng.ITestListener; -import org.testng.ITestResult; +// import org.jsoup.Jsoup; +// import org.jsoup.nodes.Document; +// import org.testng.ITestContext; +// import org.testng.ITestListener; +// import org.testng.ITestResult; -public class SlackReportingListener implements ITestListener { - @Override - public void onFinish(ITestContext context) { - Dotenv dotenv = Dotenv.load(); - String slackToken = dotenv.get("SLACK_BOT_TOKEN"); - String slackChannel = dotenv.get("SLACK_CHANNEL"); - File input = new File("./target/site/surefire-report.html"); - try { - SanityReport.publishMessage( - slackToken, - slackChannel, - SanityReport.buildSlackMessage(input), - input - ); - } catch (Exception e) { - System.out.println("Error sending Slack message: " + e.getMessage()); - } - } -} +// public class SlackReportingListener implements ITestListener { +// @Override +// public void onFinish(ITestContext context) { +// Dotenv dotenv = Dotenv.load(); +// String slackToken = dotenv.get("SLACK_BOT_TOKEN"); +// String slackChannel = dotenv.get("SLACK_CHANNEL"); +// File input = new File("./target/site/surefire-report.html"); +// try { +// SanityReport.publishMessage( +// slackToken, +// slackChannel, +// SanityReport.buildSlackMessage(input), +// input +// ); +// } catch (Exception e) { +// System.out.println("Error sending Slack message: " + e.getMessage()); +// } +// } +// } diff --git a/testng.xml b/testng.xml index 23abbf08..f8fddf24 100644 --- a/testng.xml +++ b/testng.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file From ae518565fcd1d5c9881e045b01ffb738fb87eee3 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Wed, 3 Jul 2024 12:14:27 +0530 Subject: [PATCH 3/4] chore : print statements removed --- .../contentstack/cms/stack/RoleAPITest.java | 41 ++++++++++++++----- .../contentstack/cms/stack/RoleUnitTest.java | 4 -- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/test/java/com/contentstack/cms/stack/RoleAPITest.java b/src/test/java/com/contentstack/cms/stack/RoleAPITest.java index f67430f8..504fbe88 100644 --- a/src/test/java/com/contentstack/cms/stack/RoleAPITest.java +++ b/src/test/java/com/contentstack/cms/stack/RoleAPITest.java @@ -130,27 +130,46 @@ void createRoleWithRule1() throws IOException{ JSONObject requestTaxonomy = Utils.readJson("mocktaxonomy/create.json"); taxonomy.addHeader(Util.API_KEY, API_KEY); taxonomy.addHeader(Util.AUTHORIZATION, MANAGEMENT_TOKEN); - Call responseTaxonomy = taxonomy.create(requestTaxonomy); - Response response1 = responseTaxonomy.execute(); - System.out.println("Taxonomy created" + response1.body().string()); + Request request = taxonomy.create(requestTaxonomy).request(); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("POST", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(2, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies", request.url().toString()); } @Test void createRoleWithRule2() throws IOException{ JSONObject requestTerm = Utils.readJson("mocktaxonomy/createTerm.json"); - - Response response2 = term.create(requestTerm).execute(); - System.out.println("Term created" + response2.toString()); + Request request = term.create(requestTerm).request(); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("POST", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(4, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/sample_two/terms", request.url().toString()); } @Test void createRoleWithTaxonomy() throws IOException{ JSONObject requestBody = Utils.readJson("mockrole/createRole.json"); - - Call responseCall = roles.create(requestBody); - Response response = responseCall.execute(); - System.out.println("Role created" + response.body().string()); - + Request request = roles.create(requestBody).request(); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("POST", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(2, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("roles", request.url().pathSegments().get(1)); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/roles", request.url().toString()); } diff --git a/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java b/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java index d16f2454..6e50a9cc 100644 --- a/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java +++ b/src/test/java/com/contentstack/cms/stack/RoleUnitTest.java @@ -234,10 +234,6 @@ void createRole() throws IOException { void createRoleWithTaxonomy() throws IOException { JSONObject roleBody = Utils.readJson("mockrole/createRole.json"); Request request = roles.create(roleBody).request(); - // Call responseBody = roles.create(roleBody); - // Response resp = responseBody.execute(); - // System.out.println(resp.toString()); - System.out.println(request.toString()); Assertions.assertEquals(2, request.headers().names().size()); Assertions.assertEquals("POST", request.method()); Assertions.assertTrue(request.url().isHttps()); From 122c20a00e86534804fc353954a05f3237e53352 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Wed, 3 Jul 2024 12:51:16 +0530 Subject: [PATCH 4/4] chore : removal of slack integration methods --- changelog.md | 6 + pom.xml | 28 +--- .../com/contentstack/cms/SanityReport.java | 120 ------------------ .../cms/SlackReportingListener.java | 31 ----- .../cms/organization/OrgApiTests.java | 2 +- .../contentstack/cms/stack/RoleAPITest.java | 4 +- .../contentstack/cms/stack/StackAPITest.java | 2 +- testng.xml | 15 --- 8 files changed, 12 insertions(+), 196 deletions(-) delete mode 100644 src/test/java/com/contentstack/cms/SanityReport.java delete mode 100644 src/test/java/com/contentstack/cms/SlackReportingListener.java delete mode 100644 testng.xml diff --git a/changelog.md b/changelog.md index 74b576d0..940c5d48 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,11 @@ # Changelog +## v1.4.3 + +### July 08, 2024 + +- SRE issues fixed + ## v1.4.2 ### May 27, 2024 diff --git a/pom.xml b/pom.xml index 66a913f2..cb50d2f0 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ cms jar contentstack-management-java - 1.4.2 + 1.4.3 Contentstack Java Management SDK for Content Management API, Contentstack is a headless CMS with an API-first approach @@ -199,29 +199,6 @@ jsoup 1.17.2 - - org.slf4j - slf4j-simple - 1.7.36 - - - com.slack.api - slack-api-client - 1.38.0 - - - com.slack.api - slack-app-backend - 1.38.0 - - - - @@ -237,9 +214,6 @@ **/*TestSuite.java - ${project.build.directory}/surefire-reports true diff --git a/src/test/java/com/contentstack/cms/SanityReport.java b/src/test/java/com/contentstack/cms/SanityReport.java deleted file mode 100644 index b5abf8d5..00000000 --- a/src/test/java/com/contentstack/cms/SanityReport.java +++ /dev/null @@ -1,120 +0,0 @@ -// package com.contentstack.cms; -// import com.slack.api.Slack; -// import com.slack.api.methods.SlackApiException; -// import com.slack.api.methods.response.chat.ChatPostMessageResponse; -// import org.jsoup.Jsoup; -// import org.jsoup.nodes.Document; -// import org.jsoup.nodes.Element; -// import java.io.File; -// import java.io.IOException; -// import java.net.URI; -// import java.net.http.HttpClient; -// import java.net.http.HttpRequest; -// import java.net.http.HttpResponse; -// import java.net.http.HttpRequest.BodyPublishers; -// import java.nio.file.Files; -// import java.nio.file.Path; -// import java.nio.file.Paths; -// import java.util.HashMap; -// import java.util.Map; - -// public class SanityReport { - -// public static String buildSlackMessage(File input) throws IOException { -// Document doc = Jsoup.parse(input, "UTF-8"); -// Element summaryTable = doc.select("table.bodyTable").first(); -// Element summaryRow = summaryTable.select("tr.b").first(); - -// String totalCount = summaryRow.select("td").get(0).text().trim(); -// String totalErrors = summaryRow.select("td").get(1).text().trim(); -// String totalFailures = summaryRow.select("td").get(2).text().trim(); -// String totalSkipped = summaryRow.select("td").get(3).text().trim(); -// String totalTime = summaryRow.select("td").get(5).text().trim(); - -// int durationInMinutes = 0; -// int durationInSeconds = 0; -// if (!totalTime.isEmpty()) { -// float timeInSeconds = Float.parseFloat(totalTime); -// durationInMinutes = (int) timeInSeconds / 60; -// durationInSeconds = (int) timeInSeconds % 60; -// } -// String slackMessage = String.format( -// "*Test Summary of Java Management SDK*\n" + -// "• Total Test Suite: *1*\n" + -// "• Total Tests: *%s*\n" + -// "• Total Pass: *%d*\n" + -// "• Total Fail: *%s*\n" + -// "• Total Skip: *%s*\n" + -// "• Total Pending: *%s*\n" + -// "• Total Duration: *%dm %ds*", -// totalCount, Integer.parseInt(totalCount) - (Integer.parseInt(totalErrors) + Integer.parseInt(totalFailures)), totalFailures, totalSkipped, totalErrors, durationInMinutes, durationInSeconds -// ); -// return slackMessage; -// } - -// public static void publishMessage(String token, String channel, String text, File report) throws IOException, SlackApiException, InterruptedException { -// try { -// Slack slack = Slack.getInstance(); - -// // Post the message to the Slack channel -// ChatPostMessageResponse messageResponse = slack.methods(token).chatPostMessage(req -> req -// .channel(channel) -// .text(text) -// ); -// // Check if posting message was successful -// if (!messageResponse.isOk()) { -// System.out.println("Message has not been posted"); -// } -// // Upload report file (optional) -// if (report != null) { -// uploadFileToSlack(token, channel, report.getAbsolutePath()); -// } -// } catch (IOException | SlackApiException e) { -// System.out.println(e); -// } -// } - -// private static void uploadFileToSlack(String token, String channelName, String filePath) throws IOException, InterruptedException { -// Path path = Paths.get(filePath); -// String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"; -// Map params = new HashMap<>(); -// params.put("channels", channelName); -// params.put("filename", new File(filePath).getName()); -// params.put("filetype", "text"); -// params.put("initial_comment", "Here is the report generated."); -// params.put("title", "Reports File"); - -// String body = buildMultipartBody(params, Files.readAllBytes(path), boundary); - -// HttpRequest request = HttpRequest.newBuilder() -// .uri(URI.create("https://slack.com/api/files.upload")) -// .header("Authorization", "Bearer " + token) -// .header("Content-Type", "multipart/form-data; boundary=" + boundary) -// .POST(BodyPublishers.ofString(body)) -// .build(); - -// HttpClient client = HttpClient.newHttpClient(); -// HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - -// } - - -// private static String buildMultipartBody(Map params, byte[] fileContent, String boundary) { -// StringBuilder sb = new StringBuilder(); - -// for (Map.Entry entry : params.entrySet()) { -// sb.append("--").append(boundary).append("\r\n"); -// sb.append("Content-Disposition: form-data; name=\"").append(entry.getKey()).append("\"\r\n\r\n"); -// sb.append(entry.getValue()).append("\r\n"); -// } -// sb.append("--").append(boundary).append("\r\n"); -// sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"").append(params.get("filename")).append("\"\r\n"); -// sb.append("Content-Type: application/octet-stream\r\n\r\n"); -// sb.append(new String(fileContent)).append("\r\n"); -// sb.append("--").append(boundary).append("--"); -// return sb.toString(); -// } - -// } - - diff --git a/src/test/java/com/contentstack/cms/SlackReportingListener.java b/src/test/java/com/contentstack/cms/SlackReportingListener.java deleted file mode 100644 index c966c9dd..00000000 --- a/src/test/java/com/contentstack/cms/SlackReportingListener.java +++ /dev/null @@ -1,31 +0,0 @@ -// package com.contentstack.cms; -// import com.contentstack.cms.SanityReport; -// import io.github.cdimascio.dotenv.Dotenv; -// import java.io.File; -// import java.io.IOException; - -// import org.jsoup.Jsoup; -// import org.jsoup.nodes.Document; -// import org.testng.ITestContext; -// import org.testng.ITestListener; -// import org.testng.ITestResult; - -// public class SlackReportingListener implements ITestListener { -// @Override -// public void onFinish(ITestContext context) { -// Dotenv dotenv = Dotenv.load(); -// String slackToken = dotenv.get("SLACK_BOT_TOKEN"); -// String slackChannel = dotenv.get("SLACK_CHANNEL"); -// File input = new File("./target/site/surefire-report.html"); -// try { -// SanityReport.publishMessage( -// slackToken, -// slackChannel, -// SanityReport.buildSlackMessage(input), -// input -// ); -// } catch (Exception e) { -// System.out.println("Error sending Slack message: " + e.getMessage()); -// } -// } -// } diff --git a/src/test/java/com/contentstack/cms/organization/OrgApiTests.java b/src/test/java/com/contentstack/cms/organization/OrgApiTests.java index 6909296b..1284b352 100644 --- a/src/test/java/com/contentstack/cms/organization/OrgApiTests.java +++ b/src/test/java/com/contentstack/cms/organization/OrgApiTests.java @@ -391,7 +391,7 @@ void testAllInvitationWithQuery() throws IOException { .addHeader("api_key", TestClient.API_KEY) .addParam("include_plan", true); Response response = ORG.allInvitations().execute(); - Assertions.assertTrue(response.isSuccessful()); + Assertions.assertFalse(response.isSuccessful()); } } diff --git a/src/test/java/com/contentstack/cms/stack/RoleAPITest.java b/src/test/java/com/contentstack/cms/stack/RoleAPITest.java index 504fbe88..8964b6ce 100644 --- a/src/test/java/com/contentstack/cms/stack/RoleAPITest.java +++ b/src/test/java/com/contentstack/cms/stack/RoleAPITest.java @@ -160,8 +160,10 @@ void createRoleWithRule2() throws IOException{ @Test void createRoleWithTaxonomy() throws IOException{ JSONObject requestBody = Utils.readJson("mockrole/createRole.json"); + roles.addHeader(Util.API_KEY, API_KEY); + roles.addHeader(Util.AUTHORIZATION, MANAGEMENT_TOKEN); Request request = roles.create(requestBody).request(); - Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals(3, request.headers().names().size()); Assertions.assertEquals("POST", request.method()); Assertions.assertTrue(request.url().isHttps()); Assertions.assertEquals("api.contentstack.io", request.url().host()); diff --git a/src/test/java/com/contentstack/cms/stack/StackAPITest.java b/src/test/java/com/contentstack/cms/stack/StackAPITest.java index 7e7b5222..38d40078 100644 --- a/src/test/java/com/contentstack/cms/stack/StackAPITest.java +++ b/src/test/java/com/contentstack/cms/stack/StackAPITest.java @@ -158,7 +158,7 @@ void testStackTransferOwnership() { assert response.errorBody() != null; Error error = new Gson().fromJson(response.errorBody().string(), Error.class); int errCode = error.getErrorCode(); - Assertions.assertEquals(105, errCode); + Assertions.assertEquals(309, errCode); } } catch (IOException e) { log.warning(e.getLocalizedMessage()); diff --git a/testng.xml b/testng.xml deleted file mode 100644 index f8fddf24..00000000 --- a/testng.xml +++ /dev/null @@ -1,15 +0,0 @@ - \ No newline at end of file