mirror of https://github.com/rancher/dashboard.git
136 lines
3.5 KiB
TypeScript
136 lines
3.5 KiB
TypeScript
import { ref } from 'vue';
|
|
import { useLabeledFormElement } from './useLabeledFormElement';
|
|
|
|
describe('useLabeledFormElement', () => {
|
|
it('should set raised to true when focused', () => {
|
|
const props = {
|
|
mode: 'edit',
|
|
value: '',
|
|
required: true,
|
|
disabled: false,
|
|
rules: [],
|
|
};
|
|
|
|
const emit = jest.fn();
|
|
const { onFocusLabeled, onBlurLabeled, raised } = useLabeledFormElement(props, emit);
|
|
|
|
onFocusLabeled();
|
|
expect(raised.value).toBe(true);
|
|
|
|
onBlurLabeled();
|
|
expect(raised.value).toBe(false);
|
|
});
|
|
|
|
it('should set focused to true when focused', () => {
|
|
const props = {
|
|
mode: 'edit',
|
|
value: '',
|
|
required: true,
|
|
disabled: false,
|
|
rules: [],
|
|
};
|
|
|
|
const emit = jest.fn();
|
|
const { onFocusLabeled, onBlurLabeled, focused } = useLabeledFormElement(props, emit);
|
|
|
|
onFocusLabeled();
|
|
expect(focused.value).toBe(true);
|
|
|
|
onBlurLabeled();
|
|
expect(focused.value).toBe(false);
|
|
});
|
|
|
|
it('should set blurred to current timestamp when blurred', () => {
|
|
const props = {
|
|
mode: 'edit',
|
|
value: '',
|
|
required: true,
|
|
disabled: false,
|
|
rules: [],
|
|
};
|
|
|
|
const emit = jest.fn();
|
|
const { onBlurLabeled, blurred } = useLabeledFormElement(props, emit);
|
|
|
|
onBlurLabeled();
|
|
expect(blurred.value).toBeTruthy();
|
|
});
|
|
|
|
it('should compute isDisabled correctly', () => {
|
|
const props = ref({
|
|
mode: 'edit',
|
|
value: '',
|
|
required: true,
|
|
disabled: false,
|
|
rules: [],
|
|
});
|
|
|
|
const emit = jest.fn();
|
|
const { isDisabled } = useLabeledFormElement(props.value, emit);
|
|
|
|
expect(isDisabled.value).toBe(false);
|
|
|
|
props.value.disabled = true;
|
|
expect(isDisabled.value).toBe(true);
|
|
|
|
props.value.mode = 'view';
|
|
expect(isDisabled.value).toBe(true);
|
|
});
|
|
|
|
it('should compute validationMessage correctly for required field', () => {
|
|
const props = ref({
|
|
mode: 'edit',
|
|
value: '',
|
|
required: true,
|
|
disabled: false,
|
|
rules: [
|
|
(value: string[]) => (value.length < 5 ? 'This field is required' : undefined),
|
|
],
|
|
});
|
|
|
|
const emit = jest.fn();
|
|
const { validationMessage, onBlurLabeled } = useLabeledFormElement(props.value, emit);
|
|
|
|
onBlurLabeled();
|
|
expect(validationMessage.value).toBe('This field is required');
|
|
});
|
|
|
|
it('should compute validationMessage correctly for custom rules', () => {
|
|
const props = ref({
|
|
mode: 'edit',
|
|
value: 'test',
|
|
required: false,
|
|
disabled: false,
|
|
rules: [
|
|
(value: string[]) => (value.length < 5 ? 'Value must be at least 5 characters long' : undefined),
|
|
(value: string[]) => (value.includes('test') ? 'Value cannot contain the word "test"' : undefined),
|
|
],
|
|
});
|
|
|
|
const emit = jest.fn();
|
|
const { validationMessage, onBlurLabeled } = useLabeledFormElement(props.value, emit);
|
|
|
|
onBlurLabeled();
|
|
expect(validationMessage.value).toBe('Value must be at least 5 characters long, Value cannot contain the word "test"');
|
|
});
|
|
|
|
it('should compute requiredField correctly', () => {
|
|
const props = ref({
|
|
mode: 'edit',
|
|
value: '',
|
|
required: true,
|
|
disabled: false,
|
|
rules: [],
|
|
});
|
|
|
|
const emit = jest.fn();
|
|
const { requiredField } = useLabeledFormElement(props.value, emit);
|
|
|
|
expect(requiredField.value).toBe(true);
|
|
|
|
// When the field is not required, requiredField should be false
|
|
props.value.required = false;
|
|
expect(requiredField.value).toBe(false);
|
|
});
|
|
});
|