Simple Approval
A typed durable approval with one service task and one user task.
dart
import 'package:vyuh_workflow_engine/vyuh_workflow_runtime.dart';
import 'package:vyuh_workflow_testkit/vyuh_workflow_testkit.dart';
final loadRequest = Workflow.activity<String, Request>(
name: 'requests.load',
input: stringCodec,
output: requestCodec,
);
final decide = Workflow.userTask<Request, Approval>(
name: 'requests.decide',
input: requestCodec,
response: approvalCodec,
);
final requestApproval = Workflow.define<String, Result>(
code: 'requests.approval',
version: 1,
fingerprint: 'requests.approval:v1',
input: stringCodec,
output: resultCodec,
execute: (flow, requestId) async {
final request = await flow.serviceTask(
loadRequest,
requestId,
id: 'load',
);
final decision = await flow.userTask(
decide,
request,
id: 'decide',
title: 'Approve request',
assignment: Assignment(roleIds: ['managers']),
);
return decision.approved ? Result.approved() : Result.rejected();
},
);Drive It in Tests
dart
final test = WorkflowTestHarness()
..workflow(requestApproval)
..activity(loadRequest, (context, id) async => Request(id: id));
final run = await test.start(requestApproval, 'REQ-001');
await run.drain();
await run.completeUserTask(decide, Approval.approved());
expect((await run.run).status, WorkflowRunStatus.completed);