@@ -27,12 +27,23 @@ const createGetDataElementDefinitionDefault = (dataDef) =>
2727 return null ;
2828 } ) ;
2929
30+ const createGetModuleProvider = ( o = { } ) => {
31+ return {
32+ getModuleExports : ( ) => ( context ) => context . utils . getSettings ( ) . foo ,
33+ getModuleDefinition : ( ) => ( {
34+ extensionName : 'someextension'
35+ } ) ,
36+ getExtensionDefinition : ( ) => ( {
37+ getSettings : ( ) => ( { data : 'extension settings' } )
38+ } ) ,
39+ ...o
40+ } ;
41+ } ;
42+
3043const createGetDataElementValue = (
3144 delegateDefinition ,
3245 {
33- moduleProvider = {
34- getModuleExports : ( ) => ( context ) => context . utils . getSettings ( ) . foo
35- } ,
46+ moduleProvider = createGetModuleProvider ( ) ,
3647 createGetDataElementDefinition = createGetDataElementDefinitionDefault
3748 } = { }
3849) => {
@@ -46,7 +57,7 @@ const createGetDataElementValue = (
4657} ;
4758
4859describe ( 'function returned by createGetDataElementValue' , ( ) => {
49- test ( 'returns a value from the settings object as value' , ( ) => {
60+ test ( 'returns a value from the settings object as value' , async ( ) => {
5061 const getDataElementValue = createGetDataElementValue ( {
5162 settings : {
5263 foo : 'bar'
@@ -58,7 +69,7 @@ describe('function returned by createGetDataElementValue', () => {
5869 ) ;
5970 } ) ;
6071
61- test ( 'returns a value from the contextData object as value' , ( ) => {
72+ test ( 'returns a value from the contextData object as value' , async ( ) => {
6273 const context = {
6374 arcAndUtils : {
6475 arc : {
@@ -67,9 +78,9 @@ describe('function returned by createGetDataElementValue', () => {
6778 }
6879 } ;
6980
70- const moduleProvider = {
81+ const moduleProvider = createGetModuleProvider ( {
7182 getModuleExports : ( ) => ( c ) => c . arc . foo
72- } ;
83+ } ) ;
7384
7485 const getDataElementValue = createGetDataElementValue (
7586 { } ,
@@ -81,7 +92,79 @@ describe('function returned by createGetDataElementValue', () => {
8192 ) ;
8293 } ) ;
8394
84- test ( 'cleans the value when cleanText = true' , ( ) => {
95+ test ( 'gives extension settings access to the data element module' , async ( ) => {
96+ const moduleProvider = createGetModuleProvider ( {
97+ getModuleExports :
98+ ( ) =>
99+ ( { utils } ) =>
100+ utils . getExtensionSettings ( )
101+ } ) ;
102+
103+ const getDataElementValue = createGetDataElementValue (
104+ { } ,
105+ { moduleProvider }
106+ ) ;
107+
108+ return getDataElementValue ( 'testDataElement' , defaultContext ) . then (
109+ ( dataElementValue ) =>
110+ expect ( dataElementValue ) . toEqual ( { data : 'extension settings' } )
111+ ) ;
112+ } ) ;
113+
114+ test ( 'gives env access to the data element module called by the core extension' , async ( ) => {
115+ const context = {
116+ arcAndUtils : { } ,
117+ env : {
118+ foo : 'bar'
119+ }
120+ } ;
121+
122+ const moduleProvider = createGetModuleProvider ( {
123+ getModuleDefinition : ( ) => ( {
124+ extensionName : 'core'
125+ } ) ,
126+ getModuleExports :
127+ ( ) =>
128+ ( { utils } ) =>
129+ utils . getEnv ( )
130+ } ) ;
131+
132+ const getDataElementValue = createGetDataElementValue (
133+ { } ,
134+ { moduleProvider }
135+ ) ;
136+
137+ return getDataElementValue ( 'testDataElement' , context ) . then (
138+ ( dataElementValue ) => expect ( dataElementValue ) . toEqual ( { foo : 'bar' } )
139+ ) ;
140+ } ) ;
141+
142+ test ( 'does not give env access to the data element module called by extensions that are not core' , async ( ) => {
143+ const context = {
144+ arcAndUtils : { } ,
145+ env : {
146+ foo : 'bar'
147+ }
148+ } ;
149+
150+ const moduleProvider = createGetModuleProvider ( {
151+ getModuleExports :
152+ ( ) =>
153+ ( { utils } ) =>
154+ utils . getEnv ( )
155+ } ) ;
156+
157+ const getDataElementValue = createGetDataElementValue (
158+ { } ,
159+ { moduleProvider }
160+ ) ;
161+
162+ return getDataElementValue ( 'testDataElement' , context ) . then (
163+ ( dataElementValue ) => expect ( dataElementValue ) . toEqual ( { } )
164+ ) ;
165+ } ) ;
166+
167+ test ( 'cleans the value when cleanText = true' , async ( ) => {
85168 const getDataElementValue = createGetDataElementValue ( {
86169 cleanText : true ,
87170 settings : { foo : 'bar' }
@@ -93,11 +176,11 @@ describe('function returned by createGetDataElementValue', () => {
93176 } ) ;
94177
95178 [ undefined , null ] . forEach ( ( testDataElementValue ) => {
96- const moduleProvider = {
179+ const moduleProvider = createGetModuleProvider ( {
97180 getModuleExports : ( ) => ( ) => testDataElementValue
98- } ;
181+ } ) ;
99182
100- test ( `returns a default value if data element value is ${ testDataElementValue } ` , ( ) => {
183+ test ( `returns a default value if data element value is ${ testDataElementValue } ` , async ( ) => {
101184 const getDataElementValue = createGetDataElementValue (
102185 {
103186 defaultValue : 'defaultValue' ,
@@ -112,7 +195,7 @@ describe('function returned by createGetDataElementValue', () => {
112195 } ) ;
113196
114197 test ( `returns ${ testDataElementValue } if data element value is ${ testDataElementValue }
115- and default is undefined` , ( ) => {
198+ and default is undefined` , async ( ) => {
116199 const getDataElementValue = createGetDataElementValue (
117200 {
118201 settings : { }
@@ -128,11 +211,11 @@ describe('function returned by createGetDataElementValue', () => {
128211 } ) ;
129212
130213 [ '' , 0 , false , NaN ] . forEach ( ( testDataElementValue ) => {
131- const moduleProvider = {
214+ const moduleProvider = createGetModuleProvider ( {
132215 getModuleExports : ( ) => ( ) => testDataElementValue
133- } ;
216+ } ) ;
134217
135- test ( `does not return a default value if value is ${ testDataElementValue } ` , ( ) => {
218+ test ( `does not return a default value if value is ${ testDataElementValue } ` , async ( ) => {
136219 const getDataElementValue = createGetDataElementValue (
137220 {
138221 defaultValue : 'defaultValue' ,
@@ -148,7 +231,7 @@ describe('function returned by createGetDataElementValue', () => {
148231 } ) ;
149232 } ) ;
150233
151- test ( 'lowercases the value if forceLowerCase = true' , ( ) => {
234+ test ( 'lowercases the value if forceLowerCase = true' , async ( ) => {
152235 const getDataElementValue = createGetDataElementValue ( {
153236 forceLowerCase : true ,
154237 settings : {
@@ -161,7 +244,7 @@ describe('function returned by createGetDataElementValue', () => {
161244 ) ;
162245 } ) ;
163246
164- test ( 'lowercases the default value if forceLowerCase = true' , ( ) => {
247+ test ( 'lowercases the default value if forceLowerCase = true' , async ( ) => {
165248 const getDataElementValue = createGetDataElementValue ( {
166249 forceLowerCase : true ,
167250 defaultValue : 'bAr' ,
@@ -173,12 +256,12 @@ describe('function returned by createGetDataElementValue', () => {
173256 ) ;
174257 } ) ;
175258
176- test ( 'throws an error when calling data element module exports fails' , ( ) => {
177- const moduleProvider = {
259+ test ( 'throws an error when calling data element module exports fails' , async ( ) => {
260+ const moduleProvider = createGetModuleProvider ( {
178261 getModuleExports : ( ) => ( ) => {
179262 throw new Error ( 'noob tried to divide by zero' ) ;
180263 }
181- } ;
264+ } ) ;
182265
183266 const getDataElementValue = createGetDataElementValue (
184267 {
@@ -195,12 +278,12 @@ describe('function returned by createGetDataElementValue', () => {
195278 } ) ;
196279 } ) ;
197280
198- test ( 'throws an error when calling data element module exports fails' , ( ) => {
199- const moduleProvider = {
281+ test ( 'throws an error when calling data element module exports fails' , async ( ) => {
282+ const moduleProvider = createGetModuleProvider ( {
200283 getModuleExports : ( ) => ( ) => {
201284 throw new Error ( 'noob tried to divide by zero' ) ;
202285 }
203- } ;
286+ } ) ;
204287
205288 const getDataElementValue = createGetDataElementValue (
206289 {
@@ -221,7 +304,7 @@ describe('function returned by createGetDataElementValue', () => {
221304 } ) ;
222305 } ) ;
223306
224- test ( 'throws an error when data element definition is not found' , ( ) => {
307+ test ( 'throws an error when data element definition is not found' , async ( ) => {
225308 const getDataElementValue = createGetDataElementValue (
226309 {
227310 settings : { }
@@ -240,7 +323,7 @@ describe('function returned by createGetDataElementValue', () => {
240323 } ) ;
241324 } ) ;
242325
243- test ( 'throws an error when data element circular reference is detected' , ( ) => {
326+ test ( 'throws an error when data element circular reference is detected' , async ( ) => {
244327 const getDataElementValue = createGetDataElementValue ( {
245328 settings : {
246329 foo : 'bar'
@@ -261,13 +344,13 @@ describe('function returned by createGetDataElementValue', () => {
261344 } ) ;
262345 } ) ;
263346
264- test ( 'provides access to getComponent method when it calls the data element module ' , ( ) => {
265- const moduleProvider = {
347+ test ( 'provides access to getComponent method when it calls the data element module ' , async ( ) => {
348+ const moduleProvider = createGetModuleProvider ( {
266349 getModuleExports :
267350 ( ) =>
268351 ( { utils : { getComponent } } ) =>
269352 getComponent ( )
270- } ;
353+ } ) ;
271354
272355 const getDataElementValue = createGetDataElementValue (
273356 {
0 commit comments