Skip to content

Commit d89f6c0

Browse files
committed
Add tests for new config types and utils
1 parent dfbe060 commit d89f6c0

File tree

9 files changed

+946
-37
lines changed

9 files changed

+946
-37
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ install:
2424
- yarn
2525
script:
2626
- yarn lint
27+
- yarn test
2728
- bundle exec rubocop
2829
- bundle exec rake test
2930
matrix:

package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,18 @@
4242
"eslint-config-airbnb": "^14.1.0",
4343
"eslint-plugin-import": "^2.2.0",
4444
"eslint-plugin-jsx-a11y": "^4.0.0",
45-
"eslint-plugin-react": "^6.10.0"
45+
"eslint-plugin-react": "^6.10.0",
46+
"jest": "^21.2.1"
47+
},
48+
"jest": {
49+
"testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$",
50+
"roots": ["<rootDir>/package"]
4651
},
4752
"peerDependencies": {
4853
"coffeescript": ">= 1.12.7 || >= 2.x"
4954
},
5055
"scripts": {
51-
"test": "echo \"Error: no test specified\" && exit 1",
56+
"test": "jest",
5257
"lint": "eslint {package,lib}/"
5358
},
5459
"repository": {
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/* global test expect */
2+
3+
const ConfigList = require('../config_list')
4+
5+
test('new', () => {
6+
expect(new ConfigList()).toBeInstanceOf(ConfigList)
7+
})
8+
9+
test('set', () => {
10+
const list = new ConfigList()
11+
expect(list.set('key', 'value')).toEqual([{ key: 'key', value: 'value' }])
12+
})
13+
14+
test('get', () => {
15+
const list = new ConfigList()
16+
list.set('key', 'value')
17+
expect(list.get('key')).toEqual('value')
18+
})
19+
20+
test('append', () => {
21+
const list = new ConfigList()
22+
list.set('key', 'value')
23+
expect(list.append('key1', 'value1')).toEqual([
24+
{ key: 'key', value: 'value' },
25+
{ key: 'key1', value: 'value1' }
26+
])
27+
})
28+
29+
test('prepend', () => {
30+
const list = new ConfigList()
31+
list.set('key', 'value')
32+
expect(list.prepend('key1', 'value1')).toEqual([
33+
{ key: 'key1', value: 'value1' },
34+
{ key: 'key', value: 'value' }
35+
])
36+
})
37+
38+
test('insert without position', () => {
39+
const list = new ConfigList()
40+
list.set('key', 'value')
41+
expect(list.insert('key1', 'value1')).toEqual([
42+
{ key: 'key', value: 'value' },
43+
{ key: 'key1', value: 'value1' }
44+
])
45+
})
46+
47+
test('insert before an item', () => {
48+
const list = new ConfigList()
49+
list.set('key', 'value')
50+
list.set('key1', 'value1')
51+
expect(list.insert('key2', 'value2', { before: 'key' })).toEqual([
52+
{ key: 'key2', value: 'value2' },
53+
{ key: 'key', value: 'value' },
54+
{ key: 'key1', value: 'value1' }
55+
])
56+
})
57+
58+
test('insert after an item', () => {
59+
const list = new ConfigList()
60+
list.set('key', 'value')
61+
list.set('key1', 'value1')
62+
expect(list.insert('key2', 'value2', { after: 'key' })).toEqual([
63+
{ key: 'key', value: 'value' },
64+
{ key: 'key2', value: 'value2' },
65+
{ key: 'key1', value: 'value1' }
66+
])
67+
})
68+
69+
test('delete', () => {
70+
const list = new ConfigList()
71+
list.set('key', 'value')
72+
list.set('key1', 'value1')
73+
expect(list.delete('key')).toEqual([{ key: 'key1', value: 'value1' }])
74+
})
75+
76+
test('getIndex', () => {
77+
const list = new ConfigList()
78+
list.set('key', 'value')
79+
list.set('key1', 'value1')
80+
expect(list.getIndex('key')).toEqual(0)
81+
expect(list.getIndex('key2')).toEqual(-1)
82+
expect(() => list.getIndex('key2', true)).toThrow('Item key2 not found')
83+
})
84+
85+
test('values', () => {
86+
const list = new ConfigList()
87+
list.set('key', 'value')
88+
list.set('key1', 'value1')
89+
expect(list.values()).toEqual(['value', 'value1'])
90+
})
91+
92+
test('keys', () => {
93+
const list = new ConfigList()
94+
list.set('key', 'value')
95+
list.set('key1', 'value1')
96+
expect(list.keys()).toEqual(['key', 'key1'])
97+
})
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/* global test expect */
2+
3+
const ConfigObject = require('../config_object')
4+
5+
test('new', () => {
6+
expect(new ConfigObject()).toBeInstanceOf(ConfigObject)
7+
})
8+
9+
test('set', () => {
10+
const object = new ConfigObject()
11+
expect(object.set('key', 'value')).toEqual({ key: 'value' })
12+
})
13+
14+
test('get', () => {
15+
const object = new ConfigObject()
16+
object.set('key', 'value')
17+
object.set('key1', 'value1')
18+
expect(object.get('key')).toEqual('value')
19+
})
20+
21+
test('delete', () => {
22+
const object = new ConfigObject()
23+
object.set('key', { key1: 'value' })
24+
expect(object.delete('key.key1')).toEqual({ key: {} })
25+
expect(object.delete('key')).toEqual({})
26+
})
27+
28+
test('toObject', () => {
29+
const object = new ConfigObject()
30+
object.set('key', 'value')
31+
object.set('key1', 'value1')
32+
expect(object.toObject()).toEqual({ key: 'value', key1: 'value1' })
33+
})
34+
35+
test('merge', () => {
36+
const object = new ConfigObject()
37+
object.set('foo', {})
38+
expect(object.merge({ key: 'foo', value: 'bar' })).toEqual(
39+
{ foo: {}, key: 'foo', value: 'bar' }
40+
)
41+
})

package/config_types/config_list.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ class ConfigList extends Array {
2121
}
2222

2323
insert(key, value, pos = {}) {
24-
const currentIndex = this.getIndex(key)
25-
let newIndex = this.getIndex(pos.before || pos.after)
24+
if (!(pos.before || pos.after)) return this.append(key, value)
2625

26+
const currentIndex = this.getIndex(key)
2727
if (currentIndex >= 0) this.splice(currentIndex, 1)
28+
29+
let newIndex = this.getIndex(pos.before || pos.after)
2830
if (pos.after) newIndex += 1
29-
if (!(pos.before || pos.after)) newIndex = this.length
3031

3132
this.splice(newIndex, 0, { key, value })
3233
return this
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/* global test expect */
2+
3+
const deepAssign = require('../deep_assign')
4+
5+
test('deep assign property', () => {
6+
const object = { foo: { bar: { } } }
7+
const path = 'foo.bar'
8+
const value = { x: 1, y: 2 }
9+
const expectation = { foo: { bar: { x: 1, y: 2 } } }
10+
expect(deepAssign(object, path, value)).toEqual(expectation)
11+
})

package/utils/__tests__/deep_merge.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/* global test expect */
2+
3+
const deepMerge = require('../deep_merge')
4+
5+
test('deep merge objects together', () => {
6+
const object1 = { foo: { bar: [1, 2, 3], z: 1 }, x: 0 }
7+
const object2 = { foo: { bar: ['x', 'y'] }, x: 1, y: 2 }
8+
const expectation = { foo: { bar: [1, 2, 3, 'x', 'y'], z: 1 }, x: 1, y: 2 }
9+
expect(deepMerge(object1, object2)).toEqual(expectation)
10+
})

package/utils/__tests__/objectify.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/* global test expect */
2+
3+
const objectify = require('../objectify')
4+
5+
test('Get object from a string path', () => {
6+
const object = { foo: { bar: { x: 1 } } }
7+
expect(objectify('foo.bar', object)).toEqual({ x: 1 })
8+
expect(objectify('some.bar', object)).toEqual(undefined)
9+
})

0 commit comments

Comments
 (0)