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/form/tests/integration/components/cf-field/input/action-button-test.js b/packages/form/tests/integration/components/cf-field/input/action-button-test.js
index b302fb304..b430271c4 100644
--- a/packages/form/tests/integration/components/cf-field/input/action-button-test.js
+++ b/packages/form/tests/integration/components/cf-field/input/action-button-test.js
@@ -57,6 +57,7 @@ module(
this.field = {
document: {
workItemUuid: this.server.create("work-item", {
+ status: "READY",
case: this.server.create("case"),
}).id,
fields: [validField],
@@ -66,6 +67,7 @@ module(
this.invalidField = {
document: {
workItemUuid: this.server.create("work-item", {
+ status: "READY",
case: this.server.create("case"),
}).id,
fields: [invalidField],
@@ -165,15 +167,15 @@ module(
test("triggers the error callback", async function (assert) {
assert.expect(3);
- this.server.post("/graphql/", () => {
- return new Response(500);
- });
-
await render(hbs``);
+ this.server.post("/graphql/", () => {
+ return new Response(500);
+ });
+
await click("button.uk-button-secondary");
await waitFor(".uk-modal.uk-open");
await click(".uk-modal-footer button.uk-button-primary");
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..4f8d9f848 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,11 @@ 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 +36,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 +48,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 +66,6 @@ module("Integration | Component | work-item-button", function (hooks) {
200,
);
- await render(
- hbs``,
- );
-
await click("button");
mutation = "skip";
@@ -79,7 +88,7 @@ module("Integration | Component | work-item-button", function (hooks) {
await render(
hbs``,
);
@@ -88,4 +97,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();
+ });
});