Skip to content

Commit d693805

Browse files
Add comprehensive unit tests for CSBackgroundTask constructors with various parameters and scenarios
1 parent 9d43c94 commit d693805

File tree

1 file changed

+304
-0
lines changed

1 file changed

+304
-0
lines changed

src/test/java/com/contentstack/sdk/TestCSBackgroundTask.java

Lines changed: 304 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.contentstack.sdk;
22

33
import org.junit.jupiter.api.Test;
4+
import java.lang.reflect.Constructor;
45
import java.util.HashMap;
56
import java.util.LinkedHashMap;
67

@@ -161,5 +162,308 @@ void testMultipleCheckHeaderCalls() {
161162
// All calls should complete without throwing
162163
assertNotNull(task);
163164
}
165+
166+
// ========== PROTECTED CONSTRUCTOR TESTS ==========
167+
168+
@Test
169+
void testConstructorWithStackInstance() throws Exception {
170+
// Test the protected constructor: CSBackgroundTask(Stack, String, String, HashMap, HashMap, String, ResultCallBack)
171+
172+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
173+
174+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
175+
headers.put("api_key", "test_key");
176+
headers.put("access_token", "test_token");
177+
headers.put("environment", "production");
178+
179+
LinkedHashMap<String, Object> urlParams = new LinkedHashMap<>();
180+
urlParams.put("include_count", true);
181+
urlParams.put("limit", 10);
182+
183+
ResultCallBack callback = new ResultCallBack() {
184+
@Override
185+
public void onRequestFail(ResponseType responseType, Error error) {
186+
// Test callback
187+
}
188+
};
189+
190+
// Use reflection to access protected constructor
191+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
192+
Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
193+
);
194+
constructor.setAccessible(true);
195+
196+
CSBackgroundTask task = constructor.newInstance(
197+
stack, "ASSET", "assets", headers, urlParams, "test_request", callback
198+
);
199+
200+
assertNotNull(task);
201+
assertNotNull(task.service);
202+
}
203+
204+
@Test
205+
void testConstructorWithQueryInstance() throws Exception {
206+
// Test the protected constructor: CSBackgroundTask(Query, Stack, String, String, LinkedHashMap, HashMap, String, ResultCallBack)
207+
208+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
209+
Query query = stack.contentType("blog_post").query();
210+
211+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
212+
headers.put("api_key", "test_key");
213+
headers.put("access_token", "test_token");
214+
headers.put("environment", "staging");
215+
216+
HashMap<String, Object> urlQueries = new HashMap<>();
217+
urlQueries.put("locale", "en-us");
218+
urlQueries.put("include_count", true);
219+
220+
ResultCallBack callback = new ResultCallBack() {
221+
@Override
222+
public void onRequestFail(ResponseType responseType, Error error) {
223+
// Test callback
224+
}
225+
};
226+
227+
// Use reflection to access protected constructor
228+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
229+
Query.class, Stack.class, String.class, String.class, LinkedHashMap.class, HashMap.class, String.class, ResultCallBack.class
230+
);
231+
constructor.setAccessible(true);
232+
233+
CSBackgroundTask task = constructor.newInstance(
234+
query, stack, "QUERY", "entries", headers, urlQueries, "query_request", callback
235+
);
236+
237+
assertNotNull(task);
238+
assertNotNull(task.service);
239+
}
240+
241+
@Test
242+
void testConstructorWithGlobalField() throws Exception {
243+
// Test the protected constructor: CSBackgroundTask(GlobalField, Stack, String, String, HashMap, HashMap, String, ResultCallBack)
244+
245+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
246+
GlobalField globalField = stack.globalField("test_global_field");
247+
248+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
249+
headers.put("api_key", "test_key");
250+
headers.put("access_token", "test_token");
251+
headers.put("environment", "development");
252+
253+
LinkedHashMap<String, Object> urlParams = new LinkedHashMap<>();
254+
urlParams.put("include_schema", true);
255+
256+
ResultCallBack callback = new ResultCallBack() {
257+
@Override
258+
public void onRequestFail(ResponseType responseType, Error error) {
259+
// Test callback
260+
}
261+
};
262+
263+
// Use reflection to access protected constructor
264+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
265+
GlobalField.class, Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
266+
);
267+
constructor.setAccessible(true);
268+
269+
CSBackgroundTask task = constructor.newInstance(
270+
globalField, stack, "GLOBALFIELD", "global_fields/test_global_field", headers, urlParams, "globalfield_request", callback
271+
);
272+
273+
assertNotNull(task);
274+
assertNotNull(task.service);
275+
}
276+
277+
@Test
278+
void testConstructorWithStackAndEmptyParams() throws Exception {
279+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
280+
281+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
282+
headers.put("api_key", "key");
283+
headers.put("access_token", "token");
284+
285+
LinkedHashMap<String, Object> emptyParams = new LinkedHashMap<>();
286+
287+
ResultCallBack callback = new ResultCallBack() {
288+
@Override
289+
public void onRequestFail(ResponseType responseType, Error error) {}
290+
};
291+
292+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
293+
Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
294+
);
295+
constructor.setAccessible(true);
296+
297+
CSBackgroundTask task = constructor.newInstance(
298+
stack, "TEST", "test_url", headers, emptyParams, "request_info", callback
299+
);
300+
301+
assertNotNull(task);
302+
}
303+
304+
@Test
305+
void testConstructorWithQueryAndMultipleParams() throws Exception {
306+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
307+
Query query = stack.contentType("product").query();
308+
309+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
310+
headers.put("api_key", "key");
311+
headers.put("access_token", "token");
312+
headers.put("environment", "prod");
313+
headers.put("custom_header", "custom_value");
314+
315+
HashMap<String, Object> urlQueries = new HashMap<>();
316+
urlQueries.put("locale", "en-us");
317+
urlQueries.put("include_count", true);
318+
urlQueries.put("skip", 0);
319+
urlQueries.put("limit", 50);
320+
321+
ResultCallBack callback = new ResultCallBack() {
322+
@Override
323+
public void onRequestFail(ResponseType responseType, Error error) {}
324+
};
325+
326+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
327+
Query.class, Stack.class, String.class, String.class, LinkedHashMap.class, HashMap.class, String.class, ResultCallBack.class
328+
);
329+
constructor.setAccessible(true);
330+
331+
CSBackgroundTask task = constructor.newInstance(
332+
query, stack, "QUERY", "entries", headers, urlQueries, "query_all", callback
333+
);
334+
335+
assertNotNull(task);
336+
assertNotNull(task.service);
337+
}
338+
339+
@Test
340+
void testConstructorWithGlobalFieldAndMinimalParams() throws Exception {
341+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
342+
GlobalField globalField = stack.globalField("minimal_field");
343+
344+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
345+
headers.put("api_key", "key");
346+
headers.put("access_token", "token");
347+
348+
LinkedHashMap<String, Object> urlParams = new LinkedHashMap<>();
349+
350+
ResultCallBack callback = new ResultCallBack() {
351+
@Override
352+
public void onRequestFail(ResponseType responseType, Error error) {}
353+
};
354+
355+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
356+
GlobalField.class, Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
357+
);
358+
constructor.setAccessible(true);
359+
360+
CSBackgroundTask task = constructor.newInstance(
361+
globalField, stack, "GLOBALFIELD", "global_fields/minimal_field", headers, urlParams, "fetch", callback
362+
);
363+
364+
assertNotNull(task);
365+
}
366+
367+
@Test
368+
void testConstructorWithNullCallback() throws Exception {
369+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
370+
371+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
372+
headers.put("api_key", "key");
373+
headers.put("access_token", "token");
374+
375+
LinkedHashMap<String, Object> urlParams = new LinkedHashMap<>();
376+
377+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
378+
Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
379+
);
380+
constructor.setAccessible(true);
381+
382+
// Null callback should not cause exception during construction
383+
CSBackgroundTask task = constructor.newInstance(
384+
stack, "TEST", "test", headers, urlParams, "info", null
385+
);
386+
387+
assertNotNull(task);
388+
}
389+
390+
@Test
391+
void testConstructorCreatesCompleteUrl() throws Exception {
392+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
393+
394+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
395+
headers.put("api_key", "key");
396+
headers.put("access_token", "token");
397+
398+
LinkedHashMap<String, Object> urlParams = new LinkedHashMap<>();
399+
400+
ResultCallBack callback = new ResultCallBack() {
401+
@Override
402+
public void onRequestFail(ResponseType responseType, Error error) {}
403+
};
404+
405+
String testUrl = "assets/blt123";
406+
407+
Constructor<CSBackgroundTask> constructor = CSBackgroundTask.class.getDeclaredConstructor(
408+
Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
409+
);
410+
constructor.setAccessible(true);
411+
412+
CSBackgroundTask task = constructor.newInstance(
413+
stack, "ASSET", testUrl, headers, urlParams, "fetch_asset", callback
414+
);
415+
416+
assertNotNull(task);
417+
// The constructor should combine stack.config.getEndpoint() + url
418+
assertNotNull(task.service);
419+
}
420+
421+
@Test
422+
void testAllThreeConstructorsWithDifferentControllers() throws Exception {
423+
Stack stack = Contentstack.stack("test_api_key", "test_delivery_token", "test_env");
424+
425+
LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
426+
headers.put("api_key", "key");
427+
headers.put("access_token", "token");
428+
429+
LinkedHashMap<String, Object> params = new LinkedHashMap<>();
430+
431+
ResultCallBack callback = new ResultCallBack() {
432+
@Override
433+
public void onRequestFail(ResponseType responseType, Error error) {}
434+
};
435+
436+
// Test Stack constructor with different controller
437+
Constructor<CSBackgroundTask> stackConstructor = CSBackgroundTask.class.getDeclaredConstructor(
438+
Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
439+
);
440+
stackConstructor.setAccessible(true);
441+
CSBackgroundTask task1 = stackConstructor.newInstance(
442+
stack, "CONTENTTYPES", "content_types", headers, params, "info1", callback
443+
);
444+
assertNotNull(task1);
445+
446+
// Test Query constructor with different controller
447+
Query query = stack.contentType("test").query();
448+
Constructor<CSBackgroundTask> queryConstructor = CSBackgroundTask.class.getDeclaredConstructor(
449+
Query.class, Stack.class, String.class, String.class, LinkedHashMap.class, HashMap.class, String.class, ResultCallBack.class
450+
);
451+
queryConstructor.setAccessible(true);
452+
CSBackgroundTask task2 = queryConstructor.newInstance(
453+
query, stack, "ENTRY", "entries/blt123", headers, params, "info2", callback
454+
);
455+
assertNotNull(task2);
456+
457+
// Test GlobalField constructor with different controller
458+
GlobalField gf = stack.globalField("test");
459+
Constructor<CSBackgroundTask> gfConstructor = CSBackgroundTask.class.getDeclaredConstructor(
460+
GlobalField.class, Stack.class, String.class, String.class, HashMap.class, HashMap.class, String.class, ResultCallBack.class
461+
);
462+
gfConstructor.setAccessible(true);
463+
CSBackgroundTask task3 = gfConstructor.newInstance(
464+
gf, stack, "GLOBALFIELDS", "global_fields", headers, params, "info3", callback
465+
);
466+
assertNotNull(task3);
467+
}
164468
}
165469

0 commit comments

Comments
 (0)