import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import test from 'node:test' import { fileURLToPath } from 'node:url' const sidebar = readFileSync( fileURLToPath(new URL('../src/components/layout/SidebarRail.vue', import.meta.url)), 'utf8' ) const sidebarStyles = readFileSync( fileURLToPath(new URL('../src/assets/styles/components/sidebar-rail.css', import.meta.url)), 'utf8' ) const documentInbox = readFileSync( fileURLToPath(new URL('../src/composables/useDocumentCenterInbox.js', import.meta.url)), 'utf8' ) const documentNewState = readFileSync( fileURLToPath(new URL('../src/utils/documentCenterNewState.js', import.meta.url)), 'utf8' ) test('sidebar renders a red dot for unread document center rows', () => { assert.match(sidebar, /useDocumentCenterInbox/) assert.match(sidebar, /hasUnread: documentInboxHasUnread/) assert.match(sidebar, /class="nav-label-text"[\s\S]*class="nav-unread-dot nav-unread-dot-label"/) assert.match(sidebar, /class="nav-unread-dot nav-unread-dot-collapsed"/) assert.match(sidebar, /hasNewMessage: item\.id === 'documents' \? documentInboxHasUnread\.value : false/) assert.match(sidebar, /void refreshDocumentInbox\(\)/) assert.match(sidebar, /startDocumentInboxPolling\(\)/) assert.match(sidebar, /stopDocumentInboxPolling\(\)/) assert.match(sidebarStyles, /\.nav-label-text\s*\{[\s\S]*position:\s*relative;/) assert.match(sidebarStyles, /\.nav-unread-dot\s*\{[\s\S]*background:\s*#ef4444;/) assert.match(sidebarStyles, /\.nav-unread-dot-label\s*\{[\s\S]*position:\s*absolute;[\s\S]*top:\s*-8px;/) assert.match(sidebarStyles, /\.rail-collapsed \.nav-unread-dot-collapsed\s*\{[\s\S]*position:\s*absolute;/) }) test('document inbox reuses document center viewed-key state', () => { assert.match(documentInbox, /DOCUMENT_VIEWED_KEYS_CHANGE_EVENT/) assert.match(documentInbox, /readViewedDocumentKeys/) assert.match(documentInbox, /countNewDocuments\(documentRows\.value, viewedDocumentKeys\.value\)/) assert.match(documentInbox, /fetchExpenseClaims/) assert.match(documentInbox, /fetchApprovalExpenseClaims/) assert.match(documentInbox, /fetchArchivedExpenseClaims/) assert.match(documentInbox, /window\.addEventListener\(DOCUMENT_VIEWED_KEYS_CHANGE_EVENT, refreshViewedDocumentKeys\)/) assert.match(documentNewState, /export const DOCUMENT_VIEWED_KEYS_CHANGE_EVENT/) assert.match(documentNewState, /window\.dispatchEvent\(new CustomEvent\(DOCUMENT_VIEWED_KEYS_CHANGE_EVENT\)\)/) })