|
@@ -10,19 +10,133 @@
|
|
|
|
|
|
const { app, assert } = require('egg-mock/bootstrap');
|
|
|
const excel = require('node-xlsx');
|
|
|
+const xlsx = require('js-xlsx');
|
|
|
+const addData = {
|
|
|
+ name: 'test_deal_bills',
|
|
|
+ category: null,
|
|
|
+};
|
|
|
+const mockData = {};
|
|
|
+const _ = require('lodash');
|
|
|
|
|
|
describe('test/app/service/deal_bills.test.js', () => {
|
|
|
- it('test import Excel data', function* () {
|
|
|
+ // 准备测试数据,新增测试标段
|
|
|
+ before(function* () {
|
|
|
const ctx = app.mockContext();
|
|
|
+ // 模拟登录session
|
|
|
+ const postData = {
|
|
|
+ account: '734406061@qq.com',
|
|
|
+ project: 'T201711273363',
|
|
|
+ project_password: 'mai654321',
|
|
|
+ };
|
|
|
+ ctx.session = {};
|
|
|
+ const loginResult = yield ctx.service.projectAccount.accountLogin(postData, 2);
|
|
|
+ assert(loginResult);
|
|
|
+ mockData.session = ctx.session;
|
|
|
+ // 移除旧测试数据
|
|
|
+ const testTender = yield ctx.service.tender.getDataByCondition({
|
|
|
+ name: addData.name,
|
|
|
+ project_id: ctx.session.sessionProject.id,
|
|
|
+ });
|
|
|
+ if (testTender) {
|
|
|
+ const result = yield ctx.service.tender.deleteTenderNoBackup(testTender.id);
|
|
|
+ assert(result);
|
|
|
+ }
|
|
|
+ // 新增测试用标段
|
|
|
+ const result = yield ctx.service.tender.add(addData);
|
|
|
+ assert(result);
|
|
|
+ const tender = yield ctx.service.tender.getDataByCondition({
|
|
|
+ name: addData.name,
|
|
|
+ project_id: ctx.session.sessionProject.id,
|
|
|
+ });
|
|
|
+ mockData.tender = {id: tender.id, data: tender};
|
|
|
+ ctx.tender = mockData.tender;
|
|
|
+ });
|
|
|
+ // 导入 Excel数据(数据源:node-xlsx导入)
|
|
|
+ it('test import Excel data by node-xlsx', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+ const file = app.baseDir + '/test/app/test_file/deal-upload-test.xls';
|
|
|
+ const sheets = excel.parse(file);
|
|
|
+
|
|
|
+ const result = yield ctx.service.dealBills.importData(sheets[0], ctx.tender.id);
|
|
|
+ assert(result);
|
|
|
+
|
|
|
+ const bills = yield ctx.service.dealBills.getAllDataByCondition({where: {tender_id: ctx.tender.id}});
|
|
|
+ assert(bills.length === 1);
|
|
|
+ assert(bills[0].code === '101-1');
|
|
|
+ assert(bills[0].tender_id === ctx.tender.id);
|
|
|
+ });
|
|
|
+ // 导入 Excel数据(数据源:js-xlsx导入)
|
|
|
+ it('test import Excel data by js-xlsx', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
const file = app.baseDir + '/test/app/test_file/deal-upload-test.xls';
|
|
|
- const sheets = excel.parse(file), testTenderId = 3;
|
|
|
|
|
|
- const result = yield ctx.service.dealBills.importData(sheets[0], testTenderId);
|
|
|
+ const wb = xlsx.readFile(file);
|
|
|
+ const name = wb.SheetNames[0];
|
|
|
+ const sheetData = {
|
|
|
+ rows: xlsx.utils.sheet_to_json(wb.Sheets[name], {header: 1}),
|
|
|
+ merge: wb.Sheets[name]["!merges"],
|
|
|
+ };
|
|
|
+ const result = yield ctx.service.dealBills.importDataJsXlsx(sheetData, ctx.tender.id);
|
|
|
assert(result);
|
|
|
|
|
|
- const bills = yield ctx.service.dealBills.getAllDataByCondition({where: {tender_id: testTenderId}});
|
|
|
+ const bills = yield ctx.service.dealBills.getAllDataByCondition({where: {tender_id: ctx.tender.id}});
|
|
|
assert(bills.length === 1);
|
|
|
assert(bills[0].code === '101-1');
|
|
|
- assert(bills[0].tender_id === testTenderId);
|
|
|
+ assert(bills[0].tender_id === ctx.tender.id);
|
|
|
+ });
|
|
|
+ // 导入 数据类型有误的excel(数据源:js-xlsx导入)
|
|
|
+ it('test import Excel data with Type-Error by js-xlsx', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+ const file = app.baseDir + '/test/app/test_file/deal-bills-typeError.xlsx';
|
|
|
+
|
|
|
+ const wb = xlsx.readFile(file);
|
|
|
+ const name = wb.SheetNames[0];
|
|
|
+ const sheetData = {
|
|
|
+ rows: xlsx.utils.sheet_to_json(wb.Sheets[name], {header: 1}),
|
|
|
+ merge: wb.Sheets[name]["!merges"],
|
|
|
+ };
|
|
|
+ try {
|
|
|
+ const result = yield ctx.service.dealBills.importDataJsXlsx(sheetData, ctx.tender.id);
|
|
|
+ assert(false);
|
|
|
+ } catch (err) {
|
|
|
+ assert(err);
|
|
|
+ assert(err.indexOf('数据类型有误') > 0);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 导入 表头定义有误的excel(数据源:js-xlsx导入)
|
|
|
+ it('test import Excel data with Col-Define-Error by js-xlsx', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+ const file = app.baseDir + '/test/app/test_file/deal-bills-colDefError.xlsx';
|
|
|
+
|
|
|
+ const wb = xlsx.readFile(file);
|
|
|
+ const name = wb.SheetNames[0];
|
|
|
+ const sheetData = {
|
|
|
+ rows: xlsx.utils.sheet_to_json(wb.Sheets[name], {header: 1}),
|
|
|
+ merge: wb.Sheets[name]["!merges"],
|
|
|
+ };
|
|
|
+ try {
|
|
|
+ const result = yield ctx.service.dealBills.importDataJsXlsx(sheetData, ctx.tender.id);
|
|
|
+ assert(false);
|
|
|
+ } catch (err) {
|
|
|
+ assert(err);
|
|
|
+ assert(err.indexOf('表头定义有误') > 0);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 导入 表头定义有误的excel(数据源:js-xlsx导入)
|
|
|
+ it('test import Excel data with Col-Define-Error by js-xlsx', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+ const file = app.baseDir + '/test/app/test_file/deal-bills-filterInvalidRows.xlsx';
|
|
|
+
|
|
|
+ const wb = xlsx.readFile(file);
|
|
|
+ const name = wb.SheetNames[0];
|
|
|
+ const sheetData = {
|
|
|
+ rows: xlsx.utils.sheet_to_json(wb.Sheets[name], {header: 1}),
|
|
|
+ merge: wb.Sheets[name]["!merges"],
|
|
|
+ };
|
|
|
+ const result = yield ctx.service.dealBills.importDataJsXlsx(sheetData, ctx.tender.id);
|
|
|
+ assert(result);
|
|
|
+
|
|
|
+ const bills = yield ctx.service.dealBills.getAllDataByCondition({where: {tender_id: ctx.tender.id}});
|
|
|
+ assert(bills.length === 98);
|
|
|
});
|
|
|
});
|