fcad-core-dragon 2.1.1 → 2.2.0-beta.1
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 +106 -0
- package/.prettierrc +11 -11
- package/.vscode/extensions.json +8 -8
- package/.vscode/settings.json +16 -16
- package/CHANGELOG +529 -520
- package/README.md +57 -57
- package/artifacts/playwright-report/index.html +85 -0
- 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/package.json +69 -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 +862 -866
- 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 +326 -323
- package/src/components/AppCompInputDropdownNx.vue +302 -299
- package/src/components/AppCompInputRadioNx.vue +288 -284
- package/src/components/AppCompInputTextNx.vue +154 -153
- package/src/components/AppCompInputTextTableNx.vue +205 -202
- package/src/components/AppCompInputTextToFillDropdownNx.vue +341 -340
- package/src/components/AppCompInputTextToFillNx.vue +293 -313
- package/src/components/AppCompJauge.vue +81 -81
- package/src/components/AppCompMenu.vue +6 -1
- 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 +2288 -2288
- package/src/components/AppCompPopUpNext.vue +508 -504
- package/src/components/AppCompQuizNext.vue +515 -510
- package/src/components/AppCompQuizRecall.vue +365 -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 +378 -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 +506 -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 -17
- package/src/plugins/helper.js +355 -358
- package/src/plugins/i18n.js +29 -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/AppCompAudio.spec.js +134 -0
- package/tests/unit/AppCompCarousel.spec.js +54 -0
- 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/AppCompNoteCredit.spec.js +58 -0
- package/tests/unit/AppCompQuizNext.spec.js +112 -0
- package/tests/unit/AppCompVideoPlayer.spec.js +169 -0
- package/tests/unit/useQuiz.spec.js +72 -0
- package/{src/components/tests__ → tests/unit}/useTimer.spec.js +91 -91
- package/vitest.config.js +42 -19
- package/vitest.setup.js +96 -0
- package/src/components/AppBaseButton.test.js +0 -21
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
-
import { Timer } from '../../composables/useTimer'
|
|
3
|
-
|
|
4
|
-
// vitest vi utility ref: https://vitest.dev/api/vi.html
|
|
5
|
-
// vi fakeTimers ref: https://vitest.dev/api/vi.html#vi-usefaketimers
|
|
6
|
-
|
|
7
|
-
describe('Timer class', () => {
|
|
8
|
-
let timer
|
|
9
|
-
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
Timer.timers.clear() // Clear existing timers before each test
|
|
12
|
-
timer = new Timer()
|
|
13
|
-
vi.useFakeTimers() // Enable fake timers before each test
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
timer.destroy() // destroy created timer after each test
|
|
18
|
-
vi.useRealTimers() // Restore real timers after each test
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it('should create a Timer instance with a unique ID', () => {
|
|
22
|
-
const timer2 = new Timer() //create a second instance
|
|
23
|
-
expect(timer2.getTimerID()).not.toBe(timer.getTimerID())
|
|
24
|
-
expect(Timer.timers.size).toBe(2) // Two timers should be registered
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
it('should return a timer instance by it ID', () => {
|
|
28
|
-
const timer2 = new Timer('timer22') //create a second instance with custom ID
|
|
29
|
-
expect(timer.getTimer('timer22')).toBeInstanceOf(Timer)
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
it('should throw error when a timer instance doesn`t exist', () => {
|
|
33
|
-
const id = 'noExistingTimer'
|
|
34
|
-
expect(() => timer.getTimer(id)).toThrowError(
|
|
35
|
-
`Timer with ID ${id} does not exist.`
|
|
36
|
-
)
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('should initialize timer at 0 seconds', () => {
|
|
40
|
-
expect(timer.getTime()).toBe(0)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('should start the timer and increment time every second', () => {
|
|
44
|
-
timer.start()
|
|
45
|
-
expect(timer.getTimerState()).toBe('started')
|
|
46
|
-
|
|
47
|
-
vi.advanceTimersByTime(5000) // Fast-forward 3 seconds
|
|
48
|
-
expect(timer.getTime()).toBe(5) // Should be approximately 5 seconds
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
it('should display time in correct format when converting to ISOformats', () => {
|
|
52
|
-
timer.start()
|
|
53
|
-
expect(timer.getTimerState()).toBe('started')
|
|
54
|
-
|
|
55
|
-
vi.advanceTimersByTime(65000) // Fast-forward 3 seconds
|
|
56
|
-
|
|
57
|
-
const fullISOFormat = '1970-01-01T00:01:05.000Z'
|
|
58
|
-
const isoTimeStr = '00:01:05'
|
|
59
|
-
|
|
60
|
-
expect(timer.getTime()).toBe(65) // Should be approximately 1 min 5 seconds (00:01:05)
|
|
61
|
-
expect(timer.formatToISOString(timer.getTime())).toBe(fullISOFormat)
|
|
62
|
-
expect(timer.ISOTimeParser(timer.getTime())).toBe(isoTimeStr)
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
it('should pause the timer', () => {
|
|
66
|
-
timer.start()
|
|
67
|
-
vi.advanceTimersByTime(2000)
|
|
68
|
-
timer.pause()
|
|
69
|
-
const current = timer.getTime()
|
|
70
|
-
|
|
71
|
-
// Advance time but timer should stay paused
|
|
72
|
-
vi.advanceTimersByTime(3000)
|
|
73
|
-
expect(timer.getTime()).toBe(current) // about 2 seconds
|
|
74
|
-
expect(timer.ISOTimeParser(timer.getTime())).toBe('00:00:02')
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
it('should reset the timer to 0 when timer stops', () => {
|
|
78
|
-
timer.start()
|
|
79
|
-
vi.advanceTimersByTime(4000)
|
|
80
|
-
timer.stop()
|
|
81
|
-
expect(timer.getTime()).toBe(0)
|
|
82
|
-
expect(timer.getTimerState()).toBe('stopped')
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
it('should destroy timer', () => {
|
|
86
|
-
const id = timer.getTimerID()
|
|
87
|
-
timer.destroy()
|
|
88
|
-
expect(Timer.timers.get(id)).toBeUndefined()
|
|
89
|
-
expect(Timer.timers.size).toBe(0)
|
|
90
|
-
})
|
|
91
|
-
})
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import { Timer } from '../../src/composables/useTimer.js'
|
|
3
|
+
|
|
4
|
+
// vitest vi utility ref: https://vitest.dev/api/vi.html
|
|
5
|
+
// vi fakeTimers ref: https://vitest.dev/api/vi.html#vi-usefaketimers
|
|
6
|
+
|
|
7
|
+
describe('Timer class', () => {
|
|
8
|
+
let timer
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
Timer.timers.clear() // Clear existing timers before each test
|
|
12
|
+
timer = new Timer()
|
|
13
|
+
vi.useFakeTimers() // Enable fake timers before each test
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
timer.destroy() // destroy created timer after each test
|
|
18
|
+
vi.useRealTimers() // Restore real timers after each test
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('should create a Timer instance with a unique ID', () => {
|
|
22
|
+
const timer2 = new Timer() //create a second instance
|
|
23
|
+
expect(timer2.getTimerID()).not.toBe(timer.getTimerID())
|
|
24
|
+
expect(Timer.timers.size).toBe(2) // Two timers should be registered
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('should return a timer instance by it ID', () => {
|
|
28
|
+
const timer2 = new Timer('timer22') //create a second instance with custom ID
|
|
29
|
+
expect(timer.getTimer('timer22')).toBeInstanceOf(Timer)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('should throw error when a timer instance doesn`t exist', () => {
|
|
33
|
+
const id = 'noExistingTimer'
|
|
34
|
+
expect(() => timer.getTimer(id)).toThrowError(
|
|
35
|
+
`Timer with ID ${id} does not exist.`
|
|
36
|
+
)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('should initialize timer at 0 seconds', () => {
|
|
40
|
+
expect(timer.getTime()).toBe(0)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('should start the timer and increment time every second', () => {
|
|
44
|
+
timer.start()
|
|
45
|
+
expect(timer.getTimerState()).toBe('started')
|
|
46
|
+
|
|
47
|
+
vi.advanceTimersByTime(5000) // Fast-forward 3 seconds
|
|
48
|
+
expect(timer.getTime()).toBe(5) // Should be approximately 5 seconds
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('should display time in correct format when converting to ISOformats', () => {
|
|
52
|
+
timer.start()
|
|
53
|
+
expect(timer.getTimerState()).toBe('started')
|
|
54
|
+
|
|
55
|
+
vi.advanceTimersByTime(65000) // Fast-forward 3 seconds
|
|
56
|
+
|
|
57
|
+
const fullISOFormat = '1970-01-01T00:01:05.000Z'
|
|
58
|
+
const isoTimeStr = '00:01:05'
|
|
59
|
+
|
|
60
|
+
expect(timer.getTime()).toBe(65) // Should be approximately 1 min 5 seconds (00:01:05)
|
|
61
|
+
expect(timer.formatToISOString(timer.getTime())).toBe(fullISOFormat)
|
|
62
|
+
expect(timer.ISOTimeParser(timer.getTime())).toBe(isoTimeStr)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('should pause the timer', () => {
|
|
66
|
+
timer.start()
|
|
67
|
+
vi.advanceTimersByTime(2000)
|
|
68
|
+
timer.pause()
|
|
69
|
+
const current = timer.getTime()
|
|
70
|
+
|
|
71
|
+
// Advance time but timer should stay paused
|
|
72
|
+
vi.advanceTimersByTime(3000)
|
|
73
|
+
expect(timer.getTime()).toBe(current) // about 2 seconds
|
|
74
|
+
expect(timer.ISOTimeParser(timer.getTime())).toBe('00:00:02')
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it('should reset the timer to 0 when timer stops', () => {
|
|
78
|
+
timer.start()
|
|
79
|
+
vi.advanceTimersByTime(4000)
|
|
80
|
+
timer.stop()
|
|
81
|
+
expect(timer.getTime()).toBe(0)
|
|
82
|
+
expect(timer.getTimerState()).toBe('stopped')
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it('should destroy timer', () => {
|
|
86
|
+
const id = timer.getTimerID()
|
|
87
|
+
timer.destroy()
|
|
88
|
+
expect(Timer.timers.get(id)).toBeUndefined()
|
|
89
|
+
expect(Timer.timers.size).toBe(0)
|
|
90
|
+
})
|
|
91
|
+
})
|
package/vitest.config.js
CHANGED
|
@@ -1,19 +1,42 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @vitest-environment
|
|
3
|
-
*/
|
|
4
|
-
import { fileURLToPath, URL } from 'node:url'
|
|
5
|
-
import {
|
|
6
|
-
import vue from '@vitejs/plugin-vue'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
)
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment happy-dom
|
|
3
|
+
*/
|
|
4
|
+
import { fileURLToPath, URL } from 'node:url'
|
|
5
|
+
import { defineConfig, configDefaults } from 'vitest/config'
|
|
6
|
+
import vue from '@vitejs/plugin-vue'
|
|
7
|
+
|
|
8
|
+
export default defineConfig({
|
|
9
|
+
css: {
|
|
10
|
+
preprocessorOptions: {
|
|
11
|
+
scss: {
|
|
12
|
+
api: 'modern'
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
test: {
|
|
17
|
+
setupFiles: ['vitest.setup.js'],
|
|
18
|
+
alias: {
|
|
19
|
+
'@': fileURLToPath(new URL('./src', import.meta.url))
|
|
20
|
+
},
|
|
21
|
+
server: {
|
|
22
|
+
deps: {
|
|
23
|
+
inline: ['vuetify']
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
environment: 'happy-dom',
|
|
27
|
+
exclude: [...configDefaults.exclude, 'tests/component/**', '**/_*.spec.js'],
|
|
28
|
+
root: fileURLToPath(new URL('./', import.meta.url)),
|
|
29
|
+
coverage: {
|
|
30
|
+
provider: 'v8',
|
|
31
|
+
reporter: ['text', 'json', 'cobertura'],
|
|
32
|
+
reportsDirectory: './coverage',
|
|
33
|
+
include: ['src/**/*.{js,vue}'],
|
|
34
|
+
exclude: ['tests/**/*'],
|
|
35
|
+
lines: 0, // test must cover at least 80% of lines
|
|
36
|
+
branches: 0, // test must cover at least 80% of branches (if, else, switch, case...)
|
|
37
|
+
functions: 0, // test must cover at least 80% of functions
|
|
38
|
+
statements: 0 // test must cover at least 80% of statements/instructions
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
plugins: [vue()]
|
|
42
|
+
})
|
package/vitest.setup.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//Mock Vuetify, vue-i18n and event bus
|
|
2
|
+
import { vi } from 'vitest'
|
|
3
|
+
import { config } from '@vue/test-utils'
|
|
4
|
+
import { createI18n } from 'vue-i18n'
|
|
5
|
+
import { createVuetify } from 'vuetify'
|
|
6
|
+
import * as components from 'vuetify/components'
|
|
7
|
+
import * as directives from 'vuetify/directives'
|
|
8
|
+
import * as frMessages from './src/$locales/fr.json'
|
|
9
|
+
import * as enMessages from './src/$locales/en.json'
|
|
10
|
+
import bus from './src/plugins/bus'
|
|
11
|
+
|
|
12
|
+
//create vuetify instance
|
|
13
|
+
const vuetify = createVuetify({
|
|
14
|
+
components,
|
|
15
|
+
directives
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
//load messages from core
|
|
19
|
+
const i18n = createI18n({
|
|
20
|
+
legacy: false,
|
|
21
|
+
locale: 'fr',
|
|
22
|
+
messages: {
|
|
23
|
+
fr: frMessages,
|
|
24
|
+
en: enMessages
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
// Suppress console warnings and errors during tests
|
|
29
|
+
vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
30
|
+
vi.spyOn(console, 'error').mockImplementation(() => {})
|
|
31
|
+
|
|
32
|
+
// Global mock of Router
|
|
33
|
+
// =========================================
|
|
34
|
+
vi.mock('@/router/index.js', () => ({
|
|
35
|
+
default: {
|
|
36
|
+
push: vi.fn(),
|
|
37
|
+
back: vi.fn(),
|
|
38
|
+
currentRoute: { value: { meta: {}, params: {}, query: {} } }
|
|
39
|
+
}
|
|
40
|
+
}))
|
|
41
|
+
|
|
42
|
+
// Global mock of Pinia store
|
|
43
|
+
// =========================================
|
|
44
|
+
vi.mock('@/module/stores/appStore', () => ({
|
|
45
|
+
useAppStore: () => ({
|
|
46
|
+
getAppConfigs: {
|
|
47
|
+
lang: 'fr'
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
getCurrentBrowser: 'Chrome',
|
|
51
|
+
|
|
52
|
+
getCurrentPage: {
|
|
53
|
+
id: 'P01',
|
|
54
|
+
activityRef: 'A03'
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
updateCurrentMediaElements: vi.fn(() => Promise.resolve()),
|
|
58
|
+
getPageInteraction: {},
|
|
59
|
+
getUserInteraction: {}
|
|
60
|
+
})
|
|
61
|
+
}))
|
|
62
|
+
|
|
63
|
+
// Global mock of validators
|
|
64
|
+
// =========================================
|
|
65
|
+
vi.mock('@/shared/validators.js', () => ({
|
|
66
|
+
validateObjType: vi.fn(() => true),
|
|
67
|
+
validateString: vi.fn(() => true),
|
|
68
|
+
validateNumber: vi.fn(() => true),
|
|
69
|
+
validateVideoData: vi.fn(() => []),
|
|
70
|
+
validateAudioData: vi.fn(() => [])
|
|
71
|
+
}))
|
|
72
|
+
|
|
73
|
+
//setup as global plugins used by all tests
|
|
74
|
+
config.global.plugins = [i18n, vuetify, bus]
|
|
75
|
+
|
|
76
|
+
// Global mock of components
|
|
77
|
+
config.global.stubs = {
|
|
78
|
+
AppBaseErrorDisplay: true,
|
|
79
|
+
AppBaseSkeleton: true,
|
|
80
|
+
AppBaseButton: true,
|
|
81
|
+
AppCompPlayBarNext: true
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
config.global.mocks = {
|
|
85
|
+
$route: {
|
|
86
|
+
meta: {
|
|
87
|
+
activity_ref: 'A03',
|
|
88
|
+
id: 'P01'
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
$bus: {
|
|
92
|
+
$on: vi.fn(),
|
|
93
|
+
$emit: vi.fn(),
|
|
94
|
+
$off: vi.fn()
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { mount } from '@vue/test-utils'
|
|
3
|
-
import AppBaseButton from './AppBaseButton.vue'
|
|
4
|
-
|
|
5
|
-
const defaultProps = { isDisabled: false, type: 'button' }
|
|
6
|
-
|
|
7
|
-
describe('AppBaseButton Tests', () => {
|
|
8
|
-
it('should render', () => {
|
|
9
|
-
const wrapper = mount(AppBaseButton, {
|
|
10
|
-
props: defaultProps
|
|
11
|
-
})
|
|
12
|
-
expect(wrapper.find('button').exists()).toBeTruthy()
|
|
13
|
-
})
|
|
14
|
-
it('should fire click event', async () => {
|
|
15
|
-
const wrapper = mount(AppBaseButton, {
|
|
16
|
-
props: defaultProps
|
|
17
|
-
})
|
|
18
|
-
wrapper.find('button').trigger('click')
|
|
19
|
-
expect(wrapper.emitted()).toHaveProperty('click')
|
|
20
|
-
})
|
|
21
|
-
})
|