Add revisioned decisions and scoped consultation lifecycle
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import test from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
import { decisionStatus, submissionBody, confirmDraft } from '../src/pages/decision-ui.ts'
|
||||
const decision={status:'open',revision:2,options:[{id:'a'}]}
|
||||
const draft=()=>({option:null,comment:'',revision:2,conflict:false})
|
||||
test('free text allowed with enumerated options; empty and invalid options rejected',()=>{assert.equal(submissionBody(decision,draft()),null);assert.equal(submissionBody(decision,{...draft(),comment:' '}),null);assert.deepEqual(submissionBody(decision,{...draft(),comment:'其他意见'}),{expected_revision:2,option_id:null,comment:'其他意见'});assert.equal(submissionBody(decision,{...draft(),option:'gone'}),null)})
|
||||
test('old revision or conflict cannot resubmit without explicit confirmation',()=>{const d={...draft(),revision:1,option:'a',comment:'保留意见',conflict:true,attempt:{key:'old',signature:'old'}};assert.equal(submissionBody(decision,d),null);confirmDraft(decision,d);assert.equal(d.option,null);assert.equal(d.comment,'保留意见');assert.equal(d.attempt,undefined);assert.equal(submissionBody(decision,d).expected_revision,2)})
|
||||
test('pending accepted completed read only; reconsideration permits new submission',()=>{for(const status of ['pending_review','accepted','completed'])assert.equal(submissionBody({...decision,status},{...draft(),option:'a'}),null);assert.ok(submissionBody({...decision,status:'needs_reconsideration'},{...draft(),option:'a'}));assert.equal(submissionBody(decision,{...draft(),option:'a',sending:true}),null)})
|
||||
test('legacy response maps to pending review, never acceptance',()=>{for(const status of ['decided','pending_verification'])assert.equal(decisionStatus({status,response:{id:'r'}}),'pending_review')})
|
||||
Reference in New Issue
Block a user