From 8554b44fd752a6838512473adff6f14826c1b1cb Mon Sep 17 00:00:00 2001 From: clangenb <37865735+clangenb@users.noreply.github.com> Date: Mon, 16 Oct 2023 09:19:10 +0900 Subject: [PATCH] [encointer_api] fix unit tests by passing a MockEncointerKusama into the EncointerApi constructor --- app/lib/service/substrate_api/api.dart | 3 ++- .../encointer/encointer_api.dart | 23 +++++++--------- app/test/mock/api/mock_api.dart | 3 ++- app/test/mock/api/mock_encointer_api.dart | 2 +- .../mock/api/mock_encointer_kusama_api.dart | 27 +++++++++++++++++++ packages/ew_polkadart/lib/ew_polkadart.dart | 3 ++- 6 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 app/test/mock/api/mock_encointer_kusama_api.dart diff --git a/app/lib/service/substrate_api/api.dart b/app/lib/service/substrate_api/api.dart index 7b71222f3..3d7484b99 100644 --- a/app/lib/service/substrate_api/api.dart +++ b/app/lib/service/substrate_api/api.dart @@ -13,6 +13,7 @@ import 'package:encointer_wallet/service/substrate_api/chain_api.dart'; import 'package:encointer_wallet/service/substrate_api/core/dart_api.dart'; import 'package:encointer_wallet/service/substrate_api/core/js_api.dart'; import 'package:encointer_wallet/service/substrate_api/encointer/encointer_api.dart'; +import 'package:ew_polkadart/ew_polkadart.dart'; /// Global api instance /// @@ -47,7 +48,7 @@ class Api { AccountApi(store, js), AssetsApi(store, js), ChainApi(store, js), - EncointerApi(store, js, dartApi, ewHttp), + EncointerApi(store, js, dartApi, ewHttp, EncointerKusama.url(Uri.parse(store.settings.endpoint.value!))), isIntegrationTest ? MockIpfsApi(ewHttp) : IpfsApi(ewHttp, gateway: store.settings.ipfsGateway), jsServiceEncointer, ); diff --git a/app/lib/service/substrate_api/encointer/encointer_api.dart b/app/lib/service/substrate_api/encointer/encointer_api.dart index a36b28350..e1b71c646 100644 --- a/app/lib/service/substrate_api/encointer/encointer_api.dart +++ b/app/lib/service/substrate_api/encointer/encointer_api.dart @@ -44,18 +44,15 @@ import 'package:ew_polkadart/encointer_types.dart' as et; /// NOTE: If the js-code was changed a rebuild of the application is needed to update the code. class EncointerApi { - EncointerApi(this.store, this.jsApi, SubstrateDartApi dartApi, this.ewHttp) + EncointerApi(this.store, this.jsApi, SubstrateDartApi dartApi, this.ewHttp, this.encointerKusama) : _noTee = NoTeeApi(jsApi), _teeProxy = TeeProxyApi(jsApi), - _dartApi = EncointerDartApi(dartApi), - // Todo: better solution, but we can rethink the initialization anyhow after getting - // rid of JS. - _encointerKusama = EncointerKusama.url(Uri.parse(store.settings.endpoint.value!)); + _dartApi = EncointerDartApi(dartApi); final JSApi jsApi; final EncointerDartApi _dartApi; final EwHttp ewHttp; - final EncointerKusama _encointerKusama; + final EncointerKusama encointerKusama; final AppStore store; final String _currentPhaseSubscribeChannel = 'currentPhase'; @@ -128,7 +125,7 @@ class EncointerApi { /// This is on-chain in Cantillon. Future getNextPhaseTimestamp() async { Log.d('api: getNextPhaseTimestamp', 'EncointerApi'); - final timestampBigInt = await _encointerKusama.query.encointerScheduler.nextPhaseTimestamp(); + final timestampBigInt = await encointerKusama.query.encointerScheduler.nextPhaseTimestamp(); final timestamp = timestampBigInt.toInt(); Log.d('api: next phase timestamp: $timestamp', 'EncointerApi'); @@ -143,9 +140,9 @@ class EncointerApi { /// This is on-chain in Cantillon. Future getPhaseDurations() async { final durations = await Future.wait([ - _encointerKusama.query.encointerScheduler.phaseDurations(et.CeremonyPhaseType.registering), - _encointerKusama.query.encointerScheduler.phaseDurations(et.CeremonyPhaseType.assigning), - _encointerKusama.query.encointerScheduler.phaseDurations(et.CeremonyPhaseType.attesting), + encointerKusama.query.encointerScheduler.phaseDurations(et.CeremonyPhaseType.registering), + encointerKusama.query.encointerScheduler.phaseDurations(et.CeremonyPhaseType.assigning), + encointerKusama.query.encointerScheduler.phaseDurations(et.CeremonyPhaseType.attesting), ]); // Create map and cast to the old type before introducing polkadart @@ -196,7 +193,7 @@ class EncointerApi { /// This is on-chain in Cantillon. Future getCurrentCeremonyIndex() async { Log.d('api: getCurrentCeremonyIndex', 'EncointerApi'); - final cIndex = await _encointerKusama.query.encointerScheduler.currentCeremonyIndex(); + final cIndex = await encointerKusama.query.encointerScheduler.currentCeremonyIndex(); Log.d('api: Current Ceremony index: $cIndex', 'EncointerApi'); store.encointer.setCurrentCeremonyIndex(cIndex); return cIndex; @@ -230,7 +227,7 @@ class EncointerApi { final cid = store.encointer.chosenCid; if (cid == null) return; - final meta = await _encointerKusama.query.encointerCommunities + final meta = await encointerKusama.query.encointerCommunities .communityMetadata(et.CommunityIdentifier(geohash: cid.geohash, digest: cid.digest)) .then(CommunityMetadata.fromPolkadart); // convert to our own type @@ -433,7 +430,7 @@ class EncointerApi { /// This is on-chain in Cantillon. Future> getCommunityIdentifiers() async { // cids in polkadart type - final cidsPolkadart = await _encointerKusama.query.encointerCommunities.communityIdentifiers(); + final cidsPolkadart = await encointerKusama.query.encointerCommunities.communityIdentifiers(); // transform them into our own cid final cids = cidsPolkadart.map((cid) => CommunityIdentifier(cid.geohash, cid.digest)).toList(); diff --git a/app/test/mock/api/mock_api.dart b/app/test/mock/api/mock_api.dart index ffc516a38..e146c703b 100644 --- a/app/test/mock/api/mock_api.dart +++ b/app/test/mock/api/mock_api.dart @@ -11,6 +11,7 @@ import 'mock_account_api.dart'; import 'mock_assets_api.dart'; import 'mock_chain_api.dart'; import 'mock_encointer_api.dart'; +import 'mock_encointer_kusama_api.dart'; import 'mock_js_api.dart'; import 'mock_substrate_dart_api.dart'; @@ -33,7 +34,7 @@ class MockApi extends Api { MockAccountApi(store, js), MockAssetsApi(store, js), MockChainApi(store, js), - MockEncointerApi(store, js, dartApi, ewHttp), + MockEncointerApi(store, js, dartApi, ewHttp, MockEncointerKusamaApi()), MockIpfsApi(ewHttp), jsServiceEncointer, ); diff --git a/app/test/mock/api/mock_encointer_api.dart b/app/test/mock/api/mock_encointer_api.dart index af1338fee..46b24f0b4 100644 --- a/app/test/mock/api/mock_encointer_api.dart +++ b/app/test/mock/api/mock_encointer_api.dart @@ -22,7 +22,7 @@ import 'mock_substrate_dart_api.dart'; /// The getters then return the preconfigured value, which in turn leads to consistent /// responses in the test. class MockEncointerApi extends EncointerApi { - MockEncointerApi(super.store, MockJSApi super.js, MockSubstrateDartApi super.dartApi, super.ewHttp); + MockEncointerApi(super.store, MockJSApi super.js, MockSubstrateDartApi super.dartApi, super.ewHttp, super.encointerKusama); @override Future startSubscriptions() async { diff --git a/app/test/mock/api/mock_encointer_kusama_api.dart b/app/test/mock/api/mock_encointer_kusama_api.dart new file mode 100644 index 000000000..7fd3927a7 --- /dev/null +++ b/app/test/mock/api/mock_encointer_kusama_api.dart @@ -0,0 +1,27 @@ +import 'package:ew_polkadart/ew_polkadart.dart'; + +class MockEncointerKusamaApi implements EncointerKusama { + @override + Future connect() { + // TODO: implement connect + throw UnimplementedError(); + } + + @override + // TODO: implement constant + Constants get constant => throw UnimplementedError(); + + @override + Future disconnect() { + // TODO: implement disconnect + throw UnimplementedError(); + } + + @override + // TODO: implement query + Queries get query => throw UnimplementedError(); + + @override + // TODO: implement rpc + Rpc get rpc => throw UnimplementedError(); +} diff --git a/packages/ew_polkadart/lib/ew_polkadart.dart b/packages/ew_polkadart/lib/ew_polkadart.dart index 3573639da..68212e2c4 100644 --- a/packages/ew_polkadart/lib/ew_polkadart.dart +++ b/packages/ew_polkadart/lib/ew_polkadart.dart @@ -1,4 +1,5 @@ /// Encointer Polkadart Package library ew_polkadart; -export 'generated/encointer_kusama/encointer_kusama.dart' show EncointerKusama; +export 'generated/encointer_kusama/encointer_kusama.dart' show EncointerKusama, Constants, Queries, Rpc; +export 'package:polkadart/polkadart.dart';