ra-core
Version:
Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React
137 lines (122 loc) • 5.09 kB
text/typescript
import { checkHasDirtyFields } from './useFormIsDirty';
describe('useFormIsDirty', () => {
describe('checkHasDirtyFields', () => {
it('should return true if any field is dirty on simple forms', () => {
const dirtyFields = { name: true, age: false };
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
it('should return false if no field is dirty on simple forms', () => {
const dirtyFields = { name: false, age: false };
expect(checkHasDirtyFields(dirtyFields)).toBe(false);
});
it('should return true if any field is dirty on forms with nested fields', () => {
const dirtyFields = {
name: false,
age: false,
address: { street: true, city: false },
};
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
it('should return false if no field is dirty on forms with nested fields', () => {
const dirtyFields = {
name: false,
age: false,
address: { street: false, city: false },
};
expect(checkHasDirtyFields(dirtyFields)).toBe(false);
});
it('should return true if any field is dirty on forms with array of scalar fields', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [true, false],
};
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
it('should return false if no field is dirty on forms with array of scalar fields', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [false, false],
};
expect(checkHasDirtyFields(dirtyFields)).toBe(false);
});
it('should return true if any field is dirty on forms with array of objects', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [{ name: true }, { name: false }],
};
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
it('should return false if no field is dirty on forms with array of objects', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [{ name: false }, { name: false }],
};
expect(checkHasDirtyFields(dirtyFields)).toBe(false);
});
it('should return true if any field is dirty on forms with nested array of objects', () => {
const dirtyFields = {
name: false,
age: false,
address: {
street: false,
city: [{ name: true }, { name: false }],
},
};
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
it('should return false if no field is dirty on forms with nested array of objects', () => {
const dirtyFields = {
name: false,
age: false,
address: {
street: false,
city: [{ name: false }, { name: false }],
},
};
expect(checkHasDirtyFields(dirtyFields)).toBe(false);
});
// nested array of scalar values
it('should return true if any field is dirty on forms with nested array of scalar values', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [
{ name: false, tags: [true, true] },
{ name: false, tags: [false, false] },
],
};
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
it('should return false if no field is dirty on forms with nested array of scalar values', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [
{ name: false, tags: [false, false] },
{ name: false, tags: [false, false] },
],
};
expect(checkHasDirtyFields(dirtyFields)).toBe(false);
});
it('should return true when an array contains an empty object (new item)', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [{}], // empty object should be considered dirty
};
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
it('should return true when an array contains undefined entries (new item)', () => {
const dirtyFields = {
name: false,
age: false,
hobbies: [undefined], // undefined should be considered dirty
} as any;
expect(checkHasDirtyFields(dirtyFields)).toBe(true);
});
});
});