feature: Update the version to 2.60.0 and improve the handling of human gestures, etc.

This commit is contained in:
2025-11-15 12:35:09 +01:00
parent 41d06ee001
commit cf0611d841
13 changed files with 165 additions and 96 deletions

View File

@@ -14,12 +14,12 @@ test('MobileFlow module exports correctly', async () => {
test('MobileFlow has run method', async () => {
const { MobileFlow } = await import('../../src/flows/MobileFlow')
// Mock bot instance
const mockBot = {
log: () => {},
log: () => { },
isMobile: true,
config: {
config: {
workers: {},
runOnZeroPoints: false,
searchSettings: { retryMobileSearchAmount: 0 }
@@ -29,7 +29,7 @@ test('MobileFlow has run method', async () => {
activities: {},
compromisedModeActive: false
}
const flow = new MobileFlow(mockBot as never)
assert.ok(flow, 'MobileFlow instance should be created')
assert.equal(typeof flow.run, 'function', 'MobileFlow should have run() method')
@@ -37,27 +37,27 @@ test('MobileFlow has run method', async () => {
test('MobileFlowResult interface has correct structure', async () => {
const { MobileFlow } = await import('../../src/flows/MobileFlow')
// Validate that MobileFlowResult type exports (compile-time check)
type MobileFlowResult = Awaited<ReturnType<InstanceType<typeof MobileFlow>['run']>>
const mockResult: MobileFlowResult = {
initialPoints: 1000,
collectedPoints: 30
}
assert.equal(typeof mockResult.initialPoints, 'number', 'initialPoints should be a number')
assert.equal(typeof mockResult.collectedPoints, 'number', 'collectedPoints should be a number')
})
test('MobileFlow accepts retry tracker', async () => {
const { MobileFlow } = await import('../../src/flows/MobileFlow')
const { MobileRetryTracker } = await import('../../src/util/MobileRetryTracker')
const { MobileRetryTracker } = await import('../../src/util/state/MobileRetryTracker')
const mockBot = {
log: () => {},
log: () => { },
isMobile: true,
config: {
config: {
workers: {},
runOnZeroPoints: false,
searchSettings: { retryMobileSearchAmount: 3 }
@@ -67,10 +67,10 @@ test('MobileFlow accepts retry tracker', async () => {
activities: {},
compromisedModeActive: false
}
const flow = new MobileFlow(mockBot as never)
const tracker = new MobileRetryTracker(3)
assert.ok(flow, 'MobileFlow should accept retry tracker')
assert.equal(typeof tracker.registerFailure, 'function', 'MobileRetryTracker should have registerFailure method')
})

View File

@@ -14,40 +14,57 @@ test('SummaryReporter module exports correctly', async () => {
test('SummaryReporter creates instance with config', async () => {
const { SummaryReporter } = await import('../../src/flows/SummaryReporter')
const mockConfig = {
webhook: { enabled: false },
ntfy: { enabled: false },
sessionPath: './sessions',
jobState: { enabled: false }
}
const reporter = new SummaryReporter(mockConfig as never)
assert.ok(reporter, 'SummaryReporter instance should be created')
})
test('SummaryReporter creates summary correctly', async () => {
const { SummaryReporter } = await import('../../src/flows/SummaryReporter')
const mockConfig = {
webhook: { enabled: false },
ntfy: { enabled: false },
sessionPath: './sessions',
jobState: { enabled: false }
}
const reporter = new SummaryReporter(mockConfig as never)
const accounts = [
{ email: 'test@example.com', pointsEarned: 100, runDuration: 60000 },
{ email: 'test2@example.com', pointsEarned: 150, runDuration: 70000, errors: ['test error'] }
{
email: 'test@example.com',
pointsEarned: 100,
runDuration: 60000,
initialPoints: 1000,
finalPoints: 1100,
desktopPoints: 60,
mobilePoints: 40
},
{
email: 'test2@example.com',
pointsEarned: 150,
runDuration: 70000,
initialPoints: 2000,
finalPoints: 2150,
desktopPoints: 90,
mobilePoints: 60,
errors: ['test error']
}
]
const startTime = new Date('2025-01-01T10:00:00Z')
const endTime = new Date('2025-01-01T10:05:00Z')
const summary = reporter.createSummary(accounts, startTime, endTime)
assert.equal(summary.totalPoints, 250, 'Total points should be 250')
assert.equal(summary.successCount, 1, 'Success count should be 1')
assert.equal(summary.failureCount, 1, 'Failure count should be 1')
@@ -56,22 +73,30 @@ test('SummaryReporter creates summary correctly', async () => {
test('SummaryData structure is correct', async () => {
const { SummaryReporter } = await import('../../src/flows/SummaryReporter')
const mockConfig = {
webhook: { enabled: false },
ntfy: { enabled: false },
sessionPath: './sessions',
jobState: { enabled: false }
}
const reporter = new SummaryReporter(mockConfig as never)
const summary = reporter.createSummary(
[{ email: 'test@example.com', pointsEarned: 50, runDuration: 30000 }],
[{
email: 'test@example.com',
pointsEarned: 50,
runDuration: 30000,
initialPoints: 500,
finalPoints: 550,
desktopPoints: 30,
mobilePoints: 20
}],
new Date(),
new Date()
)
assert.ok(summary.startTime instanceof Date, 'startTime should be a Date')
assert.ok(summary.endTime instanceof Date, 'endTime should be a Date')
assert.equal(typeof summary.totalPoints, 'number', 'totalPoints should be a number')