Published mongo
This commit is contained in:
parent
bba3948a2b
commit
3adf9d62bc
8 changed files with 98 additions and 105 deletions
|
@ -1,16 +1,18 @@
|
||||||
# angel_mongo
|
# angel3_mongo
|
||||||
|
[![version](https://img.shields.io/badge/pub-v3.0.0-brightgreen)](https://pub.dartlang.org/packages/angel3_mongo)
|
||||||
|
[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)
|
||||||
|
[![Gitter](https://img.shields.io/gitter/room/angel_dart/discussion)](https://gitter.im/angel_dart/discussion)
|
||||||
|
|
||||||
[![Pub](https://img.shields.io/pub/v/angel_mongo.svg)](https://pub.dartlang.org/packages/angel_mongo)
|
[![License](https://img.shields.io/github/license/dukefirehawk/angel)](https://github.com/dukefirehawk/angel/tree/angel3/packages/mongo/LICENSE)
|
||||||
[![build status](https://travis-ci.org/angel-dart/mongo.svg)](https://travis-ci.org/angel-dart/mongo)
|
|
||||||
|
|
||||||
MongoDB-enabled services for the Angel framework.
|
MongoDB-enabled services for the Angel3 framework.
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
Add the following to your `pubspec.yaml`:
|
Add the following to your `pubspec.yaml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
dependencies:
|
dependencies:
|
||||||
angel_mongo: ^2.0.0
|
angel3_mongo: ^3.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
@ -26,11 +28,11 @@ class User extends Model {
|
||||||
String password;
|
String password;
|
||||||
}
|
}
|
||||||
|
|
||||||
main() async {
|
void main() async {
|
||||||
var db = new Db('mongodb://localhost:27017/local');
|
var db = Db('mongodb://localhost:27017/local');
|
||||||
await db.open();
|
await db.open();
|
||||||
|
|
||||||
var service = app.use('/api/users', new MongoService(db.collection("users")));
|
var service = app.use('/api/users', MongoService(db.collection("users")));
|
||||||
|
|
||||||
service.afterCreated.listen((event) {
|
service.afterCreated.listen((event) {
|
||||||
print("New user: ${event.result}");
|
print("New user: ${event.result}");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:angel_framework/angel_framework.dart';
|
import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'package:angel_mongo/angel_mongo.dart';
|
import 'package:angel3_mongo/angel3_mongo.dart';
|
||||||
import 'package:mongo_dart/mongo_dart.dart';
|
import 'package:mongo_dart/mongo_dart.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
library angel_mongo;
|
library angel3_mongo;
|
||||||
|
|
||||||
export 'services.dart';
|
export 'services.dart';
|
|
@ -1,14 +1,14 @@
|
||||||
library angel_mongo.model;
|
library angel3_mongo.model;
|
||||||
|
|
||||||
/// Use the `Model` class defined in `package:angel_framework/common.dart` instead.
|
/// Use the `Model` class defined in `package:angel_framework/common.dart` instead.
|
||||||
@deprecated
|
@deprecated
|
||||||
class Model {
|
class Model {
|
||||||
/// This instance's ID.
|
/// This instance's ID.
|
||||||
String id;
|
String? id;
|
||||||
|
|
||||||
/// The time at which this instance was created.
|
/// The time at which this instance was created.
|
||||||
DateTime createdAt;
|
DateTime? createdAt;
|
||||||
|
|
||||||
/// The time at which this instance was last updated.
|
/// The time at which this instance was last updated.
|
||||||
DateTime updatedAt;
|
DateTime? updatedAt;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
part of angel_mongo.services;
|
part of angel3_mongo.services;
|
||||||
|
|
||||||
/// Manipulates data from MongoDB as Maps.
|
/// Manipulates data from MongoDB as Maps.
|
||||||
class MongoService extends Service<String, Map<String, dynamic>> {
|
class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
@ -20,14 +20,14 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
{this.allowRemoveAll = false, this.allowQuery = true, this.debug = true})
|
{this.allowRemoveAll = false, this.allowQuery = true, this.debug = true})
|
||||||
: super();
|
: super();
|
||||||
|
|
||||||
SelectorBuilder _makeQuery([Map<String, dynamic> params_]) {
|
SelectorBuilder? _makeQuery([Map<String, dynamic>? params_]) {
|
||||||
var params = Map.from(params_ ?? {});
|
var params = Map.from(params_ ?? {});
|
||||||
params = params..remove('provider');
|
params = params..remove('provider');
|
||||||
var result = where.exists('_id');
|
var result = where.exists('_id');
|
||||||
|
|
||||||
// You can pass a SelectorBuilder as 'query';
|
// You can pass a SelectorBuilder as 'query';
|
||||||
if (params['query'] is SelectorBuilder) {
|
if (params['query'] is SelectorBuilder) {
|
||||||
return params['query'] as SelectorBuilder;
|
return params['query'] as SelectorBuilder?;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var key in params.keys) {
|
for (var key in params.keys) {
|
||||||
|
@ -54,7 +54,7 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
}
|
}
|
||||||
} else if (key == 'query' &&
|
} else if (key == 'query' &&
|
||||||
(allowQuery == true || !params.containsKey('provider'))) {
|
(allowQuery == true || !params.containsKey('provider'))) {
|
||||||
var query = params[key] as Map;
|
var query = params[key] as Map?;
|
||||||
query?.forEach((key, v) {
|
query?.forEach((key, v) {
|
||||||
var value = v is Map<String, dynamic> ? _filterNoQuery(v) : v;
|
var value = v is Map<String, dynamic> ? _filterNoQuery(v) : v;
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> _jsonify(Map<String, dynamic> doc,
|
Map<String, dynamic> _jsonify(Map<String, dynamic> doc,
|
||||||
[Map<String, dynamic> params]) {
|
[Map<String, dynamic>? params]) {
|
||||||
var result = <String, dynamic>{};
|
var result = <String, dynamic>{};
|
||||||
|
|
||||||
for (var key in doc.keys) {
|
for (var key in doc.keys) {
|
||||||
|
@ -88,7 +88,7 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<Map<String, dynamic>>> index(
|
Future<List<Map<String, dynamic>>> index(
|
||||||
[Map<String, dynamic> params]) async {
|
[Map<String, dynamic>? params]) async {
|
||||||
return await (collection.find(_makeQuery(params)))
|
return await (collection.find(_makeQuery(params)))
|
||||||
.map((x) => _jsonify(x, params))
|
.map((x) => _jsonify(x, params))
|
||||||
.toList();
|
.toList();
|
||||||
|
@ -98,16 +98,16 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Map<String, dynamic>> create(Map<String, dynamic> data,
|
Future<Map<String, dynamic>> create(Map<String, dynamic> data,
|
||||||
[Map<String, dynamic> params]) async {
|
[Map<String, dynamic>? params]) async {
|
||||||
var item = _removeSensitive(data);
|
var item = _removeSensitive(data);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var nonce = (await collection.db.getNonce())['nonce'] as String;
|
var nonce = (await collection.db.getNonce())['nonce'] as String?;
|
||||||
var result = await collection.findAndModify(
|
var result = await (collection.findAndModify(
|
||||||
query: where.eq(_NONCE_KEY, nonce),
|
query: where.eq(_NONCE_KEY, nonce),
|
||||||
update: item,
|
update: item,
|
||||||
returnNew: true,
|
returnNew: true,
|
||||||
upsert: true);
|
upsert: true) as FutureOr<Map<String, dynamic>>);
|
||||||
return _jsonify(result);
|
return _jsonify(result);
|
||||||
} catch (e, st) {
|
} catch (e, st) {
|
||||||
throw AngelHttpException(e, stackTrace: st);
|
throw AngelHttpException(e, stackTrace: st);
|
||||||
|
@ -116,7 +116,7 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Map<String, dynamic>> findOne(
|
Future<Map<String, dynamic>> findOne(
|
||||||
[Map<String, dynamic> params,
|
[Map<String, dynamic>? params,
|
||||||
String errorMessage =
|
String errorMessage =
|
||||||
'No record was found matching the given query.']) async {
|
'No record was found matching the given query.']) async {
|
||||||
var found = await collection.findOne(_makeQuery(params));
|
var found = await collection.findOne(_makeQuery(params));
|
||||||
|
@ -130,9 +130,10 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Map<String, dynamic>> read(String id,
|
Future<Map<String, dynamic>> read(String id,
|
||||||
[Map<String, dynamic> params]) async {
|
[Map<String, dynamic>? params]) async {
|
||||||
var _id = _makeId(id);
|
var _id = _makeId(id);
|
||||||
var found = await collection.findOne(where.id(_id).and(_makeQuery(params)));
|
var found =
|
||||||
|
await collection.findOne(where.id(_id).and(_makeQuery(params)!));
|
||||||
|
|
||||||
if (found == null) {
|
if (found == null) {
|
||||||
throw AngelHttpException.notFound(
|
throw AngelHttpException.notFound(
|
||||||
|
@ -144,15 +145,15 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<Map<String, dynamic>>> readMany(List<String> ids,
|
Future<List<Map<String, dynamic>>> readMany(List<String> ids,
|
||||||
[Map<String, dynamic> params]) async {
|
[Map<String, dynamic>? params]) async {
|
||||||
var q = _makeQuery(params);
|
var q = _makeQuery(params);
|
||||||
q = ids.fold(q, (q, id) => q.or(where.id(_makeId(id))));
|
q = ids.fold(q, (q, id) => q!.or(where.id(_makeId(id))));
|
||||||
return await (collection.find(q)).map((x) => _jsonify(x, params)).toList();
|
return await (collection.find(q)).map((x) => _jsonify(x, params)).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Map<String, dynamic>> modify(String id, data,
|
Future<Map<String, dynamic>> modify(String id, data,
|
||||||
[Map<String, dynamic> params]) async {
|
[Map<String, dynamic>? params]) async {
|
||||||
Map<String, dynamic> target;
|
Map<String, dynamic> target;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -169,8 +170,10 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
//result['updatedAt'] = new DateTime.now().toIso8601String();
|
//result['updatedAt'] = new DateTime.now().toIso8601String();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var modified = await collection.findAndModify(
|
var modified = await (collection.findAndModify(
|
||||||
query: where.id(_makeId(id)), update: result, returnNew: true);
|
query: where.id(_makeId(id)),
|
||||||
|
update: result,
|
||||||
|
returnNew: true) as FutureOr<Map<String, dynamic>>);
|
||||||
result = _jsonify(modified, params);
|
result = _jsonify(modified, params);
|
||||||
result['id'] = _makeId(id).toHexString();
|
result['id'] = _makeId(id).toHexString();
|
||||||
return result;
|
return result;
|
||||||
|
@ -182,7 +185,7 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Map<String, dynamic>> update(String id, Map<String, dynamic> data,
|
Future<Map<String, dynamic>> update(String id, Map<String, dynamic> data,
|
||||||
[Map<String, dynamic> params]) async {
|
[Map<String, dynamic>? params]) async {
|
||||||
var result = _removeSensitive(data);
|
var result = _removeSensitive(data);
|
||||||
result['_id'] = _makeId(id);
|
result['_id'] = _makeId(id);
|
||||||
/*result['createdAt'] =
|
/*result['createdAt'] =
|
||||||
|
@ -194,11 +197,11 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
result['updatedAt'] = new DateTime.now().toIso8601String();*/
|
result['updatedAt'] = new DateTime.now().toIso8601String();*/
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var updated = await collection.findAndModify(
|
var updated = await (collection.findAndModify(
|
||||||
query: where.id(_makeId(id)),
|
query: where.id(_makeId(id)),
|
||||||
update: result,
|
update: result,
|
||||||
returnNew: true,
|
returnNew: true,
|
||||||
upsert: true);
|
upsert: true) as FutureOr<Map<String, dynamic>>);
|
||||||
result = _jsonify(updated, params);
|
result = _jsonify(updated, params);
|
||||||
result['id'] = _makeId(id).toHexString();
|
result['id'] = _makeId(id).toHexString();
|
||||||
return result;
|
return result;
|
||||||
|
@ -210,8 +213,8 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Map<String, dynamic>> remove(String id,
|
Future<Map<String, dynamic>> remove(String id,
|
||||||
[Map<String, dynamic> params]) async {
|
[Map<String, dynamic>? params]) async {
|
||||||
if (id == null || id == 'null') {
|
if (id == 'null') {
|
||||||
// Remove everything...
|
// Remove everything...
|
||||||
if (!(allowRemoveAll == true ||
|
if (!(allowRemoveAll == true ||
|
||||||
params?.containsKey('provider') != true)) {
|
params?.containsKey('provider') != true)) {
|
||||||
|
@ -226,8 +229,9 @@ class MongoService extends Service<String, Map<String, dynamic>> {
|
||||||
// var result = await read(id, params);
|
// var result = await read(id, params);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var result = await collection.findAndModify(
|
var result = await (collection.findAndModify(
|
||||||
query: where.id(_makeId(id)), remove: true);
|
query: where.id(_makeId(id)),
|
||||||
|
remove: true) as FutureOr<Map<String, dynamic>>);
|
||||||
return _jsonify(result);
|
return _jsonify(result);
|
||||||
} catch (e, st) {
|
} catch (e, st) {
|
||||||
//printDebug(e, st, 'REMOVE');
|
//printDebug(e, st, 'REMOVE');
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
library angel_mongo.services;
|
library angel3_mongo.services;
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:angel_framework/angel_framework.dart';
|
import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'package:merge_map/merge_map.dart';
|
import 'package:angel3_merge_map/angel3_merge_map.dart';
|
||||||
import 'package:mongo_dart/mongo_dart.dart';
|
import 'package:mongo_dart/mongo_dart.dart';
|
||||||
|
|
||||||
part 'mongo_service.dart';
|
part 'mongo_service.dart';
|
||||||
|
|
||||||
Map<String, dynamic> _transformId(Map<String, dynamic> doc) {
|
Map<String, dynamic> _transformId(Map<String, dynamic> doc) {
|
||||||
var result = new Map<String, dynamic>.from(doc);
|
var result = Map<String, dynamic>.from(doc);
|
||||||
result
|
result
|
||||||
..['id'] = doc['_id']
|
..['id'] = doc['_id']
|
||||||
..remove('_id');
|
..remove('_id');
|
||||||
|
@ -18,13 +18,13 @@ Map<String, dynamic> _transformId(Map<String, dynamic> doc) {
|
||||||
|
|
||||||
ObjectId _makeId(id) {
|
ObjectId _makeId(id) {
|
||||||
try {
|
try {
|
||||||
return (id is ObjectId) ? id : new ObjectId.fromHexString(id.toString());
|
return (id is ObjectId) ? id : ObjectId.fromHexString(id.toString());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new AngelHttpException.badRequest();
|
throw AngelHttpException.badRequest();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const List<String> _sensitiveFieldNames = const [
|
const List<String> _sensitiveFieldNames = [
|
||||||
'id',
|
'id',
|
||||||
'_id',
|
'_id',
|
||||||
'createdAt',
|
'createdAt',
|
||||||
|
@ -37,7 +37,7 @@ Map<String, dynamic> _removeSensitive(Map<String, dynamic> data) {
|
||||||
.fold({}, (map, key) => map..[key] = data[key]);
|
.fold({}, (map, key) => map..[key] = data[key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const List<String> _NO_QUERY = const ['__requestctx', '__responsectx'];
|
const List<String> _NO_QUERY = ['__requestctx', '__responsectx'];
|
||||||
|
|
||||||
Map<String, dynamic> _filterNoQuery(Map<String, dynamic> data) {
|
Map<String, dynamic> _filterNoQuery(Map<String, dynamic> data) {
|
||||||
return data.keys.fold({}, (map, key) {
|
return data.keys.fold({}, (map, key) {
|
||||||
|
|
|
@ -1,28 +1,15 @@
|
||||||
name: angel_mongo
|
name: angel3_mongo
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
description: MongoDB-enabled services for the Angel framework. Well-tested.
|
description: MongoDB-enabled services for the Angel framework. Well-tested.
|
||||||
homepage: https://github.com/angel-dart/angel_mongo
|
homepage: https://github.com/dukefirehawk/angel/tree/angel3/packages/mongo
|
||||||
publish_to: none
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.10.0 <3.0.0'
|
sdk: '>=2.12.0 <3.0.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
angel_framework:
|
angel3_framework: ^4.0.0
|
||||||
git:
|
angel3_json_god: ^4.0.0
|
||||||
url: https://github.com/dukefirehawk/angel.git
|
angel3_merge_map: ^2.0.0
|
||||||
ref: sdk-2.12.x_nnbd
|
|
||||||
path: packages/framework
|
|
||||||
json_god:
|
|
||||||
git:
|
|
||||||
url: https://github.com/dukefirehawk/angel.git
|
|
||||||
ref: sdk-2.12.x_nnbd
|
|
||||||
path: packages/json_god
|
|
||||||
merge_map:
|
|
||||||
git:
|
|
||||||
url: https://github.com/dukefirehawk/angel.git
|
|
||||||
ref: sdk-2.12.x_nnbd
|
|
||||||
path: packages/merge_map
|
|
||||||
mongo_dart: ^0.7.0
|
mongo_dart: ^0.7.0
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
http: ^0.13.0
|
http: ^0.13.0
|
||||||
pedantic: ^1.0.0
|
pedantic: ^1.11.0
|
||||||
test: ^1.15.7
|
test: ^1.17.0
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'package:angel_framework/angel_framework.dart';
|
import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'package:angel_framework/http.dart';
|
import 'package:angel3_framework/http.dart';
|
||||||
import 'package:angel_mongo/angel_mongo.dart';
|
import 'package:angel3_mongo/angel3_mongo.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:json_god/json_god.dart' as god;
|
import 'package:angel3_json_god/angel3_json_god.dart' as god;
|
||||||
import 'package:mongo_dart/mongo_dart.dart';
|
import 'package:mongo_dart/mongo_dart.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
@ -23,12 +23,12 @@ void wireHooked(HookedService hooked) {
|
||||||
void main() {
|
void main() {
|
||||||
group('Generic Tests', () {
|
group('Generic Tests', () {
|
||||||
Angel app;
|
Angel app;
|
||||||
AngelHttp transport;
|
late AngelHttp transport;
|
||||||
http.Client client;
|
http.Client? client;
|
||||||
var db = Db('mongodb://localhost:27017/angel_mongo');
|
var db = Db('mongodb://localhost:27017/angel_mongo');
|
||||||
DbCollection testData;
|
late DbCollection testData;
|
||||||
String url;
|
String? url;
|
||||||
HookedService<String, Map<String, dynamic>, MongoService> greetingService;
|
HookedService<String, Map<String, dynamic>, MongoService>? greetingService;
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
app = Angel();
|
app = Angel();
|
||||||
|
@ -41,9 +41,9 @@ void main() {
|
||||||
|
|
||||||
var service = MongoService(testData, debug: true);
|
var service = MongoService(testData, debug: true);
|
||||||
greetingService = HookedService(service);
|
greetingService = HookedService(service);
|
||||||
wireHooked(greetingService);
|
wireHooked(greetingService!);
|
||||||
|
|
||||||
app.use('/api', greetingService);
|
app.use('/api', greetingService as Service);
|
||||||
|
|
||||||
await transport.startServer('127.0.0.1', 0);
|
await transport.startServer('127.0.0.1', 0);
|
||||||
url = transport.uri.toString();
|
url = transport.uri.toString();
|
||||||
|
@ -60,25 +60,25 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('query fields mapped to filters', () async {
|
test('query fields mapped to filters', () async {
|
||||||
await greetingService.create({'foo': 'bar'});
|
await greetingService!.create({'foo': 'bar'});
|
||||||
expect(
|
expect(
|
||||||
await greetingService.index({
|
await greetingService!.index({
|
||||||
'query': {'foo': 'not bar'}
|
'query': {'foo': 'not bar'}
|
||||||
}),
|
}),
|
||||||
isEmpty,
|
isEmpty,
|
||||||
);
|
);
|
||||||
expect(
|
expect(
|
||||||
await greetingService.index(),
|
await greetingService!.index(),
|
||||||
isNotEmpty,
|
isNotEmpty,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('insert items', () async {
|
test('insert items', () async {
|
||||||
var response = await client.post(Uri.parse('$url/api'),
|
var response = await client!.post(Uri.parse('$url/api'),
|
||||||
body: god.serialize(testGreeting), headers: headers);
|
body: god.serialize(testGreeting), headers: headers);
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
|
|
||||||
response = await client.get(Uri.parse('$url/api'));
|
response = await client!.get(Uri.parse('$url/api'));
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
var users = god.deserialize(response.body,
|
var users = god.deserialize(response.body,
|
||||||
outputType: <Map>[].runtimeType) as List<Map>;
|
outputType: <Map>[].runtimeType) as List<Map>;
|
||||||
|
@ -86,12 +86,12 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('read item', () async {
|
test('read item', () async {
|
||||||
var response = await client.post(Uri.parse('$url/api'),
|
var response = await client!.post(Uri.parse('$url/api'),
|
||||||
body: god.serialize(testGreeting), headers: headers);
|
body: god.serialize(testGreeting), headers: headers);
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
var created = god.deserialize(response.body) as Map;
|
var created = god.deserialize(response.body) as Map;
|
||||||
|
|
||||||
response = await client.get(Uri.parse("$url/api/${created['id']}"));
|
response = await client!.get(Uri.parse("$url/api/${created['id']}"));
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
var read = god.deserialize(response.body) as Map;
|
var read = god.deserialize(response.body) as Map;
|
||||||
expect(read['id'], equals(created['id']));
|
expect(read['id'], equals(created['id']));
|
||||||
|
@ -100,37 +100,37 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('findOne', () async {
|
test('findOne', () async {
|
||||||
var response = await client.post(Uri.parse('$url/api'),
|
var response = await client!.post(Uri.parse('$url/api'),
|
||||||
body: god.serialize(testGreeting), headers: headers);
|
body: god.serialize(testGreeting), headers: headers);
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
var created = god.deserialize(response.body) as Map;
|
var created = god.deserialize(response.body) as Map;
|
||||||
|
|
||||||
var id = ObjectId.fromHexString(created['id'] as String);
|
var id = ObjectId.fromHexString(created['id'] as String);
|
||||||
var read = await greetingService.findOne({'query': where.id(id)});
|
var read = await greetingService!.findOne({'query': where.id(id)});
|
||||||
expect(read['id'], equals(created['id']));
|
expect(read['id'], equals(created['id']));
|
||||||
expect(read['to'], equals('world'));
|
expect(read['to'], equals('world'));
|
||||||
//expect(read['createdAt'], isNot(null));
|
//expect(read['createdAt'], isNot(null));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('readMany', () async {
|
test('readMany', () async {
|
||||||
var response = await client.post(Uri.parse('$url/api'),
|
var response = await client!.post(Uri.parse('$url/api'),
|
||||||
body: god.serialize(testGreeting), headers: headers);
|
body: god.serialize(testGreeting), headers: headers);
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
var created = god.deserialize(response.body) as Map;
|
var created = god.deserialize(response.body) as Map;
|
||||||
|
|
||||||
var id = ObjectId.fromHexString(created['id'] as String);
|
var id = ObjectId.fromHexString(created['id'] as String);
|
||||||
var read = await greetingService.readMany([id.toHexString()]);
|
var read = await greetingService!.readMany([id.toHexString()]);
|
||||||
expect(read, [created]);
|
expect(read, [created]);
|
||||||
//expect(read['createdAt'], isNot(null));
|
//expect(read['createdAt'], isNot(null));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('modify item', () async {
|
test('modify item', () async {
|
||||||
var response = await client.post(Uri.parse('$url/api'),
|
var response = await client!.post(Uri.parse('$url/api'),
|
||||||
body: god.serialize(testGreeting), headers: headers);
|
body: god.serialize(testGreeting), headers: headers);
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
var created = god.deserialize(response.body) as Map;
|
var created = god.deserialize(response.body) as Map;
|
||||||
|
|
||||||
response = await client.patch(Uri.parse("$url/api/${created['id']}"),
|
response = await client!.patch(Uri.parse("$url/api/${created['id']}"),
|
||||||
body: god.serialize({'to': 'Mom'}), headers: headers);
|
body: god.serialize({'to': 'Mom'}), headers: headers);
|
||||||
var modified = god.deserialize(response.body) as Map;
|
var modified = god.deserialize(response.body) as Map;
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
|
@ -140,12 +140,12 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('update item', () async {
|
test('update item', () async {
|
||||||
var response = await client.post(Uri.parse('$url/api'),
|
var response = await client!.post(Uri.parse('$url/api'),
|
||||||
body: god.serialize(testGreeting), headers: headers);
|
body: god.serialize(testGreeting), headers: headers);
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
var created = god.deserialize(response.body) as Map;
|
var created = god.deserialize(response.body) as Map;
|
||||||
|
|
||||||
response = await client.post(Uri.parse("$url/api/${created['id']}"),
|
response = await client!.post(Uri.parse("$url/api/${created['id']}"),
|
||||||
body: god.serialize({'to': 'Updated'}), headers: headers);
|
body: god.serialize({'to': 'Updated'}), headers: headers);
|
||||||
var modified = god.deserialize(response.body) as Map;
|
var modified = god.deserialize(response.body) as Map;
|
||||||
expect(response.statusCode, isIn([200, 201]));
|
expect(response.statusCode, isIn([200, 201]));
|
||||||
|
@ -155,28 +155,28 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('remove item', () async {
|
test('remove item', () async {
|
||||||
var response = await client.post(Uri.parse('$url/api'),
|
var response = await client!.post(Uri.parse('$url/api'),
|
||||||
body: god.serialize(testGreeting), headers: headers);
|
body: god.serialize(testGreeting), headers: headers);
|
||||||
var created = god.deserialize(response.body) as Map;
|
var created = god.deserialize(response.body) as Map;
|
||||||
|
|
||||||
var lastCount = (await greetingService.index()).length;
|
var lastCount = (await greetingService!.index()).length;
|
||||||
|
|
||||||
await client.delete(Uri.parse("$url/api/${created['id']}"));
|
await client!.delete(Uri.parse("$url/api/${created['id']}"));
|
||||||
expect((await greetingService.index()).length, equals(lastCount - 1));
|
expect((await greetingService!.index()).length, equals(lastCount - 1));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('cannot remove all unless explicitly set', () async {
|
test('cannot remove all unless explicitly set', () async {
|
||||||
var response = await client.delete(Uri.parse('$url/api/null'));
|
var response = await client!.delete(Uri.parse('$url/api/null'));
|
||||||
expect(response.statusCode, 403);
|
expect(response.statusCode, 403);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('\$sort and query parameters', () async {
|
test('\$sort and query parameters', () async {
|
||||||
// Search by where.eq
|
// Search by where.eq
|
||||||
Map world = await greetingService.create({'to': 'world'});
|
Map world = await greetingService!.create({'to': 'world'});
|
||||||
await greetingService.create({'to': 'Mom'});
|
await greetingService!.create({'to': 'Mom'});
|
||||||
await greetingService.create({'to': 'Updated'});
|
await greetingService!.create({'to': 'Updated'});
|
||||||
|
|
||||||
var response = await client.get(Uri.parse('$url/api?to=world'));
|
var response = await client!.get(Uri.parse('$url/api?to=world'));
|
||||||
print(response.body);
|
print(response.body);
|
||||||
var queried = god.deserialize(response.body,
|
var queried = god.deserialize(response.body,
|
||||||
outputType: <Map>[].runtimeType) as List<Map>;
|
outputType: <Map>[].runtimeType) as List<Map>;
|
||||||
|
@ -193,7 +193,7 @@ void main() {
|
||||||
expect(queried[1]["id"], equals(Mom["id"]));
|
expect(queried[1]["id"], equals(Mom["id"]));
|
||||||
expect(queried[2]["id"], equals(world["id"]));*/
|
expect(queried[2]["id"], equals(world["id"]));*/
|
||||||
|
|
||||||
queried = await greetingService.index({
|
queried = await greetingService!.index({
|
||||||
'\$query': {
|
'\$query': {
|
||||||
'_id': where.id(ObjectId.fromHexString(world['id'] as String))
|
'_id': where.id(ObjectId.fromHexString(world['id'] as String))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue