@digabi/exam-engine-core 23.3.0-alpha.0 → 23.4.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.
- package/dist/__tests__/playwright/exam/DNDAnswerContainer.test.js +48 -10
- package/dist/__tests__/playwright/exam/DNDAnswerContainer.test.js.map +1 -1
- package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
- package/dist/components/context/AnnotationProvider.d.ts +1 -1
- package/dist/components/exam/DNDAnswerContainer.d.ts +1 -3
- package/dist/components/exam/DNDAnswerContainer.d.ts.map +1 -1
- package/dist/components/exam/DNDAnswerContainer.js +3 -26
- package/dist/components/exam/DNDAnswerContainer.js.map +1 -1
- package/dist/components/exam/multipleContainersKeyboardCoordinates.d.ts +3 -0
- package/dist/components/exam/multipleContainersKeyboardCoordinates.d.ts.map +1 -0
- package/dist/components/exam/multipleContainersKeyboardCoordinates.js +87 -0
- package/dist/components/exam/multipleContainersKeyboardCoordinates.js.map +1 -0
- package/dist/components/grading-instructions/AutogradedAnswerOption.d.ts.map +1 -1
- package/dist/components/grading-instructions/AutogradedAnswerOption.js +2 -1
- package/dist/components/grading-instructions/AutogradedAnswerOption.js.map +1 -1
- package/dist/components/grading-instructions/GradingInstructions.d.ts.map +1 -1
- package/dist/components/grading-instructions/GradingInstructions.js +5 -1
- package/dist/components/grading-instructions/GradingInstructions.js.map +1 -1
- package/dist/components/grading-instructions/Recording.d.ts.map +1 -1
- package/dist/components/grading-instructions/Recording.js +3 -2
- package/dist/components/grading-instructions/Recording.js.map +1 -1
- package/dist/components/results/Results.js +2 -2
- package/dist/components/results/Results.js.map +1 -1
- package/dist/components/shared/DNDAnswerContainer.d.ts +6 -0
- package/dist/components/shared/DNDAnswerContainer.d.ts.map +1 -0
- package/dist/components/shared/DNDAnswerContainer.js +23 -0
- package/dist/components/shared/DNDAnswerContainer.js.map +1 -0
- package/dist/components/shared/DNDDroppable.d.ts +2 -2
- package/dist/components/shared/DNDDroppable.d.ts.map +1 -1
- package/dist/components/shared/DNDTitleAndDroppable.d.ts +2 -2
- package/dist/components/shared/DNDTitleAndDroppable.d.ts.map +1 -1
- package/dist/components/shared/DNDTitleAndDroppable.js +3 -1
- package/dist/components/shared/DNDTitleAndDroppable.js.map +1 -1
- package/dist/dom-utils.d.ts +6 -0
- package/dist/dom-utils.d.ts.map +1 -1
- package/dist/dom-utils.js +36 -0
- package/dist/dom-utils.js.map +1 -1
- package/dist/main-bundle.js +1 -1
- package/dist/types/ExamAnswer.d.ts +1 -0
- package/dist/types/ExamAnswer.d.ts.map +1 -1
- package/package.json +3 -3
@@ -16,21 +16,39 @@ experimental_ct_react_1.test.describe('DNDAnswerContainer', () => {
|
|
16
16
|
for (const answerMediaType of ['text', 'image']) {
|
17
17
|
(0, experimental_ct_react_1.test)(`Connect - basic drag and drop functionality for ${answerMediaType} answers`, async ({ mount }) => {
|
18
18
|
const component = await mount(react_1.default.createElement(DNDAnswerContainer_story_1.DNDAnswerContainerStory, { masteredExam: masteredExam, answerMediaType: answerMediaType }));
|
19
|
-
const { answerContainer, answerOptionsLocator,
|
19
|
+
const { answerContainer, answerOptionsLocator, firstOptionLocator, secondOptionLocator, firstAnswerContent, secondAnswerContent } = await setupAnswerContext(component, answerMediaType);
|
20
20
|
await experimental_ct_react_1.test.step('Drag first answer to answer container', async () => {
|
21
|
-
const draggableLocator =
|
21
|
+
const draggableLocator = firstOptionLocator.locator('.drag-handle');
|
22
22
|
await draggableLocator.dragTo(answerContainer);
|
23
23
|
await assertContentMatches(answerContainer, firstAnswerContent, answerMediaType);
|
24
|
+
await assertContentDoesNotMatch(answerOptionsLocator, firstAnswerContent, answerMediaType);
|
25
|
+
await assertContentMatches(answerOptionsLocator, secondAnswerContent, answerMediaType);
|
24
26
|
});
|
25
27
|
await experimental_ct_react_1.test.step('Replace first answer with second answer in answer container', async () => {
|
26
|
-
const draggableLocator =
|
28
|
+
const draggableLocator = secondOptionLocator.locator('.drag-handle');
|
27
29
|
await draggableLocator.dragTo(answerContainer);
|
28
30
|
await assertContentMatches(answerContainer, secondAnswerContent, answerMediaType);
|
31
|
+
await assertContentDoesNotMatch(answerContainer, firstAnswerContent, answerMediaType);
|
32
|
+
await assertContentMatches(answerOptionsLocator, firstAnswerContent, answerMediaType);
|
29
33
|
});
|
30
34
|
await experimental_ct_react_1.test.step('Drag second answer back to options', async () => {
|
31
35
|
const draggableLocator = answerContainer.locator('.drag-handle');
|
32
36
|
await draggableLocator.dragTo(answerOptionsLocator);
|
33
37
|
await (0, experimental_ct_react_1.expect)(answerContainer).toContainText('Ei vastausta');
|
38
|
+
await assertContentMatches(answerOptionsLocator, firstAnswerContent, answerMediaType);
|
39
|
+
await assertContentMatches(answerOptionsLocator, secondAnswerContent, answerMediaType);
|
40
|
+
});
|
41
|
+
await experimental_ct_react_1.test.step('Move first answer to answer container using keyboard', async () => {
|
42
|
+
const handle = firstOptionLocator.locator('.drag-handle');
|
43
|
+
await handle.focus();
|
44
|
+
await handle.press('Enter');
|
45
|
+
await handle.press('ArrowUp'); // activates root container
|
46
|
+
await handle.press('ArrowUp'); // activates 3rd answer
|
47
|
+
await handle.press('ArrowUp'); // activates 2nd answer
|
48
|
+
await handle.press('ArrowUp'); // activates 1st answer
|
49
|
+
await handle.press('Enter');
|
50
|
+
const firstAnswerContent = (await getAnswerContent(firstOptionLocator, answerMediaType)) || ''; // first option has changed
|
51
|
+
await assertContentMatches(answerContainer, firstAnswerContent, answerMediaType);
|
34
52
|
});
|
35
53
|
});
|
36
54
|
}
|
@@ -40,21 +58,41 @@ async function assertContentMatches(answerContainer, content, mediaType) {
|
|
40
58
|
await (0, experimental_ct_react_1.expect)(answerContainer).toContainText(content);
|
41
59
|
}
|
42
60
|
else if (mediaType === 'image') {
|
43
|
-
await
|
61
|
+
const images = await answerContainer.locator('img').all();
|
62
|
+
let found = false;
|
63
|
+
for (const img of images) {
|
64
|
+
const src = await img.getAttribute('src');
|
65
|
+
if (src === content) {
|
66
|
+
found = true;
|
67
|
+
break;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
(0, experimental_ct_react_1.expect)(found).toBe(true);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
async function assertContentDoesNotMatch(answerContainer, content, mediaType) {
|
74
|
+
if (mediaType === 'text') {
|
75
|
+
await (0, experimental_ct_react_1.expect)(answerContainer).not.toContainText(content);
|
76
|
+
}
|
77
|
+
else if (mediaType === 'image') {
|
78
|
+
const images = await answerContainer.locator('img').all();
|
79
|
+
for (const img of images) {
|
80
|
+
await (0, experimental_ct_react_1.expect)(img).not.toHaveAttribute('src', content);
|
81
|
+
}
|
44
82
|
}
|
45
83
|
}
|
46
84
|
async function setupAnswerContext(component, answerMediaType) {
|
47
85
|
const answerContainer = component.getByTestId('dnd-droppable').first();
|
48
86
|
const answerOptionsLocator = component.getByTestId('dnd-droppable').last();
|
49
|
-
const
|
50
|
-
const
|
51
|
-
const firstAnswerContent = await getAnswerContent(
|
52
|
-
const secondAnswerContent = await getAnswerContent(
|
87
|
+
const firstOptionLocator = component.getByTestId('dnd-answer-option').nth(0);
|
88
|
+
const secondOptionLocator = component.getByTestId('dnd-answer-option').nth(1);
|
89
|
+
const firstAnswerContent = await getAnswerContent(firstOptionLocator, answerMediaType);
|
90
|
+
const secondAnswerContent = await getAnswerContent(secondOptionLocator, answerMediaType);
|
53
91
|
return {
|
54
92
|
answerContainer,
|
55
93
|
answerOptionsLocator,
|
56
|
-
|
57
|
-
|
94
|
+
firstOptionLocator,
|
95
|
+
secondOptionLocator,
|
58
96
|
firstAnswerContent: firstAnswerContent,
|
59
97
|
secondAnswerContent: secondAnswerContent
|
60
98
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DNDAnswerContainer.test.js","sourceRoot":"","sources":["../../../../__tests__/playwright/exam/DNDAnswerContainer.test.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,6EAAgE;AAEhE,uFAAkF;AAClF,0CAAkD;AAElD,4BAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;AAE3C,4BAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACvC,IAAI,YAA2D,CAAA;IAE/D,4BAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,YAAY,GAAG,MAAM,IAAA,yBAAiB,GAAE,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,KAAK,MAAM,eAAe,IAAI,CAAC,MAAM,EAAE,OAAO,CAAU,EAAE,CAAC;QACzD,IAAA,4BAAI,EAAC,mDAAmD,eAAe,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACrG,MAAM,SAAS,GAAG,MAAM,KAAK,CAC3B,8BAAC,kDAAuB,IAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,GAAI,CAC1F,CAAA;YACD,MAAM,EACJ,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACpB,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;YAExD,MAAM,4BAAI,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;gBACnE,MAAM,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;gBAC9C,MAAM,oBAAoB,CAAC,eAAe,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"DNDAnswerContainer.test.js","sourceRoot":"","sources":["../../../../__tests__/playwright/exam/DNDAnswerContainer.test.tsx"],"names":[],"mappings":"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"}
|