import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render, settled, setupOnerror } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; import { setupMirage } from 'ember-cli-mirage/test-support'; import { MirageTestContext } from 'ember-cli-mirage/test-support'; import Layer2TestWeb3Strategy from '@cardstack/web-client/utils/web3-strategies/test-layer2'; import { createDepotSafe, createMerchantSafe, createPrepaidCardSafe, createSafeToken, getFilenameFromDid, } from '@cardstack/web-client/utils/test-factories'; import { currentNetworkDisplayInfo as c } from '@cardstack/web-client/utils/web3-strategies/network-display-info'; import { TinyColor } from '@ctrl/tinycolor'; interface Context extends MirageTestContext {} const EXAMPLE_DID = 'did:cardstack:1moVYMRNGv6E5Ca3t7aXVD2Yb11e4e91103f084a'; module('Integration | Component | card-pay/safe-balances', function (hooks) { setupRenderingTest(hooks); setupMirage(hooks); let layer2Service: Layer2TestWeb3Strategy; let layer2AccountAddress = '0x182619c6Ea074C053eF3f1e1eF81Ec8De6Eb6E44'; let depotAddress = '0xB236ca8DbAB0644ffCD32518eBF4924ba8666666'; let merchantAddress = '0xmerchantbAB0644ffCD32518eBF4924ba8666666'; let prepaidCardAddress = '0xprepaidDbAB0644ffCD32518eBF4924ba8666666'; hooks.beforeEach(async function (this: Context) { this.server.create('merchant-info', { id: await getFilenameFromDid(EXAMPLE_DID), name: 'Mandello', slug: 'mandello1', did: EXAMPLE_DID, color: '#00ffc1', 'text-color': '#000001', 'owner-address': layer2AccountAddress, }); layer2Service = this.owner.lookup('service:layer2-network') .strategy as Layer2TestWeb3Strategy; await layer2Service.test__simulateAccountsChanged([layer2AccountAddress]); }); test('it renders a depot safe', async function (this: Context, assert) { this.set( 'safe', createDepotSafe({ address: depotAddress, tokens: [ createSafeToken('DAI.CPXD', '250111100000000000000'), createSafeToken('CARD.CPXD', '500000000000000000000'), ], }) ); await render(hbs` `); assert.dom('[data-test-safe-balances]').containsText('0xB236...6666'); assert .dom('[data-test-safe-balances-network]') .containsText(`On ${c.layer2.shortName}`); assert.dom('[data-test-safe-balances-count]').containsText('2'); assert.dom('[data-test-safe-balances-type]').containsText('Depot'); assert.dom('[data-test-safe-balances-title]').containsText('Depot'); assert.dom('[data-test-safe-balances-logo=depot]').exists(); assert.dom('[data-test-safe-balances-link]').doesNotExist(); assert .dom('[data-test-safe-balances-usd-total]') .containsText('$150.02 USD'); assert .dom('[data-test-safe-balances-token="DAI.CPXD"]') .containsText('250.11 DAI.CPXD') .containsText('$50.02 USD'); assert .dom('[data-test-safe-balances-token="CARD.CPXD"]') .containsText('500.00 CARD.CPXD') .containsText('$100.00 USD'); }); test('it renders a merchant safe', async function (this: Context, assert) { this.set( 'safe', createMerchantSafe({ address: merchantAddress, merchant: '0xprepaidDbAB0644ffCD32518eBF4924ba8666666', tokens: [createSafeToken('DAI.CPXD', '125000000000000000000')], accumulatedSpendValue: 100, infoDID: EXAMPLE_DID, }) ); await render(hbs` `); assert.dom('[data-test-safe-balances-count]').containsText('1'); assert.dom('[data-test-safe-balances-type]').containsText('Business'); await settled(); assert.dom('[data-test-safe-balances-title]').containsText('Mandello'); assert .dom('[data-test-safe-balances-link]') .containsText('cardstack.xyz/mandello1') .hasAttribute('href', 'https://cardstack.xyz/mandello1'); assert.dom('[data-test-safe-balances-header]').hasStyle({ 'background-color': new TinyColor('#00ffc1').toRgbString(), color: new TinyColor('#000001').toRgbString(), }); assert .dom('[data-test-merchant-logo]') .containsText('M') .hasStyle({ 'background-color': new TinyColor('#00ffc1').toRgbString(), color: new TinyColor('#000001').toRgbString(), }); }); test('it throws an error rendering a prepaid card safe', async function (this: Context, assert) { setupOnerror(function (err: Error) { assert.equal( err.message, 'CardPay::SafeBalances does not support a safe type of prepaid-card' ); }); this.set( 'safe', createPrepaidCardSafe({ address: prepaidCardAddress, owners: [layer2AccountAddress], tokens: [ createSafeToken('DAI.CPXD', '225000000000000000000'), createSafeToken('CARD.CPXD', '0'), ], spendFaceValue: 2324, prepaidCardOwner: layer2AccountAddress, issuer: layer2AccountAddress, transferrable: false, }) ); await render(hbs` `); }); });