226 lines
6.6 KiB
Dart
226 lines
6.6 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:platform_driver_rethinkdb/platform_driver_rethinkdb.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
main() {
|
|
RethinkDb r = RethinkDb();
|
|
String? tableName;
|
|
String? testDbName;
|
|
bool shouldDropTable = false;
|
|
Connection? connection;
|
|
|
|
setUpTable() async {
|
|
return await r.table(tableName!).insert([
|
|
{
|
|
'id': 1,
|
|
'name': 'Jane Doe',
|
|
'children': [
|
|
{'id': 1, 'name': 'Robert'},
|
|
{'id': 2, 'name': 'Mariah'}
|
|
]
|
|
},
|
|
{
|
|
'id': 2,
|
|
'name': 'Jon Doe',
|
|
'children': [
|
|
{'id': 1, 'name': 'Louis'}
|
|
],
|
|
'nickname': 'Jo'
|
|
},
|
|
{'id': 3, 'name': 'Firstname Last'}
|
|
]).run(connection!);
|
|
}
|
|
|
|
setUp(() async {
|
|
connection = await r.connect();
|
|
if (testDbName == null) {
|
|
String useDb = await r.uuid().run(connection!);
|
|
testDbName = 'unit_test_db${useDb.replaceAll("-", "")}';
|
|
await r.dbCreate(testDbName!).run(connection!);
|
|
}
|
|
connection!.use(testDbName!);
|
|
if (tableName == null) {
|
|
String tblName = await r.uuid().run(connection!);
|
|
tableName = "test_table_${tblName.replaceAll("-", "")}";
|
|
await r.tableCreate(tableName!).run(connection!);
|
|
}
|
|
await setUpTable();
|
|
});
|
|
|
|
tearDown(() async {
|
|
if (shouldDropTable) {
|
|
shouldDropTable = false;
|
|
await r.tableDrop(tableName!).run(connection!);
|
|
connection!.close();
|
|
} else {
|
|
connection!.close();
|
|
}
|
|
});
|
|
|
|
group("contains command -> ", () {
|
|
test("should check if the table contains an existing child", () async {
|
|
var result = await r
|
|
.table(tableName!)
|
|
.get(1)('children')
|
|
.contains({'id': 1, 'name': 'Robert'}).run(connection!);
|
|
expect(result, equals(true));
|
|
});
|
|
test("should check if the table contains an non existing child", () async {
|
|
var result = await r
|
|
.table(tableName!)
|
|
.get(1)('children')
|
|
.contains({'id': 1, 'name': 'Robert 1'}).run(connection!);
|
|
expect(result, equals(false));
|
|
});
|
|
// TODO: add more tests.
|
|
});
|
|
|
|
group("hasFields command -> ", () {
|
|
test("should use hasFields and return the people who have children",
|
|
() async {
|
|
Cursor parents =
|
|
await r.table(tableName!).hasFields('children').run(connection!);
|
|
//expect(parents is Cursor, equals(true));
|
|
List parentsList = await parents.toList();
|
|
|
|
expect(parentsList.length, equals(2));
|
|
|
|
expect(parentsList[1]['id'], equals(1));
|
|
expect(parentsList[0]['id'], equals(2));
|
|
|
|
expect(parentsList[1]['name'], equals('Jane Doe'));
|
|
expect(parentsList[0]['name'], equals('Jon Doe'));
|
|
});
|
|
test(
|
|
"should use hasFields and return the people who have children and a nickname",
|
|
() async {
|
|
Cursor parentsWithNickname = await r
|
|
.table(tableName!)
|
|
.hasFields('children', 'nickname')
|
|
.run(connection!);
|
|
//expect(parentsWithNickname is Cursor, equals(true));
|
|
List parentsWithNicknameList = await parentsWithNickname.toList();
|
|
|
|
expect(parentsWithNicknameList.length, equals(1));
|
|
|
|
expect(parentsWithNicknameList[0]['id'], equals(2));
|
|
|
|
expect(parentsWithNicknameList[0]['name'], equals('Jon Doe'));
|
|
});
|
|
// TODO: add more tests.
|
|
});
|
|
|
|
group("withFields command -> ", () {
|
|
test(
|
|
"should use withFields and return the children of the people who have them",
|
|
() async {
|
|
Cursor parents =
|
|
await r.table(tableName!).withFields('children').run(connection!);
|
|
//expect(parents is Cursor, equals(true));
|
|
List parentsList = await parents.toList();
|
|
|
|
expect(parentsList.length, equals(2));
|
|
|
|
expect(
|
|
parentsList[1]['children'],
|
|
equals([
|
|
{'id': 1, 'name': 'Robert'},
|
|
{'id': 2, 'name': 'Mariah'}
|
|
]));
|
|
expect(
|
|
parentsList[0]['children'],
|
|
equals([
|
|
{'id': 1, 'name': 'Louis'}
|
|
]));
|
|
});
|
|
test(
|
|
"should use withFields and return the children and the nickname of the people who have them",
|
|
() async {
|
|
Cursor parentsWithNickname = await r
|
|
.table(tableName!)
|
|
.withFields('children', 'nickname')
|
|
.run(connection!);
|
|
//expect(parentsWithNickname is Cursor, equals(true));
|
|
List parentsWithNicknameList = await parentsWithNickname.toList();
|
|
|
|
expect(parentsWithNicknameList.length, equals(1));
|
|
|
|
expect(
|
|
parentsWithNicknameList[0]['children'],
|
|
equals([
|
|
{'id': 1, 'name': 'Louis'}
|
|
]));
|
|
|
|
expect(parentsWithNicknameList[0]['nickname'], equals('Jo'));
|
|
});
|
|
});
|
|
|
|
group("keys command -> ", () {
|
|
test("should return the keys from the person with id equal to 1", () async {
|
|
var personKeys = await r.table(tableName!).get(1).keys().run(connection!);
|
|
expect(personKeys is List, equals(true));
|
|
|
|
expect(personKeys.length, equals(3));
|
|
|
|
expect(personKeys[0], equals("children"));
|
|
expect(personKeys[1], equals("id"));
|
|
expect(personKeys[2], equals("name"));
|
|
});
|
|
});
|
|
|
|
group("values command -> ", () {
|
|
test("should return the values from the person with id equal to 1",
|
|
() async {
|
|
var personValues =
|
|
await r.table(tableName!).get(1).values().run(connection!);
|
|
expect(personValues is List, equals(true));
|
|
|
|
expect(personValues.length, equals(3));
|
|
|
|
expect(
|
|
personValues[0],
|
|
equals([
|
|
{'id': 1, 'name': 'Robert'},
|
|
{'id': 2, 'name': 'Mariah'}
|
|
]));
|
|
expect(personValues[1], equals(1));
|
|
expect(personValues[2], equals('Jane Doe'));
|
|
});
|
|
});
|
|
|
|
group("changes command -> ", () {
|
|
test("should return the changes from the person that is updated", () async {
|
|
Feed feed =
|
|
await r.table(tableName!).changes().run(connection!).asStream().first;
|
|
Timer(Duration(seconds: 1), () async {
|
|
var result = await r
|
|
.table(tableName!)
|
|
.get(1)
|
|
.update({'name': "Marcelo Neppel"}).run(connection!);
|
|
print("result: $result");
|
|
});
|
|
dynamic feedData = await feed.first;
|
|
expect(
|
|
feedData,
|
|
equals({
|
|
'new_val': {
|
|
'children': [
|
|
{'id': 1, 'name': 'Robert'},
|
|
{'id': 2, 'name': 'Mariah'}
|
|
],
|
|
'id': 1,
|
|
'name': 'Marcelo Neppel'
|
|
},
|
|
'old_val': {
|
|
'children': [
|
|
{'id': 1, 'name': 'Robert'},
|
|
{'id': 2, 'name': 'Mariah'}
|
|
],
|
|
'id': 1,
|
|
'name': 'Jane Doe'
|
|
}
|
|
}));
|
|
});
|
|
});
|
|
}
|