@@ -283,25 +283,8 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
283283 return Err ( DscError :: Operation ( t ! ( "dscresources.commandResource.failedParseJson" , executable = & test. executable, stdout = stdout, stderr = stderr, err = err) . to_string ( ) ) )
284284 }
285285 } ;
286- // if actual state contains _inDesiredState, we use that to determine if the resource is in desired state
287- let mut in_desired_state: Option < bool > = None ;
288- if let Some ( in_desired_state_value) = actual_value. get ( "_inDesiredState" ) {
289- if let Some ( desired_state) = in_desired_state_value. as_bool ( ) {
290- in_desired_state = Some ( desired_state) ;
291- } else {
292- return Err ( DscError :: Operation ( t ! ( "dscresources.commandResource.inDesiredStateNotBool" ) . to_string ( ) ) ) ;
293- }
294- }
295-
296- let mut diff_properties: Vec < String > = Vec :: new ( ) ;
297- match in_desired_state {
298- Some ( true ) => {
299- // if _inDesiredState is true, we don't need to check for diff properties
300- } ,
301- Some ( false ) | None => {
302- diff_properties = get_diff ( & expected_value, & actual_value) ;
303- }
304- }
286+ let in_desired_state = get_desired_state ( & actual_value) ?;
287+ let diff_properties = get_diff ( & expected_value, & actual_value) ;
305288 Ok ( TestResult :: Resource ( ResourceTestResponse {
306289 desired_state : expected_value,
307290 actual_state : actual_value,
@@ -320,10 +303,11 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
320303 return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, t ! ( "dscresources.commandResource.testNoDiff" ) . to_string ( ) ) ) ;
321304 } ;
322305 let diff_properties: Vec < String > = serde_json:: from_str ( diff_properties) ?;
306+ let in_desired_state = get_desired_state ( & actual_value) ?;
323307 Ok ( TestResult :: Resource ( ResourceTestResponse {
324308 desired_state : expected_value,
325309 actual_state : actual_value,
326- in_desired_state : diff_properties. is_empty ( ) ,
310+ in_desired_state : in_desired_state . unwrap_or ( diff_properties. is_empty ( ) ) ,
327311 diff_properties,
328312 } ) )
329313 } ,
@@ -353,6 +337,19 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
353337 }
354338}
355339
340+ fn get_desired_state ( actual : & Value ) -> Result < Option < bool > , DscError > {
341+ // if actual state contains _inDesiredState, we use that to determine if the resource is in desired state
342+ let mut in_desired_state: Option < bool > = None ;
343+ if let Some ( in_desired_state_value) = actual. get ( "_inDesiredState" ) {
344+ if let Some ( desired_state) = in_desired_state_value. as_bool ( ) {
345+ in_desired_state = Some ( desired_state) ;
346+ } else {
347+ return Err ( DscError :: Operation ( t ! ( "dscresources.commandResource.inDesiredStateNotBool" ) . to_string ( ) ) ) ;
348+ }
349+ }
350+ Ok ( in_desired_state)
351+ }
352+
356353fn invoke_synthetic_test ( resource : & ResourceManifest , cwd : & str , expected : & str ) -> Result < TestResult , DscError > {
357354 let get_result = invoke_get ( resource, cwd, expected) ?;
358355 let actual_state = match get_result {
0 commit comments