createTestFinipay function

Future<Finipay> createTestFinipay({
  1. required StubHttpAdapter adapter,
  2. KeyValueStore? secureStore,
  3. KeyValueStore? localStore,
  4. String? signedInAs,
  5. bool transfers = true,
  6. String tenant = 'FINIPAY',
  7. String appVersion = '1.7.0',
  8. FinipayBranding? branding,
  9. PartnerCodeProvider? partnerCode,
  10. PartnerUserProvider? partnerUser,
  11. Map<String, String> messages = const {},
  12. MoneyCodec moneyCodec = const MoneyCodec(format: MoneyWireFormat.decimalNumber),
})

SDK на подменённой сети для тестов приложения, без платформенных каналов и Finipay.instance. signedInAs — уже открытая сессия с этим userId; transfers false — как init без ключей шифрования.

Implementation

Future<Finipay> createTestFinipay({
  required StubHttpAdapter adapter,
  KeyValueStore? secureStore,
  KeyValueStore? localStore,
  String? signedInAs,
  bool transfers = true,
  String tenant = 'FINIPAY',
  String appVersion = '1.7.0',
  FinipayBranding? branding,
  PartnerCodeProvider? partnerCode,
  PartnerUserProvider? partnerUser,
  Map<String, String> messages = const {},
  MoneyCodec moneyCodec = const MoneyCodec(
    format: MoneyWireFormat.decimalNumber,
  ),
}) async {
  final secure = secureStore ?? InMemoryKeyValueStore();
  if (signedInAs != null) {
    await KeyValueTokenStore(secure).write(
      AuthSession(
        accessToken: 'test-access',
        refreshToken: 'test-refresh',
        userId: signedInAs,
        // Иначе SDK сбросит сессию без метки как чужую.
        owner: sessionOwnerOf(partnerUser?.call()),
      ),
    );
  }

  var ids = 0;
  final core = await FinipayCore.create(
    FinipayConfig(
      environment: FinipayEnvironment.custom(Uri.parse('https://stub.local')),
      clientInfo: FinipayClientInfo(
        tenant: tenant,
        platform: 'IOS',
        appVersion: appVersion,
      ),
      branding: branding,
      secureStore: secure,
      localStore: localStore ?? InMemoryKeyValueStore(),
      generateId: () => 'test-${++ids}',
      moneyCodec: moneyCodec,
      adapter: adapter,
      partnerCode: partnerCode,
      partnerUser: partnerUser,
      messages: messages,
    ),
  );
  return finipayFromCore(
    core,
    transferCipher:
        transfers ? const _PlainCipher() : const MissingTransferCipher(),
  );
}