diff --git a/packages/-ember-caluma/mirage/scenarios/default.js b/packages/-ember-caluma/mirage/scenarios/default.js index 9df92ff37..ee8e31778 100644 --- a/packages/-ember-caluma/mirage/scenarios/default.js +++ b/packages/-ember-caluma/mirage/scenarios/default.js @@ -200,6 +200,7 @@ export default function (server) { workflowId: server.create("workflow").id, workItemIds: [ server.create("work-item", { + status: "READY", taskId: server.create("task", { type: "COMPLETE_WORKFLOW_FORM", }).id, diff --git a/packages/workflow/addon/components/work-item-button.hbs b/packages/workflow/addon/components/work-item-button.hbs index d40f6769b..eb8bea603 100644 --- a/packages/workflow/addon/components/work-item-button.hbs +++ b/packages/workflow/addon/components/work-item-button.hbs @@ -1,7 +1,7 @@ { + const status = await this.apollo.query( + { + query: workItemStatusQuery, + variables: { id: this.args.workItemId }, + fetchPolicy: "network-only", + }, + "allWorkItems.edges.0.node.status", + ); + + return this.requiredWorkItemStatus.includes(status); + }); + @dropTask *mutate() { try { diff --git a/packages/workflow/addon/gql/queries/work-item-status.graphql b/packages/workflow/addon/gql/queries/work-item-status.graphql new file mode 100644 index 000000000..7cff9cc86 --- /dev/null +++ b/packages/workflow/addon/gql/queries/work-item-status.graphql @@ -0,0 +1,10 @@ +query WorkItemStatus($id: ID!) { + allWorkItems(filter: [{ id: $id }], first: 1) { + edges { + node { + id + status + } + } + } +} diff --git a/packages/workflow/tests/integration/components/work-item-button-test.js b/packages/workflow/tests/integration/components/work-item-button-test.js index f6d968c85..cf2266a1b 100644 --- a/packages/workflow/tests/integration/components/work-item-button-test.js +++ b/packages/workflow/tests/integration/components/work-item-button-test.js @@ -9,9 +9,14 @@ module("Integration | Component | work-item-button", function (hooks) { setupRenderingTest(hooks); setupMirage(hooks); + hooks.beforeEach(function () { + this.workItem = this.server.create("workItem", { status: "READY" }); + this.id = this.workItem.id; + }); + test("it renders default", async function (assert) { await render( - hbs``, + hbs``, ); assert.dom("button").hasText("Complete"); @@ -19,7 +24,7 @@ module("Integration | Component | work-item-button", function (hooks) { test("it renders label", async function (assert) { await render( - hbs``, + hbs``, ); assert.dom("button").hasText("Lorem Ipsum"); @@ -27,7 +32,7 @@ module("Integration | Component | work-item-button", function (hooks) { test("it renders block", async function (assert) { await render( - hbs`Lorem Ipsum`, + hbs`Lorem Ipsum`, ); assert.dom("button").hasText("Lorem Ipsum"); @@ -39,6 +44,10 @@ module("Integration | Component | work-item-button", function (hooks) { let mutation = "complete"; this.set("mutation", mutation); + await render( + hbs``, + ); + this.server.post( "graphql", (_, request) => { @@ -53,10 +62,6 @@ module("Integration | Component | work-item-button", function (hooks) { 200, ); - await render( - hbs``, - ); - await click("button"); mutation = "skip"; @@ -79,7 +84,7 @@ module("Integration | Component | work-item-button", function (hooks) { await render( hbs``, ); @@ -88,4 +93,23 @@ module("Integration | Component | work-item-button", function (hooks) { assert.verifySteps(["beforeMutate"]); }); + + test("it renders as disabled if the required work item status is not given", async function (assert) { + assert.expect(2); + + await render( + hbs``, + ); + + assert.dom("button").isNotDisabled(); + + this.workItem.status = "COMPLETED"; + this.workItem.save(); + + await render( + hbs``, + ); + + assert.dom("button").isDisabled(); + }); });