Visualize version deliveries and task dependency branches
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
import test from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
import { buildGraph, related, validCreated } from '../src/pages/task-graph.ts'
|
||||
const task = (id, extra = {}) => ({ id, name:id, status:'running', phase:'implementation', ...extra })
|
||||
test('long chains and cycles use iterative traversal', () => {
|
||||
const tasks=Array.from({length:15000},(_,i)=>task(String(i),{status:i===14999?'running':'completed',depends_on:i?[String(i-1)]:['14999']}))
|
||||
const graph=buildGraph(tasks); assert.equal(graph.nodes.length,15000); assert.equal(related('7000',graph.edges).size,15000)
|
||||
})
|
||||
test('multiple prerequisites included, unrelated history excluded',()=>{
|
||||
const g=buildGraph([task('a',{depends_on:['b','c']}),task('b',{status:'completed',depends_on:['d']}),task('c',{status:'completed'}),task('d',{status:'completed'}),task('old',{status:'completed'})]);assert.deepEqual(g.nodes.map(t=>t.id),['a','b','c','d']);assert.equal(g.edges.length,3)
|
||||
})
|
||||
test('no dependencies and legacy version do not infer delivery',()=>{const g=buildGraph([task('d',{kind:'delivery',version:'v'}),task('w',{version:'v'})]);assert.equal(g.edges.length,0);assert.equal(related('w',g.edges).size,1)})
|
||||
test('all history toggle, explicit delivery context, missing IDs',()=>{const ts=[task('d',{kind:'delivery',status:'completed'}),task('w',{delivery_id:'d',depends_on:['missing']}),task('h',{status:'completed'})];assert.equal(buildGraph(ts).nodes.length,2);assert.equal(buildGraph(ts,true).nodes.length,3)})
|
||||
test('merge requires explicit relationship, delivery target and both verified',()=>{
|
||||
for(const source of ['integrated','verified'])for(const target of ['integrated','verified']){const g=buildGraph([task('w',{merged_into_id:'d',integration_status:source}),task('d',{kind:'delivery',integration_status:target})],true);assert.equal(g.edges.filter(e=>e.kind==='merge').length,source==='verified'&&target==='verified'?1:0)}
|
||||
assert.equal(buildGraph([task('w',{integration_status:'verified'}),task('d',{integration_status:'verified',merge_sources:['w']})],true).edges.length,0)
|
||||
assert.equal(buildGraph([task('w',{integration_status:'verified'}),task('d',{kind:'delivery',integration_status:'verified',merge_sources:['w']})],true).edges.length,1)
|
||||
})
|
||||
test('delivery order uses valid created_at only',()=>{const g=buildGraph([task('z',{kind:'delivery',created_at:2}),task('a',{kind:'delivery',updated:1}),task('b',{kind:'delivery',created_at:1})]);assert.deepEqual(g.deliveries.map(t=>t.id),['b','z','a']);assert.equal(validCreated(task('x',{created_at:NaN})),null)})
|
||||
test('highlight ancestors and descendants without unrelated siblings',()=>{const g=buildGraph([task('a'),task('b',{depends_on:['a']}),task('c',{depends_on:['a']}),task('d',{depends_on:['b']})]);assert.deepEqual([...related('b',g.edges)].sort(),['a','b','d'])})
|
||||
test('compact layout places delivery at group end with distinct origin and 100px rows', async()=>{
|
||||
const {compactLayout}=await import('../src/pages/task-graph.ts');const g=buildGraph([task('d',{kind:'delivery',created_at:1}),task('w',{delivery_id:'d'}),task('solo')]);const l=compactLayout(g);assert.deepEqual(l.rows.map(r=>r.task.id),['w','d','solo']);assert.equal(l.positions.get('d').y-l.positions.get('w').y,100);assert.ok(l.starts.get('d')<l.positions.get('w').y);assert.equal(l.rows[2].group,null);assert.equal(l.height,300)
|
||||
})
|
||||
Reference in New Issue
Block a user