Skip to content

Commit

Permalink
[encointer_api] fix unit tests by passing a MockEncointerKusama into …
Browse files Browse the repository at this point in the history
…the EncointerApi constructor
  • Loading branch information
clangenb committed Oct 16, 2023
1 parent 6529bf3 commit 8554b44
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 17 deletions.
3 changes: 2 additions & 1 deletion app/lib/service/substrate_api/api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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
///
Expand Down Expand Up @@ -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,
);
Expand Down
23 changes: 10 additions & 13 deletions app/lib/service/substrate_api/encointer/encointer_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -128,7 +125,7 @@ class EncointerApi {
/// This is on-chain in Cantillon.
Future<int> 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');
Expand All @@ -143,9 +140,9 @@ class EncointerApi {
/// This is on-chain in Cantillon.
Future<void> 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
Expand Down Expand Up @@ -196,7 +193,7 @@ class EncointerApi {
/// This is on-chain in Cantillon.
Future<int?> 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;
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -433,7 +430,7 @@ class EncointerApi {
/// This is on-chain in Cantillon.
Future<List<CommunityIdentifier>> 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();
Expand Down
3 changes: 2 additions & 1 deletion app/test/mock/api/mock_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -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,
);
Expand Down
2 changes: 1 addition & 1 deletion app/test/mock/api/mock_encointer_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<void> startSubscriptions() async {
Expand Down
27 changes: 27 additions & 0 deletions app/test/mock/api/mock_encointer_kusama_api.dart
Original file line number Diff line number Diff line change
@@ -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();
}
3 changes: 2 additions & 1 deletion packages/ew_polkadart/lib/ew_polkadart.dart
Original file line number Diff line number Diff line change
@@ -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';

0 comments on commit 8554b44

Please sign in to comment.