import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; import Layer2TestWeb3Strategy from '@cardstack/web-client/utils/web3-strategies/test-layer2'; import { WorkflowSession } from '@cardstack/web-client/models/workflow'; import { createDepotSafe, createMerchantSafe, createPrepaidCardSafe, createSafeToken, } from '@cardstack/web-client/utils/test-factories'; module( 'Integration | Component | card-pay/safe-balance-card', function (hooks) { setupRenderingTest(hooks); let layer2Service: Layer2TestWeb3Strategy; let session: WorkflowSession; let layer2AccountAddress = '0x182619c6Ea074C053eF3f1e1eF81Ec8De6Eb6E44'; let depotAddress = '0xB236ca8DbAB0644ffCD32518eBF4924ba8666666'; let merchantAddress = '0xmerchantbAB0644ffCD32518eBF4924ba8666666'; let prepaidCardAddress = '0xprepaidDbAB0644ffCD32518eBF4924ba8666666'; hooks.beforeEach(async function () { session = new WorkflowSession(); this.set('session', session); layer2Service = this.owner.lookup('service:layer2-network') .strategy as Layer2TestWeb3Strategy; layer2Service.test__simulateRemoteAccountSafes(layer2AccountAddress, [ createDepotSafe({ address: depotAddress, tokens: [ createSafeToken('DAI.CPXD', '250000000000000000000'), createSafeToken('CARD.CPXD', '500000000000000000000'), ], }), createMerchantSafe({ address: merchantAddress, merchant: '0xprepaidDbAB0644ffCD32518eBF4924ba8666666', tokens: [ createSafeToken('DAI.CPXD', '125000000000000000000'), createSafeToken('CARD.CPXD', '450000000000000000000'), ], accumulatedSpendValue: 100, }), createPrepaidCardSafe({ address: prepaidCardAddress, owners: [layer2AccountAddress], tokens: [ createSafeToken('DAI.CPXD', '225000000000000000000'), createSafeToken('CARD.CPXD', '0'), ], spendFaceValue: 2324, prepaidCardOwner: layer2AccountAddress, issuer: layer2AccountAddress, transferrable: false, }), ]); // Ensure safes have been loaded, as in a workflow context await layer2Service.test__simulateAccountsChanged([layer2AccountAddress]); }); test('it renders the safe type and balances for the safe address specified in the workflow', async function (assert) { this.set('config', { safeAddressKey: 'prepaidFundingSafeAddress' }); session.setValue('prepaidFundingSafeAddress', merchantAddress); await render(hbs` `); assert .dom('[data-test-safe-address]') .containsText('Business address') .containsText(merchantAddress); assert.dom('[data-test-balance-label]').containsText('Business balance'); assert .dom('[data-test-balance="DAI.CPXD"]') .containsText('125.00 DAI.CPXD'); assert .dom('[data-test-balance="CARD.CPXD"]') .containsText('450.00 CARD.CPXD'); }); test('it can render balances for a prepaid card safe and filters out zero-balance tokens', async function (assert) { this.set('config', { safeAddressKey: 'withdrawalSafeAddress' }); session.setValue('withdrawalSafeAddress', prepaidCardAddress); await render(hbs` `); assert .dom('[data-test-safe-address]') .containsText('Prepaid card address') .containsText(prepaidCardAddress); assert .dom('[data-test-balance-label]') .containsText('Prepaid card balance'); assert .dom('[data-test-balance="DAI.CPXD"]') .containsText('225.00 DAI.CPXD'); assert.dom('[data-test-balance="CARD.CPXD"]').doesNotExist(); }); test('it shows a message when the wallet is disconnected', async function (assert) { this.set('config', { safeAddressKey: 'withdrawalSafeAddress' }); session.setValue('withdrawalSafeAddress', prepaidCardAddress); layer2Service.test__simulateDisconnectFromWallet(); await render(hbs` `); assert.dom('[data-test-wallet-disconnected]').exists(); }); test('it shows a message when the safe is not found', async function (assert) { this.set('config', { safeAddressKey: 'withdrawalSafeAddress' }); session.setValue('withdrawalSafeAddress', '0x000'); await render(hbs` `); assert.dom('[data-test-safe-not-found]').containsText('0x000'); }); } );