@girders-elements/core
Version:
Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.
110 lines (103 loc) • 2.21 kB
JavaScript
import { fromJS } from 'immutable'
import * as zip from '..'
describe('Editing a Zipper', () => {
const organization = {
kind: 'pm',
name: 'alex',
children: [
{
kind: 'tc',
name: 'zdravko',
children: [
{
kind: 'tm',
name: 'emilija',
},
{
kind: 'tm',
name: 'filip',
},
],
},
{
kind: 'tc',
name: 'andon',
children: [
{
kind: 'tm',
name: 'blagoja',
},
{
kind: 'tm',
name: 'goran',
},
],
},
{
kind: 'tc',
name: 'ognen',
},
],
}
const createElementZipper = () =>
zip.elementZipper({
defaultChildPositions: 'children',
})(fromJS(organization))
it('can be done using conditions (zip.editCond)', () => {
// given
const elementZipper = createElementZipper()
// when
const result = zip.editCond(
[
[
item => item.get('name') === 'andon',
item => item.set('name', 'sikavica'),
],
['tm', item => item.update('name', name => `member-${name}`)],
],
elementZipper
)
// then
expect(result.value()).toEqualI(
fromJS({
kind: 'pm',
name: 'alex',
children: [
{
kind: 'tc',
name: 'zdravko',
children: [
{
kind: 'tm',
name: 'member-emilija', // changed
},
{
kind: 'tm',
name: 'member-filip', // changed
},
],
},
{
kind: 'tc',
name: 'sikavica', // changed
children: [
{
kind: 'tm',
name: 'member-blagoja', // changed
},
{
kind: 'tm',
name: 'member-goran', // changed
},
],
},
{
kind: 'tc',
name: 'ognen',
},
],
})
)
})
})