@projectcaluma/ember-testing 10.0.0 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ import BaseFilter from "@projectcaluma/ember-testing/mirage-graphql/filters/base";
2
+
3
+ export default class extends BaseFilter {
4
+ questions(records, value) {
5
+ const questionIds = this.db.questions
6
+ .filter(({ slug }) => value.includes(slug))
7
+ .map(({ id }) => id);
8
+
9
+ return records.filter(({ questionId }) => questionIds.includes(questionId));
10
+ }
11
+
12
+ question(records, value) {
13
+ return this.questions(records, [value]);
14
+ }
15
+ }
@@ -0,0 +1,200 @@
1
+ import faker from "faker";
2
+ import moment from "moment";
3
+
4
+ export function createBlueprint(server) {
5
+ const inquiryForm = server.create("form", { slug: "inquiry" });
6
+ const inquiryAnswerForm = server.create("form", { slug: "inquiry-answer" });
7
+
8
+ server.create("question", {
9
+ slug: "inquiry-remark",
10
+ label: "Remark",
11
+ formIds: [inquiryForm.id],
12
+ type: "TEXTAREA",
13
+ });
14
+ server.create("question", {
15
+ slug: "inquiry-deadline",
16
+ label: "Deadline",
17
+ formIds: [inquiryForm.id],
18
+ type: "DATE",
19
+ });
20
+
21
+ server.create("question", {
22
+ slug: "inquiry-answer-status",
23
+ type: "CHOICE",
24
+ formIds: [inquiryAnswerForm.id],
25
+ options: [
26
+ server.create("option", {
27
+ slug: "inquiry-answer-status-positive",
28
+ label: "Positive",
29
+ }),
30
+ server.create("option", {
31
+ slug: "inquiry-answer-status-negative",
32
+ label: "Negative",
33
+ }),
34
+ server.create("option", {
35
+ slug: "inquiry-answer-status-needs-interaction",
36
+ label: "Needs interaction",
37
+ }),
38
+ ],
39
+ });
40
+ server.create("question", {
41
+ slug: "inquiry-answer-reason",
42
+ label: "Reason",
43
+ type: "TEXTAREA",
44
+ formIds: [inquiryAnswerForm.id],
45
+ });
46
+
47
+ server.create("task", { slug: "inquiry" });
48
+ }
49
+
50
+ export function createInquiry(
51
+ server,
52
+ distributionCase,
53
+ { from, to, remark, deadline },
54
+ workItemAttrs = {}
55
+ ) {
56
+ const form = server.schema.forms.findBy({ slug: "inquiry" });
57
+ const document = server.create("document", { form });
58
+
59
+ server.create("answer", {
60
+ document,
61
+ question: server.schema.questions.findBy({
62
+ slug: "inquiry-remark",
63
+ }),
64
+ value: remark ?? faker.lorem.paragraph(),
65
+ });
66
+
67
+ server.create("answer", {
68
+ document,
69
+ question: server.schema.questions.findBy({
70
+ slug: "inquiry-deadline",
71
+ }),
72
+ value: deadline ?? faker.date.future(),
73
+ });
74
+
75
+ return server.create("work-item", {
76
+ task: server.schema.tasks.findBy({ slug: "inquiry" }),
77
+ document,
78
+ status: "SUSPENDED",
79
+ case: distributionCase,
80
+ addressedGroups: [to.id],
81
+ controllingGroups: [from.id],
82
+ ...workItemAttrs,
83
+ });
84
+ }
85
+
86
+ export function sendInquiry(server, { inquiry }) {
87
+ inquiry.update({
88
+ status: "READY",
89
+ childCase: server.create("case", {
90
+ status: "RUNNING",
91
+ document: server.create("document", {
92
+ form: server.schema.forms.findBy({ slug: "inquiry-answer" }),
93
+ }),
94
+ }),
95
+ });
96
+
97
+ return inquiry;
98
+ }
99
+
100
+ export function answerInquiry(server, { inquiry, status, reason }) {
101
+ if (inquiry.status !== "READY") {
102
+ inquiry = sendInquiry(server, { inquiry });
103
+ }
104
+
105
+ server.create("answer", {
106
+ document: inquiry.childCase.document,
107
+ question: server.schema.questions.findBy({
108
+ slug: "inquiry-answer-status",
109
+ }),
110
+ value: status,
111
+ });
112
+
113
+ server.create("answer", {
114
+ document: inquiry.childCase.document,
115
+ question: server.schema.questions.findBy({
116
+ slug: "inquiry-answer-reason",
117
+ }),
118
+ value: reason ?? faker.lorem.paragraph(),
119
+ });
120
+
121
+ inquiry.update({ status: "COMPLETED" });
122
+ inquiry.childCase.update({
123
+ status: "COMPLETED",
124
+ closedAt: faker.date.recent(),
125
+ });
126
+
127
+ return inquiry;
128
+ }
129
+
130
+ export default function (server, groups) {
131
+ const distributionCase = server.create("case", {
132
+ workflow: server.create("workflow", { slug: "distribution" }),
133
+ });
134
+
135
+ const g = groups[0];
136
+ const g1 = groups[1];
137
+ const g2 = groups[2];
138
+ const g3 = groups[3];
139
+ const g4 = groups[4];
140
+
141
+ const create = (...args) => createInquiry(server, distributionCase, ...args);
142
+ const send = (...args) => sendInquiry(server, ...args);
143
+ const answer = (...args) => answerInquiry(server, ...args);
144
+
145
+ createBlueprint(server);
146
+
147
+ // controlling
148
+ create({ from: g, to: g1 });
149
+ send({
150
+ inquiry: create({
151
+ from: g,
152
+ to: g2,
153
+ deadline: faker.date.past(),
154
+ }),
155
+ });
156
+ answer({
157
+ inquiry: create({
158
+ from: g,
159
+ to: g3,
160
+ deadline: faker.date.past(),
161
+ }),
162
+ status: "inquiry-answer-status-needs-interaction",
163
+ });
164
+ // "override" third controlling inquiry
165
+ answer({
166
+ inquiry: create({ from: g, to: g3 }, { createdAt: faker.date.recent() }),
167
+ status: "inquiry-answer-status-positive",
168
+ });
169
+
170
+ // addressed
171
+ answer({
172
+ inquiry: create({ from: g2, to: g }),
173
+ status: "inquiry-answer-status-needs-interaction",
174
+ });
175
+ // "override" first addressed inquiry
176
+ send({
177
+ inquiry: create(
178
+ {
179
+ from: g2,
180
+ to: g,
181
+ deadline: moment.utc().add(2, "days").toDate(),
182
+ },
183
+ { createdAt: faker.date.recent() }
184
+ ),
185
+ });
186
+ answer({
187
+ inquiry: create({ from: g4, to: g }),
188
+ status: "inquiry-answer-status-negative",
189
+ });
190
+
191
+ // more
192
+ answer({
193
+ inquiry: create({ from: g2, to: g3 }),
194
+ status: "inquiry-answer-status-needs-interaction",
195
+ });
196
+ answer({
197
+ inquiry: create({ from: g3, to: g4 }),
198
+ status: "inquiry-answer-status-positive",
199
+ });
200
+ }
package/index.js CHANGED
@@ -15,6 +15,6 @@ module.exports = {
15
15
  destDir: "mirage",
16
16
  });
17
17
 
18
- return mergeTrees([appTree, mirageTree]);
18
+ return mergeTrees([appTree, mirageTree].filter(Boolean));
19
19
  },
20
20
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-testing",
3
- "version": "10.0.0",
3
+ "version": "10.1.0",
4
4
  "description": "Ember addon for testing with Caluma addons.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -19,9 +19,10 @@
19
19
  "ember-apollo-client": "^3.2.0",
20
20
  "ember-auto-import": "^2.2.3",
21
21
  "ember-cli-babel": "^7.26.6",
22
- "ember-cli-htmlbars": "^6.0.0",
22
+ "ember-cli-htmlbars": "^6.0.1",
23
23
  "ember-cli-mirage": "^2.2.0",
24
24
  "ember-fetch": "^8.0.4",
25
+ "ember-inflector": "^4.0.2",
25
26
  "faker": "^5.5.3",
26
27
  "graphql": "^15.6.1",
27
28
  "graphql-iso-date": "^3.6.1",
@@ -31,7 +32,7 @@
31
32
  "devDependencies": {
32
33
  "@ember/optional-features": "2.0.0",
33
34
  "@ember/test-helpers": "2.6.0",
34
- "@embroider/test-setup": "0.47.2",
35
+ "@embroider/test-setup": "0.48.1",
35
36
  "broccoli-asset-rev": "3.0.0",
36
37
  "ember-cli": "3.28.4",
37
38
  "ember-cli-code-coverage": "1.0.3",
@@ -45,7 +46,7 @@
45
46
  "ember-maybe-import-regenerator": "1.0.0",
46
47
  "ember-qunit": "5.1.5",
47
48
  "ember-resolver": "8.0.3",
48
- "ember-source": "3.28.6",
49
+ "ember-source": "3.28.8",
49
50
  "ember-source-channel-url": "3.0.0",
50
51
  "ember-try": "2.0.0",
51
52
  "get-graphql-schema": "2.1.2",
@@ -53,7 +54,7 @@
53
54
  "loader.js": "4.7.0",
54
55
  "qunit": "2.17.2",
55
56
  "qunit-dom": "2.0.0",
56
- "webpack": "5.64.1"
57
+ "webpack": "5.65.0"
57
58
  },
58
59
  "engines": {
59
60
  "node": "12.* || 14.* || >= 16"