Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions contentstack/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ android {
buildConfigField "String", "variantUID", getPropertyOrEmpty('variantUID')
buildConfigField "String", "variantEntryUID", getPropertyOrEmpty('variantEntryUID')
buildConfigField "String[]", "variantsUID", variantsAsArrayString
buildConfigField "String", "variantBranch", getPropertyOrEmpty('variantBranch')
}
release {
minifyEnabled false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class EntryTestCase {
private static String variantUID = BuildConfig.variantUID;
private static String variantEntryUID = BuildConfig.variantEntryUID;
private static String[] variantsUID = BuildConfig.variantsUID;
private static String variantBranch = BuildConfig.variantBranch;


@BeforeClass
Expand Down Expand Up @@ -373,4 +374,32 @@ public void onCompletion(ResponseType responseType, Error error) {
latch.await();
}

@Test
public void VariantsTestSingleUidWithBranch() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(1);
final Entry entry = stack.contentType("product").entry(variantEntryUID).variants(variantUID, variantBranch);
entry.fetch(new EntryResultCallBack() {
@Override
public void onCompletion(ResponseType responseType, Error error) {
System.out.println(entry.toJSON());
latch.countDown();
}
});
latch.await();
}

@Test
public void VariantsTestArrayWithBranch() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(1);
final Entry entry = stack.contentType("product").entry(variantEntryUID).variants(variantsUID, variantBranch);
entry.fetch(new EntryResultCallBack() {
@Override
public void onCompletion(ResponseType responseType, Error error) {
System.out.println(entry.toJSON());
latch.countDown();
}
});
latch.await();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ public class QueryTestCase {

private static final String TAG = AssetTestCase.class.getSimpleName();
private static final String contentTypeUID = BuildConfig.contentTypeUID;
private static final String variantUID = BuildConfig.variantUID;
private static final String[] variantsUID = BuildConfig.variantsUID;
private static final String variantBranch = BuildConfig.variantBranch;
private static Query query;

static {
Expand Down Expand Up @@ -116,4 +119,56 @@ public void onCompletion(ResponseType responseType, QueryResult queryresult, Err
});
}

@Test
public void test_42_variants_single_uid_find() throws Exception {
final Query q = TestCred.stack().contentType(contentTypeUID).query();
q.variants(variantUID).find(new QueryResultsCallBack() {
@Override
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
if (error == null) {
Log.d(TAG, "variants single find: " + queryresult.getResultObjects().size() + " entries");
}
}
});
}

@Test
public void test_43_variants_array_find() throws Exception {
final Query q = TestCred.stack().contentType(contentTypeUID).query();
q.variants(variantsUID).find(new QueryResultsCallBack() {
@Override
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
if (error == null) {
Log.d(TAG, "variants array find: " + queryresult.getResultObjects().size() + " entries");
}
}
});
}

@Test
public void test_44_variants_single_uid_with_branch_find() throws Exception {
final Query q = TestCred.stack().contentType(contentTypeUID).query();
q.variants(variantUID, variantBranch).find(new QueryResultsCallBack() {
@Override
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
if (error == null) {
Log.d(TAG, "variants single+branch find: " + queryresult.getResultObjects().size() + " entries");
}
}
});
}

@Test
public void test_45_variants_array_with_branch_find() throws Exception {
final Query q = TestCred.stack().contentType(contentTypeUID).query();
q.variants(variantsUID, variantBranch).find(new QueryResultsCallBack() {
@Override
public void onCompletion(ResponseType responseType, QueryResult queryresult, Error error) {
if (error == null) {
Log.d(TAG, "variants array+branch find: " + queryresult.getResultObjects().size() + " entries");
}
}
});
}

}
32 changes: 32 additions & 0 deletions contentstack/src/main/java/com/contentstack/sdk/Entry.java
Original file line number Diff line number Diff line change
Expand Up @@ -1551,6 +1551,38 @@ public Entry variants(String[] variants){
}
return this;
}

/**
* Sets the variant UID and scopes the request to the given branch.
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
*
* @param variantUid single variant UID
* @param branch branch name to scope the request
* @return {@link Entry}
*/
public Entry variants(String variantUid, String branch) {
variants(variantUid);
if (branch != null && !branch.trim().isEmpty()) {
this.localHeader.put("branch", branch.trim());
}
return this;
}

/**
* Sets multiple variant UIDs and scopes the request to the given branch.
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
*
* @param variantUids array of variant UIDs
* @param branch branch name to scope the request
* @return {@link Entry}
*/
public Entry variants(String[] variantUids, String branch) {
variants(variantUids);
if (branch != null && !branch.trim().isEmpty()) {
this.localHeader.put("branch", branch.trim());
}
return this;
}
public ArrayMap<String, Object> getHeaders() {
return localHeader;
}
Expand Down
70 changes: 70 additions & 0 deletions contentstack/src/main/java/com/contentstack/sdk/Query.java
Original file line number Diff line number Diff line change
Expand Up @@ -2025,5 +2025,75 @@ public Query includeMetadata() {
return this;
}

/**
* Sets the variant UID for this query via the {@code x-cs-variant-uid} request header.
*
* @param variantUid single variant UID
* @return {@link Query}
*/
public Query variants(String variantUid) {
if (variantUid != null && !variantUid.trim().isEmpty()) {
localHeader.put("x-cs-variant-uid", variantUid.trim());
}
return this;
}

/**
* Sets multiple variant UIDs for this query via the {@code x-cs-variant-uid} request header.
*
* @param variantUids array of variant UIDs
* @return {@link Query}
*/
public Query variants(String[] variantUids) {
if (variantUids != null && variantUids.length > 0) {
List<String> variantList = new ArrayList<>();
for (String variant : variantUids) {
if (variant != null && !variant.trim().isEmpty()) {
variantList.add(variant.trim());
}
}
if (!variantList.isEmpty()) {
localHeader.put("x-cs-variant-uid", String.join(", ", variantList));
}
}
return this;
}

/**
* Sets the variant UID and scopes the query to the given branch.
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
*
* @param variantUid single variant UID
* @param branch branch name to scope the request
* @return {@link Query}
*/
public Query variants(String variantUid, String branch) {
variants(variantUid);
if (branch != null && !branch.trim().isEmpty()) {
localHeader.put("branch", branch.trim());
}
return this;
}

/**
* Sets multiple variant UIDs and scopes the query to the given branch.
* Sets {@code x-cs-variant-uid} and {@code branch} request headers.
*
* @param variantUids array of variant UIDs
* @param branch branch name to scope the request
* @return {@link Query}
*/
public Query variants(String[] variantUids, String branch) {
variants(variantUids);
if (branch != null && !branch.trim().isEmpty()) {
localHeader.put("branch", branch.trim());
}
return this;
}

public ArrayMap<String, Object> getHeaders() {
return localHeader;
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,50 @@ public void testVariantsArrayNull() {
assertNotNull(result);
}

@Test
public void testVariantsSingleWithBranch() {
Entry result = entry.variants("xyz", "branch_name");
assertNotNull(result);
assertEquals("xyz", entry.getHeaders().get("x-cs-variant-uid"));
assertEquals("branch_name", entry.getHeaders().get("branch"));
}

@Test
public void testVariantsArrayWithBranch() {
Entry result = entry.variants(new String[]{"variant1", "variant2"}, "branch_name");
assertNotNull(result);
assertEquals("variant1, variant2", entry.getHeaders().get("x-cs-variant-uid"));
assertEquals("branch_name", entry.getHeaders().get("branch"));
}

@Test
public void testVariantsArrayWithBranchFiltersNullsAndBlanks() {
entry.variants(new String[]{"v1", null, " ", "v2"}, "staging");
assertEquals("v1, v2", entry.getHeaders().get("x-cs-variant-uid"));
assertEquals("staging", entry.getHeaders().get("branch"));
}

@Test
public void testVariantsSingleNullBranchDoesNotSetBranchHeader() {
entry.variants("xyz", null);
assertEquals("xyz", entry.getHeaders().get("x-cs-variant-uid"));
assertNull(entry.getHeaders().get("branch"));
}

@Test
public void testVariantsArrayNullBranchDoesNotSetBranchHeader() {
entry.variants(new String[]{"v1", "v2"}, null);
assertEquals("v1, v2", entry.getHeaders().get("x-cs-variant-uid"));
assertNull(entry.getHeaders().get("branch"));
}

@Test
public void testVariantsSingleEmptyBranchDoesNotSetBranchHeader() {
entry.variants("xyz", " ");
assertEquals("xyz", entry.getHeaders().get("x-cs-variant-uid"));
assertNull(entry.getHeaders().get("branch"));
}

// ==================== Locale ====================

@Test
Expand Down
73 changes: 73 additions & 0 deletions contentstack/src/test/java/com/contentstack/sdk/TestQuery.java
Original file line number Diff line number Diff line change
Expand Up @@ -584,5 +584,78 @@ public void testLocaleWithDifferentCodes() {
assertNotNull("Query should not be null for locale " + locale, result);
}
}

// ---------------- VARIANTS ----------------

@Test
public void testVariantsSingle() {
Query result = query.variants("variantA");
assertNotNull(result);
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
assertNull(query.getHeaders().get("branch"));
}

@Test
public void testVariantsArray() {
Query result = query.variants(new String[]{"v1", "v2", "v3"});
assertNotNull(result);
assertEquals("v1, v2, v3", query.getHeaders().get("x-cs-variant-uid"));
assertNull(query.getHeaders().get("branch"));
}

@Test
public void testVariantsArrayFiltersNullsAndBlanks() {
query.variants(new String[]{"v1", null, " ", "v2"});
assertEquals("v1, v2", query.getHeaders().get("x-cs-variant-uid"));
}

@Test
public void testVariantsSingleWithBranch() {
Query result = query.variants("variantA", "my-branch");
assertNotNull(result);
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
assertEquals("my-branch", query.getHeaders().get("branch"));
}

@Test
public void testVariantsArrayWithBranch() {
Query result = query.variants(new String[]{"v1", "v2"}, "feature-branch");
assertNotNull(result);
assertEquals("v1, v2", query.getHeaders().get("x-cs-variant-uid"));
assertEquals("feature-branch", query.getHeaders().get("branch"));
}

@Test
public void testVariantsSingleWithNullBranchDoesNotSetBranchHeader() {
query.variants("variantA", null);
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
assertNull(query.getHeaders().get("branch"));
}

@Test
public void testVariantsArrayWithNullBranchDoesNotSetBranchHeader() {
query.variants(new String[]{"v1", "v2"}, null);
assertEquals("v1, v2", query.getHeaders().get("x-cs-variant-uid"));
assertNull(query.getHeaders().get("branch"));
}

@Test
public void testVariantsSingleWithEmptyBranchDoesNotSetBranchHeader() {
query.variants("variantA", " ");
assertEquals("variantA", query.getHeaders().get("x-cs-variant-uid"));
assertNull(query.getHeaders().get("branch"));
}

@Test
public void testVariantsNullSingleDoesNotSetHeader() {
query.variants((String) null);
assertNull(query.getHeaders().get("x-cs-variant-uid"));
}

@Test
public void testVariantsEmptyArrayDoesNotSetHeader() {
query.variants(new String[]{});
assertNull(query.getHeaders().get("x-cs-variant-uid"));
}
}

Loading