cypress tests: until amounts and balances

This commit is contained in:
moneymanolis 2023-01-20 21:00:49 +01:00
parent bac1744059
commit 87a584eafe
16 changed files with 92 additions and 127 deletions

View file

@ -11,54 +11,14 @@ describe('Test the rendering of balances and amounts', () => {
Cypress.Cookies.preserveOnce('session')
})
it('Total balance of 20 BTC', () => {
/* This is how the DOM looks like
<th id="fullbalance_amount" class="right-align">
20.0
<span class="unselectable transparent-text">0</span>
<span class="thousand-digits-in-btc-amount">
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
</span>
<span class="last-digits-in-btc-amount">
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
</span>
</th>
*/
it('Total balance', () => {
cy.selectWallet('Ghost wallet')
cy.get('#fullbalance_amount').should('have.text', '20.00000000') // should('have.text') returns ALL textContents (descendants and unvisible text)
cy.get('#fullbalance_amount').find('span').first().should('have.text', '0').and('not.be.visible')
cy.get('#fullbalance_amount').find('.thousand-digits-in-btc-amount').children().each((element) => {
cy.wrap(element).should('have.text', '0')
cy.wrap(element).should('not.be.visible')
});
cy.get('#fullbalance_amount').find('.last-digits-in-btc-amount').children().each((element) => {
cy.wrap(element).should('have.text', '0')
cy.wrap(element).should('not.be.visible')
});
cy.get('#fullbalance_amount').then(($amount) => {
expect(parseFloat($amount.text())).to.be.gt(20)
})
})
it('Unconfirmed balance of 0.05 BTC', () => {
/* This is how the DOM looks like
<th id="unconfirmed_amount" class="right-align">
0.05
<span class="thousand-digits-in-btc-amount">
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
</span>
<span class="last-digits-in-btc-amount">
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
<span class="unselectable transparent-text">0</span>
</span>
</th>
*/
// We get 5 mio. sats from a funding wallet
// TODO: If this funding wallet is used more, move it to a seperate spec file
it('Unconfirmed balance', () => {
cy.addHotDevice('Satoshis hot keys','bitcoin')
cy.addWallet('Funding wallet', 'segwit', 'funded', 'btc', 'singlesig', 'Satoshis hot keys')
cy.selectWallet('Funding wallet')
@ -75,42 +35,38 @@ describe('Test the rendering of balances and amounts', () => {
cy.get('#satoshis_hot_keys_hot_sign_btn').click()
cy.get('#hot_enter_passphrase__submit').click()
cy.get('#broadcast_local_btn').click()
// To close the overlay (no cancel button here)
cy.get('#page_overlay_popup').click()
cy.reload()
cy.selectWallet('Ghost wallet')
// Once again because only once doesn't work for some stupid unknown reason
cy.selectWallet('Ghost wallet')
cy.get('#unconfirmed_amount').should('have.text', '0.05000000')
cy.get('#unconfirmed_amount').then(($amount) => {
expect(parseFloat($amount.text())).to.be.gt(0).and.to.be.lt(1);
})
cy.get('#unconfirmed_amount').find('.thousand-digits-in-btc-amount').children().each((element) => {
cy.wrap(element).should('have.text', '0')
cy.wrap(element).should('not.be.visible')
});
cy.get('#unconfirmed_amount').find('.last-digits-in-btc-amount').children().each((element) => {
cy.wrap(element).should('have.text', '0')
cy.wrap(element).should('not.be.visible')
});
})
it('Total balance with all digits', () => {
/* This is how the DOM looks like
<th id="fullbalance_amount" class="right-align">
19.94
<span class="thousand-digits-in-btc-amount">999</span>
<span class="last-digits-in-btc-amount">291</span>
</th>
*/
// Let's use the funding wallet
// Works as long as the fee was 709 and the original balance of the funding wallet was 20 BTC
cy.selectWallet('Funding wallet')
cy.get('#fullbalance_amount').should('have.text', '19.94999291')
cy.get('#fullbalance_amount').find('.thousand-digits-in-btc-amount').should('have.text', '999')
cy.get('#fullbalance_amount').find('.thousand-digits-in-btc-amount').should('have.css', 'color','rgb(145, 145, 145)')
cy.get('#fullbalance_amount').find('.last-digits-in-btc-amount').should('have.text', '291')
cy.get('#fullbalance_amount').find('.last-digits-in-btc-amount').should('have.css', 'color','rgb(121, 121, 121)')
cy.get('#fullbalance_amount').then(($amount) => {
expect(parseFloat($amount.text())).to.be.gt(19).and.to.be.lt(20);
})
cy.get('#fullbalance_amount').find('.thousand-digits-in-btc-amount').should(($amount) => {
expect($amount.text()).to.match(/^\d{3}$/)
}).and(($amount) => {
expect(parseFloat($amount.text())).to.be.gt(0);
});
cy.get('#fullbalance_amount').find('.last-digits-in-btc-amount').should(($amount) => {
expect($amount.text()).to.match(/^\d{3}$/)
}).and(($amount) => {
expect(parseFloat($amount.text())).to.be.gt(0);
});
cy.get('#fullbalance_amount').children().each((element) => {
cy.wrap(element).should('be.visible')
cy.log(element)
});
})
})
// TODO: Test (new) amount display once implemented, e.g. in sending dialogue, could probably be done in one of the tests above.
})

View file

@ -8,7 +8,7 @@ describe('Completely empty specter-home', () => {
it('Click around on the welcome page', () => {
cy.contains('Welcome to Specter')
cy.contains('Settings').click()
cy.get('[data-cy="settings-btn"]').click()
cy.contains('Backup and Restore')
cy.contains('Authentication').click()
cy.contains('USB Devices').click()

View file

@ -13,7 +13,7 @@ describe('Test the labeling of addresses and transactions', () => {
it('Labeling an address on the address overview', () => {
// Using the ghost wallet
cy.get('.side').contains('Ghost wallet').click()
cy.selectWallet('Ghost wallet')
cy.get('main').contains('Addresses').click()
// Checking the correct titles since those are the only orientation for the user right now
cy.get('[data-cy="edit-label-btn"]').last().should('have.attr', 'title', 'Edit label') // The last element in the array is the first one on the screen ...

View file

@ -35,7 +35,7 @@ describe('Test plugins', () => {
// This flow only works if we don't keep the session alive! So, no Cypress.Cookies.preserveOnce('session') in beforeEach().
cy.get('#password').type("mySecretPassword")
cy.get('#login-btn').click()
cy.get('[href="/settings/"] > .svg-white').click()
cy.get('[data-cy="settings-btn"]').click()
cy.get('[href="/settings/auth"]').click()
cy.get('select').select("none")
cy.get('#submit-btn').click()

View file

@ -2,17 +2,17 @@
describe('Test QR code signing flow', () => {
before(() => {
Cypress.config('includeShadowDom', true)
cy.visit('/')
})
// Keeps the session cookie alive, Cypress by default clears all cookies before each test
beforeEach(() => {
cy.visit('/')
cy.viewport(1200,660)
Cypress.Cookies.preserveOnce('session')
})
it('Message signing with Specter DIY', () => {
cy.get('.side').contains('Ghost wallet').click()
cy.selectWallet('Ghost wallet')
cy.get('main').contains('Addresses').click()
// Click on the first address
cy.contains('td', '#0').siblings().contains('bcrt').click()
@ -22,7 +22,8 @@ describe('Test QR code signing flow', () => {
cy.get('#message').type('The DIY is the best signing device.')
cy.get('#diy_ghost_qr_sign_msg_btn').click()
cy.get('#diy_ghost_sign_msg_qr > h2').contains('Scan this QR code')
cy.get('#page_overlay_popup_cancel_button').click()
// To close the overlay (no cancel button here)
cy.get('#page_overlay_popup').click()
})
it('No QR message signing button for a Trezor', () => {
@ -33,36 +34,41 @@ describe('Test QR code signing flow', () => {
// Only USB signing available for a Trezor device
cy.contains('Sign message via USB').should('be.visible')
cy.contains('Sign message via QR code').should('not.exist')
// Change device type back to DIY
cy.get('#page_overlay_popup').click()
cy.changeDeviceType("DIY ghost", "specter")
})
it('No message signing with Electrum', () => {
Cypress.on('uncaught:exception', (err, runnable) => {
return false
cy.get('body').then(($body) => {
if (!$body.text().includes("Electrum Device")) {
cy.get('#toggle_devices_list').click()
cy.get('#btn_new_device').click()
cy.get('#electrum_device_card').click()
cy.get('#device_name').type("Electrum Device")
cy.get('#master_pub_key').type("vpub5VGXXixD2pHLFtcKtCF57e8mx2JW6fie8VydXijC8sRKAL4RshgjEmzbmV915NeVB9pd23DVYem6zWM7HXFLNwaffNVHowdD9SJWwESyQhp")
cy.get('.small-card > .btn').click()
cy.contains('Close').click()
}
})
// returning false here prevents Cypress from
// failing the test due to this thus far unidentified error:
// "The following error originated from your application code, not from Cypress.
// > missing ) after argument list"
cy.deleteWallet("Wallet that can't sign messages")
cy.deleteDevice("Electron's Electrum Device")
cy.get('#toggle_devices_list').click()
cy.get('#btn_new_device').click()
cy.get('#electrum_device_card').click()
cy.get('#device_name').type("Electron's Electrum Device")
cy.get('#master_pub_key').type("vpub5VGXXixD2pHLFtcKtCF57e8mx2JW6fie8VydXijC8sRKAL4RshgjEmzbmV915NeVB9pd23DVYem6zWM7HXFLNwaffNVHowdD9SJWwESyQhp")
cy.get('.small-card > .btn').click()
cy.get('button').contains("Create single key wallet").click()
cy.get('#wallet_name').type("Wallet that can't sign messages")
cy.get('#keysform').contains("Create wallet").click()
cy.get('#btn_continue').click()
cy.get('body').then(($body) => {
if (!$body.text().includes("Wallet that cannot sign messages")) {
cy.get('#btn_new_wallet').click()
cy.get('[data-cy="singlesig-wallet-btn"]').click()
cy.get('#electrum_device').click()
cy.get('#wallet_name').type("Wallet that cannot sign messages")
cy.get('#keysform').contains("Create wallet").click()
cy.get('#btn_continue').click()
}
})
cy.selectWallet("Wallet that cannot sign messages")
cy.get('main').contains('Addresses').click()
cy.contains('td', '#0').siblings().contains('bcrt').click()
cy.get('#msg-signing-btn').should('not.exist')
// Close the address data screen
cy.get('[data-cy="address-data-screen-close-btn"]').click()
// Clean up
cy.deleteWallet("Wallet that can't sign messages")
cy.deleteDevice("Electron's Electrum Device")
cy.deleteWallet("Wallet that cannot sign messages")
cy.deleteDevice("Electrum Device")
})
})

View file

@ -62,24 +62,18 @@ Cypress.Commands.add("addHotDevice", (name, node_type) => {
// node_type is either elements or bitcoin
cy.get('body').then(($body) => {
if ($body.text().includes(name)) {
cy.deleteDevice(name)
// We might get an error here, if the device is used in a wallet
// We assume therefore that this is ok (see below)
return
}
cy.get('#side-content').click()
if (!cy.get('#btn_new_device').isVisible) {
cy.get('#toggle_devices_list').click()
}
cy.get('#btn_new_device').click( {force: true} )
cy.contains('Select Your Device Type')
cy.get(`#${node_type}core_device_card`).click()
cy.get('#submit-mnemonic').click()
cy.get('#device_name').type(name)
cy.get('#submit-keys').click()
cy.get('#toggle_devices_list').click()
// It's a bit hackish as if the device already exists, we'll get an error
// but continue flaslessly nevertheless
cy.get('#devices_list > .item > div', { timeout: 8000 }).contains(name)
cy.get('[data-cy="new-device-added-screen-close-btn"]').click()
})
})
@ -97,11 +91,16 @@ Cypress.Commands.add("deleteDevice", (name) => {
})
})
Cypress.Commands.add("changeDeviceType", (nameDevice, newType) => {
Cypress.Commands.add("changeDeviceType", (deviceName, newType) => {
cy.get('body').then(($body) => {
if ($body.text().includes(nameDevice)) {
cy.get('#toggle_devices_list').click()
cy.contains(nameDevice).click()
if ($body.text().includes(deviceName)) {
cy.get('#toggle_devices_list').then(($devicesList) => {
if ($devicesList.text() == 'Devices ▸') {
cy.get('#toggle_devices_list').click()
}
})
let refDeviceName = deviceName.toLowerCase().replace(/ /g,"_");
cy.get(`[data-cy='device-sidebar-btn-${refDeviceName}']`).click()
cy.get('#device_type').select(newType)
cy.get('#settype').click()
}
@ -154,8 +153,6 @@ Cypress.Commands.add("addWallet", (walletName, walletType, funded, nodeType, key
}
cy.get('body').then(($body) => {
if ($body.text().includes(walletName)) {
cy.get('#toggle_wallets_list').click()
cy.contains(walletName).click()
return
}
cy.get('#side-content').click()
@ -198,23 +195,29 @@ Cypress.Commands.add("addWallet", (walletName, walletType, funded, nodeType, key
})
})
Cypress.Commands.add("deleteWallet", (name) => {
Cypress.Commands.add("deleteWallet", (walletName) => {
cy.get('body').then(($body) => {
if ($body.text().includes(name)) {
cy.contains(name).click()
if ($body.text().includes(walletName)) {
cy.get(`[data-cy='wallet-sidebar-btn-${walletName}']`).click()
cy.get('#btn_settings').click( {force: true} )
cy.get('#advanced_settings_tab_btn').click()
cy.get('#delete_wallet').click()
// That does not seem to delete the wallet-file in elements, though
// So let's do that as well
cy.task("delete:elements-hotwallet")
}
})
})
Cypress.Commands.add("selectWallet", (name) => {
cy.get('body').then(() => {
cy.contains(name).click( {force: true} )
Cypress.Commands.add("selectWallet", (walletName) => {
cy.get('body').then(($body) => {
if ($body.text().includes(walletName)) {
cy.get('#toggle_wallets_list').then(($walletsList) => {
// Only toggle the wallets list if it is not already toggled
if ($walletsList.text() == 'Wallets ▸') {
cy.get('#toggle_wallets_list').click()
}
cy.get(`[data-cy='wallet-sidebar-btn-${walletName}']`).click()
})
}
})
})

View file

@ -44,7 +44,7 @@
<div class="address-data bg-dark-800 rounded-xl p-4">
<div class="flex justify-between mb-2">
<h3 class="mb-0">{{ _("Address Data") }}</h3>
<p class="m-0 cursor-pointer" onclick="hidePageOverlay()" class="cursor-pointer">Close</p>
<p class="m-0 cursor-pointer" onclick="hidePageOverlay()" class="cursor-pointer" data-cy="address-data-screen-close-btn">Close</p>
</div>
<div class="address-data-info"></div>
<div class="note"></div>

View file

@ -5,7 +5,7 @@
- device_alias: Active device alias.
#}
{% macro sidebar_device_list_item(device, device_alias) -%}
<a class="flex hover:bg-dark-800 {% if device_alias == device.alias %}bg-dark-800{% endif %} rounded-xl -mx-3 px-3 h-12 items-center space-x-2 my-1" href="{{ url_for('devices_endpoint.device', device_alias=device.alias) }}" class="item {% if device_alias == device.alias %}active{% endif %}" id="device_list_item_{{ device.ref4name }}">
<a class="flex hover:bg-dark-800 {% if device_alias == device.alias %}bg-dark-800{% endif %} rounded-xl -mx-3 px-3 h-12 items-center space-x-2 my-1" href="{{ url_for('devices_endpoint.device', device_alias=device.alias) }}" class="item {% if device_alias == device.alias %}active{% endif %}" id="device_list_item_{{ device.ref4name }}" data-cy="device-sidebar-btn-{{ device.ref4name }}">
<div class="bg-dark-700 rounded-full h-9 w-9 flex items-center justify-center">
<img class="w-5 h-5" src="{{ url_for(device.blueprint(), filename=device.icon) }}">
</div>

View file

@ -7,7 +7,7 @@
- loading: Boolean indicating if the wallet is loaded in Specter already or not.
#}
{% macro sidebar_wallet_list_item(wallet, wallet_alias, chain, loading=false) -%}
<a class="flex hover:bg-dark-800 {% if wallet_alias == wallet.alias %} bg-dark-800 {% endif %} rounded-xl -mx-3 relative px-3 h-12 items-center my-1" id="{{wallet.alias}}-sidebar-list-item" href="{{ url_for('wallets_endpoint.wallet', wallet_alias=wallet.alias) }}" class="item {% if wallet_alias == wallet.alias %}active{% endif %}" data-style="{%if loading%}display: none;{%endif%}">
<a class="flex hover:bg-dark-800 {% if wallet_alias == wallet.alias %} bg-dark-800 {% endif %} rounded-xl -mx-3 relative px-3 h-12 items-center my-1" id="{{wallet.alias}}-sidebar-list-item" href="{{ url_for('wallets_endpoint.wallet', wallet_alias=wallet.alias) }}" class="item {% if wallet_alias == wallet.alias %}active{% endif %}" data-cy="wallet-sidebar-btn-{{wallet.name}}">
<div class="bg-dark-700 rounded-full h-9 w-9 flex items-center justify-center mr-2">
<!-- <img class="w-8 h-8" src="{{ url_for('static', filename='img/' + ('two-keys' if wallet.is_multisig else 'key') + '.svg') }}" class="svg-white" data-style="width: 45px; margin-left: 5px;"> -->
{% if wallet.is_multisig %}

View file

@ -31,7 +31,7 @@
</a>
{% endif %}
<a class="text-dark-200 py-1 px-3 font-medium hover:bg-dark-800 rounded-lg flex space-x-2 items-center hover:text-dark-50" href="{{ url_for('settings_endpoint.settings') }}" title="Settings" >
<a class="text-dark-200 py-1 px-3 font-medium hover:bg-dark-800 rounded-lg flex space-x-2 items-center hover:text-dark-50" href="{{ url_for('settings_endpoint.settings') }}" title="Settings" data-cy="settings-btn">
<svg class="fill-current" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" >
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.9014 10.6963L16.655 11.0524C16.5423 11.0854 16.4576 11.1788 16.4356 11.2941V11.2941C16.3803 11.5692 16.3071 11.8405 16.2165 12.1061C16.1776 12.2171 16.2044 12.3406 16.2857 12.4255L17.1881 13.3582C17.2852 13.4585 17.3041 13.6111 17.2343 13.7321L16.8452 14.4059C16.7754 14.5269 16.6338 14.5869 16.4983 14.553L15.2327 14.2361H15.2327C15.1187 14.2082 14.9987 14.2465 14.9219 14.3352C14.7381 14.5444 14.5412 14.7419 14.3325 14.9263C14.2438 15.0031 14.2055 15.123 14.2333 15.237L14.5497 16.5016C14.5837 16.637 14.5237 16.7786 14.4028 16.8484L13.7288 17.2375C13.6079 17.3074 13.4552 17.2886 13.3549 17.1914L12.4176 16.2846C12.3328 16.2032 12.2093 16.1763 12.0983 16.2152C11.8344 16.3055 11.565 16.3788 11.2917 16.4346C11.1766 16.4567 11.0834 16.5414 11.0504 16.6539L10.6931 17.9046C10.6547 18.0389 10.532 18.1315 10.3923 18.1315H9.61417C9.4745 18.1315 9.35175 18.0389 9.31336 17.9046L8.95626 16.6542C8.92327 16.5415 8.82992 16.4567 8.71455 16.4347H8.71455C8.44065 16.3797 8.1706 16.307 7.90608 16.2171C7.79514 16.1784 7.67182 16.2052 7.58699 16.2865L6.6517 17.1914C6.55134 17.2886 6.39872 17.3074 6.27777 17.2375L5.60389 16.8485C5.48301 16.7786 5.42308 16.637 5.45702 16.5016L5.77411 15.2352C5.80202 15.1211 5.76361 15.0009 5.67467 14.9241H5.67467C5.46513 14.7406 5.2674 14.5439 5.08267 14.3354C5.00591 14.247 4.88613 14.2088 4.77233 14.2366L3.50845 14.553C3.37297 14.5869 3.23142 14.5269 3.16158 14.406L2.77226 13.7321C2.70244 13.6111 2.72125 13.4585 2.81836 13.3582L3.72261 12.4238C3.80407 12.3388 3.83085 12.2152 3.79189 12.1041V12.1041C3.70086 11.8391 3.62708 11.5685 3.57101 11.294C3.54893 11.1788 3.46429 11.0856 3.35173 11.0527L2.10514 10.6964C1.97083 10.658 1.87824 10.5353 1.8783 10.3956V9.61747V9.61746C1.87825 9.47778 1.97084 9.35501 2.10515 9.31665L3.35149 8.9604C3.46418 8.92738 3.5489 8.83404 3.57087 8.71869V8.71869C3.62629 8.44357 3.6995 8.17233 3.79002 7.90669C3.82892 7.79568 3.80214 7.67222 3.72074 7.58731L2.81836 6.65487C2.72125 6.5545 2.70244 6.40192 2.77226 6.28097L3.16129 5.60706C3.23118 5.48617 3.37272 5.42624 3.50817 5.46019L4.77401 5.77709C4.888 5.80496 5.008 5.76667 5.08479 5.67794L5.08479 5.67794C5.26864 5.46868 5.46549 5.27124 5.6742 5.08678C5.76292 5.01006 5.80121 4.89012 5.77336 4.77618L5.45673 3.51159C5.42276 3.37614 5.4827 3.23458 5.60361 3.16472L6.27748 2.77565C6.39844 2.70581 6.55103 2.72461 6.65142 2.82172L7.5887 3.72859C7.67363 3.80999 7.79707 3.8368 7.90811 3.79797L7.90811 3.79797C8.17194 3.70761 8.44131 3.63432 8.71454 3.57853C8.82974 3.55644 8.9229 3.47178 8.95589 3.35922L9.31323 2.1085C9.35163 1.97421 9.47438 1.88164 9.61404 1.88162H10.3922C10.5318 1.88165 10.6546 1.97422 10.693 2.1085L11.0502 3.35893C11.0832 3.47167 11.1766 3.55643 11.292 3.57843V3.57843C11.5658 3.63348 11.8359 3.70618 12.1004 3.79606C12.2114 3.83476 12.3347 3.80794 12.4195 3.72665L13.3548 2.82178C13.4551 2.72463 13.6077 2.7058 13.7287 2.77565L14.4025 3.16472C14.5235 3.23458 14.5834 3.37614 14.5494 3.51159L14.2324 4.77797C14.2045 4.8921 14.2429 5.01225 14.3318 5.08903C14.5414 5.27259 14.7391 5.46921 14.9238 5.67772C15.0005 5.76622 15.1203 5.80437 15.2341 5.77656L16.498 5.46018C16.6335 5.4262 16.7751 5.48614 16.8449 5.60706L17.2339 6.28097C17.3038 6.40191 17.285 6.5545 17.1879 6.65487L16.2836 7.5894C16.2022 7.67439 16.1754 7.79794 16.2144 7.90903V7.90903C16.3054 8.17403 16.3791 8.44465 16.4352 8.71918C16.4573 8.83435 16.5419 8.9275 16.6544 8.9605L17.9011 9.31675C18.0354 9.35511 18.128 9.47788 18.128 9.61756V10.3957V10.3957C18.128 10.5352 18.0355 10.6579 17.9014 10.6963L17.9014 10.6963ZM7.07576 6.18597C7.03225 6.11023 6.93558 6.08411 6.85984 6.12762C6.85304 6.13153 6.84654 6.13594 6.84039 6.14081H6.84039C4.70546 7.87952 4.38426 11.0197 6.12297 13.1547C6.33709 13.4176 6.57748 13.658 6.84039 13.8721C6.90886 13.9263 7.00836 13.9148 7.06261 13.8463C7.06747 13.8402 7.07187 13.8337 7.07576 13.8269L8.87576 10.7095C9.12697 10.2744 9.12697 9.73835 8.87576 9.30326L7.07576 6.18597ZM10.0031 5.00625C9.39819 5.00559 8.79817 5.11501 8.23239 5.32915C8.15167 5.36114 8.11216 5.45251 8.14415 5.53323C8.14705 5.54057 8.15051 5.54768 8.15448 5.5545L9.95798 8.67828C10.2092 9.11337 10.6734 9.3814 11.1758 9.3814H14.7776C14.865 9.38146 14.9359 9.31068 14.9359 9.22331C14.9359 9.21556 14.9354 9.20782 14.9342 9.20015C14.5402 6.78277 12.4524 5.00709 10.0031 5.00625H10.0031ZM14.7775 10.6312H11.176C10.6736 10.6312 10.2093 10.8993 9.95814 11.3344L8.15464 14.4581C8.11091 14.5331 8.13627 14.6294 8.21128 14.6731C8.2181 14.6771 8.22521 14.6806 8.23255 14.6835H8.23255C10.8152 15.6597 13.7003 14.3575 14.6766 11.7748C14.7943 11.4634 14.8806 11.141 14.9342 10.8125C14.9468 10.726 14.8869 10.6457 14.8005 10.6331C14.7929 10.632 14.7853 10.6315 14.7777 10.6315L14.7775 10.6312Z"/>
</svg>

View file

@ -9,12 +9,12 @@
</p>
<nav class="grid gap-5 grid-cols-2 mt-10 mb-5">
<a href="./simple/" class="selection">
<a href="./simple/" class="selection" data-cy="singlesig-wallet-btn">
<p>&nbsp;</p>
<img src="{{ url_for('static', filename='img/key.svg') }}" />
<p>{{ _("Single Signature") }}</p>
</a>
<a href="./multisig/" class="selection">
<a href="./multisig/" class="selection" data-cy="multisig-wallet-btn">
<p>&nbsp;</p>
<img src="{{ url_for('static', filename='img/two-keys.svg') }}" />
<p>{{ _("Multiple Signature") }}</p>