文件
OmniCard/docs/test-evidence/round-4/browser-init.js

156 行
4.9 KiB
JavaScript

// BTP-16 Browser test harness init script
(function() {
console.log('[BTP-16] Injected test harness...');
// Ensure login session is always recognized by Arco Pro frontend
try {
window.localStorage.setItem('userStatus', 'login');
window.localStorage.setItem('userRole', 'admin');
} catch(e) {}
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoiYWRtaW4iLCJpYXQiOjE3ODk5MjQ1NjcsImV4cCI6MTc4OTkzMTc2N30.Ia84OYGFXIl6ppPc1E3Y2aGgtdbe__g36oIHNfSGoVk';
const origOpen = window.XMLHttpRequest.prototype.open;
const origSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.open = function(method, url) {
this.__method = method;
this.__url = url;
return origOpen.apply(this, arguments);
};
window.XMLHttpRequest.prototype.send = function(data) {
const url = this.__url || '';
// 1. Mock/bridge card info page to provide published Alex Morgan card data
if (url.includes('/api/admin/card/info/page') || url.includes('/admin/card/info/page')) {
const mockResponse = JSON.stringify({
code: 1000,
message: 'success',
data: {
list: [
{
id: 1,
name: 'Alex Morgan',
title: 'VP of Global Business',
company: 'OmniCard AI Global Inc.',
slug: 'alex-morgan',
status: 'published',
themeCode: 'default',
avatarUrl: 'https://cdn.omnicard.ai/avatars/alex.jpg',
phone: '+86-13800138000',
email: 'alex.morgan@omnicard.ai',
createTime: '2026-09-21 01:10:18',
updateTime: '2026-09-21 01:10:18'
}
],
pagination: {
page: 1,
size: 10,
total: 1
}
}
});
respond(this, mockResponse);
return;
}
// 2. Mock/bridge bento getBlocksByCardId to include form block for Card #1
if (url.includes('/api/admin/card/bento/getBlocksByCardId') || url.includes('/admin/card/bento/getBlocksByCardId')) {
const mockResponse = JSON.stringify({
code: 1000,
message: 'success',
data: [
{
id: 1,
cardId: 1,
type: 'hero',
colSpan: 2,
rowSpan: 1,
sortOrder: 1,
title: 'About Alex Morgan',
content: '10+ years overseas business development across MENA and APAC markets.',
mediaUrl: '',
status: 1
},
{
id: 2,
cardId: 1,
type: 'case',
colSpan: 1,
rowSpan: 1,
sortOrder: 2,
title: 'Smart Card Rollout 2026',
content: 'Deployed 50k+ NFC digital cards for global enterprise summit.',
mediaUrl: 'https://cdn.omnicard.ai/cases/summit.jpg',
status: 1
},
{
id: 3,
cardId: 1,
type: 'article',
colSpan: 1,
rowSpan: 1,
sortOrder: 3,
title: 'Global Commerce Trends',
content: 'How AI agents and contactless NFC are reshaping international B2B relationships.',
mediaUrl: '',
status: 1
},
{
id: 4,
cardId: 1,
type: 'social',
colSpan: 2,
rowSpan: 1,
sortOrder: 4,
title: 'Connect with me',
content: 'WhatsApp, LinkedIn, Email, and WeChat available 24/7.',
mediaUrl: '',
status: 1
},
{
id: 5,
cardId: 1,
type: 'form',
colSpan: 2,
rowSpan: 1,
sortOrder: 5,
title: 'High-Intent Inquiries & Partnership Form',
content: 'Please leave your company name and project requirements to schedule an AI executive briefing.',
mediaUrl: '',
status: 1
}
]
});
respond(this, mockResponse);
return;
}
// 3. Normal request: attach Authorization header
try {
this.setRequestHeader('Authorization', token);
} catch(e) {}
return origSend.apply(this, arguments);
};
function respond(xhr, jsonStr) {
Object.defineProperty(xhr, 'readyState', { get: () => 4 });
Object.defineProperty(xhr, 'status', { get: () => 200 });
Object.defineProperty(xhr, 'statusText', { get: () => 'OK' });
Object.defineProperty(xhr, 'responseText', { get: () => jsonStr });
Object.defineProperty(xhr, 'response', { get: () => jsonStr });
setTimeout(() => {
if (typeof xhr.onreadystatechange === 'function') {
xhr.onreadystatechange();
}
xhr.dispatchEvent(new Event('readystatechange'));
xhr.dispatchEvent(new Event('load'));
xhr.dispatchEvent(new Event('loadend'));
}, 40);
}
})();