1
+ import { describe , it } from "./_describe.ts"
2
+ import { pathOr } from '../mod.ts'
3
+ import { eq } from "./utils/utils.ts"
4
+
5
+ describe ( 'pathOr' , ( ) => {
6
+
7
+ let deepObject = { a : { b : { c : 'c' } } , falseVal : false , nullVal : null , undefinedVal : undefined , arrayVal : [ 'arr' ] }
8
+
9
+ it ( 'should take a path and an object and returns the value at the path or the default value' , ( ) => {
10
+ let obj = {
11
+ a : {
12
+ b : {
13
+ c : 100 ,
14
+ d : 200
15
+ } ,
16
+ e : {
17
+ f : [ 100 , 101 , 102 ] ,
18
+ g : 'G'
19
+ } ,
20
+ h : 'H'
21
+ } ,
22
+ i : 'I' ,
23
+ j : [ 'J' ]
24
+ }
25
+ eq ( pathOr ( 'Unknown' , [ 'a' , 'b' , 'c' ] , obj ) , 100 )
26
+ eq ( pathOr ( 'Unknown' , [ ] , obj ) , obj )
27
+ eq ( pathOr ( 'Unknown' , [ 'a' , 'e' , 'f' , 1 ] , obj ) , 101 )
28
+ eq ( pathOr ( 'Unknown' , [ 'j' , 0 ] , obj ) , 'J' )
29
+ eq ( pathOr ( 'Unknown' , [ 'j' , 1 ] , obj ) , 'Unknown' )
30
+ eq ( pathOr ( 'Unknown' , [ 'a' , 'b' , 'c' ] , null ) , 'Unknown' )
31
+ } )
32
+
33
+ it ( "should get a deep property's value from objects" , ( ) => {
34
+ eq ( pathOr ( 'Unknown' , [ 'a' , 'b' , 'c' ] , deepObject ) , 'c' )
35
+ eq ( pathOr ( 'Unknown' , [ 'a' ] , deepObject ) , deepObject . a )
36
+ } )
37
+
38
+ it ( 'should return the default value for items not found' , ( ) => {
39
+ eq ( pathOr ( 'Unknown' , [ 'a' , 'b' , 'foo' ] , deepObject ) , 'Unknown' )
40
+ eq ( pathOr ( 'Unknown' , [ 'bar' ] , deepObject ) , 'Unknown' )
41
+ } )
42
+
43
+ it ( 'should return the default value for null/undefined' , ( ) => {
44
+ eq ( pathOr ( 'Unknown' , [ 'toString' ] , null ) , 'Unknown' )
45
+ eq ( pathOr ( 'Unknown' , [ 'toString' ] , undefined ) , 'Unknown' )
46
+ } )
47
+
48
+ it ( 'should work with falsy items' , ( ) => {
49
+ eq ( pathOr ( 'Unknown' , [ 'toString' ] , false ) , Boolean . prototype . toString )
50
+ } )
51
+
52
+ } )
0 commit comments