diff options
| author | Adam Soltys <[email protected]> | 2026-09-28 21:03:31 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-09-28 21:03:31 -0700 |
| commit | 59e6028b6e62820fcde93068347c44637b67c93d (patch) | |
| tree | 659dca49a5b25ad05b419d5fbc7fd017889736b7 /tools | |
| parent | f95093a90637abfa9f0adbb3d7d28127ecd20569 (diff) | |
| download | coinosv3-59e6028b6e62820fcde93068347c44637b67c93d.tar.gz coinosv3-59e6028b6e62820fcde93068347c44637b67c93d.zip | |
Keep feed navigation visible and add a wallet shortcut
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/feed-bottom-nav-test.js | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/tools/feed-bottom-nav-test.js b/tools/feed-bottom-nav-test.js index f277c4a..53b7529 100644 --- a/tools/feed-bottom-nav-test.js +++ b/tools/feed-bottom-nav-test.js @@ -13,7 +13,7 @@ const wallet = { xpub: 'test-wallet', loaded: true, nostrRelays: () => [], loadFeatureState: (k, d) => k === 'follows' ? { tags: [['p', author]], at: Date.now()/1000 } : d, saveFeatureState() {}, registerCacheExtension() {} }; let feature; -function render() { if (feature) morphChildren(document.querySelector('#app'), [feature.screenView()]); } +function render() { if (feature) morphChildren(document.querySelector('#app'), [feature.screenView() || h('div', { class: 'wallet-screen' }, 'Wallet')]); } feature = messagesFeature({ h, ui, wallet, render, toast() {}, hook() {}, brandHeader: () => h('div', { style: 'height:60px' }, 'Coinos') }); window.test = { ui, wallet, render, async feed() { ui.chatOpen = true; ui.msgView = 'feed'; ui.noteThread = null; @@ -46,15 +46,15 @@ try { await page.emulateMediaFeatures([{name:'prefers-reduced-motion',value:'reduce'}]); await page.goto(server.url.href); await page.waitForSelector('.note-post', {timeout:5000}); - assert(await page.$eval('.feed-bottom-nav',e=>e.hidden),'hidden at top'); + assert(await page.$eval('.feed-bottom-nav',e=>!e.hidden && e.getBoundingClientRect().height>0),'visible at top without scrolling'); await scroll(); - assert.deepEqual(await page.$$eval('.feed-nav-button',els=>els.map(e=>e.textContent)),['Home','Messages','Notifications']); + assert.deepEqual(await page.$$eval('.feed-nav-button',els=>els.map(e=>e.textContent)),['Home','Messages','Notifications','Wallet']); assert(await page.$eval('.feed-bottom-nav',e=>Math.abs(e.getBoundingClientRect().bottom-innerHeight)<1),'fixed at viewport bottom'); await page.evaluate(()=>test.unseen()); assert(await page.evaluate(()=>document.querySelector('.feed-new-pill').getBoundingClientRect().bottom < document.querySelector('.feed-bottom-nav').getBoundingClientRect().top),'new posts pill stays above navigation'); await page.screenshot({path:'/tmp/feed-bottom-nav-mobile.png'}); await page.tap('.feed-nav-button:nth-child(1)'); - await page.waitForFunction(()=>scrollY===0 && document.querySelector('.feed-bottom-nav').hidden); + await page.waitForFunction(()=>scrollY===0 && !document.querySelector('.feed-bottom-nav').hidden); assert.equal(await page.evaluate(()=>test.ui.msgView),'feed','Home stays in feed'); await scroll(); await page.tap('.feed-nav-button:nth-child(2)'); await page.waitForFunction(()=>test.ui.msgView==='home' && !document.querySelector('.feed-bottom-nav')); @@ -65,9 +65,18 @@ try { await page.evaluate(()=>test.feed()); await scroll(); await page.tap('.note-text'); await page.waitForFunction(()=>!!test.ui.noteThread && !document.querySelector('.feed-bottom-nav')); await page.evaluate(()=>test.feed()); + assert(await page.$eval('.feed-bottom-nav',e=>!e.hidden && e.getBoundingClientRect().height>0),'returning to feed restores nav immediately without a scroll'); + await page.evaluate(()=>{test.ui.tab='settings';}); + await page.tap('.feed-nav-button:nth-child(4)'); + await page.waitForSelector('.wallet-screen'); + assert(await page.evaluate(()=>!test.ui.chatOpen && test.ui.tab==='receive' && !document.querySelector('.feed-bottom-nav')),'Wallet opens main wallet instead of old settings tab'); + await page.evaluate(()=>test.feed()); + await page.setViewport({width:320,height:844,isMobile:true,hasTouch:true}); + assert(await page.$eval('.feed-bottom-nav',e=>e.scrollWidth<=e.clientWidth),'four buttons fit a narrow phone'); + await page.screenshot({path:'/tmp/feed-bottom-nav-always-mobile.png'}); await page.evaluate(()=>{test.wallet.xpub=null;test.render();}); await scroll(); await page.tap('.feed-nav-button:nth-child(2)'); assert(await page.evaluate(()=>test.ui.signinAsk && test.ui.msgView==='feed'),'visitor gets sign-in prompt'); assert.deepEqual(errors,[]); - console.log('✓ Feed nav appears on scroll; Home returns to top; Messages and Notifications open their views; nav leaves threads; visitor sign-in and new-post pill work'); + console.log('✓ Feed nav stays visible at top and on return; Home, Messages, Notifications and Wallet work; four buttons fit a narrow phone; threads, visitor sign-in and new-post pill work'); } finally { await page.close(); if (remote) await browser.disconnect(); else await browser.close(); server.stop(true); } |
