瀏覽代碼

单元测试,新增获取报表数据 - 基础数据部分

MaiXinRong 5 年之前
父節點
當前提交
90e98e0a33
共有 3 個文件被更改,包括 149 次插入1 次删除
  1. 3 0
      app/controller/report_controller.js
  2. 0 1
      app/service/report_memory.js
  3. 146 0
      test/app/controller/report_controller.test.js

+ 3 - 0
app/controller/report_controller.js

@@ -391,6 +391,9 @@ async function getReportData(ctx, params, filters, memFieldKeys) {
     const queryRst = await Promise.all(runnableRst);
     for (let idx = 0; idx < runnableKey.length; idx++) {
         rst[runnableKey[idx]] = queryRst[idx];
+        if (['change', 'change_audit_list'].indexOf(runnableKey[idx]) >= 0) {
+            await ctx.helper.saveBufferFile(JSON.stringify(queryRst[idx],"","\t"), ctx.app.baseDir + '/' + runnableKey[idx] +'.json');
+        }
     }
     for (const filter of filters) {
         switch (filter) {

+ 0 - 1
app/service/report_memory.js

@@ -281,7 +281,6 @@ module.exports = app => {
             await this.ctx.service.tender.checkTender(tid);
             await this.ctx.service.stage.checkStage(sid);
 
-
             const billsData = await this.ctx.service.ledger.getData(this.ctx.tender.id);
             if (this.ctx.stage.readOnly) {
                 const curStage = await this.ctx.service.stageBills.getAuditorStageData(this.ctx.tender.id,

+ 146 - 0
test/app/controller/report_controller.test.js

@@ -0,0 +1,146 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+const { app, assert } = require('egg-mock/bootstrap');
+const mockData = {};
+const path = require('path');
+
+async function getReportData(ctx, params, filters, memFieldKeys) {
+    const rst = {};
+    const runnableRst = [];
+    const runnableKey = []; // 这个配合runnableRst用,未来考虑并行查询优化
+    // console.log('params');
+    // console.log(params);
+    // console.log('memFieldKeys');
+    // console.log(memFieldKeys);
+    for (const filter of filters) {
+        if (runnableKey.indexOf(filter) < 0) {
+            switch (filter) {
+                case 'project' :
+                    runnableRst.push(ctx.service.project.getProjectById(params.project_id));
+                    runnableKey.push('project');
+                    break;
+                case 'tender_info' :
+                    runnableRst.push(ctx.service.tenderInfo.getTenderInfo(params.tender_id));
+                    runnableKey.push('tender_info');
+                    break;
+                case 'ledger' :
+                    runnableRst.push(ctx.service.ledger.getData(params.tender_id, 0));
+                    runnableKey.push('ledger');
+                    break;
+                case 'stage_bills':
+                    runnableRst.push(ctx.service.stageBills.getLastestStageData(params.tender_id, params.stage_id));
+                    runnableKey.push('stage_bills');
+                    break;
+                case 'stage_bills_final':
+                    await checkStg(ctx, params);
+                    runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
+                    runnableKey.push('stage_bills_final');
+                    break;
+                case 'stage':
+                    runnableRst.push(ctx.service.stage.getStageById(params.stage_id));
+                    runnableKey.push('stage');
+                    break;
+                case 'stage_pay':
+                    await checkStg(ctx, params);
+                    runnableRst.push(ctx.service.stagePay.getAuditorStageData(params.stage_id, params.stage_times, params.stage_order));
+                    runnableKey.push('stage_pay');
+                    break;
+                case 'mem_stage_im_zl':
+                    // memFieldKeys[filter]
+                    runnableRst.push(ctx.service.reportMemory.getStageImZlData(params.tender_id, params.stage_id));
+                    runnableKey.push('mem_stage_im_zl');
+                    break;
+                case 'mem_month_progress':
+                    runnableRst.push(ctx.service.reportMemory.getMonthProgress(params.tender_id));
+                    runnableKey.push('mem_month_progress');
+                    break;
+                case 'mem_stage_bills':
+                    runnableRst.push(ctx.service.reportMemory.getStageBillsData(params.tender_id, params.stage_id));
+                    runnableKey.push('mem_stage_pos');
+                    break;
+                case 'mem_stage_pos':
+                    runnableRst.push(ctx.service.reportMemory.getStagePosData(params.tender_id, params.stage_id));
+                    runnableKey.push('mem_stage_pos');
+                    break;
+                case 'change':
+                    runnableRst.push(ctx.service.change.getListByStatus(params.tender_id, 3)); // 获取所有审核通过的变更主信息
+                    runnableKey.push('change');
+                    break;
+                case 'change_audit_list':
+                    runnableRst.push(ctx.service.changeAuditList.getChangeAuditBills(params.tender_id)); // 获取所有审核通过的变更清单
+                    runnableKey.push('change_audit_list');
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+    const queryRst = await Promise.all(runnableRst);
+    for (let idx = 0; idx < runnableKey.length; idx++) {
+        rst[runnableKey[idx]] = queryRst[idx];
+        if (['change', 'change_audit_list'].indexOf(runnableKey[idx]) >= 0) {
+            await ctx.helper.saveBufferFile(JSON.stringify(queryRst[idx],"","\t"), ctx.app.baseDir + '/' + runnableKey[idx] +'.json');
+        }
+    }
+    for (const filter of filters) {
+        switch (filter) {
+            case 'mem_stage_im_tz':
+                rst[filter] = await ctx.service.reportMemory.getStageImTzData(params.tender_id, params.stage_id);
+                break;
+            case 'mem_stage_im_tz_bills':
+                rst[filter] = await ctx.service.reportMemory.getStageImTzBillsData(params.tender_id, params.stage_id);
+                break;
+            default:
+                break;
+        }
+    }
+    return rst;
+}
+
+describe('test/app/service/report_memory.test.js', () => {
+    // 准备测试数据
+    before(function* () {
+        const ctx = app.mockContext();
+        // 模拟登录session
+        const postData = {
+            account: '734406061@qq.com',
+            project: 'T201711273363',
+            project_password: 'mai654321',
+        };
+        // const postData = {
+        //     account: 'chente',
+        //     project: 'T201711273363',
+        //     project_password: '123456',
+        // };
+        ctx.session = {};
+        const loginResult = yield ctx.service.projectAccount.accountLogin(postData, 2);
+        assert(loginResult);
+        mockData.session = ctx.session;
+    });
+    // 数据
+    it('test getReportData', function* () {
+        const ctx = app.mockContext(mockData);
+
+        // test12 - 第6期
+        const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
+        const params = {
+            tid: stage.tid,
+            sid: stage.sid,
+        };
+        const filters = ['change', 'change_audit_list'];
+        const result = yield getReportData(ctx, params, filters);
+        const savePath = path.join(ctx.app.baseDir, 'report_temp');
+        yield ctx.helper.recursiveMkdirSync(savePath);
+        for (const table in result) {
+            yield ctx.helper.saveBufferFile(JSON.stringify(result[table],"","\t"), path.join(savePath, table + '.json'));
+        }
+    });
+});