oolong
Version:
Utilities for objects. Simple, tasteful and plentiful. Supports inherited properties.
71 lines (59 loc) • 2.71 kB
JavaScript
var O = require("../..")
describe("Oolong.pickDeep", function() {
it("must return a new object with given key", function() {
var obj = O.pickDeep({name: "Alice", age: 42, height: 100}, "name")
obj.must.eql({name: "Alice"})
})
it("must return a new object with given 2nd level key", function() {
var person = {name: "Alice", address: {country: "UK", street: "Downing"}}
var obj = O.pickDeep(person, "name", ["address", "country"])
obj.must.eql({name: "Alice", address: {country: "UK"}})
})
it("must return a new object with given 3rd level key", function() {
var children = {Bob: {name: "Bob", age: "13"}}
var person = {name: "Alice", children: children}
var obj = O.pickDeep(person, "name", ["children", "Bob", "name"])
obj.must.eql({name: "Alice", children: {Bob: {name: "Bob"}}})
})
it("must return a new object with given keys", function() {
var obj = O.pickDeep({name: "Alice", age: 42, height: 100}, "name", "age")
obj.must.eql({name: "Alice", age: 42})
})
it("must return a new object with given 2nd level keys", function() {
var address = {country: "UK", street: "Downing", apartment: 10}
var person = {name: "Alice", address: address}
var obj = O.pickDeep(person,
"name",
["address", "country"],
["address", "street"])
obj.must.eql({name: "Alice", address: {country: "UK", street: "Downing"}})
})
it("must return an empty object given no keys", function() {
O.pickDeep({name: "Alice", age: 42}).must.eql({})
})
it("must return property even if properties inherited", function() {
var person = Object.create({name: "Alice", height: 100})
person.age = 42
O.pickDeep(person, "name", "age").must.eql({name: "Alice", age: 42})
})
it("must not change the given object", function() {
var obj = {name: "Alice", age: 42}
O.pickDeep(obj, "name").must.not.equal(obj)
obj.must.eql({name: "Alice", age: 42})
})
it("must not return non-existent keys", function() {
var obj = O.pickDeep({name: "Alice", age: 42}, "name", "height")
obj.must.eql({name: "Alice"})
})
it("must not return non-existent 2nd level keys", function() {
var person = {name: "Alice", address: {country: "UK", street: "Downing"}}
var obj = O.pickDeep(person, "name", ["address", "apartment"])
obj.must.eql({name: "Alice"})
})
it("must not return non-existent 3rd level keys", function() {
var children = {Bob: {name: "Bob", age: "13"}}
var person = {name: "Alice", children: children}
var obj = O.pickDeep(person, "name", ["children", "Bob", "height"])
obj.must.eql({name: "Alice"})
})
})