mirror of
https://github.com/LightZirconite/Microsoft-Rewards-Bot.git
synced 2026-01-10 17:26:17 +00:00
- Extracted BuyModeHandler, DesktopFlow, MobileFlow, and SummaryReporter into separate modules for better organization and testability. - Enhanced type safety and added interfaces for various return types in Load, Logger, UserAgent, and flow modules. - Implemented comprehensive error handling and logging throughout the new modules. - Added unit tests for DesktopFlow, MobileFlow, and SummaryReporter to ensure functionality and correctness. - Updated existing utility functions to support new flow structures and improve code clarity.
81 lines
2.8 KiB
TypeScript
81 lines
2.8 KiB
TypeScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
|
|
/**
|
|
* SummaryReporter unit tests
|
|
* Validates reporting and notification logic
|
|
*/
|
|
|
|
test('SummaryReporter module exports correctly', async () => {
|
|
const { SummaryReporter } = await import('../../src/flows/SummaryReporter')
|
|
assert.ok(SummaryReporter, 'SummaryReporter should be exported')
|
|
assert.equal(typeof SummaryReporter, 'function', 'SummaryReporter should be a class constructor')
|
|
})
|
|
|
|
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'] }
|
|
]
|
|
|
|
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')
|
|
assert.equal(summary.accounts.length, 2, 'Should have 2 accounts')
|
|
})
|
|
|
|
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 }],
|
|
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')
|
|
assert.equal(typeof summary.successCount, 'number', 'successCount should be a number')
|
|
assert.ok(Array.isArray(summary.accounts), 'accounts should be an array')
|
|
})
|