This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
|
||||
import { runOperatorPasswordReset } from './password-reset'
|
||||
|
||||
const environment = {
|
||||
SESSION_SECRET: 's'.repeat(32),
|
||||
PUBLIC_BASE_URL: 'https://runbook.example.test',
|
||||
}
|
||||
|
||||
describe('operator password reset command', () => {
|
||||
it('accepts only an email and emits exactly one reset URL line', async () => {
|
||||
const output = vi.fn()
|
||||
const issue = vi.fn(async () => ({
|
||||
resetUrl:
|
||||
'https://runbook.example.test/reset-password#token=secret-token',
|
||||
expiresAt: new Date('2026-07-27T12:30:00Z'),
|
||||
}))
|
||||
|
||||
await runOperatorPasswordReset(
|
||||
['owner@example.test'],
|
||||
environment,
|
||||
output,
|
||||
issue,
|
||||
)
|
||||
|
||||
expect(issue).toHaveBeenCalledWith({
|
||||
email: 'owner@example.test',
|
||||
publicBaseUrl: 'https://runbook.example.test',
|
||||
})
|
||||
expect(output).toHaveBeenCalledOnce()
|
||||
expect(output).toHaveBeenCalledWith(
|
||||
'https://runbook.example.test/reset-password#token=secret-token',
|
||||
)
|
||||
})
|
||||
|
||||
it('rejects a second argument instead of accepting a new password', async () => {
|
||||
const issue = vi.fn()
|
||||
await expect(
|
||||
runOperatorPasswordReset(
|
||||
['owner@example.test', 'new-password'],
|
||||
environment,
|
||||
vi.fn(),
|
||||
issue,
|
||||
),
|
||||
).rejects.toThrow('Usage:')
|
||||
expect(issue).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user