@@ -12,6 +12,7 @@ import {
12
12
import { Observable , of } from 'rxjs' ;
13
13
import { Injectable } from '@angular/core' ;
14
14
import { DynamicInputModel } from '../model/input/dynamic-input.model' ;
15
+ import { DynamicFormGroupModel } from '../model/form-group/dynamic-form-group.model' ;
15
16
16
17
@Injectable ( )
17
18
class TestProvider implements DynamicFormControlListDataProvider , DynamicFormControlOptionDataProvider {
@@ -69,8 +70,8 @@ describe("DynamicFormDataService test suite", () => {
69
70
service : TestProvider
70
71
}
71
72
} ) ,
72
- invalidProvider : DynamicInputModel = new DynamicInputModel ( {
73
- id : "testInput3 " ,
73
+ invalidListProvider : DynamicInputModel = new DynamicInputModel ( {
74
+ id : "invalidListProvider " ,
74
75
list : [ 'item-1' , 'item-2' , 'item-3' ] ,
75
76
value : "item-1" ,
76
77
dataProvider : {
@@ -79,7 +80,54 @@ describe("DynamicFormDataService test suite", () => {
79
80
} ,
80
81
service : InvalidTestProvider ,
81
82
}
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
+ } )
83
131
;
84
132
85
133
beforeEach ( ( ) => {
@@ -100,7 +148,9 @@ describe("DynamicFormDataService test suite", () => {
100
148
model ,
101
149
select ,
102
150
radio ,
103
- invalidProvider
151
+ invalidListProvider ,
152
+ invalidOptionProvider ,
153
+ groupModel
104
154
] ) ;
105
155
} ) ) ;
106
156
@@ -138,12 +188,33 @@ describe("DynamicFormDataService test suite", () => {
138
188
radio . options$ . subscribe ( ( options ) => expect ( options [ 0 ] . value ) . toBe ( 'test' ) ) ;
139
189
} ) ) ;
140
190
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 ( ( ) => {
142
192
const triggerControl = group . get ( 'testInput' ) ;
143
193
144
- service . connectDynamicFormControls ( invalidProvider , group ) ;
194
+ service . connectDynamicFormControls ( invalidListProvider , group ) ;
145
195
triggerControl . setValue ( 'newVal' ) ;
146
196
tick ( 401 ) ;
147
- invalidProvider . list$ . subscribe ( ( list ) => expect ( list [ 0 ] ) . toBe ( 'item-1' ) ) ;
197
+ invalidListProvider . list$ . subscribe ( ( list ) => expect ( list [ 0 ] ) . toBe ( 'item-1' ) ) ;
148
198
} ) ) ;
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
+ } ) ;
149
220
} ) ;
0 commit comments