UNPKG

w-data-syncer

Version:

A tool for data detection and synchronization.

132 lines (119 loc) 4.37 kB
import assert from 'assert' import fs from 'fs' import _ from 'lodash-es' import w from 'wsemi' import ot from 'dayjs' import WDataSourceFromCsv from '../src/WDataSourceFromCsv.mjs' // import WDataSyncer from '../src/WDataSyncer.mjs' describe('sfcsv', function() { let cvLtdt = (ltdt) => { ltdt = _.cloneDeep(ltdt) //須與記憶體脫勾, 否則會連動WDataSyncer內記憶體數據, 進而影響偵測差異 ltdt = _.map(ltdt, (dt) => { _.each(dt, (v, k) => { if (w.isnum(v)) { v = w.cdbl(v) dt[k] = v } if (w.isestr(v)) { v = _.trim(v) dt[k] = v } }) return dt }) return ltdt } let test = () => { let pm = w.genPm() let ms_trigger = [] let ms_csv = [] let fdSrc = `./_test_sfcsv` w.fsCleanFolder(fdSrc) let n = 0 let i = -1 let h = 0 let timer = setInterval(() => { n++ i++ let t = ot('2020-01-01T00:00:00', 'YYYY-MM-DDTHH:mm:ss') let tn = t.add(i, 'minute') let ctn = tn.format('YYYY-MM-DDTHH:mm:ss') let c = `${ctn}, ${123 + (i + 1) / 1000}\n` fs.appendFileSync(`${fdSrc}/h${h}.csv`, c, 'utf8') // console.log('push data', `i=${i}, n=${n}`) ms_trigger.push({ 'push data': `i=${i}, n=${n}` }) if (h === 0 && n === 4) { let c = fs.readFileSync(`${fdSrc}/h${h}.csv`, 'utf8') c = c.replace(`2020-01-01T00:02:00, 123.003`, `2020-01-01T00:02:00, 234.903`) fs.writeFileSync(`${fdSrc}/h${h}.csv`, c, 'utf8') // console.log('modify data', `i=${i}, n=${n}, 123.003->234.903`) ms_trigger.push({ 'modify data': `i=${i}, n=${n}, 123.003->234.903` }) } if (n >= 5) { n = 0 h++ } if (h === 1 && n === 2) { clearInterval(timer) omSrc.clear() w.fsDeleteFolder(fdSrc) let ms = [ ...ms_trigger, ...ms_csv, ] // console.log('ms', ms) pm.resolve(ms) } }, 3000) let omSrc = WDataSourceFromCsv(fdSrc, { heads: ['time', 'value'], key: 'time', converter: cvLtdt, }) omSrc.on('change', (msg) => { // console.log('WDataSourceFromCsv change msg', msg) ms_csv.push({ 'detect data': `type[${msg.type}], data[${JSON.stringify(msg.ltdtFmt[0])}]` }) }) return pm } // await test() // .catch((err) => { // console.log(err) // }) let ms = [ { 'push data': 'i=0, n=1' }, { 'push data': 'i=1, n=2' }, { 'push data': 'i=2, n=3' }, { 'push data': 'i=3, n=4' }, { 'modify data': 'i=3, n=4, 123.003->234.903' }, { 'push data': 'i=4, n=5' }, { 'push data': 'i=5, n=1' }, { 'push data': 'i=6, n=2' }, { 'detect data': 'type[insert], data[{"time":"2020-01-01T00:00:00","value":123.001}]' }, { 'detect data': 'type[insert], data[{"time":"2020-01-01T00:01:00","value":123.002}]' }, { 'detect data': 'type[insert], data[{"time":"2020-01-01T00:02:00","value":123.003}]' }, { 'detect data': 'type[insert], data[{"time":"2020-01-01T00:03:00","value":123.004}]' }, { 'detect data': 'type[save], data[{"time":"2020-01-01T00:02:00","value":234.903}]' }, { 'detect data': 'type[insert], data[{"time":"2020-01-01T00:04:00","value":123.005}]' }, { 'detect data': 'type[insert], data[{"time":"2020-01-01T00:05:00","value":123.006}]' } ] it(`should return '${JSON.stringify(ms)}' when run test'`, async function() { let r = await test() let rr = ms assert.strict.deepStrictEqual(r, rr) }) })