diff --git a/lib/api/response/crypto_config_response_extended.dart b/lib/api/response/crypto_config_response_extended.dart new file mode 100644 index 0000000000..206d3ce517 --- /dev/null +++ b/lib/api/response/crypto_config_response_extended.dart @@ -0,0 +1,29 @@ +import 'package:deriv_dependency_injector/dependency_injector.dart'; +import 'package:flutter_deriv_api/api/exceptions/base_api_exception.dart'; +import 'package:flutter_deriv_api/api/models/base_exception_model.dart'; +import 'package:flutter_deriv_api/api/response/crypto_config_response_result.dart'; +import 'package:flutter_deriv_api/basic_api/generated/crypto_config_receive.dart'; +import 'package:flutter_deriv_api/basic_api/generated/crypto_config_send.dart'; +import 'package:flutter_deriv_api/helpers/miscellaneous_helper.dart'; +import 'package:flutter_deriv_api/services/connection/api_manager/base_api.dart'; + +/// The extended version of the [CryptoConfigResponseExtended] class to implement +/// the API call methods. +class CryptoConfigResponseExtended extends CryptoConfigResponse { + static final BaseAPI _api = Injector()(); + + /// Fetches the available wallets that can be created + static Future fetchCryptoConfig({ + required CryptoConfigRequest request, + }) async { + final CryptoConfigReceive response = await _api.call(request: request); + + checkException( + response: response, + exceptionCreator: ({BaseExceptionModel? baseExceptionModel}) => + BaseAPIException(baseExceptionModel: baseExceptionModel), + ); + + return CryptoConfigResponse.fromJson(response.cryptoConfig); + } +} diff --git a/lib/services/connection/api_manager/mock_api.dart b/lib/services/connection/api_manager/mock_api.dart index a2b0ea308f..ea9aa85c20 100644 --- a/lib/services/connection/api_manager/mock_api.dart +++ b/lib/services/connection/api_manager/mock_api.dart @@ -13,6 +13,7 @@ import 'package:flutter_deriv_api/services/connection/api_manager/connection_inf import 'package:flutter_deriv_api/services/connection/api_manager/exceptions/api_manager_exception.dart'; import 'package:flutter_deriv_api/services/connection/api_manager/mock_data/account/new_account_wallet_response.dart'; import 'package:flutter_deriv_api/services/connection/api_manager/mock_data/cashier/cashier_payments_response.dart'; +import 'package:flutter_deriv_api/services/connection/api_manager/mock_data/common/crypto_config_response.dart'; import 'package:flutter_deriv_api/services/connection/call_manager/base_call_manager.dart'; import 'package:flutter_deriv_api/services/connection/call_manager/exceptions/call_manager_exception.dart'; @@ -226,6 +227,8 @@ class MockAPI extends BaseAPI { return copyTradingListResponse; case 'copytrading_statistics': return copyTradingStatisticsResponse; + case 'crypto_config': + return cryptoConfigResponse; // case 'document_upload': case 'exchange_rates': return exchangeRatesResponse; diff --git a/lib/services/connection/api_manager/mock_data/common/crypto_config_response.dart b/lib/services/connection/api_manager/mock_data/common/crypto_config_response.dart new file mode 100644 index 0000000000..f1c69c71a4 --- /dev/null +++ b/lib/services/connection/api_manager/mock_data/common/crypto_config_response.dart @@ -0,0 +1,32 @@ +const String cryptoConfigResponse = ''' +{ + "crypto_config": { + "currencies_config": { + "BTC": { + "minimum_withdrawal": 0.0002968 + }, + "ETH": { + "minimum_withdrawal": 0.01445239 + }, + "LTC": { + "minimum_withdrawal": 0.05539552 + }, + "USDC": { + "minimum_withdrawal": 50 + }, + "eUSDT": { + "minimum_withdrawal": 49.96 + }, + "tUSDT": { + "minimum_deposit": 50, + "minimum_withdrawal": 24.98 + } + } + }, + "echo_req": { + "crypto_config": 1, + "req_id": 2 + }, + "msg_type": "crypto_config", +} +'''; diff --git a/test/api/common/crypto_config/crypto_config_test.dart b/test/api/common/crypto_config/crypto_config_test.dart new file mode 100644 index 0000000000..6196104a28 --- /dev/null +++ b/test/api/common/crypto_config/crypto_config_test.dart @@ -0,0 +1,23 @@ +import 'package:deriv_dependency_injector/dependency_injector.dart'; +import 'package:flutter_deriv_api/api/api_initializer.dart'; +import 'package:flutter_deriv_api/api/response/crypto_config_response_extended.dart'; +import 'package:flutter_deriv_api/api/response/crypto_config_response_result.dart'; +import 'package:flutter_deriv_api/basic_api/generated/crypto_config_send.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../../../services/call_manager/base_call_manager_test.dart'; + +void main() { + setUp(() => APIInitializer().initialize(api: MockAPI())); + + tearDown(() => Injector().dispose()); + + test('CryptoConfigResponseExtended makes API call.', () async { + final CryptoConfigResponse response = + await CryptoConfigResponseExtended.fetchCryptoConfig( + request: const CryptoConfigRequest(), + ); + + expect(response, isA()); + }); +}