|
@@ -0,0 +1,89 @@
|
|
|
|
|
+import test from 'node:test'
|
|
|
|
|
+import assert from 'node:assert/strict'
|
|
|
|
|
+import fs from 'node:fs'
|
|
|
|
|
+import path from 'node:path'
|
|
|
|
|
+import vm from 'node:vm'
|
|
|
|
|
+
|
|
|
|
|
+const detailFile = path.resolve('pagesHome/activityDetail.vue')
|
|
|
|
|
+const dateFormatFile = path.resolve('common/utils/dateFormat.js')
|
|
|
|
|
+
|
|
|
|
|
+function loadActivityDetail (activityOverrides = {}) {
|
|
|
|
|
+ const source = fs.readFileSync(detailFile, 'utf8')
|
|
|
|
|
+ const start = source.indexOf('\tconst getActivityDetail = (id) => {')
|
|
|
|
|
+ const end = source.indexOf('\n\twatch(()=>userStore.token', start)
|
|
|
|
|
+ assert.notEqual(start, -1, '应找到活动详情加载方法')
|
|
|
|
|
+ assert.notEqual(end, -1, '应找到活动详情加载方法的结束位置')
|
|
|
|
|
+
|
|
|
|
|
+ const activityInfo = { value: {} }
|
|
|
|
|
+ const posterData = {
|
|
|
|
|
+ title: '默认标题',
|
|
|
|
|
+ time: '默认时间',
|
|
|
|
|
+ address: '默认地址',
|
|
|
|
|
+ organizer: '默认组织者',
|
|
|
|
|
+ mainImg: '默认封面'
|
|
|
|
|
+ }
|
|
|
|
|
+ const response = {
|
|
|
|
|
+ code: 0,
|
|
|
|
|
+ data: {
|
|
|
|
|
+ id: 'activity-1',
|
|
|
|
|
+ activityName: '测试活动',
|
|
|
|
|
+ activityStartTime: '2026-10-12 09:30:00',
|
|
|
|
|
+ activityEndTime: '2026-10-13 18:05:00',
|
|
|
|
|
+ signupStartTime: '2026-10-01 09:00:00',
|
|
|
|
|
+ signupEndTime: '2026-10-11 18:00:00',
|
|
|
|
|
+ provinceName: '广东省',
|
|
|
|
|
+ cityName: '深圳市',
|
|
|
|
|
+ address: '测试地址',
|
|
|
|
|
+ channelName: '测试机构',
|
|
|
|
|
+ coverFile: 'cover.png',
|
|
|
|
|
+ signupState: 0,
|
|
|
|
|
+ activeState: 1,
|
|
|
|
|
+ recruitmentNow: 0,
|
|
|
|
|
+ recruitmentMax: 10,
|
|
|
|
|
+ imageFiles: '',
|
|
|
|
|
+ ...activityOverrides
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ const context = {
|
|
|
|
|
+ activityInfo,
|
|
|
|
|
+ posterData,
|
|
|
|
|
+ shareADId: { value: '' },
|
|
|
|
|
+ imgList: { value: [] },
|
|
|
|
|
+ avatars: { value: [] },
|
|
|
|
|
+ proxy: {
|
|
|
|
|
+ $api: { get: () => Promise.resolve({ data: response }) },
|
|
|
|
|
+ $showToast: () => {}
|
|
|
|
|
+ },
|
|
|
|
|
+ uni: { showModal: () => {}, reLaunch: () => {} },
|
|
|
|
|
+ console
|
|
|
|
|
+ }
|
|
|
|
|
+ vm.createContext(context)
|
|
|
|
|
+ vm.runInContext(fs.readFileSync(dateFormatFile, 'utf8'), context)
|
|
|
|
|
+ vm.runInContext(`${source.slice(start, end)}\nthis.getActivityDetail = getActivityDetail`, context)
|
|
|
|
|
+
|
|
|
|
|
+ return { getActivityDetail: context.getActivityDetail, activityInfo, posterData }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+test('海报使用接口原始活动时间生成有效的月日和时分', async () => {
|
|
|
|
|
+ const { getActivityDetail, activityInfo, posterData } = loadActivityDetail()
|
|
|
|
|
+
|
|
|
|
|
+ getActivityDetail('activity-1')
|
|
|
|
|
+ await new Promise(resolve => setImmediate(resolve))
|
|
|
|
|
+
|
|
|
|
|
+ assert.equal(activityInfo.value.activityStartTime, '2026年10月12日 09:30')
|
|
|
|
|
+ assert.equal(activityInfo.value.activityEndTime, '2026年10月13日 18:05')
|
|
|
|
|
+ assert.equal(posterData.time, '10.12-09:30 ~ 10.13-18:05')
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+test('活动时间无效时海报显示时间待定且不残留示例时间', async () => {
|
|
|
|
|
+ const { getActivityDetail, posterData } = loadActivityDetail({
|
|
|
|
|
+ activityStartTime: '2026-02-31 09:30:00',
|
|
|
|
|
+ activityEndTime: '2026-03-01 18:00:00'
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ getActivityDetail('activity-1')
|
|
|
|
|
+ await new Promise(resolve => setImmediate(resolve))
|
|
|
|
|
+
|
|
|
|
|
+ assert.equal(posterData.time, '时间待定')
|
|
|
|
|
+ assert.equal(posterData.time.includes('NaN'), false)
|
|
|
|
|
+})
|