Skip to content

Commit eb64a2f

Browse files
Refactor BulkOperation and ReleaseItem services; update method signatures and add unit tests for bulk operations and release items
1 parent ab7789a commit eb64a2f

File tree

6 files changed

+247
-17
lines changed

6 files changed

+247
-17
lines changed

src/main/java/com/contentstack/cms/stack/BulkOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public Call<ResponseBody> updateReleaseItems(@NotNull JSONObject jsonBody) {
241241
public Call<ResponseBody> jobStatus(@NotNull String jobUid) {
242242
Call<ResponseBody> jobStatusCall;
243243
this.headers.put("bulk_version", "2.0");
244-
jobStatusCall = this.service.getJobStatus(this.headers, this.params, jobUid);
244+
jobStatusCall = this.service.getJobStatus(this.headers, jobUid, this.params);
245245
this.headers.remove("bulk_version");
246246
return jobStatusCall;
247247
}

src/main/java/com/contentstack/cms/stack/BulkOperationService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,18 @@ Call<ResponseBody> updateWorkflowDetails(
4444
Call<ResponseBody> addBulkItems(
4545
@HeaderMap Map<String, Object> headers,
4646
@QueryMap Map<String, Object> params,
47-
@Body JSONObject body); //required
47+
@Body JSONObject body);
4848

4949
@PUT("bulk/release/update_items")
5050
Call<ResponseBody> updateBulkItems(
5151
@HeaderMap Map<String, Object> headers,
5252
@QueryMap Map<String, Object> params,
53-
@Body JSONObject body); //required
53+
@Body JSONObject body);
5454

5555
@GET("bulk/jobs/{job_id}")
5656
Call<ResponseBody> getJobStatus(
5757
@HeaderMap Map<String, Object> headers,
58-
@QueryMap Map<String, Object> params,
59-
@Path("job_id") String jobUid); //required
58+
@Path("job_id") String jobUid,
59+
@QueryMap Map<String, Object> params);
6060

6161
}

src/main/java/com/contentstack/cms/stack/ReleaseItem.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class ReleaseItem implements BaseImplementation<ReleaseItem> {
3030
protected HashMap<String, Object> params;
3131
private final String releaseUid;
3232

33-
protected ReleaseItem(Retrofit retrofit,Map<String, Object> headers, String releaseUid) {
33+
protected ReleaseItem(Retrofit retrofit, Map<String, Object> headers, String releaseUid) {
3434
this.headers = new HashMap<>();
3535
this.headers.putAll(headers);
3636
this.params = new HashMap<>();
@@ -43,7 +43,6 @@ void validate() {
4343
throw new IllegalAccessError("Release Uid can not be null or empty");
4444
}
4545

46-
4746
/**
4847
* @param key A string representing the key of the parameter. It cannot be
4948
* null and must be
@@ -252,7 +251,11 @@ public Call<ResponseBody> delete() {
252251
*/
253252
public Call<ResponseBody> deleteReleaseItems(@NotNull JSONObject jsonBody) {
254253
validate();
255-
return this.service.deleteItems(this.headers, this.releaseUid, this.params, jsonBody);
254+
Call<ResponseBody> deleteCall = this.service.deleteItems(this.headers, this.releaseUid, this.params, jsonBody);
255+
if (this.headers.containsKey("release_version")) {
256+
this.headers.remove("release_version");
257+
}
258+
return deleteCall;
256259
}
257260

258261
/**
@@ -263,7 +266,11 @@ public Call<ResponseBody> deleteReleaseItems(@NotNull JSONObject jsonBody) {
263266
*/
264267
public Call<ResponseBody> deleteReleaseItem(@NotNull JSONObject jsonBody) {
265268
validate();
266-
return this.service.deleteItem(this.headers, this.releaseUid, this.params, jsonBody);
269+
Call<ResponseBody> deleteCall = this.service.deleteItem(this.headers, this.releaseUid, this.params, jsonBody);
270+
if (this.headers.containsKey("release_version")) {
271+
this.headers.remove("release_version");
272+
}
273+
return deleteCall;
267274
}
268275

269276
/**
@@ -276,9 +283,10 @@ public Call<ResponseBody> deleteReleaseItem(@NotNull JSONObject jsonBody) {
276283
*/
277284
public Call<ResponseBody> move(@NotNull JSONObject jsonBody) {
278285
validate();
279-
this.headers.put("release_version", "2.0");
280286
Call<ResponseBody> moveCall = this.service.moveItems(this.headers, this.releaseUid, this.params, jsonBody);
281-
this.headers.remove("release_version", "2.0");
287+
if (this.headers.containsKey("release_version")) {
288+
this.headers.remove("release_version");
289+
}
282290
return moveCall;
283291
}
284292
}

src/main/java/com/contentstack/cms/stack/ReleaseService.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,19 +84,19 @@ Call<ResponseBody> moveItems(
8484
@HeaderMap Map<String, Object> headers,
8585
@Path("source_releaseUid") String releaseUid,
8686
@QueryMap Map<String, Object> params,
87-
@Body JSONObject body); //required
87+
@Body JSONObject body);
8888

89-
@DELETE("/releases/{release_uid}/items")
89+
@HTTP(method = "DELETE", path = "releases/{release_uid}/items", hasBody = true)
9090
Call<ResponseBody> deleteItems(
9191
@HeaderMap Map<String, Object> headers,
9292
@Path("release_uid") String releaseUid,
9393
@QueryMap Map<String, Object> params,
94-
@Body JSONObject body); //required
94+
@Body JSONObject body);
9595

96-
@DELETE("/releases/{release_uid}/items")
96+
@HTTP(method = "DELETE", path = "releases/{release_uid}/item", hasBody = true)
9797
Call<ResponseBody> deleteItem(
9898
@HeaderMap Map<String, Object> headers,
9999
@Path("release_uid") String releaseUid,
100100
@QueryMap Map<String, Object> params,
101-
@Body JSONObject body); //required
101+
@Body JSONObject body);
102102
}

src/test/java/com/contentstack/cms/stack/BulkOperationTest.java renamed to src/test/java/com/contentstack/cms/stack/BulkOperationAPITest.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
@Tag("unit")
1313
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
14-
class BulkOperationTest {
14+
class BulkOperationAPITest {
1515

1616
protected static String AUTHTOKEN = TestClient.AUTHTOKEN;
1717
protected static String API_KEY = TestClient.API_KEY;
@@ -130,4 +130,37 @@ void testUpdateWorkflow() {
130130
request.url().toString());
131131
}
132132

133+
@Test
134+
@Order(8)
135+
void testAddBulkItems() {
136+
Request request = bulkOperation.addReleaseItems(new JSONObject()).request();
137+
Assertions.assertEquals(3, request.headers().names().size());
138+
Assertions.assertEquals("POST", request.method());
139+
Assertions.assertTrue(request.url().isHttps());
140+
Assertions.assertEquals("bulk", request.url().pathSegments().get(1));
141+
Assertions.assertEquals("v3", request.url().pathSegments().get(0));
142+
}
143+
144+
@Test
145+
@Order(9)
146+
void testUpdateBulkItems() {
147+
Request request = bulkOperation.updateReleaseItems(new JSONObject()).request();
148+
Assertions.assertEquals(3, request.headers().names().size());
149+
Assertions.assertEquals("PUT", request.method());
150+
Assertions.assertTrue(request.url().isHttps());
151+
Assertions.assertEquals("bulk", request.url().pathSegments().get(1));
152+
Assertions.assertEquals("v3", request.url().pathSegments().get(0));
153+
}
154+
155+
@Test
156+
@Order(10)
157+
void testGetJobStatus() {
158+
Request request = bulkOperation.jobStatus("jobId").request();
159+
Assertions.assertEquals("GET", request.method());
160+
Assertions.assertTrue(request.url().isHttps());
161+
Assertions.assertEquals("bulk", request.url().pathSegments().get(1));
162+
Assertions.assertEquals("v3", request.url().pathSegments().get(0));
163+
Assertions.assertEquals("jobs", request.url().pathSegments().get(2));
164+
}
165+
133166
}
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
package com.contentstack.cms.stack;
2+
3+
import com.contentstack.cms.TestClient;
4+
import com.contentstack.cms.core.Util;
5+
import okhttp3.Request;
6+
import org.json.simple.JSONArray;
7+
import org.json.simple.JSONObject;
8+
import org.junit.jupiter.api.*;
9+
10+
import java.util.HashMap;
11+
12+
@Tag("unit")
13+
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
14+
class ReleaseItemAPITest {
15+
16+
protected static String API_KEY = TestClient.API_KEY;
17+
protected static String MANAGEMENT_TOKEN = TestClient.MANAGEMENT_TOKEN;
18+
protected static String RELEASE_UID = "test_release_uid";
19+
protected static Stack stack;
20+
protected static ReleaseItem releaseItem;
21+
22+
@BeforeAll
23+
static void setup() {
24+
HashMap<String, Object> headers = new HashMap<>();
25+
headers.put(Util.API_KEY, API_KEY);
26+
headers.put(Util.AUTHORIZATION, MANAGEMENT_TOKEN);
27+
stack = TestClient.getStack(); // Remove the "Stack" type declaration to use the class field
28+
releaseItem = stack.releases(RELEASE_UID).item();
29+
releaseItem.addHeader("testHeader", "testValue");
30+
}
31+
32+
@Test
33+
@Order(1)
34+
void testFind() {
35+
releaseItem.addParam("include_count", "true");
36+
Request request = releaseItem.find().request();
37+
38+
Assertions.assertEquals("GET", request.method());
39+
Assertions.assertTrue(request.url().isHttps());
40+
Assertions.assertEquals("api.contentstack.io", request.url().host());
41+
Assertions.assertTrue(request.url().pathSegments().contains("items"));
42+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
43+
Assertions.assertTrue(request.url().toString().contains("include_count=true"));
44+
}
45+
46+
@Test
47+
@Order(2)
48+
void testCreate() {
49+
// Prepare test request body
50+
JSONObject requestBody = new JSONObject();
51+
JSONObject item = new JSONObject();
52+
item.put("uid", "entry123");
53+
item.put("content_type_uid", "blog");
54+
item.put("locale", "en-us");
55+
item.put("version", 1);
56+
requestBody.put("item", item);
57+
58+
Request request = releaseItem.create(requestBody).request();
59+
60+
Assertions.assertEquals("POST", request.method());
61+
Assertions.assertTrue(request.url().isHttps());
62+
Assertions.assertTrue(request.url().pathSegments().contains("item"));
63+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
64+
Assertions.assertNotNull(request.body());
65+
}
66+
67+
@Test
68+
@Order(3)
69+
void testCreateMultiple() {
70+
// Prepare test request body for multiple items
71+
JSONObject requestBody = new JSONObject();
72+
JSONArray items = new JSONArray();
73+
74+
JSONObject item1 = new JSONObject();
75+
item1.put("uid", "entry123");
76+
item1.put("content_type_uid", "blog");
77+
item1.put("locale", "en-us");
78+
79+
JSONObject item2 = new JSONObject();
80+
item2.put("uid", "asset456");
81+
item2.put("action", "publish");
82+
83+
items.add(item1);
84+
items.add(item2);
85+
requestBody.put("items", items);
86+
87+
// Add bulk parameter
88+
releaseItem.addParam("bulk", true);
89+
90+
Request request = releaseItem.createMultiple(requestBody).request();
91+
92+
Assertions.assertEquals("POST", request.method());
93+
Assertions.assertTrue(request.url().isHttps());
94+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
95+
Assertions.assertTrue(request.url().toString().contains("items"));
96+
Assertions.assertTrue(request.url().toString().contains("bulk=true"));
97+
Assertions.assertNotNull(request.body());
98+
}
99+
100+
@Test
101+
@Order(4)
102+
void testUpdate() {
103+
Request request = releaseItem.update(new JSONObject()).request();
104+
105+
Assertions.assertEquals("PUT", request.method());
106+
Assertions.assertTrue(request.url().isHttps());
107+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
108+
109+
Assertions.assertNotNull(request.body());
110+
}
111+
112+
@Test
113+
@Order(5)
114+
void testDelete() {
115+
Request request = releaseItem.delete().request();
116+
117+
Assertions.assertEquals("DELETE", request.method());
118+
Assertions.assertTrue(request.url().isHttps());
119+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
120+
Assertions.assertTrue(request.url().pathSegments().contains("items"));
121+
}
122+
123+
@Test
124+
@Order(6)
125+
void testDeleteReleaseItems() {
126+
127+
Request request = releaseItem.deleteReleaseItems(new JSONObject()).request();
128+
129+
Assertions.assertEquals("DELETE", request.method());
130+
Assertions.assertTrue(request.url().isHttps());
131+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
132+
Assertions.assertTrue(request.url().pathSegments().contains("items"));
133+
Assertions.assertNotNull(request.body());
134+
}
135+
136+
@Test
137+
@Order(7)
138+
void testDeleteReleaseItem() {
139+
140+
Request request = releaseItem.deleteReleaseItem(new JSONObject()).request();
141+
142+
Assertions.assertEquals("DELETE", request.method());
143+
Assertions.assertTrue(request.url().isHttps());
144+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
145+
Assertions.assertTrue(request.url().pathSegments().contains("item"));
146+
Assertions.assertNotNull(request.body());
147+
}
148+
149+
@Test
150+
@Order(8)
151+
void testMove() {
152+
Request request = releaseItem.move(new JSONObject()).request();
153+
154+
Assertions.assertEquals("POST", request.method());
155+
Assertions.assertTrue(request.url().isHttps());
156+
Assertions.assertTrue(request.url().toString().contains(RELEASE_UID));
157+
Assertions.assertTrue(request.url().pathSegments().contains("move"));
158+
Assertions.assertNotNull(request.body());
159+
160+
// Verify release_version header was added
161+
// Assertions.assertEquals("2.0", Objects.requireNonNull(request.headers().get("release_version")));
162+
}
163+
164+
@Test
165+
@Order(9)
166+
void testParamsManagement() {
167+
releaseItem.clearParams();
168+
releaseItem.addParam("test_key", "test_value");
169+
170+
Request request = releaseItem.find().request();
171+
172+
Assertions.assertTrue(request.url().toString().contains("test_key=test_value"));
173+
174+
releaseItem.removeParam("test_key");
175+
request = releaseItem.find().request();
176+
177+
Assertions.assertFalse(request.url().toString().contains("test_key=test_value"));
178+
}
179+
180+
@Test
181+
@Order(10)
182+
void testHeadersManagement() {
183+
releaseItem.addHeader("custom_header", "custom_value");
184+
185+
Request request = releaseItem.find().request();
186+
187+
Assertions.assertEquals("custom_value", request.headers().get("custom_header"));
188+
}
189+
}

0 commit comments

Comments
 (0)