Skip to content

Commit 5de4c75

Browse files
committed
Feat: Add support for variant branches in Entry and Query classes, and update tests
1 parent ca23a72 commit 5de4c75

7 files changed

Lines changed: 304 additions & 0 deletions

File tree

contentstack/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ android {
108108
buildConfigField "String", "variantUID", getPropertyOrEmpty('variantUID')
109109
buildConfigField "String", "variantEntryUID", getPropertyOrEmpty('variantEntryUID')
110110
buildConfigField "String[]", "variantsUID", variantsAsArrayString
111+
buildConfigField "String", "variantBranch", getPropertyOrEmpty('variantBranch')
111112
}
112113
release {
113114
minifyEnabled false

contentstack/src/androidTest/java/com/contentstack/sdk/EntryTestCase.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class EntryTestCase {
3131
private static String variantUID = BuildConfig.variantUID;
3232
private static String variantEntryUID = BuildConfig.variantEntryUID;
3333
private static String[] variantsUID = BuildConfig.variantsUID;
34+
private static String variantBranch = BuildConfig.variantBranch;
3435

3536

3637
@BeforeClass
@@ -373,4 +374,32 @@ public void onCompletion(ResponseType responseType, Error error) {
373374
latch.await();
374375
}
375376

377+
@Test
378+
public void VariantsTestSingleUidWithBranch() throws InterruptedException {
379+
final CountDownLatch latch = new CountDownLatch(1);
380+
final Entry entry = stack.contentType("product").entry(variantEntryUID).variants(variantUID, variantBranch);
381+
entry.fetch(new EntryResultCallBack() {
382+
@Override
383+
public void onCompletion(ResponseType responseType, Error error) {
384+
System.out.println(entry.toJSON());
385+
latch.countDown();
386+
}
387+
});
388+
latch.await();
389+
}
390+
391+
@Test
392+
public void VariantsTestArrayWithBranch() throws InterruptedException {
393+
final CountDownLatch latch = new CountDownLatch(1);
394+
final Entry entry = stack.contentType("product").entry(variantEntryUID).variants(variantsUID, variantBranch);
395+
entry.fetch(new EntryResultCallBack() {
396+
@Override
397+
public void onCompletion(ResponseType responseType, Error error) {
398+
System.out.println(entry.toJSON());
399+
latch.countDown();
400+
}
401+
});
402+
latch.await();
403+
}
404+
376405
}

contentstack/src/androidTest/java/com/contentstack/sdk/QueryTestCase.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ public class QueryTestCase {
1717

1818
private static final String TAG = AssetTestCase.class.getSimpleName();
1919
private static final String contentTypeUID = BuildConfig.contentTypeUID;
20+
private static final String variantUID = BuildConfig.variantUID;
21+
private static final String[] variantsUID = BuildConfig.variantsUID;
22+
private static final String variantBranch = BuildConfig.variantBranch;
2023
private static Query query;
2124

2225
static {
@@ -116,4 +119,56 @@ public void onCompletion(ResponseType responseType, QueryResult queryresult, Err
116119
});
117120
}
118121

122+
@Test
123+
public void test_42_variants_single_uid_find() throws Exception {
124+
final Query q = TestCred.stack().contentType(contentTypeUID).query();
125+
q.variants(variantUID).find(new QueryResultsCallBack() {
126+
@Override
127+
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
128+
if (error == null) {
129+
Log.d(TAG, "variants single find: " + queryresult.getResultObjects().size() + " entries");
130+
}
131+
}
132+
});
133+
}
134+
135+
@Test
136+
public void test_43_variants_array_find() throws Exception {
137+
final Query q = TestCred.stack().contentType(contentTypeUID).query();
138+
q.variants(variantsUID).find(new QueryResultsCallBack() {
139+
@Override
140+
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
141+
if (error == null) {
142+
Log.d(TAG, "variants array find: " + queryresult.getResultObjects().size() + " entries");
143+
}
144+
}
145+
});
146+
}
147+
148+
@Test
149+
public void test_44_variants_single_uid_with_branch_find() throws Exception {
150+
final Query q = TestCred.stack().contentType(contentTypeUID).query();
151+
q.variants(variantUID, variantBranch).find(new QueryResultsCallBack() {
152+
@Override
153+
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
154+
if (error == null) {
155+
Log.d(TAG, "variants single+branch find: " + queryresult.getResultObjects().size() + " entries");
156+
}
157+
}
158+
});
159+
}
160+
161+
@Test
162+
public void test_45_variants_array_with_branch_find() throws Exception {
163+
final Query q = TestCred.stack().contentType(contentTypeUID).query();
164+
q.variants(variantsUID, variantBranch).find(new QueryResultsCallBack() {
165+
@Override
166+
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
167+
if (error == null) {
168+
Log.d(TAG, "variants array+branch find: " + queryresult.getResultObjects().size() + " entries");
169+
}
170+
}
171+
});
172+
}
173+
119174
}

contentstack/src/main/java/com/contentstack/sdk/Entry.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,6 +1551,38 @@ public Entry variants(String[] variants){
15511551
}
15521552
return this;
15531553
}
1554+
1555+
/**
1556+
* Sets the variant UID and scopes the request to the given branch.
1557+
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
1558+
*
1559+
* @param variantUid single variant UID
1560+
* @param branch branch name to scope the request
1561+
* @return {@link Entry}
1562+
*/
1563+
public Entry variants(String variantUid, String branch) {
1564+
variants(variantUid);
1565+
if (branch != null && !branch.trim().isEmpty()) {
1566+
this.localHeader.put("branch", branch.trim());
1567+
}
1568+
return this;
1569+
}
1570+
1571+
/**
1572+
* Sets multiple variant UIDs and scopes the request to the given branch.
1573+
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
1574+
*
1575+
* @param variantUids array of variant UIDs
1576+
* @param branch branch name to scope the request
1577+
* @return {@link Entry}
1578+
*/
1579+
public Entry variants(String[] variantUids, String branch) {
1580+
variants(variantUids);
1581+
if (branch != null && !branch.trim().isEmpty()) {
1582+
this.localHeader.put("branch", branch.trim());
1583+
}
1584+
return this;
1585+
}
15541586
public ArrayMap<String, Object> getHeaders() {
15551587
return localHeader;
15561588
}

contentstack/src/main/java/com/contentstack/sdk/Query.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2025,5 +2025,75 @@ public Query includeMetadata() {
20252025
return this;
20262026
}
20272027

2028+
/**
2029+
* Sets the variant UID for this query via the {@code x-cs-variant-uid} request header.
2030+
*
2031+
* @param variantUid single variant UID
2032+
* @return {@link Query}
2033+
*/
2034+
public Query variants(String variantUid) {
2035+
if (variantUid != null && !variantUid.trim().isEmpty()) {
2036+
localHeader.put("x-cs-variant-uid", variantUid.trim());
2037+
}
2038+
return this;
2039+
}
2040+
2041+
/**
2042+
* Sets multiple variant UIDs for this query via the {@code x-cs-variant-uid} request header.
2043+
*
2044+
* @param variantUids array of variant UIDs
2045+
* @return {@link Query}
2046+
*/
2047+
public Query variants(String[] variantUids) {
2048+
if (variantUids != null && variantUids.length > 0) {
2049+
List<String> variantList = new ArrayList<>();
2050+
for (String variant : variantUids) {
2051+
if (variant != null && !variant.trim().isEmpty()) {
2052+
variantList.add(variant.trim());
2053+
}
2054+
}
2055+
if (!variantList.isEmpty()) {
2056+
localHeader.put("x-cs-variant-uid", String.join(", ", variantList));
2057+
}
2058+
}
2059+
return this;
2060+
}
2061+
2062+
/**
2063+
* Sets the variant UID and scopes the query to the given branch.
2064+
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
2065+
*
2066+
* @param variantUid single variant UID
2067+
* @param branch branch name to scope the request
2068+
* @return {@link Query}
2069+
*/
2070+
public Query variants(String variantUid, String branch) {
2071+
variants(variantUid);
2072+
if (branch != null && !branch.trim().isEmpty()) {
2073+
localHeader.put("branch", branch.trim());
2074+
}
2075+
return this;
2076+
}
2077+
2078+
/**
2079+
* Sets multiple variant UIDs and scopes the query to the given branch.
2080+
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
2081+
*
2082+
* @param variantUids array of variant UIDs
2083+
* @param branch branch name to scope the request
2084+
* @return {@link Query}
2085+
*/
2086+
public Query variants(String[] variantUids, String branch) {
2087+
variants(variantUids);
2088+
if (branch != null && !branch.trim().isEmpty()) {
2089+
localHeader.put("branch", branch.trim());
2090+
}
2091+
return this;
2092+
}
2093+
2094+
public ArrayMap<String, Object> getHeaders() {
2095+
return localHeader;
2096+
}
2097+
20282098
}
20292099

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,50 @@ public void testVariantsArrayNull() {
353353
assertNotNull(result);
354354
}
355355

356+
@Test
357+
public void testVariantsSingleWithBranch() {
358+
Entry result = entry.variants("xyz", "branch_name");
359+
assertNotNull(result);
360+
assertEquals("xyz", entry.getHeaders().get("x-cs-variant-uid"));
361+
assertEquals("branch_name", entry.getHeaders().get("branch"));
362+
}
363+
364+
@Test
365+
public void testVariantsArrayWithBranch() {
366+
Entry result = entry.variants(new String[]{"variant1", "variant2"}, "branch_name");
367+
assertNotNull(result);
368+
assertEquals("variant1, variant2", entry.getHeaders().get("x-cs-variant-uid"));
369+
assertEquals("branch_name", entry.getHeaders().get("branch"));
370+
}
371+
372+
@Test
373+
public void testVariantsArrayWithBranchFiltersNullsAndBlanks() {
374+
entry.variants(new String[]{"v1", null, " ", "v2"}, "staging");
375+
assertEquals("v1, v2", entry.getHeaders().get("x-cs-variant-uid"));
376+
assertEquals("staging", entry.getHeaders().get("branch"));
377+
}
378+
379+
@Test
380+
public void testVariantsSingleNullBranchDoesNotSetBranchHeader() {
381+
entry.variants("xyz", null);
382+
assertEquals("xyz", entry.getHeaders().get("x-cs-variant-uid"));
383+
assertNull(entry.getHeaders().get("branch"));
384+
}
385+
386+
@Test
387+
public void testVariantsArrayNullBranchDoesNotSetBranchHeader() {
388+
entry.variants(new String[]{"v1", "v2"}, null);
389+
assertEquals("v1, v2", entry.getHeaders().get("x-cs-variant-uid"));
390+
assertNull(entry.getHeaders().get("branch"));
391+
}
392+
393+
@Test
394+
public void testVariantsSingleEmptyBranchDoesNotSetBranchHeader() {
395+
entry.variants("xyz", " ");
396+
assertEquals("xyz", entry.getHeaders().get("x-cs-variant-uid"));
397+
assertNull(entry.getHeaders().get("branch"));
398+
}
399+
356400
// ==================== Locale ====================
357401

358402
@Test

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

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,5 +584,78 @@ public void testLocaleWithDifferentCodes() {
584584
assertNotNull("Query should not be null for locale " + locale, result);
585585
}
586586
}
587+
588+
// ---------------- VARIANTS ----------------
589+
590+
@Test
591+
public void testVariantsSingle() {
592+
Query result = query.variants("variantA");
593+
assertNotNull(result);
594+
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
595+
assertNull(query.getHeaders().get("branch"));
596+
}
597+
598+
@Test
599+
public void testVariantsArray() {
600+
Query result = query.variants(new String[]{"v1", "v2", "v3"});
601+
assertNotNull(result);
602+
assertEquals("v1, v2, v3", query.getHeaders().get("x-cs-variant-uid"));
603+
assertNull(query.getHeaders().get("branch"));
604+
}
605+
606+
@Test
607+
public void testVariantsArrayFiltersNullsAndBlanks() {
608+
query.variants(new String[]{"v1", null, " ", "v2"});
609+
assertEquals("v1, v2", query.getHeaders().get("x-cs-variant-uid"));
610+
}
611+
612+
@Test
613+
public void testVariantsSingleWithBranch() {
614+
Query result = query.variants("variantA", "my-branch");
615+
assertNotNull(result);
616+
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
617+
assertEquals("my-branch", query.getHeaders().get("branch"));
618+
}
619+
620+
@Test
621+
public void testVariantsArrayWithBranch() {
622+
Query result = query.variants(new String[]{"v1", "v2"}, "feature-branch");
623+
assertNotNull(result);
624+
assertEquals("v1, v2", query.getHeaders().get("x-cs-variant-uid"));
625+
assertEquals("feature-branch", query.getHeaders().get("branch"));
626+
}
627+
628+
@Test
629+
public void testVariantsSingleWithNullBranchDoesNotSetBranchHeader() {
630+
query.variants("variantA", null);
631+
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
632+
assertNull(query.getHeaders().get("branch"));
633+
}
634+
635+
@Test
636+
public void testVariantsArrayWithNullBranchDoesNotSetBranchHeader() {
637+
query.variants(new String[]{"v1", "v2"}, null);
638+
assertEquals("v1, v2", query.getHeaders().get("x-cs-variant-uid"));
639+
assertNull(query.getHeaders().get("branch"));
640+
}
641+
642+
@Test
643+
public void testVariantsSingleWithEmptyBranchDoesNotSetBranchHeader() {
644+
query.variants("variantA", " ");
645+
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
646+
assertNull(query.getHeaders().get("branch"));
647+
}
648+
649+
@Test
650+
public void testVariantsNullSingleDoesNotSetHeader() {
651+
query.variants((String) null);
652+
assertNull(query.getHeaders().get("x-cs-variant-uid"));
653+
}
654+
655+
@Test
656+
public void testVariantsEmptyArrayDoesNotSetHeader() {
657+
query.variants(new String[]{});
658+
assertNull(query.getHeaders().get("x-cs-variant-uid"));
659+
}
587660
}
588661

0 commit comments

Comments
 (0)