| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- const fs = require('fs');
- const path = require('path');
- const BASE = 'http://cfc.iwintrue.com:80';
- const results = [];
- let adminToken = null;
- async function api(p, body, h = {}) {
- try {
- const r = await fetch(BASE + p, {
- method: 'POST',
- headers: { 'Content-Type': 'application/json', ...h },
- body: body ? JSON.stringify(body) : undefined,
- });
- const t = await r.text();
- let d;
- try { d = JSON.parse(t); } catch {}
- return { ok: r.ok, status: r.status, data: d, raw: t.slice(0, 200) };
- } catch (e) {
- return { ok: false, data: null, error: e.message };
- }
- }
- async function admin(p, body) {
- if (!adminToken) return { ok: false, data: null, error: 'notoken' };
- return api(p, body, { Authorization: 'Bearer ' + adminToken });
- }
- async function run() {
- let out = '=== CFC API v3 Test Results ===\n';
- out += 'Time: ' + new Date().toISOString() + '\n\n';
- // Login
- out += '[1] Login\n';
- await api('/api/admin-auth/send-code', { phone: '13800138000' });
- const lr = await api('/api/admin-auth/login', { phone: '13800138000', code: '123456' });
- if (lr.data?.data?.token) {
- adminToken = lr.data.data.token;
- out += ' PASS: Admin login, userId=' + (lr.data.data.adminId || 7) + '\n';
- } else {
- out += ' FAIL: Admin login failed - ' + (lr.raw || 'no token') + '\n';
- }
- // NEW-01 Energy Rule Create
- out += '[2] NEW-01 Energy Rule Create\n';
- const er = await admin('/api/admin/energy-rule/create', {
- ruleName: 'AutoTest_NEW01_' + Date.now(),
- dimensionCode: 'body', eventType: 'checkin', energyValue: 5, status: 1,
- });
- if (er.ok || er.data?.code === 200) {
- const id = er.data?.data?.id || er.data?.id;
- out += ' PASS: Energy rule created, id=' + id + '\n';
- } else {
- out += ' FAIL: code=' + er.data?.code + ' msg=' + (er.data?.message || '') + '\n';
- }
- // NEW-02 SKU List
- out += '[3] NEW-02 SKU List\n';
- const sku = await admin('/api/admin/product/sku/list', { productId: 1 });
- if (sku.ok || sku.data?.code === 200) {
- const cnt = Array.isArray(sku.data?.data) ? sku.data.data.length : 0;
- out += ' PASS: SKU list, count=' + cnt + '\n';
- } else {
- out += ' FAIL: code=' + sku.data?.code + ' msg=' + (sku.data?.message || '') + '\n';
- }
- // NEW-03 Activity Publish
- out += '[4] NEW-03 Activity Publish\n';
- const act = await admin('/api/activity/create', {
- title: 'AutoTest_NEW03_' + Date.now(),
- dimensionCode: 'body',
- startTime: '2026-07-15 10:00:00',
- endTime: '2026-07-15 12:00:00',
- location: 'test',
- maxParticipants: 10,
- });
- const actId = act.data?.data?.id || act.data?.id;
- if (actId) {
- out += ' INFO: Activity created, id=' + actId + '\n';
- const pub = await admin('/api/activity/publish', { id: actId });
- if (pub.ok || pub.data?.code === 200) {
- out += ' PASS: Activity published\n';
- } else {
- out += ' FAIL: code=' + pub.data?.code + ' msg=' + (pub.data?.message || '') + '\n';
- }
- } else {
- out += ' FAIL: Activity creation failed - code=' + act.data?.code + '\n';
- }
- // ISSUE-001 Vendor unshelve
- out += '[5] ISSUE-001 Vendor unshelve\n';
- const vs = await api('/api/product/shelve', { productId: 7, action: 'unshelve' }, { 'X-User-Id': '81069' });
- if (vs.ok || vs.data?.code === 200) {
- out += ' PASS: Vendor unshelved product 7\n';
- } else {
- out += ' FAIL: code=' + vs.data?.code + ' msg=' + (vs.data?.message || '') + '\n';
- }
- // ISSUE-003 Create user
- out += '[6] ISSUE-003 Create user\n';
- const phone = '139' + String(Math.floor(Math.random() * 1e9)).padStart(9, '0');
- const cu = await admin('/api/admin/users/create', {
- phone, password: 'Test123456', name: 'AutoTestUser', role: 'parent',
- });
- if (cu.ok || cu.data?.code === 200) {
- const uid = cu.data?.data?.id || cu.data?.id;
- out += ' PASS: User created, id=' + uid + '\n';
- } else {
- out += ' FAIL: code=' + cu.data?.code + ' msg=' + (cu.data?.message || '') + '\n';
- }
- // New APIs
- out += '[7] New API: energy.grantEnergy\n';
- const ge = await admin('/api/energy/grantEnergy', { childId: 1, taskId: 1, amount: 10, dimensionCode: 'body' });
- if (ge.ok || ge.data?.code === 200) {
- out += ' PASS: grantEnergy ok\n';
- } else {
- out += ' FAIL: code=' + ge.data?.code + ' msg=' + (ge.data?.message || '') + '\n';
- }
- out += '[8] New API: points.checkAndGrantReward\n';
- const pr = await admin('/api/points/checkAndGrantReward', { childId: 1, amount: 5 });
- if (pr.ok || pr.data?.code === 200 || pr.data?.data === -1) {
- out += ' PASS: checkAndGrantReward, result=' + pr.data?.data + '\n';
- } else {
- out += ' FAIL: code=' + pr.data?.code + ' msg=' + (pr.data?.message || '') + '\n';
- }
- out += '[9] New API: growth.getRecordsByChild\n';
- const gr = await admin('/api/growth/record/child/1', {});
- if (gr.ok || gr.data?.code === 200) {
- const cnt = Array.isArray(gr.data?.data) ? gr.data.data.length : 0;
- out += ' PASS: getRecordsByChild, count=' + cnt + '\n';
- } else {
- out += ' FAIL: code=' + gr.data?.code + ' msg=' + (gr.data?.message || '') + '\n';
- }
- fs.writeFileSync(path.join(__dirname, 'v3_test_output.txt'), out, 'utf8');
- }
- run().then(() => {
- process.exit(0);
- }).catch(e => {
- fs.writeFileSync(path.join(__dirname, 'v3_test_output.txt'), 'ERROR: ' + e.message, 'utf8');
- process.exit(1);
- });
|