feat: add quest class and session getActiveStages

This commit is contained in:
Justin Lin committed 2025-04-18 14:54:10 +08:00
1 parent 471b781d85
commit e622011b21
13 files changed
+127 -49

No files matched your search

+58
View File
@@ -0,0 +1,58 @@
import { expect, describe, it } from '@jest/globals'
import { IQuest } from '../src/schema'
import { Session } from '../src/Session'
const quest: IQuest = {
id: 'quest1',
title: 'Quest 1',
image: 'image1',
instruction: 'Instruction 1',
requirements: [],
stages: [
{
id: 'stage1',
requirements: [],
condition: {},
response: { type: 'narrative', content: 'Narrative 1' },
},
{
id: 'stage2',
requirements: ['stage1'],
condition: {},
response: { type: 'narrative', content: 'Narrative 2' },
},
{
id: 'stage3',
requirements: ['stage1'],
condition: {},
response: { type: 'narrative', content: 'Narrative 3' },
},
{
id: 'stage4',
requirements: ['stage2', 'stage3'],
condition: {},
response: { type: 'narrative', content: 'Narrative 4' },
},
],
}
describe('Session', () => {
it('should return active stages', () => {
const session = new Session(
{
completedStages: [],
},
quest
)
expect(session.getActiveStages()).toEqual(['stage1'])
session.complete('stage1')
expect(session.getActiveStages()).toEqual(['stage2', 'stage3'])
session.complete('stage2')
expect(session.getActiveStages()).toEqual(['stage3'])
session.complete('stage3')
expect(session.getActiveStages()).toEqual(['stage4'])
})
})
-19
View File
@@ -2,7 +2,6 @@ import { test, expect } from '@jest/globals'
import { Stage } from '../src/Stage'
import { FileType } from '../src/types'
import { MockFileChecker } from './asyncCondition.test'
import { Session } from '../src/Session'
const checker = new MockFileChecker()
@@ -68,21 +67,3 @@ test('check stage with async condition falsy', async () => {
})
expect(await stage.satisfies({}, checker)).toBe(false)
})
test('stage active checks', () => {
const session = new Session({
completedStages: ['stage1'],
})
const stage3 = new Stage({
id: 'stage3',
requirements: ['stage1', 'stage2'],
condition: {},
})
expect(stage3.active(session)).toBe(false)
session.complete('stage2')
expect(stage3.active(session)).toBe(true)
session.complete('stage3')
expect(stage3.active(session)).toBe(false)
})