feat: integrate learning module
This commit is contained in:
35
tests/unit/learning-course-player.test.ts
Normal file
35
tests/unit/learning-course-player.test.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { sanitizeLearningRuntimeAnchor } from '@/lib/learning-runtime-anchor';
|
||||
import { matchesLearningCloudProgress } from '@/pages/Learning/CoursePlayer';
|
||||
|
||||
describe('Learning CoursePlayer runtime boundary', () => {
|
||||
it('copies only sceneId and sceneOrder from the untrusted iframe anchor', () => {
|
||||
expect(sanitizeLearningRuntimeAnchor({
|
||||
sceneId: 'scene-3',
|
||||
sceneOrder: 3,
|
||||
courseId: 'iframe-course',
|
||||
contentHash: 'iframe-hash',
|
||||
moduleId: 'iframe-module',
|
||||
moduleContentHash: 'iframe-module-hash',
|
||||
actionIndex: 8,
|
||||
})).toEqual({ sceneId: 'scene-3', sceneOrder: 3 });
|
||||
});
|
||||
|
||||
it('drops invalid or empty anchors instead of forwarding arbitrary context', () => {
|
||||
expect(sanitizeLearningRuntimeAnchor({ sceneId: '', sceneOrder: -1, arbitrary: true })).toBeUndefined();
|
||||
expect(sanitizeLearningRuntimeAnchor(['scene-1'])).toBeUndefined();
|
||||
});
|
||||
|
||||
it('restores single-course cloud progress stored under the server main module', () => {
|
||||
expect(matchesLearningCloudProgress(
|
||||
{ courseId: 'course-1', contentHash: 'a'.repeat(64), moduleId: 'main' },
|
||||
'course-1',
|
||||
{ courseContentHash: 'a'.repeat(64), moduleId: null, modules: [{}] },
|
||||
)).toBe(true);
|
||||
expect(matchesLearningCloudProgress(
|
||||
{ courseId: 'course-1', contentHash: 'a'.repeat(64), moduleId: 'other' },
|
||||
'course-1',
|
||||
{ courseContentHash: 'a'.repeat(64), moduleId: null, modules: [{}] },
|
||||
)).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user