Write tests for the spec below:

Javascript-based Workflow DSL

- It should be easy to use: simply declare your tasks and dependencies in a single object.
- It should do automatic dependency resolution: the dependencies should be passed as arguments to the task functions. and the library should automatically detect them without them being explicitly provided
- It should minimize boilerplate by automatically wrapping all tasks in Observables: this should also allow efficient handling of asynchronicity
- It should do error handling: Global error handier for handling any errors during task execution.
- It should offer Concurrency Control: Limit the number of concurrent tasks.
- It should offer Progress Reporting: Get real-time updates on the status of your tasks.
- It should accept async or synchronous functions as tasks. The wrapper should make sure to bridge the gap.
- It should accept both traditional and arrow functions as tasks.
- It should encode the workflow as a JS object where tasks are properties. The word "async" should not appear in your response.
user