flownote
Version:
FlowNote lets developers create, organize, and reason about event-oriented applications with a simple flow-based language.
203 lines (155 loc) • 7.05 kB
JavaScript
import Channel from '../src/channel'
import Node from '../src/node'
import Flow from '../src/flow'
import Application from '../src/application'
import Milestone from '../src/milestone'
import Action from '../src/action'
const test = require('ava')
const appName = 'Test'
const nodeName = 'Double X'
const channelName = 'Plain'
const milestoneName = 'Commit changes'
const doubleX = data => {
data.x *= 2
return data
}
test('Define Milestone', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
const node2 = new Node(app, undefined, nodeName, [], [ 'test' ], [ action ])
milestone.connect(channel)
channel.connect(node2)
t.is(milestone.application, app)
t.is(milestone.name, milestoneName)
t.is(milestone.to.length, 1)
t.is(milestone.to[0], channel)
t.is(milestone.strategy, 'fcfs')
t.is(milestone.requestIdHistory.length, 0)
})
test('Milestone.asFlattened', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
const node2 = new Node(app, undefined, nodeName, [], [ 'test' ], [ action ])
milestone.connect(channel)
channel.connect(node2)
const flattened = milestone.asFlattened()
t.regex(flattened, /,"Double X",/)
t.regex(flattened, /","Plain",/)
t.regex(flattened, /,"test",/)
t.regex(flattened, /"data => {\\?r?\\n data\.x \*= 2\\?r?\\n return data\\?r?\\n}"/)
})
test('Milestone.asFlattened (Circular)', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
milestone.connect(channel)
channel.connect(milestone)
const flattened = milestone.asFlattened()
t.regex(flattened, /,"Double X",/)
t.regex(flattened, /","Plain",/)
t.regex(flattened, /"data => {\\?r?\\n data\.x \*= 2\\?r?\\n return data\\?r?\\n}"/)
})
test('Milestone.loadFlattened', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
const node2 = new Node(app, undefined, nodeName, [], [ 'test' ], [ action ])
flow.connect(milestone)
milestone.connect(channel)
channel.connect(node2)
const flattened = milestone.asFlattened()
const restoredMilestone = new Milestone(app).loadFlattened(flattened)
t.is(restoredMilestone.application, app)
t.is(restoredMilestone.name, milestoneName)
t.is(restoredMilestone.to.length, 1)
t.is(restoredMilestone.to[0].id, channel.id)
t.is(restoredMilestone.to[0].to.id, node2.id)
t.is(restoredMilestone.strategy, 'fcfs')
t.is(restoredMilestone.requestIdHistory.length, 0)
})
test('Milestone.loadFlattened (Circular)', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
flow.connect(milestone)
milestone.connect(channel)
channel.connect(milestone)
const flattened = milestone.asFlattened()
const restoredMilestone = new Milestone(app).loadFlattened(flattened)
t.is(restoredMilestone.application, app)
t.is(restoredMilestone.name, milestoneName)
t.is(restoredMilestone.to.length, 1)
t.is(restoredMilestone.to[0].id, channel.id)
t.is(restoredMilestone.to[0].to.id, milestone.id)
t.is(restoredMilestone.strategy, 'fcfs')
t.is(restoredMilestone.requestIdHistory.length, 0)
})
test('Milestone.addAction with Action', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
const node2 = new Node(app, undefined, nodeName, [], [ 'test' ], [ action ])
milestone.connect(channel)
channel.connect(node2)
milestone.addAction(action)
t.is(milestone.actions.length, 2)
t.is(milestone.actions[0].toString(), action.toString())
t.is(milestone.actions[1].toString(), action.toString())
})
test('Milestone.addAction with String', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
const node2 = new Node(app, undefined, nodeName, [], [ 'test' ], [ action ])
milestone.connect(channel)
channel.connect(node2)
milestone.addAction(action.name)
t.is(milestone.actions.length, 2)
t.is(milestone.actions[0].toString(), action.toString())
t.is(milestone.actions[1].toString(), action.toString())
})
test('Milestone.connect', t => {
const app = new Application(undefined, appName)
const flow = new Flow(app, undefined, 'Flow')
app.setPublicFlow(flow)
const channel = new Channel(app, undefined, channelName, undefined, [], undefined, undefined, [])
const action = new Action(nodeName, doubleX, app)
app.registerAction(action.name, action)
const milestone = new Milestone(app, undefined, milestoneName, 'fcfs', [], [ action ])
const node2 = new Node(app, undefined, nodeName, [], [ 'test' ], [ action ])
milestone.connect(channel)
channel.connect(node2)
t.is(milestone.to.length, 1)
t.is(milestone.to[0], channel)
t.is(milestone.to[0].to, node2)
})