blob: 30142eeaba7b8bfe172b2351ac6ac3b360699e78 [file] [log] [blame]
// Copyright 2020 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:cocoon_service/src/model/firestore/github_gold_status.dart';
import 'package:cocoon_service/src/service/access_client_provider.dart';
import 'package:cocoon_service/src/service/firestore.dart';
import 'package:googleapis/firestore/v1.dart';
import 'package:test/test.dart';
import '../src/utilities/entity_generators.dart';
void main() {
test('creates writes correctly from documents', () async {
final List<Document> documents = <Document>[
Document(name: 'd1', fields: <String, Value>{'key1': Value(stringValue: 'value1')}),
Document(name: 'd2', fields: <String, Value>{'key1': Value(stringValue: 'value2')}),
];
final List<Write> writes = documentsToWrites(documents, exists: false);
expect(writes.length, documents.length);
expect(writes[0].update, documents[0]);
expect(writes[0].currentDocument!.exists, false);
});
group('getValueFromFilter', () {
final FirestoreService firestoreService = FirestoreService(AccessClientProvider());
test('int object', () async {
const Object intValue = 1;
expect(firestoreService.getValueFromFilter(intValue).integerValue, '1');
});
test('string object', () async {
const Object stringValue = 'string';
expect(firestoreService.getValueFromFilter(stringValue).stringValue, 'string');
});
test('bool object', () async {
const Object boolValue = true;
expect(firestoreService.getValueFromFilter(boolValue).booleanValue, true);
});
});
group('generateFilter', () {
final FirestoreService firestoreService = FirestoreService(AccessClientProvider());
test('a composite filter with a single field filter', () async {
final Map<String, Object> filterMap = <String, Object>{
'intField =': 1,
};
const String compositeFilterOp = kCompositeFilterOpAnd;
final Filter filter = firestoreService.generateFilter(filterMap, compositeFilterOp);
expect(filter.compositeFilter, isNotNull);
final List<Filter> filters = filter.compositeFilter!.filters!;
expect(filters.length, 1);
expect(filters[0].fieldFilter!.field!.fieldPath, 'intField');
expect(filters[0].fieldFilter!.value!.integerValue, '1');
expect(filters[0].fieldFilter!.op, kFieldFilterOpEqual);
});
test('a composite filter with multiple field filters', () async {
final Map<String, Object> filterMap = <String, Object>{
'intField =': 1,
'stringField =': 'string',
};
const String compositeFilterOp = kCompositeFilterOpAnd;
final Filter filter = firestoreService.generateFilter(filterMap, compositeFilterOp);
expect(filter.fieldFilter, isNull);
expect(filter.compositeFilter, isNotNull);
final List<Filter> filters = filter.compositeFilter!.filters!;
expect(filters.length, 2);
expect(filters[0].fieldFilter!.field!.fieldPath, 'intField');
expect(filters[0].fieldFilter!.value!.integerValue, '1');
expect(filters[0].fieldFilter!.op, kFieldFilterOpEqual);
expect(filters[1].fieldFilter!.field!.fieldPath, 'stringField');
expect(filters[1].fieldFilter!.value!.stringValue, 'string');
expect(filters[1].fieldFilter!.op, kFieldFilterOpEqual);
});
});
group('documentsFromQueryResponse', () {
final FirestoreService firestoreService = FirestoreService(AccessClientProvider());
late List<RunQueryResponseElement> runQueryResponseElements;
test('when null document returns', () async {
runQueryResponseElements = <RunQueryResponseElement>[
RunQueryResponseElement(),
];
final List<Document> documents = firestoreService.documentsFromQueryResponse(runQueryResponseElements);
expect(documents.isEmpty, true);
});
test('when non-null document returns', () async {
final GithubGoldStatus githubGoldStatus = generateFirestoreGithubGoldStatus(1);
runQueryResponseElements = <RunQueryResponseElement>[
RunQueryResponseElement(document: githubGoldStatus),
];
final List<Document> documents = firestoreService.documentsFromQueryResponse(runQueryResponseElements);
expect(documents.length, 1);
expect(documents[0].name, githubGoldStatus.name);
});
});
group('generateOrders', () {
final FirestoreService firestoreService = FirestoreService(AccessClientProvider());
Map<String, String>? orderMap;
test('when there is no orderMap', () async {
orderMap = null;
final List<Order>? orders = firestoreService.generateOrders(orderMap);
expect(orders, isNull);
});
test('when there is non-null orderMap', () async {
orderMap = <String, String>{'createTimestamp': kQueryOrderDescending};
final List<Order>? orders = firestoreService.generateOrders(orderMap);
expect(orders!.length, 1);
final Order resultOrder = orders[0];
expect(resultOrder.direction, kQueryOrderDescending);
expect(resultOrder.field!.fieldPath, 'createTimestamp');
});
});
}