diff --git a/CHANGELOG.md b/CHANGELOG.md index b816222..81c34cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.4.5 +- Minor refactoring + ## 1.4.4 - Added support for new API fields diff --git a/analysis_options.yaml b/analysis_options.yaml index a686c1b..9d29d3b 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,14 +1,15 @@ -# Defines a default set of lint rules enforced for -# projects at Google. For details and rationale, -# see https://github.com/dart-lang/pedantic#enabled-lints. -include: package:pedantic/analysis_options.yaml - -# For lint rules and documentation, see http://dart-lang.github.io/linter/lints. -# Uncomment to specify additional rules. -# linter: -# rules: -# - camel_case_types - +include: package:lints/recommended.yaml analyzer: -# exclude: -# - path/to/excluded/files/** + strong-mode: + implicit-casts: false + implicit-dynamic: false + language: + strict-raw-types: true +linter: + rules: + always_declare_return_types: true + prefer_single_quotes: true + unawaited_futures: true + package_api_docs: true + prefer_final_in_for_each: true + prefer_final_locals: true diff --git a/example/lib/main.dart b/example/lib/main.dart index 8c805c3..4e00793 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -8,20 +8,20 @@ import 'package:monobank_api/currency/extensions/currency_names.dart'; void statement() async { // Create client - var client = MonoAPI('token'); + final client = MonoAPI('token'); // Request client - var res = await client.clientInfo(); + final res = await client.clientInfo(); // Get first account - var account = res.accounts[0]; + final account = res.accounts[0]; // Get statement list for last 3 months - var statement = account.statement( + final statement = account.statement( DateTime.now().subtract(Duration(days: 31 * 3)), DateTime.now()); // For each statement item - await for (var item in statement.list(reverse: true)) { + await for (final item in statement.list(reverse: true)) { // Output string representation print('${item.mcc.emoji} $item (${item.operationAmount.currency.name})'); } @@ -38,7 +38,7 @@ void money() { Money(336, Currency.dummy)); // Money implements Comparable - var m = [ + final m = [ Money(20, Currency.dummy), Money(-5, Currency.dummy), Money(3, Currency.dummy) @@ -50,7 +50,7 @@ void money() { assert(m[2] == Money(20, Currency.dummy)); // Convert currencies - var converter = CurrencyInfo( + final converter = CurrencyInfo( Currency.code('EUR'), Currency.code('USD'), 1.165, @@ -64,16 +64,17 @@ void money() { void currency() async { // Creating client - var client = MonoAnonymousAPI(); + final client = MonoAnonymousAPI(); // Getting currencies - var cur = await client.currency(); + final cur = await client.currency(); // Looking for RUB exchanger - var currencyInfo = cur.firstWhere((e) => e.currencyA == Currency.code('RUB')); + final currencyInfo = + cur.firstWhere((e) => e.currencyA == Currency.code('RUB')); // Exchanging 100 UAHs to RUB - var result = currencyInfo.exchange(Money(10000, Currency.code('UAH'))); + final result = currencyInfo.exchange(Money(10000, Currency.code('UAH'))); // Printing print(result); diff --git a/lib/data/currency/currency_countries_dataset.dart b/lib/data/currency/currency_countries_dataset.dart index c01990f..41c47f6 100644 --- a/lib/data/currency/currency_countries_dataset.dart +++ b/lib/data/currency/currency_countries_dataset.dart @@ -4,6 +4,7 @@ /// /// {@category Datasets} /// {@subCategory Currency} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal library currency_countries_dataset; const Map> Iso4217Countries = { diff --git a/lib/data/currency/currency_names_dataset.dart b/lib/data/currency/currency_names_dataset.dart index ddbd884..c369354 100644 --- a/lib/data/currency/currency_names_dataset.dart +++ b/lib/data/currency/currency_names_dataset.dart @@ -4,6 +4,7 @@ /// /// {@category Datasets} /// {@subCategory Currency} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal library currency_names_dataset; const Map Iso4217Names = { diff --git a/lib/data/currency/iso4217_dataset.dart b/lib/data/currency/iso4217_dataset.dart index 73157cf..d2e1a4f 100644 --- a/lib/data/currency/iso4217_dataset.dart +++ b/lib/data/currency/iso4217_dataset.dart @@ -4,6 +4,8 @@ /// /// {@category Datasets} /// {@subCategory Currency} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal + library iso4217_dataset; const List> Iso4217 = [ diff --git a/lib/data/mcc/mcc_emoji_dataset.dart b/lib/data/mcc/mcc_emoji_dataset.dart index 84965d9..5ca5a98 100644 --- a/lib/data/mcc/mcc_emoji_dataset.dart +++ b/lib/data/mcc/mcc_emoji_dataset.dart @@ -4,6 +4,7 @@ /// /// {@category Datasets} /// {@subCategory MCC} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal library mcc_emoji_dataset; const Map> MCCEmojiDataset = { diff --git a/lib/data/mcc/mcc_english_dataset.dart b/lib/data/mcc/mcc_english_dataset.dart index 0206295..89f3816 100644 --- a/lib/data/mcc/mcc_english_dataset.dart +++ b/lib/data/mcc/mcc_english_dataset.dart @@ -4,6 +4,7 @@ /// /// {@category Datasets} /// {@subCategory MCC} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal library mcc_english_dataset; const Map MCCEnglishDataset = { diff --git a/lib/data/mcc/mcc_russian_dataset.dart b/lib/data/mcc/mcc_russian_dataset.dart index 587d1a9..397ad3b 100644 --- a/lib/data/mcc/mcc_russian_dataset.dart +++ b/lib/data/mcc/mcc_russian_dataset.dart @@ -4,6 +4,7 @@ /// /// {@category Datasets} /// {@subCategory MCC} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal library mcc_russian_dataset; const Map MCCRussianDataset = { diff --git a/lib/data/mcc/mcc_ukrainian_dataset.dart b/lib/data/mcc/mcc_ukrainian_dataset.dart index 310560c..a916b3b 100644 --- a/lib/data/mcc/mcc_ukrainian_dataset.dart +++ b/lib/data/mcc/mcc_ukrainian_dataset.dart @@ -4,6 +4,7 @@ /// /// {@category Datasets} /// {@subCategory MCC} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal library mcc_ukrainian_dataset; const Map MCCUkrainianDataset = { diff --git a/lib/data/mcc/mcc_visuals_dataset.dart b/lib/data/mcc/mcc_visuals_dataset.dart index bc8bb56..2bf7115 100644 --- a/lib/data/mcc/mcc_visuals_dataset.dart +++ b/lib/data/mcc/mcc_visuals_dataset.dart @@ -4,6 +4,7 @@ /// /// {@category Datasets} /// {@subCategory MCC} +// ignore_for_file: constant_identifier_names, implicit_dynamic_map_literal library mcc__dataset; const Map> MCCVisualsDataset = { diff --git a/lib/src/api.dart b/lib/src/api.dart index a8bb73f..9e46c62 100644 --- a/lib/src/api.dart +++ b/lib/src/api.dart @@ -112,9 +112,11 @@ enum APIHttpMethod { /// Send as GET /// /// NOTICE: It doesn't support body + // ignore: constant_identifier_names GET, /// Send as POST + // ignore: constant_identifier_names POST } @@ -263,6 +265,7 @@ class API { Map requestTimeouts = const {}, Uri? noAuthDomain, }) : noAuthDomain = noAuthDomain ?? domain { + // ignore: prefer_initializing_formals this.requestTimeouts = requestTimeouts; } @@ -451,7 +454,7 @@ class API { Duration? minDelay; - for (var request in _cart.toList()) { + for (final request in _cart.toList()) { try { globalWait = willFreeIn(); if (request.methodId != null) { @@ -504,7 +507,7 @@ class API { try { request._isProcessingNeeded = false; - var inLine = (request.settings & APIFlags.skip == 0) && + final inLine = (request.settings & APIFlags.skip == 0) && (request.settings & APIFlags.skipGlobal == 0); _lastRequest = DateTime.now(); diff --git a/lib/src/money.dart b/lib/src/money.dart index 8d3c492..e7b6ed8 100644 --- a/lib/src/money.dart +++ b/lib/src/money.dart @@ -2,7 +2,7 @@ import 'dart:math'; import '../data/currency/iso4217_dataset.dart'; -const Map _CurrencyStyling = { +const Map _currencyStyling = { 'UAH': '\u20B4', 'RUB': '\u20bd', 'USD': '\u0024', @@ -51,11 +51,15 @@ class Currency { ) { final upperCode = code.toUpperCase(); final info = Iso4217.firstWhere((currency) => currency['code'] == upperCode, - orElse: () => {}); + orElse: () => {}); if (!info.containsKey('code')) return UnknownCurrency(code); - return Currency(info['code'], info['number'], info['digits']); + return Currency( + info['code'] as String, + info['number'] as int, + info['digits'] as int, + ); } /// Find currency by ISO-4217 currency number @@ -66,11 +70,15 @@ class Currency { int number, ) { final info = Iso4217.firstWhere((currency) => currency['number'] == number, - orElse: () => {}); + orElse: () => {}); if (!info.containsKey('code')) return UnknownCurrency(number.toString()); - return Currency(info['code'], info['number'], info['digits']); + return Currency( + info['code'] as String, + info['number'] as int, + info['digits'] as int, + ); } /// Dummy currency @@ -122,6 +130,11 @@ class UnknownCurrency extends Currency { /// hashCode of an unknown currency is always `0` @override int get hashCode => 0; + + @override + bool operator ==(dynamic other) { + return identical(this, other); + } } /// Represents money @@ -129,7 +142,7 @@ class UnknownCurrency extends Currency { /// Supports `+`, `-`, `/`, `*`, `%` and all comparison operators, but works only /// with instances of the same currency. See [CurrencyInfo] to exchange /// currencies by rate -class Money implements Comparable { +class Money implements Comparable { /// Constructs new money instance /// /// The money constructor is constant @@ -172,8 +185,8 @@ class Money implements Comparable { @override String toString() => '${toNumericString()} ' + - (fancyCurrencies && _CurrencyStyling.containsKey(currency.code) - ? _CurrencyStyling[currency.code] + (fancyCurrencies && _currencyStyling.containsKey(currency.code) + ? _currencyStyling[currency.code]! : currency.code); /// Returns `true` if the amount is `0` @@ -184,7 +197,8 @@ class Money implements Comparable { /// Returns new Money instance of the same currency with /// absolute value of amount - factory Money.abs(target) => Money(target.amount.abs(), target.currency); + factory Money.abs(Money target) => + Money(target.amount.abs(), target.currency); /// Converts double to integer which represents amount of the instance /// in the smallest unit of the currency @@ -215,11 +229,8 @@ class Money implements Comparable { @override int compareTo(other) { - if (other is! Money) throw Exception('Money can be compared only to Money'); - final second = other; - - if (this > second) return 1; - if (this < second) return -1; + if (this > other) return 1; + if (this < other) return -1; return 0; } @@ -327,9 +338,9 @@ class Money implements Comparable { ) { if (items.isEmpty) throw Exception('Minimal 1 item expected'); var m = items[0]; - items.forEach((e) { + for (final e in items) { if (e < m) m = e; - }); + } return m; } @@ -344,9 +355,9 @@ class Money implements Comparable { ) { if (items.isEmpty) throw Exception('Minimal 1 item expected'); var m = items[0]; - items.forEach((e) { + for (final e in items) { if (e > m) m = e; - }); + } return m; } } diff --git a/lib/src/mono.dart b/lib/src/mono.dart index a2b0450..057e854 100644 --- a/lib/src/mono.dart +++ b/lib/src/mono.dart @@ -17,7 +17,7 @@ class Mask { final String end; factory Mask._fromString(String s) { - var e = s.split('*'); + final e = s.split('*'); return Mask._(e.first, e.last); } @@ -105,11 +105,12 @@ class BankCard { /// Representation of clientInfo result class Client { Client._fromJson(Map data, this.controller) - : name = data['name'], - id = data['clientId'] { - var accountsData = List>.from(data['accounts']); + : name = data['name'] as String, + id = data['clientId'] as String { + final accountsData = + List>.from(data['accounts'] as Iterable); - var list = accountsData.map((e) => Account._fromJson(e, this)).toList(); + final list = accountsData.map((e) => Account._fromJson(e, this)).toList(); if (sortAccounts) { const uahOrder = [ @@ -127,7 +128,7 @@ class Client { known = []; unknown = []; - list.forEach((e) { + for (final e in list) { List arr; if (e.balance.currency.code == 'UAH') { @@ -137,7 +138,7 @@ class Client { } arr.add(e); - }); + } uah.sort((a, b) { final indA = uahOrder.indexOf(a.type); @@ -273,7 +274,7 @@ class MilesCashback extends Cashback { } Cashback _cashback(int amount, String type) { - var currency = Currency.code(type); + final currency = Currency.code(type); if (currency is! UnknownCurrency) return MoneyCashback._(amount, currency); if (type == 'Miles') return MilesCashback._(amount); @@ -284,30 +285,32 @@ Cashback _cashback(int amount, String type) { /// Single item from statement class StatementItem { StatementItem._fromJson(Map data, this.account) - : id = data['id'], - time = DateTime.fromMillisecondsSinceEpoch(data['time'] * 1000), - description = data['description'], - mcc = MCC(data['mcc']), - originalMcc = MCC(data['originalMcc']), - amount = Money(data['amount'], account.balance.currency), + : id = data['id'] as String, + time = + DateTime.fromMillisecondsSinceEpoch((data['time'] as int) * 1000), + description = data['description'] as String? ?? '', + mcc = MCC(data['mcc'] as int), + originalMcc = MCC(data['originalMcc'] as int), + amount = Money(data['amount'] as int, account.balance.currency), operationAmount = Money( - data['operationAmount'], - Currency.number(data['currencyCode']), + data['operationAmount'] as int, + Currency.number(data['currencyCode'] as int), ), commissionRate = Money( - data['commissionRate'], - Currency.number(data['currencyCode']), + data['commissionRate'] as int, + Currency.number(data['currencyCode'] as int), ), - cashback = _cashback(data['cashbackAmount'], account.cashbackType), + cashback = + _cashback(data['cashbackAmount'] as int, account.cashbackType), balance = Money( - data['balance'], + data['balance'] as int, account.balance.currency, ), - comment = data['comment'] ?? '', - hold = data['hold'], - receiptId = data['receiptId'], - counterEdrpou = data['counterEdrpou'], - counterIban = data['counterIban']; + comment = data['comment'] as String? ?? '', + hold = data['hold'] as bool, + receiptId = data['receiptId'] as String, + counterEdrpou = data['counterEdrpou'] as String, + counterIban = data['counterIban'] as String; /// Parent account final Account account; @@ -416,8 +419,8 @@ class Statement { if (lTo.isAfter(to)) lTo = to; } - var f = (lFrom.millisecondsSinceEpoch / 1000).floor(); - var t = (lTo.millisecondsSinceEpoch / 1000).floor(); + final f = (lFrom.millisecondsSinceEpoch / 1000).floor(); + final t = (lTo.millisecondsSinceEpoch / 1000).floor(); APIResponse data; List> body; @@ -429,16 +432,16 @@ class Statement { useAuth: true, )); - body = List>.from(data.body); + body = List>.from(data.body as Iterable); } catch (e) { if (!ignoreErrors) rethrow; body = []; } - var i = (reverse ? body : body.reversed) + final i = (reverse ? body : body.reversed) .map((e) => StatementItem._fromJson(e, account)); - for (var e in i) { + for (final e in i) { yield e; } @@ -460,19 +463,19 @@ class Account { static bool hideCreditLimit = false; Account._fromJson(Map data, this.client) - : id = data['id'], - accountBalance = - Money(data['balance'], Currency.number(data['currencyCode'])), - creditLimit = - Money(data['creditLimit'], Currency.number(data['currencyCode'])), - cashbackType = data['cashbackType'], - iban = data['iban'], - sendId = data['sendId'], - type = BankCard.cardTypeFromString(data['type']), - cards = List.from(data['maskedPan']) + : id = data['id'] as String, + accountBalance = Money(data['balance'] as int, + Currency.number(data['currencyCode'] as int)), + creditLimit = Money(data['creditLimit'] as int, + Currency.number(data['currencyCode'] as int)), + cashbackType = data['cashbackType'] as String, + iban = data['iban'] as String, + sendId = data['sendId'] as String, + type = BankCard.cardTypeFromString(data['type'] as String), + cards = List.from(data['maskedPan'] as Iterable) .map((e) => BankCard._( Mask._fromString(e), - BankCard.cardTypeFromString(data['type']), + BankCard.cardTypeFromString(data['type'] as String), )) .toList(); @@ -539,12 +542,12 @@ class Account { mixin PersonalMethods on API { /// Request Client object Future clientInfo() async { - var data = await call(APIRequest( + final data = await call(APIRequest( 'personal/client-info', methodId: 'personal/client-info', useAuth: true, )); - return Client._fromJson(data.body, this); + return Client._fromJson(data.body as Map, this); } } @@ -555,15 +558,16 @@ mixin CurrencyMethods on API { /// Generates CurrencyInfo's from /// monobank currency dataF Future> currency({bool burst = false}) async { - var data = await call(APIRequest( + final data = await call(APIRequest( 'bank/currency', methodId: 'bank/currency', settings: (burst ? APIFlags.waiting | APIFlags.skip : APIFlags.waiting), )); - var curs = List>.from(data.body); + final curs = + List>.from(data.body as Iterable); return curs.map((e) => CurrencyInfo( - Currency.number(e['currencyCodeA']), - Currency.number(e['currencyCodeB']), + Currency.number(e['currencyCodeA'] as int), + Currency.number(e['currencyCodeB'] as int), double.parse( (e.containsKey('rateCross') ? e['rateCross'] : e['rateSell']) .toString()), diff --git a/pubspec.yaml b/pubspec.yaml index 084b44c..9d83743 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ description: > Supports getting currencies and grabbing statement -version: 1.4.4 +version: 1.4.5 homepage: https://github.com/Sominemo/monobank_api environment: @@ -14,5 +14,5 @@ dependencies: http: ^0.13.1 dev_dependencies: - pedantic: ^1.11.0 + lints: ^1.0.0 test: ^1.16.5 diff --git a/test/api_test.dart b/test/api_test.dart index eb28d63..8749f6a 100644 --- a/test/api_test.dart +++ b/test/api_test.dart @@ -6,7 +6,7 @@ import 'package:test/test.dart'; class EmptyApiResponse implements APIResponse { EmptyApiResponse() - : body = {}, + : body = {}, statusCode = 0, headers = {}; @@ -82,7 +82,7 @@ void main() { }); test('APIRequest.clone basic test', () { - var request = APIRequest('test', + final request = APIRequest('test', methodId: 'test-class1', settings: APIFlags.skip, useAuth: true, @@ -90,7 +90,7 @@ void main() { headers: {'Header': 'Value'}, httpMethod: APIHttpMethod.POST); - var clone = APIRequest.clone(request); + final clone = APIRequest.clone(request); expect(clone.httpMethod, equals(request.httpMethod)); }); }); @@ -136,10 +136,10 @@ void main() { })); }); - test('Initial request is being sent immediatelly', () { + test('Initial request is being sent immediately', () { api.call(APIRequest('test-method')); server?.listen(expectAsync1((request) async { - var received = DateTime.now(); + final received = DateTime.now(); request.response.write('{}'); await request.response.close(); @@ -152,7 +152,7 @@ void main() { test('Methods can be busy', () { api.call(APIRequest('test-method', methodId: 'test-class1')); server?.listen(expectAsync1((request) async { - var business = api.isMethodBusy('test-class1'); + final business = api.isMethodBusy('test-class1'); request.response.write('{}'); await request.response.close(); @@ -162,7 +162,7 @@ void main() { }); test('Request time is being recorded', () { - var originalTime = api.lastRequest(); + final originalTime = api.lastRequest(); api.call(APIRequest('test-method')); server?.listen(expectAsync1((request) async { @@ -186,7 +186,7 @@ void main() { }); test('Request time for methodId is being recorded', () { - var originalTime = api.lastRequest(methodId: 'test-class1'); + final originalTime = api.lastRequest(methodId: 'test-class1'); api.call(APIRequest('test-method', methodId: 'test-class1')); server?.listen(expectAsync1((request) async { @@ -198,11 +198,11 @@ void main() { })); }); - group('Clonnig and Delivery', () { + group('Cloning and Delivery', () { var api = API(Uri()); APIRequest originalAPIRequest, cloneAPIRequest; HttpRequest? originalRequest, cloneRequest; - var oDec, cDec; + late Map oDec, cDec; setUp(() async { api = API(url ?? Uri(), token: 'my-test-token'); @@ -219,10 +219,12 @@ void main() { server?.listen((request) async { if (originalRequest == null) { originalRequest = request; - oDec = jsonDecode(await utf8.decodeStream(originalRequest!)); + oDec = jsonDecode(await utf8.decodeStream(originalRequest!)) + as Map; } else { cloneRequest = request; - cDec = jsonDecode(await utf8.decodeStream(cloneRequest!)); + cDec = jsonDecode(await utf8.decodeStream(cloneRequest!)) + as Map; } request.response.write('{}'); @@ -271,8 +273,9 @@ void main() { }); test('waiting', () { - var wait = api.getMethodRequestTimeout('test-class1').inMilliseconds; - var request = APIRequest('test-method', + final wait = + api.getMethodRequestTimeout('test-class1').inMilliseconds; + final request = APIRequest('test-method', settings: APIFlags.waiting, methodId: 'test-class1'); DateTime? lastTime; @@ -297,7 +300,7 @@ void main() { }, timeout: Timeout(Duration(seconds: 5))); test('waiting: method timeout is less than global', () { - var request = APIRequest('test-method', + final request = APIRequest('test-method', settings: APIFlags.waiting, methodId: 'test-class2'); DateTime? lastTime; @@ -324,7 +327,7 @@ void main() { }, timeout: Timeout(Duration(seconds: 5))); test('skip: Throws without agreeing for waiting', () { - var request = APIRequest('test-method', settings: APIFlags.skip); + final request = APIRequest('test-method', settings: APIFlags.skip); server?.listen(expectAsync1((request) async { request.response.write('{}'); @@ -340,7 +343,7 @@ void main() { return error; }); - api.call(request).catchError((o) { + api.call(request).catchError((Object o) { cb(o); return EmptyApiResponse(); }); @@ -348,8 +351,8 @@ void main() { test('skip | waiting: Works on no-throttling', () { api = API(url!); - var wait = Duration.zero.inMilliseconds; - var request = APIRequest('test-method', + final wait = Duration.zero.inMilliseconds; + final request = APIRequest('test-method', settings: APIFlags.skip | APIFlags.waiting, methodId: 'test-class1'); @@ -376,8 +379,8 @@ void main() { test('skipGlobal | waiting: Works on no-throttling', () { api = API(url!); - var wait = Duration.zero.inMilliseconds; - var request = APIRequest('test-method', + final wait = Duration.zero.inMilliseconds; + final request = APIRequest('test-method', settings: APIFlags.skipGlobal | APIFlags.waiting, methodId: 'test-class2'); @@ -403,7 +406,7 @@ void main() { }); test('skipGlobal: Throws without agreeing for waiting', () { - var request = + final request = APIRequest('test-method', settings: APIFlags.skipGlobal); server!.listen(expectAsync1((request) async { @@ -420,7 +423,7 @@ void main() { return error; }); - api.call(request).catchError((o) { + api.call(request).catchError((Object o) { cb(o); return EmptyApiResponse(); }); @@ -428,7 +431,7 @@ void main() { test('resend', () { var count = 0; - var request = APIRequest('test-method', settings: APIFlags.resend); + final request = APIRequest('test-method', settings: APIFlags.resend); server!.listen(expectAsync1((request) async { if (count == 0) { @@ -444,9 +447,9 @@ void main() { test('resendOnFlood | waiting', () async { var count = 0; - var request1 = APIRequest('test-method', + final request1 = APIRequest('test-method', settings: APIFlags.resendOnFlood | APIFlags.waiting); - var request2 = APIRequest('test-method2'); + final request2 = APIRequest('test-method2'); server!.listen(expectAsync1((request) async { count++; @@ -474,8 +477,8 @@ void main() { }); test('skip | waiting', () { - var wait = api.globalTimeout.inMilliseconds; - var request = APIRequest('test-method', + final wait = api.globalTimeout.inMilliseconds; + final request = APIRequest('test-method', settings: APIFlags.skip | APIFlags.waiting, methodId: 'test-class1'); @@ -501,8 +504,8 @@ void main() { }, timeout: Timeout(Duration(seconds: 4))); test('skip | waiting: method delay is less than global timeout', () { - var wait = api.globalTimeout.inMilliseconds; - var request = APIRequest('test-method', + final wait = api.globalTimeout.inMilliseconds; + final request = APIRequest('test-method', settings: APIFlags.skip | APIFlags.waiting, methodId: 'test-class2'); @@ -528,8 +531,9 @@ void main() { }, timeout: Timeout(Duration(seconds: 3))); test('skipGlobal | waiting', () { - var wait = api.getMethodRequestTimeout('test-class1').inMilliseconds; - var request = APIRequest('test-method', + final wait = + api.getMethodRequestTimeout('test-class1').inMilliseconds; + final request = APIRequest('test-method', settings: APIFlags.skipGlobal | APIFlags.waiting, methodId: 'test-class1'); @@ -556,8 +560,9 @@ void main() { test('skipGlobal | waiting: method delay is less than global timeout', () { - var wait = api.getMethodRequestTimeout('test-class2').inMilliseconds; - var request = APIRequest('test-method', + final wait = + api.getMethodRequestTimeout('test-class2').inMilliseconds; + final request = APIRequest('test-method', settings: APIFlags.skipGlobal | APIFlags.waiting, methodId: 'test-class2'); @@ -583,7 +588,7 @@ void main() { }, timeout: Timeout(Duration(seconds: 3))); test('skip | skipGlobal | waiting: Throws illegal request error', () { - var request = APIRequest('test-method', + final request = APIRequest('test-method', settings: APIFlags.skip | APIFlags.skipGlobal | APIFlags.waiting); server!.listen(expectAsync1((request) async { @@ -600,7 +605,7 @@ void main() { return error; }); - api.call(request).catchError((o) { + api.call(request).catchError((Object o) { cb(o); return EmptyApiResponse(); }); @@ -609,7 +614,7 @@ void main() { test('resendOnFlood | waiting: Correct wait times for global', () async { DateTime? last; - var request1 = APIRequest('test-method', + final request1 = APIRequest('test-method', settings: APIFlags.resendOnFlood | APIFlags.waiting); server!.listen(expectAsync1((request) async { @@ -630,7 +635,7 @@ void main() { test('resendOnFlood | waiting: Correct wait times for method', () async { DateTime? last; - var request1 = APIRequest('test-method', + final request1 = APIRequest('test-method', settings: APIFlags.resendOnFlood | APIFlags.waiting, methodId: 'test-class1'); @@ -651,7 +656,7 @@ void main() { test('resend | waiting: Correct wait times for global', () async { DateTime? last; - var request1 = APIRequest('test-method', + final request1 = APIRequest('test-method', settings: APIFlags.resend | APIFlags.waiting); server!.listen(expectAsync1((request) async { @@ -671,7 +676,7 @@ void main() { test('resend | waiting: Correct wait times for method', () async { DateTime? last; - var request1 = APIRequest('test-method', + final request1 = APIRequest('test-method', settings: APIFlags.resend | APIFlags.waiting, methodId: 'test-class1'); diff --git a/test/money_test.dart b/test/money_test.dart index 10c67b4..0ad1adc 100644 --- a/test/money_test.dart +++ b/test/money_test.dart @@ -4,294 +4,294 @@ import 'package:test/test.dart'; void main() { group('Currency', () { test('Construct', () { - var c = Currency('XXX', 999, 2); + final c = Currency('XXX', 999, 2); expect(c.code, 'XXX'); }); test('Find currency by code', () { - var c = Currency.code('USD'); + final c = Currency.code('USD'); expect(c.number, 840); }); test('Find currency by number', () { - var c = Currency.number(840); + final c = Currency.number(840); expect(c.code, 'USD'); }); test('Currencies can equal', () { - var c1 = Currency.number(840); - var c2 = Currency.number(840); + final c1 = Currency.number(840); + final c2 = Currency.number(840); expect(c1 == c2, true); }); test('Currencies can be not equal', () { - var c1 = Currency.number(840); - var c2 = Currency.number(978); + final c1 = Currency.number(840); + final c2 = Currency.number(978); expect(c1 != c2, true); }); test('UnknownCurrency doesn\'t equal to usual currency', () { - var c1 = Currency.number(840); - var c2 = UnknownCurrency; + final c1 = Currency.number(840); + final c2 = UnknownCurrency; // ignore: unrelated_type_equality_checks expect(c1 != c2, true); }); test('UnknownCurrency doesn\'t equal to self of different instance', () { - var c1 = UnknownCurrency('XXX'); - var c2 = UnknownCurrency('XXX'); + final c1 = UnknownCurrency('XXX'); + final c2 = UnknownCurrency('XXX'); expect(c1 != c2, true); }); test('UnknownCurrency equals self of the same instance', () { - var c1 = UnknownCurrency; - var c2 = c1; + final c1 = UnknownCurrency; + final c2 = c1; expect(c1 == c2, true); }); }); group('Money', () { test('Construct zero', () { - var m = Money(0, Currency.dummy); + final m = Money(0, Currency.dummy); expect(m.amount, 0); }); test('Construct > 0', () { - var m = Money(5, Currency.dummy); + final m = Money(5, Currency.dummy); expect(m.amount, 5); }); test('Construct < 0', () { - var m = Money(-5, Currency.dummy); + final m = Money(-5, Currency.dummy); expect(m.amount, -5); }); test('Double with 0 digits', () { - var m = Money(2759, Currency('XXX', 999, 0)); + final m = Money(2759, Currency('XXX', 999, 0)); expect(m.toDouble(), 2759.0); }); test('Double with 1 digit', () { - var m = Money(2759, Currency('XXX', 999, 1)); + final m = Money(2759, Currency('XXX', 999, 1)); expect(m.toDouble(), 275.9); }); test('Double with 2 digits', () { - var m = Money(2759, Currency('XXX', 999, 2)); + final m = Money(2759, Currency('XXX', 999, 2)); expect(m.toDouble(), 27.59); }); test('Double with 3 digits', () { - var m = Money(2759, Currency('XXX', 999, 3)); + final m = Money(2759, Currency('XXX', 999, 3)); expect(m.toDouble(), 2.759); }); test('Double with 4 digits', () { - var m = Money(2759, Currency('XXX', 999, 4)); + final m = Money(2759, Currency('XXX', 999, 4)); expect(m.toDouble(), 0.2759); }); test('Double with 5 digits', () { - var m = Money(2759, Currency('XXX', 999, 5)); + final m = Money(2759, Currency('XXX', 999, 5)); expect(m.toDouble(), 0.02759); }); test('Double with 4 digits to string', () { - var m = Money(2759, Currency('XXX', 999, 4)); + final m = Money(2759, Currency('XXX', 999, 4)); expect(m.toNumericString(), '0.2759'); }); test('ToString without fancy currencies', () { Money.fancyCurrencies = false; - var m = Money(2759, Currency.code('USD')); + final m = Money(2759, Currency.code('USD')); expect(m.toString(), '27.59 USD'); }); test('ToString with fancy currencies', () { Money.fancyCurrencies = true; - var m = Money(2759, Currency.code('USD')); + final m = Money(2759, Currency.code('USD')); expect(m.toString(), '27.59 \$'); }); - test('anount == 0 | isZero', () { - var m = Money(0, Currency.dummy); + test('amount == 0 | isZero', () { + final m = Money(0, Currency.dummy); expect(m.isZero, true); }); - test('anount == 0 | isNegative', () { - var m = Money(0, Currency.dummy); + test('amount == 0 | isNegative', () { + final m = Money(0, Currency.dummy); expect(m.isNegative, false); }); - test('anount > 0 | isZero', () { - var m = Money(5, Currency.dummy); + test('amount > 0 | isZero', () { + final m = Money(5, Currency.dummy); expect(m.isZero, false); }); - test('anount > 0 | isNegative', () { - var m = Money(5, Currency.dummy); + test('amount > 0 | isNegative', () { + final m = Money(5, Currency.dummy); expect(m.isNegative, false); }); - test('anount < 0 | isZero', () { - var m = Money(-5, Currency.dummy); + test('amount < 0 | isZero', () { + final m = Money(-5, Currency.dummy); expect(m.isZero, false); }); - test('anount < 0 | isNegative', () { - var m = Money(-5, Currency.dummy); + test('amount < 0 | isNegative', () { + final m = Money(-5, Currency.dummy); expect(m.isNegative, true); }); test('abs positive equals', () { - var m1 = Money(5, Currency.dummy); - var m2 = Money.abs(m1); + final m1 = Money(5, Currency.dummy); + final m2 = Money.abs(m1); expect(m2.amount, m1.amount); }); test('abs negative check', () { - var m1 = Money(-5, Currency.dummy); - var m2 = Money.abs(m1); + final m1 = Money(-5, Currency.dummy); + final m2 = Money.abs(m1); expect(m2.amount, 5); }); test('==', () { - var m1 = Money(-5, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(-5, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 == m2, true); }); test('>', () { - var m1 = Money(5, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(5, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 > m2, true); }); test('!>', () { - var m1 = Money(-5, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(-5, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 > m2, false); }); test('>=', () { - var m1 = Money(-5, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(-5, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 >= m2, true); }); test('!>=', () { - var m1 = Money(-6, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(-6, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 >= m2, false); }); test('<', () { - var m1 = Money(-6, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(-6, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 < m2, true); }); test('!<', () { - var m1 = Money(5, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(5, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 < m2, false); }); test('<=', () { - var m1 = Money(-5, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(-5, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 <= m2, true); }); test('!<=', () { - var m1 = Money(-4, Currency.dummy); - var m2 = Money(-5, Currency.dummy); + final m1 = Money(-4, Currency.dummy); + final m2 = Money(-5, Currency.dummy); expect(m1 <= m2, false); }); - test('Doesn\'t equal on different curency', () { - var m1 = Money(-5, Currency.dummy); - var m2 = Money(-5, Currency.code('USD')); + test('Doesn\'t equal on different currency', () { + final m1 = Money(-5, Currency.dummy); + final m2 = Money(-5, Currency.code('USD')); expect(m1 == m2, false); }); test('Doesn\'t equal on different amount', () { - var m1 = Money(-5, Currency.dummy); - var m2 = Money(5, Currency.dummy); + final m1 = Money(-5, Currency.dummy); + final m2 = Money(5, Currency.dummy); expect(m1 == m2, false); }); test('positive + positive', () { - var m1 = Money(5, Currency.dummy); - var m2 = Money(6, Currency.dummy); + final m1 = Money(5, Currency.dummy); + final m2 = Money(6, Currency.dummy); expect(m1 + m2, Money(11, Currency.dummy)); }); test('positive + negative', () { - var m1 = Money(5, Currency.dummy); - var m2 = Money(-6, Currency.dummy); + final m1 = Money(5, Currency.dummy); + final m2 = Money(-6, Currency.dummy); expect(m1 + m2, Money(-1, Currency.dummy)); }); test('positive - positive', () { - var m1 = Money(5, Currency.dummy); - var m2 = Money(6, Currency.dummy); + final m1 = Money(5, Currency.dummy); + final m2 = Money(6, Currency.dummy); expect(m1 - m2, Money(-1, Currency.dummy)); }); test('positive - negative', () { - var m1 = Money(5, Currency.dummy); - var m2 = Money(-6, Currency.dummy); + final m1 = Money(5, Currency.dummy); + final m2 = Money(-6, Currency.dummy); expect(m1 - m2, Money(11, Currency.dummy)); }); test('positive * positive', () { - var m1 = Money(5, Currency.dummy); + final m1 = Money(5, Currency.dummy); expect(m1 * 3, Money(15, Currency.dummy)); }); test('positive / positive', () { - var m1 = Money(15, Currency.dummy); + final m1 = Money(15, Currency.dummy); expect(m1 / 3, Money(5, Currency.dummy)); }); test('positive * negative', () { - var m1 = Money(5, Currency.dummy); + final m1 = Money(5, Currency.dummy); expect(m1 * -3, Money(-15, Currency.dummy)); }); test('positive / negative', () { - var m1 = Money(15, Currency.dummy); + final m1 = Money(15, Currency.dummy); expect(m1 / -3, Money(-5, Currency.dummy)); }); }); group('CurrencyInfo', () { test('Construct', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5, 1.6, rounding: MoneyRounding.math); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5, 1.6, rounding: MoneyRounding.math); expect(i.rateBuy, 1.6); }); test('isCross', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5, 1.5, rounding: MoneyRounding.math); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5, 1.5, rounding: MoneyRounding.math); expect(i.isCross, true); }); test('!isCross', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5, 1.6, rounding: MoneyRounding.math); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5, 1.6, rounding: MoneyRounding.math); expect(i.isCross, false); }); test('!Currency.cross', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo.cross(c1, c2, 1.5, rounding: MoneyRounding.math); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo.cross(c1, c2, 1.5, rounding: MoneyRounding.math); expect(i.rateSell, i.rateBuy); }); test('Exchange 1.5 sell math', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5, 1.6, rounding: MoneyRounding.math); - var r = i.exchange(Money(2, c1)); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5, 1.6, rounding: MoneyRounding.math); + final r = i.exchange(Money(2, c1)); expect(r, Money(3, c2)); }); test('Exchange 1.5 buy math', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.6, 1.5, rounding: MoneyRounding.math); - var r = i.exchange(Money(3, c2)); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.6, 1.5, rounding: MoneyRounding.math); + final r = i.exchange(Money(3, c2)); expect(r, Money(2, c1)); }); test('Exchange 234 -> 1.5694 math', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.math); - var r = i.exchange(Money(234, c1)); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.math); + final r = i.exchange(Money(234, c1)); expect(r, Money(367, c2)); }); test('Exchange 235 -> 1.5694 math', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.math); - var r = i.exchange(Money(235, c1)); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.math); + final r = i.exchange(Money(235, c1)); expect(r, Money(369, c2)); }); test('Exchange 235 -> 1.5694 floor', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.floor); - var r = i.exchange(Money(235, c1)); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.floor); + final r = i.exchange(Money(235, c1)); expect(r, Money(368, c2)); }); test('Exchange 235 -> 1.5694 bank', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.bank); - var r = i.exchange(Money(235, c1)); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5694, 2, rounding: MoneyRounding.bank); + final r = i.exchange(Money(235, c1)); expect(r, Money(368, c2)); }); test('Exchange 2365 -> 1.5709 bank', () { - var c1 = Currency('XXX', 999, 2); - var c2 = Currency('AAA', 000, 2); - var i = CurrencyInfo(c1, c2, 1.5709, 2, rounding: MoneyRounding.bank); - var r = i.exchange(Money(235, c1)); + final c1 = Currency('XXX', 999, 2); + final c2 = Currency('AAA', 000, 2); + final i = CurrencyInfo(c1, c2, 1.5709, 2, rounding: MoneyRounding.bank); + final r = i.exchange(Money(235, c1)); expect(r, Money(370, c2)); }); test('min()', () {