@digabi/exam-engine-core 23.13.2 → 23.13.3-alpha.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.
Files changed (96) hide show
  1. package/dist/__tests__/examServerApi.d.ts.map +1 -1
  2. package/dist/__tests__/examServerApi.js +2 -0
  3. package/dist/__tests__/examServerApi.js.map +1 -1
  4. package/dist/__tests__/playwright/exam/AudioAnswer.test.d.ts +2 -0
  5. package/dist/__tests__/playwright/exam/AudioAnswer.test.d.ts.map +1 -0
  6. package/dist/__tests__/playwright/exam/AudioAnswer.test.js +30 -0
  7. package/dist/__tests__/playwright/exam/AudioAnswer.test.js.map +1 -0
  8. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.d.ts +8 -0
  9. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.d.ts.map +1 -0
  10. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.js +34 -0
  11. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.js.map +1 -0
  12. package/dist/__tests__/results/ResultsContext.test.js +1 -1
  13. package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
  14. package/dist/components/context/AudioContext.d.ts +9 -0
  15. package/dist/components/context/AudioContext.d.ts.map +1 -0
  16. package/dist/components/context/AudioContext.js +9 -0
  17. package/dist/components/context/AudioContext.js.map +1 -0
  18. package/dist/components/context/QuestionContext.d.ts.map +1 -1
  19. package/dist/components/context/QuestionContext.js +1 -1
  20. package/dist/components/context/QuestionContext.js.map +1 -1
  21. package/dist/components/exam/AudioAnswer.d.ts +4 -0
  22. package/dist/components/exam/AudioAnswer.d.ts.map +1 -0
  23. package/dist/components/exam/AudioAnswer.js +39 -0
  24. package/dist/components/exam/AudioAnswer.js.map +1 -0
  25. package/dist/components/exam/Exam.d.ts.map +1 -1
  26. package/dist/components/exam/Exam.js +3 -1
  27. package/dist/components/exam/Exam.js.map +1 -1
  28. package/dist/components/exam/internal/AudioRecorder.d.ts +14 -0
  29. package/dist/components/exam/internal/AudioRecorder.d.ts.map +1 -0
  30. package/dist/components/exam/internal/AudioRecorder.js +126 -0
  31. package/dist/components/exam/internal/AudioRecorder.js.map +1 -0
  32. package/dist/components/exam/internal/MyAudioRecorder.d.ts +10 -0
  33. package/dist/components/exam/internal/MyAudioRecorder.d.ts.map +1 -0
  34. package/dist/components/exam/internal/MyAudioRecorder.js +106 -0
  35. package/dist/components/exam/internal/MyAudioRecorder.js.map +1 -0
  36. package/dist/components/exam/internal/MyMediaRecorder.d.ts +10 -0
  37. package/dist/components/exam/internal/MyMediaRecorder.d.ts.map +1 -0
  38. package/dist/components/exam/internal/MyMediaRecorder.js +91 -0
  39. package/dist/components/exam/internal/MyMediaRecorder.js.map +1 -0
  40. package/dist/components/grading/GradingAnswer.d.ts +2 -6
  41. package/dist/components/grading/GradingAnswer.d.ts.map +1 -1
  42. package/dist/components/grading/GradingAnswer.js +4 -3
  43. package/dist/components/grading/GradingAnswer.js.map +1 -1
  44. package/dist/components/results/AudioAnswer.d.ts +6 -0
  45. package/dist/components/results/AudioAnswer.d.ts.map +1 -0
  46. package/dist/components/results/AudioAnswer.js +33 -0
  47. package/dist/components/results/AudioAnswer.js.map +1 -0
  48. package/dist/components/results/Results.d.ts.map +1 -1
  49. package/dist/components/results/Results.js +3 -1
  50. package/dist/components/results/Results.js.map +1 -1
  51. package/dist/components/shared/Audio.js +2 -2
  52. package/dist/components/shared/Audio.js.map +1 -1
  53. package/dist/components/shared/AudioTest.js +2 -2
  54. package/dist/components/shared/AudioTest.js.map +1 -1
  55. package/dist/components/shared/internal/AudioError.d.ts +8 -0
  56. package/dist/components/shared/internal/AudioError.d.ts.map +1 -0
  57. package/dist/components/shared/internal/AudioError.js +17 -0
  58. package/dist/components/shared/internal/AudioError.js.map +1 -0
  59. package/dist/components/shared/internal/AudioErrorRemoveMe.d.ts +8 -0
  60. package/dist/components/shared/internal/AudioErrorRemoveMe.d.ts.map +1 -0
  61. package/dist/components/shared/internal/AudioErrorRemoveMe.js +17 -0
  62. package/dist/components/shared/internal/AudioErrorRemoveMe.js.map +1 -0
  63. package/dist/dom-utils.js +1 -1
  64. package/dist/dom-utils.js.map +1 -1
  65. package/dist/i18n/fi-FI.d.ts +5 -0
  66. package/dist/i18n/fi-FI.d.ts.map +1 -1
  67. package/dist/i18n/fi-FI.js +5 -0
  68. package/dist/i18n/fi-FI.js.map +1 -1
  69. package/dist/i18n/sv-FI.d.ts.map +1 -1
  70. package/dist/i18n/sv-FI.js +5 -0
  71. package/dist/i18n/sv-FI.js.map +1 -1
  72. package/dist/main-bundle.js +366 -5049
  73. package/dist/main.css +1 -1
  74. package/dist/parser/parseExamStructure.d.ts +8 -1
  75. package/dist/parser/parseExamStructure.d.ts.map +1 -1
  76. package/dist/parser/parseExamStructure.js +1 -1
  77. package/dist/parser/parseExamStructure.js.map +1 -1
  78. package/dist/store/audio/actions.d.ts +3 -3
  79. package/dist/store/audio/actions.d.ts.map +1 -1
  80. package/dist/store/audio/actions.js.map +1 -1
  81. package/dist/store/audio/reducer.d.ts +2 -2
  82. package/dist/store/audio/reducer.d.ts.map +1 -1
  83. package/dist/store/index.d.ts +1 -1
  84. package/dist/store/selectors.d.ts +2 -2
  85. package/dist/store/selectors.d.ts.map +1 -1
  86. package/dist/store/selectors.js.map +1 -1
  87. package/dist/types/ExamAnswer.d.ts +5 -1
  88. package/dist/types/ExamAnswer.d.ts.map +1 -1
  89. package/dist/types/ExamServerAPI.d.ts +11 -3
  90. package/dist/types/ExamServerAPI.d.ts.map +1 -1
  91. package/dist/types/GradingStructure.d.ts +7 -1
  92. package/dist/types/GradingStructure.d.ts.map +1 -1
  93. package/dist/validateAnswers.d.ts.map +1 -1
  94. package/dist/validateAnswers.js +1 -0
  95. package/dist/validateAnswers.js.map +1 -1
  96. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"examServerApi.d.ts","sourceRoot":"","sources":["../../__tests__/examServerApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,eAAO,MAAM,aAAa,EAAE,aAS3B,CAAA"}
1
+ {"version":3,"file":"examServerApi.d.ts","sourceRoot":"","sources":["../../__tests__/examServerApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,eAAO,MAAM,aAAa,EAAE,aAW3B,CAAA"}
@@ -6,6 +6,8 @@ exports.examServerApi = {
6
6
  setCasStatus: casStatus => Promise.resolve(casStatus),
7
7
  saveAnswer: () => Promise.resolve(),
8
8
  saveScreenshot: () => Promise.resolve('ok'),
9
+ saveAudio: () => Promise.resolve('ok'),
10
+ deleteAudio: () => Promise.resolve(),
9
11
  playAudio: () => Promise.resolve('ok'),
10
12
  playRestrictedAudio: () => Promise.resolve('ok'),
11
13
  getRestrictedAudio: () => Promise.resolve(new Blob()),
@@ -1 +1 @@
1
- {"version":3,"file":"examServerApi.js","sourceRoot":"","sources":["../../__tests__/examServerApi.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAkB;IAC1C,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACrD,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IACnC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IACrD,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;CAC7B,CAAA"}
1
+ {"version":3,"file":"examServerApi.js","sourceRoot":"","sources":["../../__tests__/examServerApi.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAkB;IAC1C,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACrD,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IACnC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IACpC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IACrD,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;CAC7B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AudioAnswer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioAnswer.test.d.ts","sourceRoot":"","sources":["../../../../__tests__/playwright/exam/AudioAnswer.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const experimental_ct_react_1 = require("@playwright/experimental-ct-react");
7
+ const react_1 = __importDefault(require("react"));
8
+ const AudioAnswer_story_1 = require("../stories/exam/AudioAnswer.story");
9
+ const utils_1 = require("../utils/utils");
10
+ experimental_ct_react_1.test.describe.configure({ mode: 'serial' });
11
+ experimental_ct_react_1.test.describe('Audio answer', () => {
12
+ let masteredExam_SC;
13
+ experimental_ct_react_1.test.beforeAll(async () => {
14
+ masteredExam_SC = await (0, utils_1.setupMasteredExam)('test/audio-answer.xml');
15
+ });
16
+ (0, experimental_ct_react_1.test)('audio answer is visible with only one recording button', async ({ mount }) => {
17
+ const component = await mount(react_1.default.createElement(AudioAnswer_story_1.AudioAnswerStory, { masteredExam: masteredExam_SC }));
18
+ await (0, experimental_ct_react_1.expect)(component.locator('.audio-answer .e-button')).toHaveText('Äänitä vastaus');
19
+ });
20
+ (0, experimental_ct_react_1.test)('audio can be recorded', async ({ context, mount }) => {
21
+ const component = await mount(react_1.default.createElement(AudioAnswer_story_1.AudioAnswerStory, { masteredExam: masteredExam_SC }));
22
+ await context.grantPermissions(['microphone']);
23
+ await component.getByText('Äänitä vastaus').click();
24
+ await (0, experimental_ct_react_1.expect)(component.locator('.audio-answer .e-button')).toHaveText('Lopeta äänitys');
25
+ //await page.waitForTimeout(3000)
26
+ //await component.getByText('Lopeta äänitys').click()
27
+ //await expect(component.locator('.audio-answer .e-button')).toHaveText('Äänitä vastaus')
28
+ });
29
+ });
30
+ //# sourceMappingURL=AudioAnswer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioAnswer.test.js","sourceRoot":"","sources":["../../../../__tests__/playwright/exam/AudioAnswer.test.tsx"],"names":[],"mappings":";;;;;AAAA,6EAAgE;AAChE,kDAAyB;AACzB,yEAAoE;AACpE,0CAAkD;AAElD,4BAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;AAE3C,4BAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IACjC,IAAI,eAA8D,CAAA;IAElE,4BAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,eAAe,GAAG,MAAM,IAAA,yBAAiB,EAAC,uBAAuB,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,IAAA,4BAAI,EAAC,wDAAwD,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACjF,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,8BAAC,oCAAgB,IAAC,YAAY,EAAE,eAAe,GAAI,CAAC,CAAA;QAClF,MAAM,IAAA,8BAAM,EAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;IAEF,IAAA,4BAAI,EAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QACzD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,8BAAC,oCAAgB,IAAC,YAAY,EAAE,eAAe,GAAI,CAAC,CAAA;QAClF,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9C,MAAM,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAA;QACnD,MAAM,IAAA,8BAAM,EAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;QACvF,iCAAiC;QACjC,qDAAqD;QACrD,yFAAyF;IAC3F,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { MasteringResult } from '@digabi/exam-engine-mastering';
2
+ import React from 'react';
3
+ interface ExamStoryProps {
4
+ masteredExam: MasteringResult;
5
+ }
6
+ export declare const AudioAnswerStory: React.FC<ExamStoryProps>;
7
+ export {};
8
+ //# sourceMappingURL=AudioAnswer.story.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioAnswer.story.d.ts","sourceRoot":"","sources":["../../../../../__tests__/playwright/stories/exam/AudioAnswer.story.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,UAAU,cAAc;IACtB,YAAY,EAAE,eAAe,CAAA;CAC9B;AAqBD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAYrD,CAAA"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AudioAnswerStory = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const src_1 = require("../../../../src");
9
+ const audios = {};
10
+ const examServerApi = {
11
+ getAnswers: () => Promise.resolve([]),
12
+ setCasStatus: casStatus => Promise.resolve(casStatus),
13
+ saveAnswer: () => Promise.resolve(),
14
+ saveScreenshot: () => Promise.resolve('ok'),
15
+ saveAudio: (questionId, audio) => {
16
+ console.info('save', questionId);
17
+ audios[questionId] = audio;
18
+ return Promise.resolve(`audio_${questionId}`);
19
+ },
20
+ deleteAudio: _audioId => Promise.resolve(),
21
+ playAudio: () => Promise.resolve('ok'),
22
+ playRestrictedAudio: () => Promise.resolve('ok'),
23
+ getRestrictedAudio: () => Promise.resolve(new Blob()),
24
+ examineExam: () => undefined
25
+ };
26
+ const AudioAnswerStory = ({ masteredExam }) => {
27
+ const doc = new DOMParser().parseFromString(masteredExam.xml, 'application/xml');
28
+ return (react_1.default.createElement(src_1.Exam, { attachmentsURL: '/attachments',
29
+ resolveAttachment: (filename) => `/${masteredExam.examCode}/attachments/${filename}`,
30
+ doc,
31
+ examServerApi }));
32
+ };
33
+ exports.AudioAnswerStory = AudioAnswerStory;
34
+ //# sourceMappingURL=AudioAnswer.story.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioAnswer.story.js","sourceRoot":"","sources":["../../../../../__tests__/playwright/stories/exam/AudioAnswer.story.tsx"],"names":[],"mappings":";;;;;;AACA,kDAAyB;AACzB,yCAAqD;AAMrD,MAAM,MAAM,GAAG,EAA6B,CAAA;AAE5C,MAAM,aAAa,GAAkB;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACrD,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IACnC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAChC,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAA;QAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAA;IAC/C,CAAC;IACD,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IAC1C,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IACrD,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;CAC7B,CAAA;AAEM,MAAM,gBAAgB,GAA6B,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;IAC7E,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IAChF,OAAO,CACL,8BAAC,UAAI,IAED,cAAc,EAAE,cAAc;QAC9B,iBAAiB,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,gBAAgB,QAAQ,EAAE;QAC5F,GAAG;QACH,aAAa,GAEf,CACH,CAAA;AACH,CAAC,CAAA;AAZY,QAAA,gBAAgB,oBAY5B"}
@@ -145,7 +145,7 @@ describe(`Total score calculation for ${testExam}`, () => {
145
145
  const choiceAnswer = {
146
146
  type: 'choice',
147
147
  questionId: 1,
148
- value: '104',
148
+ value: '106',
149
149
  displayNumber: '1.1'
150
150
  };
151
151
  expect((0, ResultsContext_1.calculateQuestionSumScore)(topLevelQuestions[0], result.gradingStructure, [], (0, lodash_es_1.keyBy)([choiceAnswer], 'questionId'))).toBe(3);