fcad-core-dragon 2.1.0 → 2.1.2
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/.editorconfig +7 -7
- package/.gitlab-ci.yml +124 -0
- package/.prettierrc +11 -11
- package/.vscode/extensions.json +8 -8
- package/.vscode/settings.json +46 -16
- package/CHANGELOG +520 -520
- package/README.md +57 -57
- package/documentation/.vitepress/config.js +114 -114
- package/documentation/api-examples.md +49 -49
- package/documentation/composants/app-base-button.md +58 -58
- package/documentation/composants/app-base-error-display.md +59 -59
- package/documentation/composants/app-base-popover.md +68 -68
- package/documentation/composants/app-comp-audio.md +75 -75
- package/documentation/composants/app-comp-branch-buttons.md +111 -111
- package/documentation/composants/app-comp-button-progress.md +53 -53
- package/documentation/composants/app-comp-carousel.md +53 -53
- package/documentation/composants/app-comp-container.md +53 -53
- package/documentation/composants/app-comp-input-checkbox-next.md +42 -42
- package/documentation/composants/app-comp-input-dropdown-next.md +34 -34
- package/documentation/composants/app-comp-input-radio-next.md +39 -39
- package/documentation/composants/app-comp-input-text-next.md +35 -35
- package/documentation/composants/app-comp-input-text-table-next.md +34 -34
- package/documentation/composants/app-comp-input-text-to-fill-dropdown-next.md +53 -53
- package/documentation/composants/app-comp-input-text-to-fill-next.md +31 -31
- package/documentation/composants/app-comp-jauge.md +31 -31
- package/documentation/composants/app-comp-menu-item.md +55 -55
- package/documentation/composants/app-comp-menu.md +29 -29
- package/documentation/composants/app-comp-navigation.md +41 -41
- package/documentation/composants/app-comp-note-call.md +53 -53
- package/documentation/composants/app-comp-note-credit.md +53 -53
- package/documentation/composants/app-comp-play-bar-next.md +53 -53
- package/documentation/composants/app-comp-pop-up-next.md +93 -93
- package/documentation/composants/app-comp-quiz-next.md +235 -235
- package/documentation/composants/app-comp-quiz-recall.md +53 -53
- package/documentation/composants/app-comp-svg-next.md +53 -53
- package/documentation/composants/app-comp-table-of-content.md +50 -50
- package/documentation/composants/app-comp-video-player.md +82 -82
- package/documentation/composants.md +46 -46
- package/documentation/composants_critiques/ModelPageComposant.md +53 -53
- package/documentation/composants_critiques/app-base-module.md +43 -43
- package/documentation/composants_critiques/app-base-page.md +48 -48
- package/documentation/composants_critiques/app-base.md +311 -311
- package/documentation/composants_critiques/main.md +15 -15
- package/documentation/demarrage.md +50 -50
- package/documentation/deploiement.md +57 -57
- package/documentation/index.md +33 -33
- package/documentation/markdown-examples.md +85 -85
- package/documentation/public/vite.svg +14 -14
- package/documentation/public/vuejs.svg +1 -1
- package/documentation/public/vuetify.svg +5 -5
- package/eslint.config.js +60 -60
- package/junit-report.xml +182 -0
- package/package.json +66 -59
- package/playwright/index.html +12 -0
- package/playwright/index.js +21 -0
- package/playwright-ct.config.js +95 -0
- package/src/$locales/en.json +157 -157
- package/src/$locales/fr.json +120 -120
- package/src/assets/data/onboardingMessages.json +47 -47
- package/src/components/AppBase.vue +1171 -1169
- package/src/components/AppBaseButton.vue +90 -95
- package/src/components/AppBaseErrorDisplay.vue +438 -438
- package/src/components/AppBaseFlipCard.vue +84 -84
- package/src/components/AppBaseModule.vue +1639 -1634
- package/src/components/AppBasePage.vue +3 -2
- package/src/components/AppBasePopover.vue +41 -41
- package/src/components/AppBaseSkeleton.vue +66 -66
- package/src/components/AppCompAudio.vue +261 -256
- package/src/components/AppCompBranchButtons.vue +508 -508
- package/src/components/AppCompButtonProgress.vue +137 -132
- package/src/components/AppCompCarousel.vue +342 -336
- package/src/components/AppCompContainer.vue +29 -29
- package/src/components/AppCompInputCheckBoxNx.vue +325 -323
- package/src/components/AppCompInputDropdownNx.vue +302 -299
- package/src/components/AppCompInputRadioNx.vue +287 -284
- package/src/components/AppCompInputTextNx.vue +156 -153
- package/src/components/AppCompInputTextTableNx.vue +205 -202
- package/src/components/AppCompInputTextToFillDropdownNx.vue +343 -340
- package/src/components/AppCompInputTextToFillNx.vue +316 -313
- package/src/components/AppCompJauge.vue +81 -81
- package/src/components/AppCompMenu.vue +6 -2
- package/src/components/AppCompMenuItem.vue +246 -240
- package/src/components/AppCompNavigation.vue +977 -972
- package/src/components/AppCompNoteCall.vue +167 -161
- package/src/components/AppCompNoteCredit.vue +496 -491
- package/src/components/AppCompPlayBarNext.vue +2290 -2288
- package/src/components/AppCompPopUpNext.vue +508 -504
- package/src/components/AppCompQuizNext.vue +515 -510
- package/src/components/AppCompQuizRecall.vue +355 -350
- package/src/components/AppCompSVGNext.vue +346 -346
- package/src/components/AppCompSettingsMenu.vue +177 -172
- package/src/components/AppCompTableOfContent.vue +433 -427
- package/src/components/AppCompVideoPlayer.vue +377 -377
- package/src/components/AppCompViewDisplay.vue +6 -6
- package/src/components/BaseModule.vue +55 -55
- package/src/composables/useIdleDetector.js +56 -56
- package/src/composables/useQuiz.js +89 -89
- package/src/composables/useTimer.js +172 -172
- package/src/directives/nvdaFix.js +53 -53
- package/src/externalComps/ModuleView.vue +22 -22
- package/src/externalComps/SummaryView.vue +91 -91
- package/src/main.js +493 -476
- package/src/module/stores/appStore.js +960 -947
- package/src/module/xapi/ADL.js +520 -520
- package/src/module/xapi/Crypto/Hasher.js +241 -241
- package/src/module/xapi/Crypto/WordArray.js +278 -278
- package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
- package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
- package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
- package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
- package/src/module/xapi/Crypto/encoders/Base.js +105 -105
- package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
- package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
- package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
- package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
- package/src/module/xapi/Crypto/index.js +53 -53
- package/src/module/xapi/Statement/activity.js +47 -47
- package/src/module/xapi/Statement/agent.js +55 -55
- package/src/module/xapi/Statement/group.js +26 -26
- package/src/module/xapi/Statement/index.js +259 -259
- package/src/module/xapi/Statement/statement.js +253 -253
- package/src/module/xapi/Statement/statementRef.js +23 -23
- package/src/module/xapi/Statement/substatement.js +22 -22
- package/src/module/xapi/Statement/verb.js +36 -36
- package/src/module/xapi/activitytypes.js +17 -17
- package/src/module/xapi/launch.js +157 -157
- package/src/module/xapi/utils.js +167 -167
- package/src/module/xapi/verbs.js +294 -294
- package/src/module/xapi/wrapper.js +1895 -1895
- package/src/module/xapi/xapiStatement.js +444 -444
- package/src/plugins/analytics.js +34 -34
- package/src/plugins/bus.js +12 -8
- package/src/plugins/gsap.js +17 -15
- package/src/plugins/helper.js +355 -358
- package/src/plugins/i18n.js +27 -26
- package/src/plugins/idb.js +227 -227
- package/src/plugins/save.js +37 -37
- package/src/plugins/scorm.js +287 -287
- package/src/plugins/xapi.js +11 -11
- package/src/public/index.html +33 -33
- package/src/router/index.js +57 -57
- package/src/router/routes.js +312 -312
- package/src/shared/generalfuncs.js +344 -344
- package/src/shared/validators.js +1018 -1018
- package/tests/component/AppBaseButton.spec.js +53 -0
- package/tests/component/pinia.spec.js +24 -0
- package/{src/components/tests__ → tests/unit}/AppBaseButton.spec.js +53 -53
- package/tests/unit/AppCompInputCheckBoxNx.spec.js +59 -0
- package/tests/unit/AppCompInputDropdownNx.spec.js +51 -0
- package/tests/unit/AppCompInputRadioNx.spec.js +59 -0
- package/tests/unit/AppCompInputTextNx.spec.js +44 -0
- package/tests/unit/AppCompInputTextTableNx.spec.js +77 -0
- package/tests/unit/AppCompInputTextToFillDropdownNx.spec.js +60 -0
- package/tests/unit/AppCompInputTextToFillNx.spec.js +45 -0
- package/tests/unit/AppCompQuizNext.spec.js +114 -0
- package/tests/unit/AppCompVideoPlayer.spec.js +177 -0
- package/{src/components/tests__ → tests/unit}/useTimer.spec.js +91 -91
- package/vitest.config.js +28 -19
- package/vitest.setup.js +28 -0
- package/src/components/AppBaseButton.test.js +0 -21
package/junit-report.xml
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
|
2
|
+
<testsuites name="vitest tests" tests="46" failures="0" errors="0" time="3.169429509">
|
|
3
|
+
<testsuite name="tests/unit/AppBaseButton.spec.js" timestamp="2025-12-03T20:05:11.487Z" hostname="SRV-Gitlab" tests="5" failures="0" errors="0" skipped="0" time="0.131117392">
|
|
4
|
+
<testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue > It renders a button" time="0.05882012">
|
|
5
|
+
</testcase>
|
|
6
|
+
<testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue > Button has the correct type" time="0.015720066">
|
|
7
|
+
</testcase>
|
|
8
|
+
<testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue > Button render a correct state" time="0.020113937">
|
|
9
|
+
</testcase>
|
|
10
|
+
<testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue > Renders slot content properly" time="0.02276366">
|
|
11
|
+
</testcase>
|
|
12
|
+
<testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue > Emit event with value of the the $el when clicked" time="0.01187684">
|
|
13
|
+
</testcase>
|
|
14
|
+
</testsuite>
|
|
15
|
+
<testsuite name="tests/unit/AppCompInputCheckBoxNx.spec.js" timestamp="2025-12-03T20:05:11.489Z" hostname="SRV-Gitlab" tests="3" failures="0" errors="0" skipped="0" time="0.118534334">
|
|
16
|
+
<testcase classname="tests/unit/AppCompInputCheckBoxNx.spec.js" name="AppCompInputRadioNx.vue > renders a list of 6 checkboxes" time="0.075774746">
|
|
17
|
+
</testcase>
|
|
18
|
+
<testcase classname="tests/unit/AppCompInputCheckBoxNx.spec.js" name="AppCompInputRadioNx.vue > initially displays a single selected checkbox (checkbox #6 : cyan)" time="0.021754596">
|
|
19
|
+
</testcase>
|
|
20
|
+
<testcase classname="tests/unit/AppCompInputCheckBoxNx.spec.js" name="AppCompInputRadioNx.vue > emits enable-submit and update:modelValue events on input change" time="0.019506127">
|
|
21
|
+
</testcase>
|
|
22
|
+
</testsuite>
|
|
23
|
+
<testsuite name="tests/unit/AppCompInputDropdownNx.spec.js" timestamp="2025-12-03T20:05:11.490Z" hostname="SRV-Gitlab" tests="4" failures="0" errors="0" skipped="0" time="0.467758792">
|
|
24
|
+
<testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue > renders a list of vuetify v-select components" time="0.214814467">
|
|
25
|
+
</testcase>
|
|
26
|
+
<testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue > displays the right labels" time="0.084565078">
|
|
27
|
+
</testcase>
|
|
28
|
+
<testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue > has the right initial data to display (modelValue prop)" time="0.106591392">
|
|
29
|
+
</testcase>
|
|
30
|
+
<testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue > emits enable-submit and update:modelValue events on input change" time="0.06009774">
|
|
31
|
+
</testcase>
|
|
32
|
+
</testsuite>
|
|
33
|
+
<testsuite name="tests/unit/AppCompInputRadioNx.spec.js" timestamp="2025-12-03T20:05:11.491Z" hostname="SRV-Gitlab" tests="3" failures="0" errors="0" skipped="0" time="0.147644103">
|
|
34
|
+
<testcase classname="tests/unit/AppCompInputRadioNx.spec.js" name="AppCompInputRadioNx.vue > renders a list of 6 radio buttons" time="0.083020241">
|
|
35
|
+
</testcase>
|
|
36
|
+
<testcase classname="tests/unit/AppCompInputRadioNx.spec.js" name="AppCompInputRadioNx.vue > has the id A02_P02_Q4" time="0.035284597">
|
|
37
|
+
</testcase>
|
|
38
|
+
<testcase classname="tests/unit/AppCompInputRadioNx.spec.js" name="AppCompInputRadioNx.vue > emits enable-submit and update:modelValue events on input change" time="0.027748826">
|
|
39
|
+
</testcase>
|
|
40
|
+
</testsuite>
|
|
41
|
+
<testsuite name="tests/unit/AppCompInputTextNx.spec.js" timestamp="2025-12-03T20:05:11.492Z" hostname="SRV-Gitlab" tests="5" failures="0" errors="0" skipped="0" time="0.185895362">
|
|
42
|
+
<testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue > renders a vuetify textarea component" time="0.097669644">
|
|
43
|
+
</testcase>
|
|
44
|
+
<testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue > contains placeholder text "Écrivez ici."" time="0.026554837">
|
|
45
|
+
</testcase>
|
|
46
|
+
<testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue > has the id textArea_A02_P02_Q4" time="0.024371271">
|
|
47
|
+
</testcase>
|
|
48
|
+
<testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue > accepts some input text" time="0.019585788">
|
|
49
|
+
</testcase>
|
|
50
|
+
<testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue > emits enable-submit and update:modelValue events on input change" time="0.016004427">
|
|
51
|
+
</testcase>
|
|
52
|
+
</testsuite>
|
|
53
|
+
<testsuite name="tests/unit/AppCompInputTextTableNx.spec.js" timestamp="2025-12-03T20:05:11.493Z" hostname="SRV-Gitlab" tests="5" failures="0" errors="0" skipped="0" time="0.614624008">
|
|
54
|
+
<testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue > renders a list of vuetify v-text-field" time="0.216719223">
|
|
55
|
+
</testcase>
|
|
56
|
+
<testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue > displays a list of labels according to props received" time="0.141385495">
|
|
57
|
+
</testcase>
|
|
58
|
+
<testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue > displays the user saved answers" time="0.086800567">
|
|
59
|
+
</testcase>
|
|
60
|
+
<testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue > accepts some input text" time="0.084986931">
|
|
61
|
+
</testcase>
|
|
62
|
+
<testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue > emits enable-submit and update:modelValue events on input change" time="0.082963249">
|
|
63
|
+
</testcase>
|
|
64
|
+
</testsuite>
|
|
65
|
+
<testsuite name="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" timestamp="2025-12-03T20:05:11.494Z" hostname="SRV-Gitlab" tests="3" failures="0" errors="0" skipped="0" time="0.66867566">
|
|
66
|
+
<testcase classname="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" name="AppCompInputTextToFillDropdownNx.vue > renders a list of vuetify v-select components" time="0.265334782">
|
|
67
|
+
</testcase>
|
|
68
|
+
<testcase classname="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" name="AppCompInputTextToFillDropdownNx.vue > has the right initial data to display (modelValue prop)" time="0.248612194">
|
|
69
|
+
</testcase>
|
|
70
|
+
<testcase classname="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" name="AppCompInputTextToFillDropdownNx.vue > emits enable-submit and update:modelValue events on input change" time="0.153249249">
|
|
71
|
+
</testcase>
|
|
72
|
+
</testsuite>
|
|
73
|
+
<testsuite name="tests/unit/AppCompInputTextToFillNx.spec.js" timestamp="2025-12-03T20:05:11.495Z" hostname="SRV-Gitlab" tests="4" failures="0" errors="0" skipped="0" time="0.542162683">
|
|
74
|
+
<testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue > renders a paragraph with multiple vuetify v-text-field" time="0.266254499">
|
|
75
|
+
</testcase>
|
|
76
|
+
<testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue > displays the user saved answers" time="0.105401228">
|
|
77
|
+
</testcase>
|
|
78
|
+
<testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue > accepts some input text" time="0.093048312">
|
|
79
|
+
</testcase>
|
|
80
|
+
<testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue > emits enable-submit and update:modelValue events on input change" time="0.07593334">
|
|
81
|
+
</testcase>
|
|
82
|
+
</testsuite>
|
|
83
|
+
<testsuite name="tests/unit/AppCompQuizNext.spec.js" timestamp="2025-12-03T20:05:11.496Z" hostname="SRV-Gitlab" tests="1" failures="0" errors="0" skipped="0" time="0.127558291">
|
|
84
|
+
<testcase classname="tests/unit/AppCompQuizNext.spec.js" name="AppCompQuizNext > rend un input radio si la question est de type choix_unique" time="0.125999081">
|
|
85
|
+
</testcase>
|
|
86
|
+
</testsuite>
|
|
87
|
+
<testsuite name="tests/unit/AppCompVideoPlayer.spec.js" timestamp="2025-12-03T20:05:11.496Z" hostname="SRV-Gitlab" tests="4" failures="0" errors="0" skipped="0" time="0.150221064">
|
|
88
|
+
<testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer > Validate received props" time="0.079283338">
|
|
89
|
+
<system-err>
|
|
90
|
+
[Vue warn]: Failed to resolve component: app-base-error-display
|
|
91
|
+
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
|
|
92
|
+
at <AppCompVideoPlayer vidData= {
|
|
93
|
+
id: [32m'vid1'[39m,
|
|
94
|
+
mSources: [ { type: [32m'mp4'[39m, src: [32m'exemple_video.mp4'[39m } ],
|
|
95
|
+
mSubtitles: [
|
|
96
|
+
{ label: [32m'Français'[39m, src: [32m'exemple_soustitres.vtt'[39m, srclang: [32m'fr'[39m }
|
|
97
|
+
],
|
|
98
|
+
mPoster: [32m'video_poster.jpg'[39m,
|
|
99
|
+
mTranscript: [32m'exemple_transcript.html'[39m
|
|
100
|
+
} ref="VTU_COMPONENT" >
|
|
101
|
+
at <VTUROOT>
|
|
102
|
+
[Vue warn]: Property "$pinia" was accessed during render but is not defined on instance.
|
|
103
|
+
at <AppCompVideoPlayer vidData= {
|
|
104
|
+
id: [32m'vid1'[39m,
|
|
105
|
+
mSources: [ { type: [32m'mp4'[39m, src: [32m'exemple_video.mp4'[39m } ],
|
|
106
|
+
mSubtitles: [
|
|
107
|
+
{ label: [32m'Français'[39m, src: [32m'exemple_soustitres.vtt'[39m, srclang: [32m'fr'[39m }
|
|
108
|
+
],
|
|
109
|
+
mPoster: [32m'video_poster.jpg'[39m,
|
|
110
|
+
mTranscript: [32m'exemple_transcript.html'[39m
|
|
111
|
+
} ref="VTU_COMPONENT" >
|
|
112
|
+
at <VTUROOT>
|
|
113
|
+
|
|
114
|
+
[Vue warn]: Failed to resolve component: app-base-error-display
|
|
115
|
+
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
|
|
116
|
+
at <AppCompVideoPlayer vidData= {
|
|
117
|
+
id: [32m'vid1'[39m,
|
|
118
|
+
mSources: [ { type: [32m'mp4'[39m, src: [32m'exemple_video.mp4'[39m } ],
|
|
119
|
+
mSubtitles: [
|
|
120
|
+
{ label: [32m'Français'[39m, src: [32m'exemple_soustitres.vtt'[39m, srclang: [32m'fr'[39m }
|
|
121
|
+
],
|
|
122
|
+
mPoster: [32m'video_poster.jpg'[39m,
|
|
123
|
+
mTranscript: [32m'exemple_transcript.html'[39m
|
|
124
|
+
} ref="VTU_COMPONENT" >
|
|
125
|
+
at <VTUROOT>
|
|
126
|
+
|
|
127
|
+
</system-err>
|
|
128
|
+
</testcase>
|
|
129
|
+
<testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer > renders ErrorDisplay When validator returns errors" time="0.040805915">
|
|
130
|
+
<system-err>
|
|
131
|
+
[Vue warn]: Invalid prop: custom validator check failed for prop "vidData".
|
|
132
|
+
at <AppCompVideoPlayer vidData= { id: [1mnull[22m } ref="VTU_COMPONENT" >
|
|
133
|
+
at <VTUROOT>
|
|
134
|
+
|
|
135
|
+
</system-err>
|
|
136
|
+
</testcase>
|
|
137
|
+
<testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer > It renders HTML video Element" time="0.013200088">
|
|
138
|
+
<system-err>
|
|
139
|
+
[Vue warn]: Property "$pinia" was accessed during render but is not defined on instance.
|
|
140
|
+
at <AppCompVideoPlayer vidData= { id: [1mnull[22m } ref="VTU_COMPONENT" >
|
|
141
|
+
at <VTUROOT>
|
|
142
|
+
|
|
143
|
+
</system-err>
|
|
144
|
+
</testcase>
|
|
145
|
+
<testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer > Video Element has correct sources" time="0.014878878">
|
|
146
|
+
<system-err>
|
|
147
|
+
[Vue warn]: Property "$pinia" was accessed during render but is not defined on instance.
|
|
148
|
+
at <AppCompVideoPlayer vidData= {
|
|
149
|
+
id: [32m'vid1'[39m,
|
|
150
|
+
mSources: [ { type: [32m'mp4'[39m, src: [32m'exemple_video.mp4'[39m } ],
|
|
151
|
+
mSubtitles: [
|
|
152
|
+
{ label: [32m'Français'[39m, src: [32m'exemple_soustitres.vtt'[39m, srclang: [32m'fr'[39m }
|
|
153
|
+
],
|
|
154
|
+
mPoster: [32m'video_poster.jpg'[39m,
|
|
155
|
+
mTranscript: [32m'exemple_transcript.html'[39m
|
|
156
|
+
} ref="VTU_COMPONENT" >
|
|
157
|
+
at <VTUROOT>
|
|
158
|
+
|
|
159
|
+
</system-err>
|
|
160
|
+
</testcase>
|
|
161
|
+
</testsuite>
|
|
162
|
+
<testsuite name="tests/unit/useTimer.spec.js" timestamp="2025-12-03T20:05:11.498Z" hostname="SRV-Gitlab" tests="9" failures="0" errors="0" skipped="0" time="0.01523782">
|
|
163
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should create a Timer instance with a unique ID" time="0.004283024">
|
|
164
|
+
</testcase>
|
|
165
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should return a timer instance by it ID" time="0.001041552">
|
|
166
|
+
</testcase>
|
|
167
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should throw error when a timer instance doesn`t exist" time="0.001328963">
|
|
168
|
+
</testcase>
|
|
169
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should initialize timer at 0 seconds" time="0.000432473">
|
|
170
|
+
</testcase>
|
|
171
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should start the timer and increment time every second" time="0.001382178">
|
|
172
|
+
</testcase>
|
|
173
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should display time in correct format when converting to ISOformats" time="0.003260798">
|
|
174
|
+
</testcase>
|
|
175
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should pause the timer" time="0.000603134">
|
|
176
|
+
</testcase>
|
|
177
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should reset the timer to 0 when timer stops" time="0.000482659">
|
|
178
|
+
</testcase>
|
|
179
|
+
<testcase classname="tests/unit/useTimer.spec.js" name="Timer class > should destroy timer" time="0.000666707">
|
|
180
|
+
</testcase>
|
|
181
|
+
</testsuite>
|
|
182
|
+
</testsuites>
|
package/package.json
CHANGED
|
@@ -1,59 +1,66 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "fcad-core-dragon",
|
|
3
|
-
"version": "2.1.
|
|
4
|
-
"private": false,
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./src/main.js",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"build": "vite build",
|
|
9
|
-
"dev": "vite",
|
|
10
|
-
"docs:build": "vitepress build documentation",
|
|
11
|
-
"docs:dev": "vitepress dev documentation",
|
|
12
|
-
"docs:preview": "vitepress preview documentation",
|
|
13
|
-
"lintfix": "eslint --fix src",
|
|
14
|
-
"lintreport": "eslint ./src",
|
|
15
|
-
"preview": "vite preview",
|
|
16
|
-
"reset": "rm -rf ./node_modules package-lock.json .cache dist && npm i && npm run watch",
|
|
17
|
-
"test:unit": "vitest",
|
|
18
|
-
"vue": "vue",
|
|
19
|
-
"watch": "nodemon -e js,vue,html,json -x yalc publish --push",
|
|
20
|
-
"format": "prettier --write src/"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"@
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "fcad-core-dragon",
|
|
3
|
+
"version": "2.1.2",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./src/main.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"dev": "vite",
|
|
10
|
+
"docs:build": "vitepress build documentation",
|
|
11
|
+
"docs:dev": "vitepress dev documentation",
|
|
12
|
+
"docs:preview": "vitepress preview documentation",
|
|
13
|
+
"lintfix": "eslint --fix src",
|
|
14
|
+
"lintreport": "eslint ./src",
|
|
15
|
+
"preview": "vite preview",
|
|
16
|
+
"reset": "rm -rf ./node_modules package-lock.json .cache dist && npm i && npm run watch",
|
|
17
|
+
"test:unit": "vitest",
|
|
18
|
+
"vue": "vue",
|
|
19
|
+
"watch": "nodemon -e js,vue,html,json -x yalc publish --push",
|
|
20
|
+
"format": "prettier --write src/",
|
|
21
|
+
"test-ct": "playwright test -c playwright-ct.config.js"
|
|
22
|
+
},
|
|
23
|
+
"config": {
|
|
24
|
+
"projname": ""
|
|
25
|
+
},
|
|
26
|
+
"browserslist": [
|
|
27
|
+
"> 1%",
|
|
28
|
+
"last 2 versions",
|
|
29
|
+
"not dead"
|
|
30
|
+
],
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"axios": "^1.6.8",
|
|
33
|
+
"gsap": "^3.12.5",
|
|
34
|
+
"idb": "^8.0.0",
|
|
35
|
+
"mobile-detect": "^1.4.5",
|
|
36
|
+
"pinia": "^3.0.3",
|
|
37
|
+
"tiny-emitter": "^2.1.0",
|
|
38
|
+
"vue-safe-teleport": "^0.1.2"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@eslint/js": "^9.38.0",
|
|
42
|
+
"@pinia/testing": "^1.0.3",
|
|
43
|
+
"@playwright/experimental-ct-vue": "^1.56.1",
|
|
44
|
+
"@playwright/test": "^1.56.1",
|
|
45
|
+
"@types/node": "^24.10.0",
|
|
46
|
+
"@vitejs/plugin-vue": "^6.0.1",
|
|
47
|
+
"@vue/eslint-config-prettier": "^10.2.0",
|
|
48
|
+
"@vue/test-utils": "^2.4.6",
|
|
49
|
+
"eslint": "^9.38.0",
|
|
50
|
+
"eslint-plugin-cypress": "^5.1.0",
|
|
51
|
+
"eslint-plugin-vue": "~10.3.0",
|
|
52
|
+
"globals": "^16.4.0",
|
|
53
|
+
"jsdom": "^25.0.1",
|
|
54
|
+
"nodemon": "^3.1.0",
|
|
55
|
+
"prettier": "^3.6.2",
|
|
56
|
+
"sass-embedded": "^1.91.0",
|
|
57
|
+
"vitepress": "^1.6.3",
|
|
58
|
+
"vitest": "^3.2.4",
|
|
59
|
+
"vue-i18n": "^11.1.12",
|
|
60
|
+
"vue-router": "^4.4.5",
|
|
61
|
+
"vuetify": "^3.10.10"
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">0.11.9"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Testing Page</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<div id="root"></div>
|
|
10
|
+
<script type="module" src="./index.js"></script>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Import styles, initialize component theme here.
|
|
2
|
+
//import '../src/sass/main.scss'
|
|
3
|
+
import { beforeMount } from '@playwright/experimental-ct-vue/hooks'
|
|
4
|
+
import { createTestingPinia } from '@pinia/testing'
|
|
5
|
+
// import { StoreState } from 'pinia'
|
|
6
|
+
// import { useAppStore } from '../src/module/stores/appStore.js'
|
|
7
|
+
|
|
8
|
+
beforeMount(async ({ hooksConfig }) => {
|
|
9
|
+
createTestingPinia({
|
|
10
|
+
initialState: hooksConfig?.store,
|
|
11
|
+
/**
|
|
12
|
+
* Use HTTP intercepting to mock API calls instead:
|
|
13
|
+
* https://playwright.dev/docs/mock#mock-api-requests
|
|
14
|
+
*/
|
|
15
|
+
stubActions: false,
|
|
16
|
+
createSpy(args) {
|
|
17
|
+
console.log('spy', args)
|
|
18
|
+
return () => console.log('spy-returns')
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
})
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { defineConfig, devices } from '@playwright/experimental-ct-vue'
|
|
3
|
+
import { mergeConfig } from 'vite'
|
|
4
|
+
import vue from '@vitejs/plugin-vue'
|
|
5
|
+
import path from 'path'
|
|
6
|
+
import fs from 'fs'
|
|
7
|
+
import { pathToFileURL } from 'url'
|
|
8
|
+
import { fileURLToPath } from 'url'
|
|
9
|
+
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
11
|
+
const __dirname = path.dirname(__filename)
|
|
12
|
+
|
|
13
|
+
//===================================================
|
|
14
|
+
// Load base Vite config
|
|
15
|
+
const viteConfigPath = process.env.VITE_CONFIG_PATH
|
|
16
|
+
? path.resolve(process.env.VITE_CONFIG_PATH)
|
|
17
|
+
: path.resolve(
|
|
18
|
+
path.dirname(import.meta.url.replace('file:///', '')),
|
|
19
|
+
'vite.config.js'
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
// if (!fs.existsSync(viteConfigPath)) {
|
|
23
|
+
// throw new Error(`vite.config.js introuvable à ${viteConfigPath}`)
|
|
24
|
+
// }
|
|
25
|
+
|
|
26
|
+
const viteConfig = !fs.existsSync(viteConfigPath)
|
|
27
|
+
? {}
|
|
28
|
+
: (await import(pathToFileURL(viteConfigPath).href)).default
|
|
29
|
+
//===================================================
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @see https://playwright.dev/docs/test-configuration
|
|
33
|
+
*/
|
|
34
|
+
export default defineConfig({
|
|
35
|
+
testDir: './tests/component',
|
|
36
|
+
testMatch: ['**/*.spec.js'],
|
|
37
|
+
/* The base directory, relative to the config file, for snapshot files created with toMatchSnapshot and toHaveScreenshot. */
|
|
38
|
+
snapshotDir: './__snapshots__',
|
|
39
|
+
/* Maximum time one test can run for. */
|
|
40
|
+
timeout: 30 * 1000,
|
|
41
|
+
/* Run tests in files in parallel */
|
|
42
|
+
fullyParallel: true,
|
|
43
|
+
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
44
|
+
forbidOnly: !!process.env.CI,
|
|
45
|
+
/* Retry on CI only */
|
|
46
|
+
retries: process.env.CI ? 2 : 0,
|
|
47
|
+
/* Opt out of parallel tests on CI. */
|
|
48
|
+
workers: process.env.CI ? 1 : undefined,
|
|
49
|
+
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
50
|
+
reporter: [
|
|
51
|
+
['line'],
|
|
52
|
+
['junit', { outputFile: 'results.xml' }],
|
|
53
|
+
['html', { outputFolder: 'playwright-report', open: 'never' }]
|
|
54
|
+
],
|
|
55
|
+
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
56
|
+
use: {
|
|
57
|
+
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
58
|
+
trace: 'on-first-retry',
|
|
59
|
+
|
|
60
|
+
/* Port to use for Playwright component endpoint. */
|
|
61
|
+
ctPort: 3100,
|
|
62
|
+
headless: true
|
|
63
|
+
},
|
|
64
|
+
ctViteConfig: {
|
|
65
|
+
plugins: [vue()],
|
|
66
|
+
optimizeDeps: { include: ['vue', 'pinia', 'vue-router'] },
|
|
67
|
+
resolve: {
|
|
68
|
+
alias: {
|
|
69
|
+
'@': path.resolve(__dirname, './src')
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
expect: {
|
|
74
|
+
/**
|
|
75
|
+
* Maximum time expect() should wait for the condition to be met.
|
|
76
|
+
* For example in `await expect(locator).toHaveText();`
|
|
77
|
+
*/
|
|
78
|
+
timeout: 10000
|
|
79
|
+
},
|
|
80
|
+
/* Configure projects for major browsers */
|
|
81
|
+
projects: [
|
|
82
|
+
{
|
|
83
|
+
name: 'chromium',
|
|
84
|
+
use: { ...devices['Desktop Chrome'] }
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'firefox',
|
|
88
|
+
use: { ...devices['Desktop Firefox'] }
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'webkit',
|
|
92
|
+
use: { ...devices['Desktop Safari'] }
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
})
|