| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- import assert from 'node:assert/strict'
- import { OA_H5_ORIGIN } from './config.js'
- import {
- MARKET_ENTRIES,
- buildMarketH5Url,
- canOpenMarketWebview,
- isTrustedMarketCloseMessage,
- resolveHttpOrigin,
- resolveMarketBackFallback,
- resolveMarketEntry,
- resolveMarketReturnPath
- } from './market-h5.js'
- import { normalizeMenu } from './menu.js'
- import { isOaHostWebviewRoute } from './oa-navigate-back.js'
- const marketOrigin = resolveHttpOrigin(OA_H5_ORIGIN)
- const marketBase = String(OA_H5_ORIGIN || '').replace(/\/$/, '')
- assert.equal(resolveHttpOrigin('https://xwyd.zkxw.cn/oa-h5'), 'https://xwyd.zkxw.cn')
- assert.equal(
- resolveHttpOrigin('http://127.0.0.1:5178/oa-h5/'),
- 'http://127.0.0.1:5178'
- )
- assert.equal(resolveHttpOrigin(''), '')
- assert.equal(resolveHttpOrigin('not-a-url'), '')
- assert.ok(marketOrigin)
- const expectedEntries = [
- 'specialist-presign',
- 'specialist-protocol',
- 'specialist-payment-chase',
- 'specialist-payment',
- 'specialist-freight',
- 'manager-presign',
- 'manager-protocol',
- 'manager-payment-chase',
- 'manager-payment',
- 'manager-freight'
- ]
- assert.deepEqual(Object.keys(MARKET_ENTRIES), expectedEntries)
- assert.equal(MARKET_ENTRIES['specialist-presign'].title, '预签约订单(专员)')
- assert.equal(MARKET_ENTRIES['specialist-presign'].groupTitle, '市场部')
- assert.equal(MARKET_ENTRIES['manager-freight'].title, '运费信息(经理)')
- assert.equal(MARKET_ENTRIES['manager-freight'].groupTitle, '市场部')
- assert.equal(
- resolveMarketEntry('specialist-presign').path,
- '/market/specialist/presign'
- )
- assert.equal(
- resolveMarketEntry('manager-freight').path,
- '/market/manager/freight'
- )
- assert.equal(resolveMarketEntry('https://evil.example'), null)
- assert.equal(resolveMarketEntry('../manager/freight'), null)
- assert.equal(resolveMarketEntry('specialist-presign?scope=manager'), null)
- assert.equal(
- resolveMarketReturnPath({ returnPath: '/pages/index/index?tab=market' }),
- '/pages/index/index?tab=market'
- )
- assert.equal(
- resolveMarketReturnPath({ returnPath: 'https://evil.example/callback' }),
- '/pages/index/index'
- )
- assert.equal(
- resolveMarketReturnPath({ returnPath: '/pages/../evil' }),
- '/pages/index/index'
- )
- assert.equal(
- resolveMarketBackFallback('/pages/index/index?tab=market'),
- '/pages/index/index?tab=market'
- )
- assert.equal(
- resolveMarketBackFallback('https://evil.example/callback'),
- '/pages/index/index'
- )
- const marketUrl = buildMarketH5Url({
- entry: 'manager-payment-chase',
- token: 'token +&',
- returnPath: '/pages/index/index?tab=market'
- })
- assert.equal(
- marketUrl,
- marketBase +
- '/market/manager/payment-chase' +
- '?token=token%20%2B%26&returnPath=%2Fpages%2Findex%2Findex%3Ftab%3Dmarket'
- )
- assert.equal(
- buildMarketH5Url({
- entry: 'https://evil.example',
- token: 'token',
- returnPath: '/pages/index/index'
- }),
- ''
- )
- assert.equal(normalizeMenu({ icon: '' }).icon, '')
- assert.equal(
- normalizeMenu({
- path: '/pages/market/webview/index?entry=specialist-presign',
- icon: ''
- }).icon,
- 'market-presign'
- )
- assert.equal(
- normalizeMenu({
- path: 'pages/market/webview/index?entry=manager-payment-chase',
- icon: ''
- }).icon,
- 'market-payment-chase'
- )
- assert.equal(
- normalizeMenu({
- path: '/pages/market/webview/index?entry=specialist-payment',
- icon: ''
- }).icon,
- 'market-payment'
- )
- // 后端旧版对市场入口回落 apps-o 时,前端须覆盖为专用 PNG
- assert.equal(
- normalizeMenu({
- path: '/pages/market/webview/index?entry=specialist-presign',
- icon: 'apps-o'
- }).icon,
- 'market-presign'
- )
- assert.equal(
- normalizeMenu({ groupTitle: '市场部', icon: '' }).groupTitle,
- '市场部'
- )
- // 测试库未重组目录 / 旧接口无 groupTitle 时,按 path 推断分区
- assert.equal(
- normalizeMenu({
- path: '/pages/market/webview/index?entry=manager-freight',
- icon: 'apps-o'
- }).groupTitle,
- '市场部'
- )
- assert.equal(
- normalizeMenu({
- path: '/pages/oa/pending/index',
- icon: 'oa-pending'
- }).groupTitle,
- 'OA工作流'
- )
- assert.equal(
- normalizeMenu({
- path: '/pages/demo/comps',
- icon: 'apps-o'
- }).groupTitle,
- ''
- )
- assert.equal(isOaHostWebviewRoute('pages/market/webview/index'), true)
- assert.equal(isOaHostWebviewRoute('pages/index/index'), false)
- const marketFrame = {}
- const trustedMessage = {
- origin: marketOrigin,
- source: marketFrame,
- data: { source: 'zkxw-oa-h5', action: 'market-close' }
- }
- assert.equal(isTrustedMarketCloseMessage(trustedMessage, marketFrame), true)
- assert.equal(
- isTrustedMarketCloseMessage(
- { ...trustedMessage, origin: 'https://evil.example' },
- marketFrame
- ),
- false
- )
- assert.equal(
- isTrustedMarketCloseMessage(
- { ...trustedMessage, source: {} },
- marketFrame
- ),
- false
- )
- assert.equal(
- isTrustedMarketCloseMessage(
- { ...trustedMessage, data: { source: 'zkxw-oa-h5', action: '' } },
- marketFrame
- ),
- false
- )
- assert.equal(
- isTrustedMarketCloseMessage(
- {
- ...trustedMessage,
- data: { source: 'zkxw-oa-h5', action: 'oa-detail-close' }
- },
- marketFrame
- ),
- false
- )
- assert.equal(canOpenMarketWebview(false, 'token'), true)
- assert.equal(canOpenMarketWebview(true, 'token'), false)
- assert.equal(canOpenMarketWebview(false, ''), false)
- console.log('market-h5: ok')
|