mirror of
https://github.com/trailbaseio/trailbase.git
synced 2025-12-21 09:29:44 -06:00
Dart client: test addFilterParams and simplify token constructor.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:jwt_decoder/jwt_decoder.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
@@ -244,7 +245,7 @@ class RecordApi {
|
||||
if (expand != null) params['expand'] = expand.join(',');
|
||||
|
||||
for (final filter in filters ?? []) {
|
||||
_addFiltersToParams(params, 'filter', filter);
|
||||
addFiltersToParams(params, 'filter', filter);
|
||||
}
|
||||
|
||||
final response = await _client.fetch(
|
||||
@@ -322,7 +323,7 @@ class RecordApi {
|
||||
}) async {
|
||||
final params = <String, String>{};
|
||||
for (final filter in filters ?? []) {
|
||||
_addFiltersToParams(params, 'filter', filter);
|
||||
addFiltersToParams(params, 'filter', filter);
|
||||
}
|
||||
|
||||
final refreshToken = _client._tokenState._shouldRefresh();
|
||||
@@ -391,19 +392,14 @@ class Client {
|
||||
{void Function(Client, Tokens?)? onAuthChange}) async {
|
||||
final client = Client(site, onAuthChange: onAuthChange);
|
||||
|
||||
try {
|
||||
final uri = client.site().replace(path: '${_authApi}/status');
|
||||
final statusResponse =
|
||||
await client._http.get(uri, headers: _buildHeaders(tokens));
|
||||
|
||||
final newTokens = Tokens.fromJson(jsonDecode(statusResponse.body));
|
||||
|
||||
client._tokenState = _TokenState.build(newTokens);
|
||||
client._authChange?.call(client, newTokens);
|
||||
} catch (err) {
|
||||
// Do nothing
|
||||
_logger.warning(err);
|
||||
}
|
||||
// Initial check if tokens are valid and potentially refresh auth token.
|
||||
// Do not use _updateToken to not call [onAuthChange] on intial tokens.
|
||||
client._tokenState = _TokenState.build(tokens);
|
||||
await client.refreshAuthToken();
|
||||
// final uri = client.site().replace(path: '${_authApi}/status');
|
||||
// final statusResponse =
|
||||
// await client._http.get(uri, headers: _buildHeaders(tokens));
|
||||
// client._updateTokens(Tokens.fromJson(jsonDecode(statusResponse.body)));
|
||||
|
||||
return client;
|
||||
}
|
||||
@@ -498,7 +494,7 @@ class Client {
|
||||
String path, {
|
||||
Method method = Method.get,
|
||||
String? data,
|
||||
Map<String, String>? queryParams,
|
||||
Map<String, dynamic>? queryParams,
|
||||
bool throwOnError = true,
|
||||
}) async {
|
||||
final refreshToken = _tokenState._shouldRefresh();
|
||||
@@ -640,8 +636,9 @@ class _TokenState {
|
||||
}
|
||||
}
|
||||
|
||||
void _addFiltersToParams(
|
||||
Map<String, dynamic> params, String path, FilterBase filter) {
|
||||
@visibleForTesting
|
||||
void addFiltersToParams(
|
||||
Map<String, String> params, String path, FilterBase filter) {
|
||||
final _ = switch (filter) {
|
||||
Filter(column: final c, op: final op, value: final v) => () {
|
||||
if (op != null) {
|
||||
@@ -652,12 +649,12 @@ void _addFiltersToParams(
|
||||
}(),
|
||||
And(filters: final filters) => () {
|
||||
filters.asMap().forEach((index, filter) {
|
||||
_addFiltersToParams(params, '${path}[\$and][${index}]', filter);
|
||||
addFiltersToParams(params, '${path}[\$and][${index}]', filter);
|
||||
});
|
||||
}(),
|
||||
Or(filters: final filters) => () {
|
||||
filters.asMap().forEach((index, filter) {
|
||||
_addFiltersToParams(params, '${path}[\$or][${index}]', filter);
|
||||
addFiltersToParams(params, '${path}[\$or][${index}]', filter);
|
||||
});
|
||||
}(),
|
||||
};
|
||||
|
||||
@@ -14,6 +14,7 @@ dependencies:
|
||||
http: ^1.5.0
|
||||
jwt_decoder: ^2.0.1
|
||||
logging: ^1.3.0
|
||||
meta: ^1.16.0
|
||||
|
||||
dev_dependencies:
|
||||
lints: ^6.0.0
|
||||
|
||||
@@ -219,6 +219,20 @@ Future<void> main() async {
|
||||
// await process.stdout.forEach(stdout.add);
|
||||
});
|
||||
|
||||
test('filter', () {
|
||||
final params = <String, String>{};
|
||||
final filters = [
|
||||
Filter(column: 'col0', value: '0', op: CompareOp.greaterThan),
|
||||
Filter(column: 'col0', value: '5', op: CompareOp.lessThan),
|
||||
];
|
||||
|
||||
for (final filter in filters) {
|
||||
addFiltersToParams(params, 'filter', filter);
|
||||
}
|
||||
|
||||
expect(params.length, 2);
|
||||
});
|
||||
|
||||
group('client tests', () {
|
||||
test('auth', () async {
|
||||
final client = await connect();
|
||||
|
||||
Reference in New Issue
Block a user