feat: add ci and op convert insert test

This commit is contained in:
cudr 2019-10-22 00:05:46 +03:00
parent 65bb9b134d
commit cc071a2d35
10 changed files with 101 additions and 8 deletions

17
.travis.yml Normal file
View File

@ -0,0 +1,17 @@
language: node_js
node_js:
- '12'
env:
- workerCount=3 timeout=600000
script:
- npm run test
install:
- npm run bootstrap
cache:
directories:
- node_modules

View File

@ -9,6 +9,7 @@
"build": "lerna run build --stream",
"watch": "lerna run --parallel watch",
"prebuild": "rm -rf ./packages/**/lib/",
"test": "lerna run test --stream",
"format": "prettier --write"
},
"workspaces": [

View File

@ -21,7 +21,8 @@
"build": "yarn run build:types && yarn run build:js",
"build:types": "tsc --emitDeclarationOnly",
"build:js": "babel src --out-dir lib --extensions \".ts,.tsx\" --source-maps inline",
"watch": "yarn build:js -w"
"watch": "yarn build:js -w",
"test": "jest"
},
"dependencies": {
"typescript": "^3.6.3"
@ -32,7 +33,10 @@
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-proposal-object-rest-spread": "^7.5.5",
"@babel/preset-env": "^7.6.0",
"@babel/preset-typescript": "^7.6.0"
"@babel/preset-typescript": "^7.6.0",
"@types/jest": "^24.0.19",
"jest": "^24.9.0",
"ts-jest": "^24.1.0"
},
"directories": {
"lib": "lib"
@ -41,5 +45,14 @@
"slate",
"automerge",
"bridge"
]
],
"jest": {
"roots": [
"<rootDir>/src"
],
"transform": {
"^.+\\.ts?$": "ts-jest"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$"
}
}

View File

@ -1,17 +1,19 @@
import { Operation, SyncDoc } from '../model/index'
// TODO: handle annotation ops
export const addAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => {
console.log('addAnnotation!!!', op.toJS())
// console.log('addAnnotation!!!', op.toJS())
return doc
}
export const removeAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => {
console.log('removeAnnotation!!!', op.toJS())
// console.log('removeAnnotation!!!', op.toJS())
return doc
}
export const setAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => {
console.log('setAnnotation!!!', op.toJS())
// console.log('setAnnotation!!!', op.toJS())
return doc
}

View File

@ -0,0 +1,34 @@
import * as Automerge from 'automerge'
import { toSlateOp } from './index'
import { createDoc, cloneDoc, createParagraphJSON } from '../utils'
describe('convert operations to slatejs model', () => {
it('convert insert operations', () => {
const doc1 = createDoc()
const doc2 = cloneDoc(doc1)
const change = Automerge.change(doc1, 'change', (d: any) => {
d.document.nodes.push(createParagraphJSON('hello!'))
d.document.nodes[1].nodes[0].text = 'hello!'
})
const operations = Automerge.diff(doc2, change)
const slateOps = toSlateOp(operations, change)
const expectedOps = [
{
type: 'insert_node',
path: [1],
node: { object: 'block', type: 'paragraph', nodes: [] }
},
{
type: 'insert_node',
path: [1, 0],
node: { object: 'text', marks: [], text: 'hello!' }
}
]
expect(slateOps).toStrictEqual(expectedOps)
})
})

View File

@ -20,6 +20,7 @@ const AnnotationSetOp = ({ key, value }: Automerge.Diff) => (map, doc) => {
/**
* Looks like set_annotation option is broken, temporary disabled
*/
// if (!doc.annotations[key]) {
op = {
type: 'add_annotation',

View File

@ -51,7 +51,7 @@ export const removeCursor = (doc: SyncDoc, key: CursorKey) => {
return doc
}
export const cursorOpFilter = (ops: Immutable.List<Operation>, type: string) =>
export const cursorOpFilter = (ops: any, type: string): any =>
ops.filter(op => {
if (op.type === 'set_annotation') {
return !(

View File

@ -1,6 +1,8 @@
import toSync from './toSync'
import hexGen from './hexGen'
export * from './testUtils'
const toJS = node => {
try {
return JSON.parse(JSON.stringify(node))

View File

@ -0,0 +1,24 @@
import * as Automerge from 'automerge'
import { ValueJSON, TextJSON, NodeJSON } from 'slate'
export const createTextJSON = (text: string = ''): TextJSON => ({
object: 'text',
marks: [],
text
})
export const createParagraphJSON = (text: string = ''): NodeJSON => ({
object: 'block',
type: 'paragraph',
nodes: [createTextJSON(text)]
})
export const createValueJSON = (): ValueJSON => ({
document: {
nodes: [createParagraphJSON()]
}
})
export const createDoc = () => Automerge.from(createValueJSON())
export const cloneDoc = doc => Automerge.change(doc, '', d => d)

View File

@ -27,7 +27,6 @@
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"dev": "concurrently \"yarn start\" \"yarn serve\"",
"serve": "nodemon --watch ../backend/lib --inspect server.js"
},