feat: Simplify update process by removing deprecated methods and enhancing README; improve type safety in tests

This commit is contained in:
2025-11-09 22:23:46 +01:00
parent e03761adfc
commit 967801515f
7 changed files with 35 additions and 62 deletions

View File

@@ -1,5 +1,5 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import test from 'node:test'
import { LoginState, LoginStateDetector } from '../src/util/LoginStateDetector'
@@ -7,6 +7,9 @@ import { LoginState, LoginStateDetector } from '../src/util/LoginStateDetector'
* Tests for LoginStateDetector - login flow state machine
*/
// Type helper for mock Page objects in tests
type MockPage = Parameters<typeof LoginStateDetector.detectState>[0]
test('LoginState enum contains expected states', () => {
assert.ok(LoginState.EmailPage, 'Should have EmailPage state')
assert.ok(LoginState.PasswordPage, 'Should have PasswordPage state')
@@ -16,19 +19,19 @@ test('LoginState enum contains expected states', () => {
})
test('detectState returns LoginStateDetection structure', async () => {
// Mock page object
// Mock page object with proper Playwright Page interface
const mockPage = {
url: () => 'https://rewards.bing.com/',
locator: (selector: string) => ({
locator: (_selector: string) => ({
first: () => ({
isVisible: () => Promise.resolve(true),
textContent: () => Promise.resolve('Test')
})
}),
evaluate: () => Promise.resolve(150)
}
} as unknown as Parameters<typeof LoginStateDetector.detectState>[0]
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage)
assert.ok(detection, 'Should return detection object')
assert.ok(typeof detection.state === 'string', 'Should have state property')
@@ -57,7 +60,7 @@ test('detectState identifies LoggedIn state on rewards domain', async () => {
evaluate: () => Promise.resolve(200)
}
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage as MockPage)
assert.equal(detection.state, LoginState.LoggedIn, 'Should detect LoggedIn state')
assert.equal(detection.confidence, 'high', 'Should have high confidence')
@@ -85,7 +88,7 @@ test('detectState identifies EmailPage state on login.live.com', async () => {
evaluate: () => Promise.resolve(100)
}
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage as MockPage)
assert.equal(detection.state, LoginState.EmailPage, 'Should detect EmailPage state')
assert.equal(detection.confidence, 'high', 'Should have high confidence')
@@ -112,7 +115,7 @@ test('detectState identifies PasswordPage state', async () => {
evaluate: () => Promise.resolve(100)
}
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage as MockPage)
assert.equal(detection.state, LoginState.PasswordPage, 'Should detect PasswordPage state')
assert.equal(detection.confidence, 'high', 'Should have high confidence')
@@ -139,7 +142,7 @@ test('detectState identifies TwoFactorRequired state', async () => {
evaluate: () => Promise.resolve(100)
}
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage as MockPage)
assert.equal(detection.state, LoginState.TwoFactorRequired, 'Should detect TwoFactorRequired state')
assert.equal(detection.confidence, 'high', 'Should have high confidence')
@@ -167,7 +170,7 @@ test('detectState identifies PasskeyPrompt state', async () => {
evaluate: () => Promise.resolve(100)
}
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage as MockPage)
assert.equal(detection.state, LoginState.PasskeyPrompt, 'Should detect PasskeyPrompt state')
assert.equal(detection.confidence, 'high', 'Should have high confidence')
@@ -181,7 +184,7 @@ test('detectState identifies Blocked state', async () => {
return {
first: () => ({
isVisible: () => Promise.resolve(false),
textContent: () => Promise.resolve("We can't sign you in")
textContent: () => Promise.resolve('We can\'t sign you in')
})
}
}
@@ -195,7 +198,7 @@ test('detectState identifies Blocked state', async () => {
evaluate: () => Promise.resolve(100)
}
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage as MockPage)
assert.equal(detection.state, LoginState.Blocked, 'Should detect Blocked state')
assert.equal(detection.confidence, 'high', 'Should have high confidence')
@@ -213,7 +216,7 @@ test('detectState returns Unknown for ambiguous pages', async () => {
evaluate: () => Promise.resolve(50)
}
const detection = await LoginStateDetector.detectState(mockPage as any)
const detection = await LoginStateDetector.detectState(mockPage as MockPage)
assert.equal(detection.state, LoginState.Unknown, 'Should return Unknown for ambiguous pages')
assert.equal(detection.confidence, 'low', 'Should have low confidence')
@@ -231,7 +234,7 @@ test('detectState handles errors gracefully', async () => {
}
try {
await LoginStateDetector.detectState(mockPage as any)
await LoginStateDetector.detectState(mockPage as MockPage)
assert.fail('Should throw error')
} catch (e) {
assert.ok(e instanceof Error, 'Should throw Error instance')