mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-29 17:28:56 +00:00
a9143b0fba
* ADD - build in-game admin command center * ADD - open admin panel by command * ENH - rebuild admin panel as standalone editor * ENH - compact admin workspace navigation * ENH - expand admin device controls * ENH - refine admin panel navigation style * ADD - add SQL phone configurator * FIX - expose complete phone configuration * FIX - make company jobs freely configurable * FIX - align configurator tables to left * ENH - organize configurator collection controls * ENH - organize nested configurator sections * ENH - add configurator field descriptions * FIX - hide fixed configurator add controls * ENH - refine configurator editing experience * ENH - refine admin configurator controls * FIX - apply configurator settings instantly * FIX - close live activity command registration --------- Co-authored-by: Leon.Schmidt <leonmauricewill15@gmail.com>
39 lines
1.6 KiB
TypeScript
39 lines
1.6 KiB
TypeScript
import { readFileSync } from 'node:fs'
|
|
import { join } from 'node:path'
|
|
|
|
import { describe, expect, it } from 'vitest'
|
|
|
|
const rootDirectory = join(import.meta.dirname, '..')
|
|
const appSource = readFileSync(join(rootDirectory, 'src/App.vue'), 'utf8')
|
|
const navigationSource = readFileSync(
|
|
join(rootDirectory, '../sky_phone/source/client/navigation.lua'),
|
|
'utf8',
|
|
)
|
|
|
|
describe('neutral phone navigation contract', () => {
|
|
it('synchronizes installed renderer apps before acknowledging an opened phone', () => {
|
|
expect(appSource).toContain("return nuiCall('navigation:state'")
|
|
expect(appSource).toContain(
|
|
"void syncNavigationState().then(() => nuiCall('ui:opened'))",
|
|
)
|
|
expect(navigationSource).toContain(
|
|
'RegisterNUICallback("navigation:state"',
|
|
)
|
|
})
|
|
|
|
it('routes only installed apps and closes only the requested current app', () => {
|
|
expect(appSource).toContain("event.data?.type === 'navigation:open-app'")
|
|
expect(appSource).toContain('appStore.isInstalled(data.appId)')
|
|
expect(appSource).toContain("event.data?.type === 'navigation:close-app'")
|
|
expect(appSource).toContain('currentApp === data.appId')
|
|
expect(navigationSource).toContain('if not installed_apps[normalized_app_id] then')
|
|
expect(navigationSource).toContain('if current_app_id ~= normalized_app_id then')
|
|
})
|
|
|
|
it('defers command-driven app routes until setup or device unlock completes', () => {
|
|
expect(appSource).toContain('if (setupRequired.value || isLocked.value)')
|
|
expect(appSource).toContain('pendingUnlockRoute.value = requestedRoute')
|
|
expect(appSource).toContain("void router.replace(requestedRoute ?? '/')")
|
|
})
|
|
})
|