Fix desktop quiz submission and keep runs enabled until cancelled
This commit is contained in:
@@ -9,14 +9,14 @@ let passed = 0;
|
||||
async function test(name, fn) { await fn(); ++passed; console.log(`PASS ${name}`); }
|
||||
function detail(overrides = {}) {
|
||||
return {course: {id: ID, courseName: '课程一', status: 'LEARNING', completedAt: null,
|
||||
examRequired: true, examPassed: true}, resources: [
|
||||
examRequired: true, examPassed: true,examScorePercent:100}, resources: [
|
||||
{id: RID, name: '视频一', type: 'VIDEO', sortNo: 1, completed: false, playable: true},
|
||||
{id: '2093583972926885888', name: '视频二', type: 'VIDEO', sortNo: 2, completed: false, playable: true}], ...overrides};
|
||||
}
|
||||
function harness() {
|
||||
function harness({sessionEntries=[]}={}) {
|
||||
let now = 100000;
|
||||
class TestDate extends Date { static now() { return now; } }
|
||||
const storage = new Map(), session = new Map(), selectors = new Map();
|
||||
const storage = new Map(), session = new Map(sessionEntries), selectors = new Map();
|
||||
function eventSurface(){
|
||||
const listeners=new Map();
|
||||
return {addEventListener(type,fn,options){const list=listeners.get(type)||[];list.push({fn,capture:options===true||!!options?.capture});listeners.set(type,list);},
|
||||
@@ -41,13 +41,13 @@ function harness() {
|
||||
setInterval() {}};
|
||||
const source = fs.readFileSync('./icampus-study-helper.user.js', 'utf8').replace(
|
||||
'setInterval(() => { void tick(); }, 1000);',
|
||||
`window.testing = {receive, stop, tick, tickCourse, tickQuiz, monitor, details, holdLease, waitMedia, recoverMedia, mount, setBackgroundEnabled,
|
||||
`window.testing = {receive, stop, park, tick, tickCourse, tickQuiz, monitor, details, holdLease, waitMedia, recoverMedia, mount, setBackgroundEnabled,
|
||||
pendingCourse(id){expectedCourse=id;courseNavigationPending=true;navigatingUntil=Date.now()+20000;},
|
||||
recovered(id){recoveryUsed.add('${ID}/'+id);},
|
||||
begin(){running=true;runNumber++;mode={value:'all'};startAt=Date.now()-1000;},
|
||||
begin(){armed=true;running=true;runNumber++;mode={value:'all'};startAt=Date.now()-1000;persistIntent();},
|
||||
track(v){active={video:v,id:'${RID}',courseId:'${ID}',src:v.currentSrc,lastPosition:v.currentTime,progressedAt:Date.now(),started:Date.now()};lastNetworkAt=Date.now();},
|
||||
pending(){courseNavigationPending=true;navigatingUntil=Date.now()-1;},
|
||||
get state(){return {running,status,active,courses,packagesAt,busy,bank,lastExam,quiz};}};`);
|
||||
get state(){return {armed,waiting,running,status,active,courses,packagesAt,busy,bank,lastExam,quiz};}};`);
|
||||
vm.runInNewContext(source, context);
|
||||
const api = window.testing;
|
||||
const video = {currentTime: 120, currentSrc: 'media', readyState: 4, isConnected: true, playbackRate: 2,
|
||||
|
||||
Reference in New Issue
Block a user