@skele/core
Version:
Core package of the Skele framework. Element definitions, registrations and traversal.
142 lines (130 loc) • 3 kB
JavaScript
'use strict'
import * as I from 'immutable'
import * as R from 'ramda'
import { propNames, data } from '../../'
import * as zip from '../'
import * as skeleZip from '../skele'
describe('selectors', () => {
const nba = zip.elementZipper({})(
I.fromJS({
kind: 'league',
[propNames.children]: ['teams', 'stats'],
teams: [
{
kind: 'team',
name: 'lakers',
[propNames.children]: 'players',
players: [
{
kind: 'player',
name: 'lebron',
},
{
kind: 'player',
name: 'kuzma',
},
{
kind: 'player',
name: 'lonzo',
},
],
},
{
kind: 'team',
name: 'dallas',
[propNames.children]: 'players',
players: [
{
kind: 'player',
name: 'luka',
},
{
kind: 'player',
name: 'dirk',
},
{
kind: 'player',
name: 'jordan',
},
],
},
{
kind: 'team',
name: 'warriors',
[propNames.children]: 'players',
players: [
{
kind: 'player',
name: 'curry',
},
{
kind: 'player',
name: 'kd',
},
{
kind: 'player',
name: 'green',
},
],
},
],
stats: [
{
kind: 'stat',
name: 'reb',
},
{
kind: 'stat',
name: 'ass',
},
{
kind: 'stat',
name: 'poi',
},
],
})
)
describe('skele.childrenAt', () => {
test('w/o key', () => {
const elements = [
...data.flow(
nba,
skeleZip.childrenAt(null)
),
]
expect(elements.length).toBe(6)
const teams = R.reduce(
(acc, el) => (zip.ofKind('team', el) ? acc.push(el) && acc : acc),
[],
elements
)
expect(teams.length).toBe(3)
expect(zip.node(teams[0]).get('name')).toBe('lakers')
const stats = R.reduce(
(acc, el) => (zip.ofKind('stat', el) ? acc.push(el) && acc : acc),
[],
elements
)
expect(stats.length).toBe(3)
expect(zip.node(stats[2]).get('name')).toBe('poi')
})
test('w/ key', () => {
const teams = [
...data.flow(
nba,
skeleZip.childrenAt('teams')
),
]
expect(teams.length).toBe(3)
expect(zip.node(teams[1]).get('name')).toBe('dallas')
const stats = [
...data.flow(
nba,
skeleZip.childrenAt('stats')
),
]
expect(stats.length).toBe(3)
expect(zip.node(stats[1]).get('name')).toBe('ass')
})
})
})