apostrophe
Version:
The Apostrophe Content Management System.
166 lines (158 loc) • 4.85 kB
JavaScript
const t = require('../test-lib/test.js');
const assert = require('assert');
describe('Schema - follow ancestor fields', function() {
let apos;
this.timeout(t.timeout);
this.slow(2000);
beforeEach(async function() {
return t.destroy(apos);
});
after(async function() {
return t.destroy(apos);
});
it('should follow a parent field in array and object', async function() {
apos = await t.create({
root: module,
modules: {
household: {
extend: '@apostrophecms/piece-type',
options: {
alias: 'household'
},
fields: {
add: {
petPreference: {
type: 'select',
label: 'Pet Preference',
choices: [
{
value: 'cats',
label: 'Cats'
},
{
value: 'dogs',
label: 'Dogs'
}
],
required: true
},
pets: {
type: 'array',
label: 'Pets',
fields: {
add: {
name: {
type: 'string',
label: 'Name',
// Follow one level up
following: [ '<petPreference' ]
}
}
}
},
favoritePet: {
type: 'object',
label: 'Favorite Pet',
fields: {
add: {
name: {
type: 'string',
label: 'Name',
// Follow one level up
following: [ '<petPreference' ]
}
}
}
}
}
}
}
}
});
const schema = apos.modules.household.schema;
const petField = schema.find(field => field.name === 'pets');
const favPetField = schema.find(field => field.name === 'favoritePet');
assert(petField);
assert.deepEqual(petField.following, [ 'petPreference' ]);
assert(favPetField);
assert.deepEqual(favPetField.following, [ 'petPreference' ]);
});
it('should follow a grand parent field in array and object', async function() {
apos = await t.create({
root: module,
modules: {
household: {
extend: '@apostrophecms/piece-type',
options: {
alias: 'household'
},
fields: {
add: {
petPreference: {
type: 'select',
label: 'Pet Preference',
choices: [
{
value: 'cats',
label: 'Cats'
},
{
value: 'dogs',
label: 'Dogs'
}
],
required: true
},
rooms: {
type: 'array',
label: 'Rooms',
fields: {
add: {
pets: {
type: 'array',
label: 'Pets',
fields: {
add: {
name: {
type: 'string',
label: 'Name',
// Follow two levels up
following: [ '<<petPreference' ]
}
}
}
},
favoritePet: {
type: 'object',
label: 'Favorite Pet',
fields: {
add: {
name: {
type: 'string',
label: 'Name',
// Follow two levels up
following: [ '<<petPreference' ]
}
}
}
}
}
}
}
}
}
}
}
});
const schema = apos.modules.household.schema;
const rooms = schema.find(field => field.name === 'rooms');
assert(rooms);
assert.deepEqual(rooms.following, [ 'petPreference' ]);
const petField = rooms.schema.find(field => field.name === 'pets');
const favPetField = rooms.schema.find(field => field.name === 'favoritePet');
assert(petField);
assert.deepEqual(petField.following, [ '<petPreference' ]);
assert(favPetField);
assert.deepEqual(favPetField.following, [ '<petPreference' ]);
});
});