diff --git a/src/test/java/com/contentstack/cms/stack/TaxonomyAPITest.java b/src/test/java/com/contentstack/cms/stack/TaxonomyAPITest.java new file mode 100644 index 00000000..197f1083 --- /dev/null +++ b/src/test/java/com/contentstack/cms/stack/TaxonomyAPITest.java @@ -0,0 +1,300 @@ +package com.contentstack.cms.stack; + +import java.io.IOException; +import java.util.HashMap; + +import org.json.simple.JSONObject; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.*; +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.Response; + + + + +@Tag("api") +public class TaxonomyAPITest { + protected static String API_KEY = TestClient.API_KEY; + protected static String _uid = "sample_one"; + protected static String MANAGEMENT_TOKEN = TestClient.MANAGEMENT_TOKEN; + protected static Taxonomy taxonomy; + protected static Terms terms; + + @BeforeAll + static void setup() { + final String AUTHTOKEN = TestClient.AUTHTOKEN; + HashMap headers = new HashMap<>(); + headers.put(Util.API_KEY, API_KEY); + headers.put(Util.AUTHORIZATION, MANAGEMENT_TOKEN); + Stack stack = new Contentstack.Builder().setAuthtoken(AUTHTOKEN).build().stack(headers); + taxonomy = stack.taxonomy(); + terms = stack.taxonomy(_uid).terms(); + } + + @Test + void fetchAll(){ + + try { + Response response = taxonomy.find().execute(); + System.out.println(response.body().string()); + if (response.isSuccessful()) { + Assertions.assertTrue(response.isSuccessful()); + } else { + Assertions.assertFalse(response.isSuccessful()); + } + } catch (IOException e) { + System.out.println("Exception: " + e.getLocalizedMessage()); + } + } + + @Test + void fetchSingle() { + try { + Response response = taxonomy.fetch("regions").execute(); + System.out.println(response); + if (response.isSuccessful()) { + Assertions.assertTrue(response.isSuccessful()); + } else { + Assertions.assertFalse(response.isSuccessful()); + } + } catch (IOException e) { + System.out.println("Exception: " + e.getLocalizedMessage()); + } + } + + @Test + void createTaxonomy() throws IOException { + // add create.json + JSONObject requestBody = Utils.readJson("mocktaxonomy/create.json"); + taxonomy.addHeader(Util.API_KEY, API_KEY); + taxonomy.addHeader(Util.AUTHORIZATION, MANAGEMENT_TOKEN); + Request request = taxonomy.create(requestBody).request(); + Response resp = taxonomy.create(requestBody).execute(); + System.out.println(resp); + System.out.println(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 updateTaxonomy() { + JSONObject updateBody = Utils.readJson("mocktaxonomy/update.json"); + taxonomy.addHeader(Util.API_KEY, API_KEY); + taxonomy.addHeader(Util.AUTHORIZATION, MANAGEMENT_TOKEN); + Request request = taxonomy.update("sample_one",updateBody).request(); + System.out.println(request); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("PUT", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(3, request.url().pathSegments().size()); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertNotNull(request.body()); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/sample_one", request.url().toString()); + + } + + @Test + void deleteTaxonomy(){ + taxonomy.clearParams(); + taxonomy.addHeader("Content-Type", "application/json"); + HashMap headers = new HashMap<>(); + HashMap params = new HashMap<>(); + headers.put("key_param1", "key_param_value"); + headers.put("key_param2", "key_param_value"); + params.put("key_param3", "key_param_value"); + params.put("key_param4", "key_param_value"); + taxonomy.addHeaders(headers); + taxonomy.addParams(params); + Request request = taxonomy.delete("sample_one").request(); + System.out.println(request); + Assertions.assertEquals(5, request.headers().names().size()); + Assertions.assertEquals("DELETE", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(3, request.url().pathSegments().size()); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertNull(request.body()); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/sample_one", request.url().toString()); + } + + @Test + void createTerm() throws IOException { + terms.clearParams(); + JSONObject term = Utils.readJson("mockTaxonomy/createTerm.json"); + Request request = terms.create(term).request(); +// Response resp= terms.create(term).execute(); +// System.out.println(resp); + 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.assertEquals(_uid, request.url().pathSegments().get(2)); + Assertions.assertEquals("terms", request.url().pathSegments().get(3)); + Assertions.assertNotNull(request.body()); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/"+ _uid +"/terms", + request.url().toString()); + } + @Test + void fetchAllTerms() throws IOException { + terms.clearParams(); + terms.addParam("limit", 3); + Request request = terms.find().request(); + Response resp = terms.find().execute(); + System.out.println(resp.body().string()); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("GET", 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.assertEquals(_uid, request.url().pathSegments().get(2)); + Assertions.assertEquals("terms", request.url().pathSegments().get(3)); + Assertions.assertNull(request.body()); + Assertions.assertEquals("limit=3", request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/"+ _uid +"/terms?limit=3", + request.url().toString()); + } + + @Test + void fetchSingleTerm() throws IOException { + terms.clearParams(); + Request request = terms.fetch("india").request(); +// Response resp = terms.fetch("india").execute(); +// System.out.println(resp); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("GET", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(5, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertEquals(_uid, request.url().pathSegments().get(2)); + Assertions.assertEquals("terms", request.url().pathSegments().get(3)); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/"+ _uid +"/terms/india", + request.url().toString()); + } + + @Test + void updateTerm(){ + JSONObject Newterm = Utils.readJson("mockTaxonomy/updateTerm.json"); + Request request = terms.update(_uid,Newterm).request(); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("PUT", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(5, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertEquals(_uid, request.url().pathSegments().get(2)); + Assertions.assertEquals("terms", request.url().pathSegments().get(3)); + Assertions.assertNotNull(request.body()); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/"+ _uid +"/terms/sample_one", + request.url().toString()); + } + + @Test + void deleteTerm(){ + Request request = taxonomy.delete("sample_one").request(); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("DELETE", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(3, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertEquals(_uid, request.url().pathSegments().get(2)); + Assertions.assertNull(request.body()); + Assertions.assertNull(request.url().encodedQuery()); + Assertions.assertEquals("https://api.contentstack.io/v3/taxonomies/"+ _uid +"", request.url().toString()); + } + + @Test + void ancestorsTerm(){ + terms.clearParams(); + terms.addParam("include_referenced_entries_count", true); + terms.addParam("include_children_count", false); + Request request = terms.ancestors("term_a2").request(); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("GET", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(6, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertEquals(_uid, request.url().pathSegments().get(2)); + Assertions.assertEquals("terms", request.url().pathSegments().get(3)); + Assertions.assertNull(request.body()); + Assertions.assertEquals("include_children_count=false&include_referenced_entries_count=true", + request.url().encodedQuery()); + Assertions.assertEquals( + "https://api.contentstack.io/v3/taxonomies/"+ _uid +"/terms/term_a2/ancestors?include_children_count=false&include_referenced_entries_count=true", + request.url().toString()); + + } + + @Test + void descendantsTerm(){ + terms.clearParams(); + terms.addParam("include_count", true); + Request request = terms.descendants("term_a2").request(); + Assertions.assertEquals(2, request.headers().names().size()); + Assertions.assertEquals("GET", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(6, request.url().pathSegments().size()); + Assertions.assertEquals("v3", request.url().pathSegments().get(0)); + Assertions.assertEquals("taxonomies", request.url().pathSegments().get(1)); + Assertions.assertEquals(_uid, request.url().pathSegments().get(2)); + Assertions.assertEquals("terms", request.url().pathSegments().get(3)); + Assertions.assertNull(request.body()); + Assertions.assertEquals("include_count=true", request.url().encodedQuery()); + Assertions.assertEquals( + "https://api.contentstack.io/v3/taxonomies/"+ _uid +"/terms/term_a2/descendants?include_count=true", + request.url().toString()); + + } + + @Test + void moveTerms(){ + terms.clearParams(); + HashMap headers = new HashMap<>(); + HashMap params = new HashMap<>(); + terms.addHeader("Accept-Encoding", "UTF-8"); + headers.put("Accept-Encoding", "UTF-8"); + params.put("force", true); + terms.addParams(params); + terms.addHeaders(headers); + Request request = terms.reorder(_uid, new JSONObject()).request(); + Assertions.assertEquals(3, request.headers().names().size()); + Assertions.assertEquals("PUT", request.method()); + Assertions.assertTrue(request.url().isHttps()); + Assertions.assertEquals("api.contentstack.io", request.url().host()); + Assertions.assertEquals(6, request.url().pathSegments().size()); + } +} diff --git a/src/test/resources/mocktaxonomy/create.json b/src/test/resources/mocktaxonomy/create.json new file mode 100644 index 00000000..9e0c2a8e --- /dev/null +++ b/src/test/resources/mocktaxonomy/create.json @@ -0,0 +1,8 @@ + +{ + "taxonomy": { + "uid": "sample_one", + "name": "Sample One", + "description": "Description for the sample one taxonomy." + } + } \ No newline at end of file diff --git a/src/test/resources/mocktaxonomy/createTerm.json b/src/test/resources/mocktaxonomy/createTerm.json new file mode 100644 index 00000000..439578d5 --- /dev/null +++ b/src/test/resources/mocktaxonomy/createTerm.json @@ -0,0 +1,8 @@ +{ + "term": { + "uid": "term_a", + "name": "Term A", + "description": "Term A Description for Taxonomy sample", + "parent_uid": null + } + } \ No newline at end of file diff --git a/src/test/resources/mocktaxonomy/update.json b/src/test/resources/mocktaxonomy/update.json new file mode 100644 index 00000000..ece28e56 --- /dev/null +++ b/src/test/resources/mocktaxonomy/update.json @@ -0,0 +1,6 @@ +{ + "taxonomy": { + "name": "Updated Sample One", + "description": "Updated description for the sample one taxonomy." + } + } \ No newline at end of file diff --git a/src/test/resources/mocktaxonomy/updateTerm.json b/src/test/resources/mocktaxonomy/updateTerm.json new file mode 100644 index 00000000..6c7cafb3 --- /dev/null +++ b/src/test/resources/mocktaxonomy/updateTerm.json @@ -0,0 +1,5 @@ +{ + "term": { + "name": "Updated Term A" + } +} \ No newline at end of file