/**
* Internal dependencies
*/
import { buildTermsTree } from '../utils';
const list = [
{ id: 1, name: 'Apricots', parent: 0 },
{ id: 2, name: 'Clementine', parent: 0 },
{ id: 3, name: 'Elderberry', parent: 2 },
{ id: 4, name: 'Guava', parent: 2 },
{ id: 5, name: 'Lychee', parent: 3 },
{ id: 6, name: 'Mulberry', parent: 0 },
{ id: 7, name: 'Tamarind', parent: 5 },
];
describe( 'buildTermsTree', () => {
test( 'should return an empty array on empty input', () => {
const tree = buildTermsTree( [] );
expect( tree ).toEqual( [] );
} );
test( 'should return a flat array when there are no parent relationships', () => {
const tree = buildTermsTree( [
{ id: 1, name: 'Apricots', parent: 0 },
{ id: 2, name: 'Clementine', parent: 0 },
] );
expect( tree ).toEqual( [
{
id: 1,
name: 'Apricots',
parent: 0,
breadcrumbs: [],
children: [],
},
{
id: 2,
name: 'Clementine',
parent: 0,
breadcrumbs: [],
children: [],
},
] );
} );
test( 'should return a tree of items', () => {
const tree = buildTermsTree( list );
expect( tree ).toEqual( [
{
id: 1,
name: 'Apricots',
parent: 0,
breadcrumbs: [],
children: [],
},
{
id: 2,
name: 'Clementine',
parent: 0,
breadcrumbs: [],
children: [
{
id: 3,
name: 'Elderberry',
parent: 2,
breadcrumbs: [ 'Clementine' ],
children: [
{
id: 5,
name: 'Lychee',
parent: 3,
breadcrumbs: [ 'Clementine', 'Elderberry' ],
children: [
{
id: 7,
name: 'Tamarind',
parent: 5,
breadcrumbs: [
'Clementine',
'Elderberry',
'Lychee',
],
children: [],
},
],
},
],
},
{
id: 4,
name: 'Guava',
parent: 2,
breadcrumbs: [ 'Clementine' ],
children: [],
},
],
},
{
id: 6,
name: 'Mulberry',
parent: 0,
breadcrumbs: [],
children: [],
},
] );
} );
test( 'should return a tree of items, with orphan categories appended to the end', () => {
const filteredList = [
{ id: 1, name: 'Apricots', parent: 0 },
{ id: 2, name: 'Clementine', parent: 0 },
{ id: 4, name: 'Guava', parent: 2 },
{ id: 5, name: 'Lychee', parent: 3 },
{ id: 6, name: 'Mulberry', parent: 0 },
];
const tree = buildTermsTree( filteredList, list );
expect( tree ).toEqual( [
{
id: 1,
name: 'Apricots',
parent: 0,
breadcrumbs: [],
children: [],
},
{
id: 2,
name: 'Clementine',
parent: 0,
breadcrumbs: [],
children: [
{
id: 4,
name: 'Guava',
parent: 2,
breadcrumbs: [ 'Clementine' ],
children: [],
},
],
},
{
id: 6,
name: 'Mulberry',
parent: 0,
breadcrumbs: [],
children: [],
},
{
id: 5,
name: 'Lychee',
parent: 3,
breadcrumbs: [ 'Clementine', 'Elderberry' ],
children: [],
},
] );
} );
test( 'should return a tree of items, with orphan categories appended to the end, with children of thier own', () => {
const filteredList = [
{ id: 1, name: 'Apricots', parent: 0 },
{ id: 3, name: 'Elderberry', parent: 2 },
{ id: 4, name: 'Guava', parent: 2 },
{ id: 5, name: 'Lychee', parent: 3 },
{ id: 6, name: 'Mulberry', parent: 0 },
];
const tree = buildTermsTree( filteredList, list );
expect( tree ).toEqual( [
{
id: 1,
name: 'Apricots',
parent: 0,
breadcrumbs: [],
children: [],
},
{
id: 6,
name: 'Mulberry',
parent: 0,
breadcrumbs: [],
children: [],
},
{
id: 3,
name: 'Elderberry',
parent: 2,
breadcrumbs: [ 'Clementine' ],
children: [
{
id: 5,
name: 'Lychee',
parent: 3,
breadcrumbs: [ 'Clementine', 'Elderberry' ],
children: [],
},
],
},
{
id: 4,
name: 'Guava',
parent: 2,
breadcrumbs: [ 'Clementine' ],
children: [],
},
] );
} );
} );