123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500 |
- /**
- * 标段--台账 模型 单元测试
- *
- * @author Mai
- * @date 2017/12/1
- * @version
- */
- 'use strict';
- /* const testNodeData = [
- { ledger_id: 1, ledger_pid: -1, order: 1, level: 1, full_path: '1', code: '1' },
- { ledger_id: 2, ledger_pid: 1, order: 1, level: 2, full_path: '1.2', code: '1-1' },
- { ledger_id: 6, ledger_pid: 2, order: 1, level: 3, full_path: '1.2.6', code: '1-1-1' },
- { ledger_id: 7, ledger_pid: 6, order: 1, level: 4, full_path: '1.2.6.7', code: '202-1' },
- { ledger_id: 10, ledger_pid: 7, order: 2, level: 5, full_path: '1.2.6.7.10', code: '202-1-a' },
- { ledger_id: 9, ledger_pid: 7, order: 1, level: 5, full_path: '1.2.6.7.9', code: '202-1-b' },
- { ledger_id: 8, ledger_pid: 6, order: 2, level: 4, full_path: '1.2.6.8', code: '202-2' },
- { ledger_id: 11, ledger_pid: 8, order: 1, level: 5, full_path: '1.2.6.8.11', code: '202-2-c' },
- { ledger_id: 12, ledger_pid: 8, order: 2, level: 5, full_path: '1.2.6.8.12', code: '202-2-e' },
- { ledger_id: 13, ledger_pid: 2, order: 2, level: 3, full_path: '1.2.13', code: '1-1-2' },
- { ledger_id: 14, ledger_pid: 2, order: 3, level: 3, full_path: '1.2.14', code: '1-1-3' },
- { ledger_id: 3, ledger_pid: 1, order: 2, level: 2, full_path: '1.3', code: '1-2' },
- { ledger_id: 4, ledger_pid: 1, order: 3, level: 2, full_path: '1.4', code: '1-3' },
- { ledger_id: 5, ledger_pid: 1, order: 4, level: 2, full_path: '1.5', code: '1-4' },
- ];*/
- const testNodeData = [
- { ledger_id: 1, ledger_pid: -1, order: 1, level: 1, full_path: '1', code: '1', is_leaf: false },
- { ledger_id: 2, ledger_pid: 1, order: 1, level: 2, full_path: '1.2', code: '1-1', is_leaf: false },
- { ledger_id: 6, ledger_pid: 2, order: 1, level: 3, full_path: '1.2.6', code: '1-1-1', is_leaf: false },
- { ledger_id: 7, ledger_pid: 6, order: 1, level: 4, full_path: '1.2.6.7', code: '202-1', is_leaf: false },
- { ledger_id: 10, ledger_pid: 7, order: 2, level: 5, full_path: '1.2.6.7.10', code: '202-1-a', is_leaf: true },
- { ledger_id: 9, ledger_pid: 7, order: 1, level: 5, full_path: '1.2.6.7.9', code: '202-1-b', is_leaf: true },
- { ledger_id: 8, ledger_pid: 6, order: 2, level: 4, full_path: '1.2.6.8', code: '202-2', is_leaf: false },
- { ledger_id: 11, ledger_pid: 8, order: 1, level: 5, full_path: '1.2.6.8.11', code: '202-2-c', is_leaf: true },
- { ledger_id: 12, ledger_pid: 8, order: 2, level: 5, full_path: '1.2.6.8.12', code: '202-2-e', is_leaf: true },
- { ledger_id: 13, ledger_pid: 2, order: 2, level: 3, full_path: '1.2.13', code: '1-1-2', is_leaf: true },
- { ledger_id: 14, ledger_pid: 2, order: 3, level: 3, full_path: '1.2.14', code: '1-1-3', is_leaf: true },
- { ledger_id: 3, ledger_pid: 1, order: 2, level: 2, full_path: '1.3', code: '1-2', is_leaf: false },
- { ledger_id: 15, ledger_pid: 3, order: 1, level: 3, full_path: '1.3.15', code: '1-2-1', is_leaf: true },
- { ledger_id: 4, ledger_pid: 1, order: 3, level: 2, full_path: '1.4', code: '1-3', is_leaf: false },
- { ledger_id: 16, ledger_pid: 4, order: 1, level: 3, full_path: '1.4.16', code: '1-3-1', is_leaf: true },
- { ledger_id: 5, ledger_pid: 1, order: 4, level: 2, full_path: '1.5', code: '1-4', is_leaf: true },
- ];
- const testTenderId = 3;
- const { app, assert } = require('egg-mock/bootstrap');
- const findById = function(nodes, Id) {
- const filters = nodes.filter(function(x) {
- return x.ledger_id === Id;
- });
- return filters.length > 0 ? filters[0] : undefined;
- };
- describe('test/app/service/ledger.test.js', () => {
- // 准备测试数据
- it('clear history test data', function* () {
- const ctx = app.mockContext();
- const result = yield ctx.service.ledger.db.delete(ctx.service.ledger.tableName, { tender_id: testTenderId });
- assert(result.affectedRows >= 0);
- });
- it('add test data', function* () {
- const ctx = app.mockContext();
- for (const data of testNodeData) {
- data.tender_id = testTenderId;
- }
- const result = yield ctx.service.ledger.db.insert(ctx.service.ledger.tableName, testNodeData);
- assert(result.affectedRows === testNodeData.length);
- ctx.service.ledger.cache.set('tender_node_maxId:' + testTenderId, 16, 'EX', ctx.app.config.cacheTime);
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ ├── 202-1
- │ │ │ ├── 202-1-a
- │ │ │ └── 202-1-b
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-1-3
- │ ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ └── 1-2-1
- ├── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- // 测试R类方法
- it('test getDataByTenderId', function* () {
- const ctx = app.mockContext();
- // 查询前4层节点
- const result1 = yield ctx.service.ledger.getDataByTenderId(testTenderId);
- assert(result1.length === 12);
- // 查询前3层节点
- const result2 = yield ctx.service.ledger.getDataByTenderId(testTenderId, 3);
- assert(result2.length === 10);
- });
- it('test getDataByNodeId', function* () {
- const ctx = app.mockContext();
- // 查询节点202-1
- const node = yield ctx.service.ledger.getDataByNodeId(testTenderId, 7);
- assert(node);
- assert(node.code === '202-1');
- assert(node.full_path === '1.2.6.7');
- });
- it('test getDataByNodeIds', function* () {
- const ctx = app.mockContext();
- // 查询节点202-1-a与201-1-b
- const result = yield ctx.service.ledger.getDataByNodeIds(testTenderId, [10, 9]);
- assert(result.length === 2);
- let node = findById(result, 10);
- assert(node.code === '202-1-a');
- node = findById(result, 9);
- assert(node.full_path === '1.2.6.7.9');
- });
- it('test getLastChildData', function* () {
- const ctx = app.mockContext();
- // 查询节点202-1最后一个子节点
- const result = yield ctx.service.ledger.getLastChildData(testTenderId, 7);
- assert(result.ledger_id === 10);
- assert(result.full_path === '1.2.6.7.10');
- });
- it('test getDataByParentAndOrder', function* () {
- const ctx = app.mockContext();
- // 查询节点202-1 第1子节点
- const result1 = yield ctx.service.ledger.getDataByParentAndOrder(testTenderId, 8, 1);
- assert(result1.ledger_id === 11);
- assert(result1.full_path === '1.2.6.8.11');
- // 查询节点1-1 第2/3子节点
- const result2 = yield ctx.service.ledger.getDataByParentAndOrder(testTenderId, 2, [2, 3]);
- assert(result2.length === 2);
- let node = findById(result2, 13);
- assert(node);
- assert(node.code === '1-1-2');
- node = findById(result2, 14);
- assert(node);
- assert(node.code === '1-1-3');
- });
- it('test getChildrenByParentId', function* () {
- const ctx = app.mockContext();
- // 查询节点202-1最后一个子节点
- const result = yield ctx.service.ledger.getChildrenByParentId(testTenderId, 8);
- assert(result.length === 2);
- let node = findById(result, 11);
- assert(node);
- assert(node.code === '202-2-c');
- node = findById(result, 12);
- assert(node);
- assert(node.full_path === '1.2.6.8.12');
- });
- it('test getDataByFullPath', function* () {
- const ctx = app.mockContext();
- // 查询节点202-1最后一个子节点
- const result = yield ctx.service.ledger.getDataByFullPath(testTenderId, '1.2.6.8%');
- assert(result.length === 3);
- let node = findById(result, 8);
- assert(node);
- assert(node.code === '202-2');
- node = findById(result, 11);
- assert(node);
- assert(node.code === '202-2-c');
- node = findById(result, 12);
- assert(node);
- assert(node.full_path === '1.2.6.8.12');
- });
- it('test getNextsData', function* () {
- const ctx = app.mockContext();
- // 查询节点202-1最后一个子节点
- const result = yield ctx.service.ledger.getNextsData(testTenderId, 2, 1);
- assert(result.length === 2);
- let node = findById(result, 13);
- assert(node);
- assert(node.code === '1-1-2');
- node = findById(result, 14);
- assert(node);
- assert(node.code === '1-1-3');
- });
- // 测试CUD类方法
- it('test addNode', function* () {
- const ctx = app.mockContext();
- // 选中1-1-1,插入节点
- const resultData = yield ctx.service.ledger.addNode(testTenderId, 6);
- assert(resultData.create.length === 1);
- assert(resultData.update.length === 2);
- assert(resultData.create[0].is_leaf === 1);
- assert(resultData.create[0].ledger_id === 17);
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ ├── 202-1
- │ │ │ ├── 202-1-a
- │ │ │ └── 202-1-b
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-1-3
- │ ├── new
- │ ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ └── 1-2-1
- ├── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test deleteNode', function* () {
- const ctx = app.mockContext();
- // 选中202-1,删除节点
- const resultData = yield ctx.service.ledger.deleteNode(testTenderId, 7);
- assert(resultData.delete.length === 3);
- assert(resultData.update.length === 1);
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ ├── new
- │ ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ └── 1-2-1
- ├── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test upMoveNode', function* () {
- const ctx = app.mockContext();
- // 选中202-2-e上移
- const resultData = yield ctx.service.ledger.upMoveNode(testTenderId, 12);
- resultData.update.sort(function(x, y) {
- return x.order - y.order;
- });
- assert(resultData.update.length === 2);
- assert(resultData.update[0].code === '202-2-e');
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ ├── new
- │ ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ └── 1-2-1
- ├── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test downMoveNode', function* () {
- const ctx = app.mockContext();
- // 选中202-2-e下移
- const resultData = yield ctx.service.ledger.downMoveNode(testTenderId, 12);
- resultData.update.sort(function(x, y) {
- return x.order - y.order;
- });
- assert(resultData.update.length === 2);
- assert(resultData.update[0].code === '202-2-c');
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ ├── new
- │ ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ └── 1-2-1
- ├── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test upLevelNode', function* () {
- const ctx = app.mockContext();
- // 选中 1-1-2 升级
- const resultData = yield ctx.service.ledger.upLevelNode(testTenderId, 13);
- assert(resultData);
- assert(resultData.update.length === 5);
- let node = findById(resultData.update, 13);
- assert(node.full_path === '1.13');
- assert(node.ledger_pid === 1);
- assert(!node.is_leaf);
- node = findById(resultData.update, 14);
- assert(node.ledger_pid === 13);
- assert(node.full_path === '1.13.14');
- node = findById(resultData.update, 3);
- assert(node.order === 3);
- node = findById(resultData.update, 4);
- assert(node.order === 4);
- node = findById(resultData.update, 5);
- assert(node.order === 5);
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ └── new
- ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ └── 1-2-1
- ├── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test downLevelNode', function* () {
- const ctx = app.mockContext();
- // 选中1-3 降级
- const resultData = yield ctx.service.ledger.downLevelNode(testTenderId, 4);
- assert(resultData.update.length === 3);
- let node = findById(resultData.update, 4);
- assert(node.full_path === '1.3.4');
- assert(node.ledger_pid === 3);
- assert(node.level === 3);
- assert(node.order === 2);
- node = findById(resultData.update, 16);
- assert(node.level === 4);
- assert(node.full_path === '1.3.4.16');
- node = findById(resultData.update, 5);
- assert(node.order === 4);
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ └── new
- ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ ├── 1-2-1
- │ └── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test pasteBlock', function* () {
- const ctx = app.mockContext();
- // 选中1-2-1, 粘贴1-1-1和new
- const resultData = yield ctx.service.ledger.pasteBlock(testTenderId, 15, [6, 17]);
- assert(resultData.create.length === 2);
- assert(resultData.create[0].order = 2);
- assert(resultData.create[0].level = 3);
- assert(resultData.create[0].full_path = '1.3.18');
- assert(resultData.create[1].order = 3);
- assert(resultData.create[1].level = 3);
- assert(resultData.create[1].full_path = '1.3.22');
- assert(resultData.update.length === 1);
- assert(resultData.update[0].order = 3);
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ └── new
- ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ ├── 1-2-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ ├── new
- │ └── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test updateInfo', function* () {
- const ctx = app.mockContext();
- // 修改new(id=17)的code 为 1-1-4
- const node = yield ctx.service.ledger.getDataByNodeId(testTenderId, 17);
- assert(node);
- const resultData = yield ctx.service.ledger.updateInfo(testTenderId, {
- id: node.id,
- tender_id: node.tender_id,
- ledger_id: node.ledger_id,
- code: '1-1-4',
- });
- assert(resultData.code === '1-1-4');
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ └── 1-1-3
- ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ ├── 1-2-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ ├── new
- │ └── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- it('test updateInfos', function* () {
- const ctx = app.mockContext();
- // 修改new(id=17)的code 为 1-1-4
- const node1 = yield ctx.service.ledger.getDataByNodeId(testTenderId, 18);
- assert(node1);
- const node2 = yield ctx.service.ledger.getDataByNodeId(testTenderId, 22);
- assert(node2);
- const resultData = yield ctx.service.ledger.updateInfos(testTenderId, [{
- id: node1.id,
- tender_id: node1.tender_id,
- ledger_id: node1.ledger_id,
- code: '1-2-2',
- }, {
- id: node2.id,
- tender_id: node2.tender_id,
- ledger_id: node2.ledger_id,
- code: '1-2-3',
- }]);
- assert(resultData.length === 2);
- assert(resultData[0].code === '1-2-2');
- assert(resultData[1].code === '1-2-3');
- });
- /* 期望运行结果:
- 1
- ├── 1-1
- │ ├── 1-1-1
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ └── 1-1-3
- ├── 1-1-2
- │ └── 1-1-3
- ├── 1-2
- │ ├── 1-2-1
- │ ├── 1-2-2
- │ │ └── 202-2
- │ │ ├── 202-2-c
- │ │ └── 202-2-e
- │ ├── 1-2-3
- │ └── 1-3
- │ └── 1-3-1
- └── 1-4
- */
- });
|