@@ -4,9 +4,15 @@ import QueryBuilder from '@/QueryBuilder.vue';
44import App from '../components/App.vue' ;
55import QueryBuilderGroup from '@/QueryBuilderGroup.vue' ;
66import QueryBuilderRule from '@/QueryBuilderRule.vue' ;
7+ import { QueryBuilderConfig } from '@/types' ;
8+
9+ interface QueryBuilderTemplate {
10+ value : any ,
11+ config : QueryBuilderConfig ,
12+ }
713
814describe ( 'Test basic functionality of QueryBuilder.vue' , ( ) => {
9- const getTemplate = ( ) => ( {
15+ const getTemplate = ( ) : QueryBuilderTemplate => ( {
1016 value : null ,
1117 config : {
1218 operators : [
@@ -114,6 +120,41 @@ describe('Test basic functionality of QueryBuilder.vue', () => {
114120 } ) ;
115121 } ) ;
116122
123+ it ( 'makes use of an initial value\'s factory function' , ( ) => {
124+ const initialValue = jest . fn ( ( ) => 'Hello World' ) ;
125+
126+ const data = getTemplate ( ) ;
127+ data . config . rules = [
128+ {
129+ identifier : 'txt' ,
130+ name : 'Text Selection' ,
131+ component : Component ,
132+ initialValue,
133+ } ,
134+ ] ;
135+
136+ const app = mount ( App , {
137+ data ( ) {
138+ return data ;
139+ } ,
140+ } ) ;
141+ const wrapper = app . find ( QueryBuilder ) ;
142+
143+ // Assert rules are available
144+ const rules = wrapper . find ( '.query-builder-group__group-control select' ) . findAll ( 'option' ) ;
145+ const addRuleBtn = wrapper . find ( '.query-builder-group__rule-adding-button' ) ;
146+
147+ // Assert update has propagated with default value
148+ rules . at ( 1 ) . setSelected ( ) ;
149+ addRuleBtn . trigger ( 'click' ) ;
150+ expect ( wrapper . emittedByOrder ( ) ) . toHaveLength ( 1 ) ;
151+ expect ( wrapper . emittedByOrder ( ) [ 0 ] ) . toStrictEqual ( {
152+ name : 'input' ,
153+ args : [ { operatorIdentifier : 'and' , children : [ { identifier : 'txt' , value : 'Hello World' } ] } ] ,
154+ } ) ;
155+ expect ( initialValue ) . toHaveBeenCalled ( ) ;
156+ } ) ;
157+
117158 it ( 'deletes a rule' , ( ) => {
118159 const data = ( ) => ( {
119160 query : {
0 commit comments