59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { mount } from '@vue/test-utils'
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import ChangePasswordSection from '../ChangePasswordSection.vue'
|
|
|
|
const { changePassword } = vi.hoisted(() => ({
|
|
changePassword: vi.fn(),
|
|
}))
|
|
|
|
vi.mock('vue-i18n', () => ({
|
|
useI18n: () => ({ t: (key: string) => key }),
|
|
}))
|
|
|
|
vi.mock('@/api/rpc-client', () => ({
|
|
rpcClient: {
|
|
changePassword,
|
|
},
|
|
}))
|
|
|
|
vi.mock('@/composables/useModalKeyboard', () => ({
|
|
useModalKeyboard: vi.fn(),
|
|
}))
|
|
|
|
describe('ChangePasswordSection', () => {
|
|
beforeEach(() => {
|
|
changePassword.mockReset()
|
|
})
|
|
|
|
it('shows a warning when SSH update fails after web password update succeeds', async () => {
|
|
changePassword.mockResolvedValueOnce({
|
|
success: true,
|
|
ssh_updated: false,
|
|
ssh_error: 'sudo unavailable',
|
|
})
|
|
const wrapper = mount(ChangePasswordSection, {
|
|
global: {
|
|
stubs: {
|
|
Teleport: true,
|
|
},
|
|
},
|
|
})
|
|
|
|
await wrapper.find('button').trigger('click')
|
|
const inputs = wrapper.findAll('input')
|
|
await inputs[0]!.setValue('password123')
|
|
await inputs[1]!.setValue('MyP@ssw0rd!123')
|
|
await inputs[2]!.setValue('MyP@ssw0rd!123')
|
|
await wrapper.find('form').trigger('submit.prevent')
|
|
|
|
expect(changePassword).toHaveBeenCalledWith({
|
|
currentPassword: 'password123',
|
|
newPassword: 'MyP@ssw0rd!123',
|
|
alsoChangeSsh: true,
|
|
})
|
|
expect(wrapper.text()).toContain('settings.passwordUpdatedSuccess')
|
|
expect(wrapper.text()).toContain('settings.passwordUpdatedSshFailed sudo unavailable')
|
|
expect(wrapper.text()).not.toContain('settings.passwordChangeFailed')
|
|
})
|
|
})
|