@@ -12,6 +12,7 @@ import {
1212import { Observable , of } from 'rxjs' ;
1313import { Injectable } from '@angular/core' ;
1414import { DynamicInputModel } from '../model/input/dynamic-input.model' ;
15+ import { DynamicFormGroupModel } from '../model/form-group/dynamic-form-group.model' ;
1516
1617@Injectable ( )
1718class TestProvider implements DynamicFormControlListDataProvider , DynamicFormControlOptionDataProvider {
@@ -69,8 +70,8 @@ describe("DynamicFormDataService test suite", () => {
6970 service : TestProvider
7071 }
7172 } ) ,
72- invalidProvider : DynamicInputModel = new DynamicInputModel ( {
73- id : "testInput3 " ,
73+ invalidListProvider : DynamicInputModel = new DynamicInputModel ( {
74+ id : "invalidListProvider " ,
7475 list : [ 'item-1' , 'item-2' , 'item-3' ] ,
7576 value : "item-1" ,
7677 dataProvider : {
@@ -79,7 +80,54 @@ describe("DynamicFormDataService test suite", () => {
7980 } ,
8081 service : InvalidTestProvider ,
8182 }
82- } )
83+ } ) ,
84+ invalidOptionProvider : DynamicSelectModel < any > = new DynamicSelectModel ( {
85+ id : "invalidOptionProvider" ,
86+ options : [ { value : "option-1" } , { value : "option-2" } , { value : "option-3" } ] ,
87+ value : "option-1" ,
88+ dataProvider : {
89+ relation : {
90+ id : 'testInput'
91+ } ,
92+ service : InvalidTestProvider ,
93+ }
94+ } ) ,
95+ referenceInvalidControl : DynamicInputModel = new DynamicInputModel ( {
96+ id : "referenceInvalidControl" ,
97+ list : [ 'item-1' , 'item-2' , 'item-3' ] ,
98+ value : "item-1" ,
99+ dataProvider : {
100+ relation : {
101+ id : 'not-an-id'
102+ } ,
103+ service : TestProvider ,
104+ }
105+ } ) ,
106+ groupModel = new DynamicFormGroupModel ( {
107+ id : 'test' ,
108+ group : [
109+ new DynamicRadioGroupModel ( {
110+ id : "testRootRadioGroup" ,
111+ options : [ { value : "option-1" } , { value : "option-2" } , { value : "option-3" } ] ,
112+ value : "option-1" ,
113+ dataProvider : {
114+ relation : {
115+ id : 'testInput'
116+ } ,
117+ service : TestProvider
118+ }
119+ } ) ,
120+ ]
121+ } ) ,
122+ groupInputTest = new DynamicInputModel ( {
123+ id : "testInput" ,
124+ dataProvider : {
125+ relation : {
126+ rootPath : 'test.testRootRadioGroup'
127+ } ,
128+ service : TestProvider ,
129+ }
130+ } )
83131 ;
84132
85133 beforeEach ( ( ) => {
@@ -100,7 +148,9 @@ describe("DynamicFormDataService test suite", () => {
100148 model ,
101149 select ,
102150 radio ,
103- invalidProvider
151+ invalidListProvider ,
152+ invalidOptionProvider ,
153+ groupModel
104154 ] ) ;
105155 } ) ) ;
106156
@@ -138,12 +188,33 @@ describe("DynamicFormDataService test suite", () => {
138188 radio . options$ . subscribe ( ( options ) => expect ( options [ 0 ] . value ) . toBe ( 'test' ) ) ;
139189 } ) ) ;
140190
141- it ( "should not fail with invalid provider but receive warning." , fakeAsync ( ( ) => {
191+ it ( "should not fail with invalid provider but receive warning with missing list data provider ." , fakeAsync ( ( ) => {
142192 const triggerControl = group . get ( 'testInput' ) ;
143193
144- service . connectDynamicFormControls ( invalidProvider , group ) ;
194+ service . connectDynamicFormControls ( invalidListProvider , group ) ;
145195 triggerControl . setValue ( 'newVal' ) ;
146196 tick ( 401 ) ;
147- invalidProvider . list$ . subscribe ( ( list ) => expect ( list [ 0 ] ) . toBe ( 'item-1' ) ) ;
197+ invalidListProvider . list$ . subscribe ( ( list ) => expect ( list [ 0 ] ) . toBe ( 'item-1' ) ) ;
148198 } ) ) ;
199+
200+ it ( "should not fail with invalid provider but receive warning with missing options data provider." , fakeAsync ( ( ) => {
201+ const triggerControl = group . get ( 'testInput' ) ;
202+
203+ service . connectDynamicFormControls ( invalidOptionProvider , group ) ;
204+ triggerControl . setValue ( 'newVal' ) ;
205+ tick ( 401 ) ;
206+ radio . options$ . subscribe ( ( options ) => expect ( options [ 0 ] . value ) . toBe ( 'option-1' ) ) ;
207+ } ) ) ;
208+
209+ it ( 'should show warning with invalid relatedform control' , ( ) => {
210+ const relatedFormControl = service . getRelatedFormControl ( referenceInvalidControl , group ) ;
211+ expect ( relatedFormControl ) . toBe ( null ) ;
212+ } ) ;
213+
214+ it ( 'should get related form control from rootPath' , ( ) => {
215+ const compareControl = group . root . get ( 'test.testRootRadioGroup' ) ;
216+ const relatedFormControl = service . getRelatedFormControl ( groupInputTest , group ) ;
217+
218+ expect ( relatedFormControl ) . toBe ( compareControl ) ;
219+ } ) ;
149220} ) ;
0 commit comments