1
+ import { assert , expect } from 'chai' ;
2
+ import { buildFilter } from '../buildFilter' ;
3
+ import { ParserOptions , Props , PropItem } from '../parser' ;
4
+
5
+ function createProp ( name : string , required : boolean = false , defaultValue : any = undefined ,
6
+ description : string = '' , type = { name : 'string' } ) : PropItem {
7
+ return {
8
+ name,
9
+ type,
10
+ required,
11
+ defaultValue,
12
+ description
13
+ }
14
+ }
15
+
16
+ describe ( 'buildFilter' , ( ) => {
17
+
18
+ describe ( 'default behaviour' , ( ) => {
19
+ it ( 'should skip "children" property if no description is set' , ( ) => {
20
+ const prop1 = createProp ( 'prop1' , false , undefined , 'prop1 description' ) ;
21
+ const prop2 = createProp ( 'prop2' , false , undefined , 'prop2 description' ) ;
22
+ const children = createProp ( 'children' , false , undefined , '' ) ;
23
+ const opts : ParserOptions = { } ;
24
+ const filterFn = buildFilter ( opts ) ;
25
+ expect ( [ prop1 , prop2 , children ] . filter ( ( prop ) => filterFn ( prop , { name : prop . name } ) ) ) . to . eql ( [ prop1 , prop2 ] ) ;
26
+ } ) ;
27
+ it ( 'should not skip "children" property if description is set' , ( ) => {
28
+ const prop1 = createProp ( 'prop1' , false , undefined , 'prop1 description' ) ;
29
+ const prop2 = createProp ( 'prop2' , false , undefined , 'prop2 description' ) ;
30
+ const children = createProp ( 'children' , false , undefined , 'children description' ) ;
31
+ const opts : ParserOptions = { } ;
32
+ const filterFn = buildFilter ( opts ) ;
33
+ expect ( [ prop1 , prop2 , children ] . filter ( ( prop ) => filterFn ( prop , { name : prop . name } ) ) ) . to . eql ( [ prop1 , prop2 , children ] ) ;
34
+ } ) ;
35
+ } ) ;
36
+
37
+ describe ( 'static prop filter' , ( ) => {
38
+
39
+ describe ( 'skipPropsWithName' , ( ) => {
40
+ it ( 'should skip single prop by name' , ( ) => {
41
+ const prop1 = createProp ( 'prop1' , false , undefined , 'prop1 description' ) ;
42
+ const prop2 = createProp ( 'prop2' , false , undefined , 'prop2 description' ) ;
43
+ const opts : ParserOptions = {
44
+ propFilter : { skipPropsWithName : 'prop1' }
45
+ } ;
46
+ const filterFn = buildFilter ( opts ) ;
47
+ expect ( [ prop1 , prop2 ] . filter ( ( prop ) => filterFn ( prop , { name : prop . name } ) ) ) . to . eql ( [ prop2 ] ) ;
48
+ } ) ;
49
+ it ( 'should skip multiple props by name' , ( ) => {
50
+ const prop1 = createProp ( 'prop1' , false , undefined , 'prop1 description' ) ;
51
+ const prop2 = createProp ( 'prop2' , false , undefined , 'prop2 description' ) ;
52
+ const prop3 = createProp ( 'prop3' , false , undefined , 'prop3 description' ) ;
53
+ const opts : ParserOptions = {
54
+ propFilter : { skipPropsWithName : [ 'prop1' , 'prop3' ] }
55
+ } ;
56
+ const filterFn = buildFilter ( opts ) ;
57
+ expect ( [ prop1 , prop2 , prop3 ] . filter ( ( prop ) => filterFn ( prop , { name : prop . name } ) ) ) . to . eql ( [ prop2 ] ) ;
58
+ } ) ;
59
+ } ) ;
60
+
61
+ describe ( 'skipPropsWithoutDoc' , ( ) => {
62
+ it ( 'should skip children props with no documentation' , ( ) => {
63
+ const prop1 = createProp ( 'prop1' , false , undefined , 'prop1 description' ) ;
64
+ const prop2 = createProp ( 'prop2' , false , undefined , '' ) ;
65
+ const opts : ParserOptions = {
66
+ propFilter : { skipPropsWithoutDoc : true }
67
+ } ;
68
+ const filterFn = buildFilter ( opts ) ;
69
+ expect ( [ prop1 , prop2 ] . filter ( ( prop ) => filterFn ( prop , { name : prop . name } ) ) ) . to . eql ( [ prop1 ] ) ;
70
+ } ) ;
71
+ } ) ;
72
+
73
+ } ) ;
74
+
75
+ describe ( 'dynamic prop filter' , ( ) => {
76
+ it ( 'should skip props based on dynamic filter rule' , ( ) => {
77
+ const prop1 = createProp ( 'foo' , false , undefined , 'foo description' ) ;
78
+ const prop2 = createProp ( 'bar' , false , undefined , 'bar description' ) ;
79
+ const prop3 = createProp ( 'foobar' , false , undefined , 'foobar description' ) ;
80
+ const opts : ParserOptions = {
81
+ propFilter : ( prop , component ) => prop . name . indexOf ( 'foo' ) === - 1
82
+ } ;
83
+ const filterFn = buildFilter ( opts ) ;
84
+ expect ( [ prop1 , prop2 , prop3 ] . filter ( ( prop ) => filterFn ( prop , { name : prop . name } ) ) ) . to . eql ( [ prop2 ] ) ;
85
+ } ) ;
86
+
87
+ it ( 'should get be possible to filter by component name' , ( ) => {
88
+ const prop1 = createProp ( 'foo' , false , undefined , 'foo description' ) ;
89
+ const prop2 = createProp ( 'bar' , false , undefined , 'bar description' ) ;
90
+ const prop3 = createProp ( 'foobar' , false , undefined , 'foobar description' ) ;
91
+ const opts : ParserOptions = {
92
+ propFilter : ( prop , component ) => component . name . indexOf ( 'BAR' ) === - 1
93
+ } ;
94
+ const filterFn = buildFilter ( opts ) ;
95
+ expect ( [ prop1 , prop2 , prop3 ] . filter ( ( prop ) => filterFn ( prop , { name : prop . name . toUpperCase ( ) } ) ) ) . to . eql ( [ prop1 ] ) ;
96
+ } ) ;
97
+ } ) ;
98
+
99
+ } ) ;
0 commit comments