30 lines
2.8 KiB
JavaScript
30 lines
2.8 KiB
JavaScript
const {JSDOM}=require('jsdom');
|
|
const fs=require('node:fs');
|
|
const assert=require('node:assert/strict');
|
|
(async()=>{
|
|
const dom=new JSDOM('<div class="global-bottom-bar"><div id="bbTabTitle"><span class="bb-tab-title-text"></span></div><div id="bbTabDescription"></div><div id="bbTabInnerContent"></div></div>',{url:'http://localhost:8001',runScripts:'outside-only',pretendToBeVisual:true});
|
|
const w=dom.window,d=w.document;
|
|
await new Promise(r=>w.addEventListener('DOMContentLoaded',r));
|
|
w.fetch=async()=>({ok:true,json:async()=>[]});
|
|
w.eval(fs.readFileSync('static/js/message-ui.js','utf8'));
|
|
const src=fs.readFileSync('static/js/bottom-bar.js','utf8').replace(/\}\)\(\);\s*$/, 'window.inboxTest={render(items,key=""){latestSections={messages:{list:items,count:0}};activeKey="messages";chatComposerState.activeThreadKey=key;chatComposerState.loaded=true;renderTabPanel();},threads:getMessageThreads};})();');
|
|
w.eval(src);
|
|
w.inboxTest.render([]);
|
|
assert.ok(d.querySelector('.bb-message-threads'));
|
|
assert.ok(d.querySelector('.msg-conversation'));
|
|
assert.ok(d.getElementById('btnSendMsg').disabled,'Empty inbox must not silently broadcast');
|
|
const items=[{id:1,sender_user_id:2,recipient_user_id:null,from:'Kollega',text:'Fælles besked',created_at:'2026-09-08T10:00:00'}, {id:2,sender_user_id:2,recipient_user_id:1,from:'Kollega',text:'Ring tilbage <script>alert(1)</script>',message_kind:'phone',caller_name:'Anne',callback_phone:'+45 12345678',contact_id:4,created_at:'2026-09-08T11:00:00'}, {id:3,sender_user_id:1,recipient_user_id:2,to:'Kollega',from:'Dig',text:'Jeg ringer',is_own:true,is_read:true,created_at:'2026-09-08T11:01:00'}];
|
|
w.inboxTest.render(items,'user:2');
|
|
assert.equal(w.inboxTest.threads().length,2,'Broadcast is separate from sender conversation');
|
|
assert.equal(d.querySelectorAll('.msg-message').length,2);
|
|
assert.equal(d.querySelectorAll('.msg-call').length,1);
|
|
assert.equal(d.querySelector('.msg-call-action').getAttribute('href'),'tel:+4512345678');
|
|
assert.equal(d.querySelector('.msg-bubble script'),null,'Messages must be escaped');
|
|
assert.match(d.querySelector('.is-own .msg-delivery').textContent,/Læst/);
|
|
assert.equal(d.getElementById('chatInputQuick').tagName,'TEXTAREA');
|
|
let sends=0;d.getElementById('btnSendMsg').onclick=()=>sends++;
|
|
d.getElementById('chatInputQuick').dispatchEvent(new w.KeyboardEvent('keydown',{key:'Enter',bubbles:true}));assert.equal(sends,0);
|
|
d.getElementById('chatInputQuick').dispatchEvent(new w.KeyboardEvent('keydown',{key:'Enter',ctrlKey:true,bubbles:true}));assert.equal(sends,1);
|
|
dom.window.close();console.log('PASS: inbox layout, empty-state safety, separate broadcasts, phone cards, escaping, read status, multiline and shortcut');
|
|
})().catch(e=>{console.error(e);process.exit(1);});
|