koel/resources/assets/js/components/user/EditUserForm.spec.ts

44 lines
1.4 KiB
TypeScript
Raw Normal View History

2022-07-22 16:43:32 +00:00
import { ref } from 'vue'
import { expect, it } from 'vitest'
import factory from '@/__tests__/factory'
import UnitTestCase from '@/__tests__/UnitTestCase'
import { ModalContextKey } from '@/symbols'
import { screen, waitFor } from '@testing-library/vue'
2022-07-22 16:43:32 +00:00
import { userStore } from '@/stores'
import { MessageToasterStub } from '@/__tests__/stubs'
import EditUserForm from './EditUserForm.vue'
2022-07-22 16:43:32 +00:00
new class extends UnitTestCase {
protected test () {
it('edits a user', async () => {
const updateMock = this.mock(userStore, 'update')
const alertMock = this.mock(MessageToasterStub.value, 'success')
2022-07-22 16:43:32 +00:00
const user = ref(factory<User>('user', { name: 'John Doe' }))
this.render(EditUserForm, {
2022-07-22 16:43:32 +00:00
global: {
provide: {
[<symbol>ModalContextKey]: [ref({ user })]
2022-07-22 16:43:32 +00:00
}
}
})
await this.type(screen.getByRole('textbox', { name: 'Name' }), 'Jane Doe')
await this.type(screen.getByLabelText('Password'), 'new-password-duck')
await this.user.click(screen.getByRole('button', { name: 'Update' }))
2022-07-22 16:43:32 +00:00
await waitFor(() => {
expect(updateMock).toHaveBeenCalledWith(user.value, {
name: 'Jane Doe',
email: user.value.email,
is_admin: user.value.is_admin,
password: 'new-password-duck'
})
expect(alertMock).toHaveBeenCalledWith('User profile updated.')
2022-07-22 16:43:32 +00:00
})
})
}
}