use of com.google.firebase.firestore.conformance.model.Collection in project firebase-android-sdk by firebase.
the class ConformanceTest method executeTestCases.
private void executeTestCases(TestCase testCase, ConformanceRuntime runtime) throws Exception {
// Note: This method is copied from Google3 and modified to match the Android API.
TestCollection testCollection;
TestDocument testDocument;
for (Collection collection : testCase.getCollections()) {
testCollection = runtime.addInitialCollectionWithPath(collection.getName());
for (Document document : collection.getDocuments()) {
testDocument = testCollection.addDocumentWithId(getId(document));
for (Map.Entry<String, Value> field : document.getFieldsMap().entrySet()) {
testDocument.putField(field.getKey(), decodeValue(firestore, field.getValue()));
}
}
if (testCase.getException()) {
runtime.expectException();
} else {
Result result = testCase.getResult();
for (Document document : result.getDocuments()) {
testDocument = runtime.addExpectedDocumentWithId(getId(document));
for (Map.Entry<String, Value> field : document.getFieldsMap().entrySet()) {
testDocument.putField(field.getKey(), decodeValue(firestore, field.getValue()));
}
}
}
try {
runtime.setup();
try {
Query query = runtime.createQueryAtPath(testCase.getQuery().getCollection());
for (QueryFilter filter : testCase.getQuery().getFilters()) {
Where where = filter.getWhere();
if (where != null) {
switch(where.getOp()) {
case LESS_THAN:
query = query.whereLessThan(formatFieldPath(where.getField()), decodeValue(firestore, where.getValue()));
break;
case LESS_THAN_OR_EQUAL:
query = query.whereLessThanOrEqualTo(formatFieldPath(where.getField()), decodeValue(firestore, where.getValue()));
break;
case GREATER_THAN:
query = query.whereGreaterThan(formatFieldPath(where.getField()), decodeValue(firestore, where.getValue()));
break;
case GREATER_THAN_OR_EQUAL:
query = query.whereGreaterThanOrEqualTo(formatFieldPath(where.getField()), decodeValue(firestore, where.getValue()));
break;
case EQUAL:
query = query.whereEqualTo(formatFieldPath(where.getField()), decodeValue(firestore, where.getValue()));
break;
case NOT_EQUAL:
query = query.whereNotEqualTo(formatFieldPath(where.getField()), decodeValue(firestore, where.getValue()));
break;
case ARRAY_CONTAINS:
query = query.whereArrayContains(formatFieldPath(where.getField()), decodeValue(firestore, where.getValue()));
break;
case IN:
query = query.whereIn(formatFieldPath(where.getField()), Collections.singletonList(decodeValue(firestore, where.getValue())));
break;
case ARRAY_CONTAINS_ANY:
query = query.whereArrayContainsAny(formatFieldPath(where.getField()), Collections.singletonList(decodeValue(firestore, where.getValue())));
break;
case NOT_IN:
query = query.whereNotIn(formatFieldPath(where.getField()), Collections.singletonList(decodeValue(firestore, where.getValue())));
break;
default:
throw new Exception("Unexpected operation: " + where.getOp());
}
}
Order order = filter.getOrder();
if (order != null) {
query = query.orderBy(formatFieldPath(order.getField()), order.getDirection().equals(StructuredQuery.Direction.ASCENDING) ? Query.Direction.ASCENDING : Query.Direction.DESCENDING);
}
Value startAt = filter.getStartAt();
if (startAt != null) {
query = query.startAt(decodeValue(firestore, startAt));
}
Value startAfter = filter.getStartAfter();
if (startAfter != null) {
query = query.startAfter(decodeValue(firestore, startAfter));
}
Value endBefore = filter.getEndBefore();
if (endBefore != null) {
query = query.endBefore(decodeValue(firestore, endBefore));
}
Value endAt = filter.getEndAt();
if (endAt != null) {
query = query.endAt(decodeValue(firestore, endAt));
}
Long limit = filter.getLimit();
if (limit != null && limit > 0) {
query = query.limit(limit);
}
}
runtime.runQuery(query);
} catch (RuntimeException | AssertionError x) {
runtime.checkQueryError(x);
}
} finally {
runtime.teardown();
}
}
}
use of com.google.firebase.firestore.conformance.model.Collection in project firebase-android-sdk by firebase.
the class TestCaseConverter method convertTestCases.
public List<TestCase> convertTestCases(DatastoreTestTrace.TestTrace trace) {
List<TestCase> testCases = new ArrayList<>();
for (DatastoreTestTrace.DatastoreAction action : trace.getActionList()) {
if (actionFilter.test(action)) {
TestCase.Builder builder = TestCase.Builder.builder();
DatastoreTestTrace.FirestoreV1Action firestoreAction = action.getFirestoreV1Action();
List<Collection> collections = convertDatabaseContents(firestoreAction);
StructuredQuery queryProto = firestoreAction.getRunQuery().getRequest().getStructuredQuery();
String parentPath = ResourcePath.fromString(firestoreAction.getRunQuery().getRequest().getParent()).popFirst(5).toString();
Query query = convertQuery(queryProto, parentPath);
// Add query collection to contents if there are no pre-existing documents.
if (collections.isEmpty()) {
collections.add(Collection.Builder.builder().setName(query.getCollection()).build());
}
builder.setCollections(collections);
builder.setQuery(query);
// Convert results.
builder.setException(firestoreAction.hasStatus());
if (!firestoreAction.hasStatus()) {
Result.Builder result = Result.Builder.builder();
List<RunQueryResponse> responses = firestoreAction.getRunQuery().getResponseList();
result.setDocuments(responses.stream().filter(r -> r.hasDocument()).map(r -> r.getDocument()).collect(Collectors.toList()));
builder.setResult(result.build());
}
builder.setName(String.format("%s_%d", trace.getTraceId(), action.getActionId()));
testCases.add(builder.build());
}
}
return testCases;
}
use of com.google.firebase.firestore.conformance.model.Collection in project firebase-android-sdk by firebase.
the class TestCaseConverter method convertDatabaseContents.
private List<Collection> convertDatabaseContents(DatastoreTestTrace.FirestoreV1Action action) {
LinkedHashMap<String, List<Document>> collections = new LinkedHashMap<>();
List<RunQueryResponse> responses = action.getDatabaseContentsBeforeAction().getResponseList();
for (RunQueryResponse response : responses) {
if (response.hasDocument()) {
Document document = response.getDocument();
DocumentKey documentKey = DocumentKey.fromName(document.getName());
String collectionId = documentKey.getCollectionGroup();
List<Document> documents = collections.computeIfAbsent(collectionId, name -> new ArrayList<>());
documents.add(document);
}
}
return collections.entrySet().stream().map(entry -> Collection.Builder.builder().setName(entry.getKey()).setDocuments(entry.getValue()).build()).collect(Collectors.toList());
}
Aggregations