package digitalwallet;
import com.google.common.base.Preconditions;
import com.urbanairship.digitalwallet.client.Pass;
import com.urbanairship.digitalwallet.client.PassTools;
import com.urbanairship.digitalwallet.client.Tag;
import com.urbanairship.digitalwallet.client.Template;
import org.apache.commons.lang.RandomStringUtils;
import org.json.simple.JSONObject;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class TagTest extends BaseIntegrationTest {
private Long templateId = null;
private boolean initDone = false;
private String randomTag;
private Pass pass = null;
@BeforeSuite
public void init() {
initSettings();
if (integrationTesting) {
PassTools.apiKey = apiKey;
PassTools.API_BASE = apiBase;
randomTag = genRandomString();
templateId = TestData.createTemplate(genRandomString(), true);
if (templateId == 0) {
return;
}
Map fields = TestData.getCreatePassFields();
pass = Pass.create(templateId, genRandomString(), fields);
if (pass == null || pass.getPassId() == null) {
return;
}
List<String> tags = Pass.addTag(pass.getPassId(), randomTag);
initDone = true;
}
}
@AfterClass
public void cleanup() {
try {
if (templateId != null) {
Template.delete(templateId);
}
if (pass.getPassId() != null) {
Pass.delete(pass.getPassId());
}
Tag.deleteTag(randomTag);
} catch (Exception e) {
}
}
private String genRandomTag() {
Random r = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 8; i++) {
char c = (char) r.nextInt(128);
sb.append(c);
}
return sb.toString();
}
private String genRandomString() {
return RandomStringUtils.randomAlphanumeric(8);
}
@org.testng.annotations.Test(priority = 1)
public void listTagsTest() {
if (!integrationTesting) {
return;
}
Preconditions.checkArgument(initDone);
boolean done = false;
int page = 0;
while (!done) {
List<Tag> tags = Tag.getList(pageSize, page);
if (tags != null && tags.size() > 0 && page < maxPages) {
page++;
for (Tag current : tags) {
Tag.getPasses(current.getTag(), 20, 1);
}
} else {
done = true;
}
}
}
@Test(priority = 2)
public void getPassesTest() {
if (!integrationTesting) {
return;
}
Preconditions.checkArgument(initDone);
List<Pass> passes = Tag.getPasses(randomTag, 20, 1);
if (passes == null || passes.size() == 0) {
assert false;
}
Boolean found = false;
for (Pass p : passes) {
if (p.getPassId().equals(pass.getPassId())) {
found = true;
break;
}
}
assert found.equals(true);
}
@Test(priority = 3)
public void updatePassesTest() {
if (!integrationTesting) {
return;
}
Preconditions.checkArgument(initDone);
Map<String, Object> updateFields = TestData.getUpdatePassFields();
Long ticketId = Tag.updatePasses(randomTag, updateFields);
if (ticketId == null) {
assert false;
}
try {
Thread.sleep(5000);
} catch (Exception e) {
assert false;
}
Pass p = Pass.get(pass.getPassId());
Map fields = p.getFields();
if (fields == null) {
assert false;
}
}
@Test(priority = 99)
public void deleteTagTest() {
if (!integrationTesting) {
return;
}
Preconditions.checkArgument(initDone);
JSONObject o = Tag.deleteTag(randomTag);
Object s = o.get("success");
assert s != null;
assert s instanceof String;
assert "success".equalsIgnoreCase((String) s);
}
@Test(priority = 100)
public void removeFromPassesTest() {
if (!integrationTesting) {
return;
}
Preconditions.checkArgument(initDone);
Map fields = TestData.getCreatePassFields();
Pass pass1 = Pass.create(templateId, fields);
if (pass1 == null || pass1.getPassId() == null) {
return;
}
String lRandomTag = genRandomString();
List<String> tags = Pass.addTag(pass1.getPassId(), lRandomTag);
Tag.removeFromPasses(lRandomTag);
List<Pass> passes = Tag.getPasses(lRandomTag, 20, 1);
if (passes == null || passes.size() == 0) {
assert true;
} else {
assert false;
}
}
@Test(priority = 97)
public void removeFromPassTest() {
if (!integrationTesting) {
return;
}
Preconditions.checkArgument(initDone);
JSONObject o = Tag.removeFromPass(randomTag, pass.getPassId());
Object s = o.get("success");
assert s != null;
assert s instanceof String;
assert "success".equalsIgnoreCase((String) s);
}
@Test(priority = 98)
public void removeFromPassXTest() {
if (!integrationTesting) {
return;
}
Preconditions.checkArgument(initDone);
Map fields = TestData.getCreatePassFields();
String lExternalId = genRandomString();
Pass pass1 = Pass.create(templateId, lExternalId, fields);
if (pass1 == null || pass1.getPassId() == null) {
return;
}
String lRandomTag = genRandomString();
List<String> tags = Pass.addTag(pass1.getPassId(), lRandomTag);
JSONObject o = Tag.removeFromPass(lRandomTag, lExternalId);
Object s = o.get("success");
assert s != null;
assert s instanceof String;
assert "success".equalsIgnoreCase((String) s);
}
private void assertEquals(Tag t1, Tag t2) {
assert t1 != null;
assert t2 != null;
assert t1.getId().equals(t2.getId());
assert t1.getTag().equals(t2.getTag());
}
}