diff --git a/core/main/src/firebolt/handlers/actions_rpc.rs b/core/main/src/firebolt/handlers/actions_rpc.rs index f8d03e26d..bfbf37ec8 100644 --- a/core/main/src/firebolt/handlers/actions_rpc.rs +++ b/core/main/src/firebolt/handlers/actions_rpc.rs @@ -113,6 +113,7 @@ mod tests { context: DiscoveryContext { source: "voice".to_string(), age_policy: None, + profile_policy: None, }, }; let response = ActionsIntentResponse { @@ -134,6 +135,7 @@ mod tests { context: DiscoveryContext { source: "remote".to_string(), age_policy: None, + profile_policy: None, }, }; let original = ActionsIntentResponse { diff --git a/core/sdk/src/api/apps.rs b/core/sdk/src/api/apps.rs index 83a32ccb5..8294b3c8a 100644 --- a/core/sdk/src/api/apps.rs +++ b/core/sdk/src/api/apps.rs @@ -323,6 +323,7 @@ mod tests { context: DiscoveryContext { source: "test_source".to_string(), age_policy: None, + profile_policy: None, }, }; @@ -414,6 +415,7 @@ mod tests { context: DiscoveryContext { source: "voice".to_string(), age_policy: None, + profile_policy: None, }, }; let response = ActionsIntentResponse { diff --git a/core/sdk/src/api/device/entertainment_data.rs b/core/sdk/src/api/device/entertainment_data.rs index e31d8606a..cfdb58dc4 100644 --- a/core/sdk/src/api/device/entertainment_data.rs +++ b/core/sdk/src/api/device/entertainment_data.rs @@ -533,6 +533,7 @@ impl Default for HomeIntent { context: DiscoveryContext { source: "device".to_string(), age_policy: None, + profile_policy: None, }, } } @@ -1044,6 +1045,7 @@ impl Default for ProviderRequestIntent { context: DiscoveryContext { source: "device".to_string(), age_policy: None, + profile_policy: None, }, } } @@ -1096,6 +1098,7 @@ mod tests { context: DiscoveryContext { source: "xrn:firebolt:application:refui".to_owned(), age_policy: None, + profile_policy: None, }, }); let value = serde_json::to_string(&intent).unwrap(); diff --git a/core/sdk/src/api/firebolt/fb_discovery.rs b/core/sdk/src/api/firebolt/fb_discovery.rs index 70d578442..48a70f404 100644 --- a/core/sdk/src/api/firebolt/fb_discovery.rs +++ b/core/sdk/src/api/firebolt/fb_discovery.rs @@ -39,6 +39,9 @@ pub struct DiscoveryContext { #[serde(skip_serializing_if = "Option::is_none")] #[serde(rename = "agePolicy")] pub age_policy: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "profilePolicy")] + pub profile_policy: Option, } impl DiscoveryContext { @@ -46,6 +49,7 @@ impl DiscoveryContext { DiscoveryContext { source: source.to_string(), age_policy, + profile_policy: None, } } } @@ -90,6 +94,10 @@ impl AgePolicy { AgePolicy::Adult => "app:adult", } } + + pub fn is_child_or_teen(&self) -> bool { + matches!(self, AgePolicy::Child | AgePolicy::Teen) + } } impl Serialize for AgePolicy { @@ -472,6 +480,7 @@ mod tests { let context = DiscoveryContext::new("test_source", None); assert_eq!(context.source, "test_source"); assert_eq!(context.age_policy, None); + assert_eq!(context.profile_policy, None); } #[test] @@ -480,6 +489,7 @@ mod tests { context: DiscoveryContext { source: "test_source".to_string(), age_policy: None, + profile_policy: None, }, }; @@ -497,6 +507,7 @@ mod tests { context: DiscoveryContext { source: "test_source".to_string(), age_policy: None, + profile_policy: None, } })) ); @@ -583,6 +594,13 @@ mod tests { assert_eq!(watched.age_policy, Some(AgePolicy::Teen)); } + #[test] + fn test_age_policy_is_child_or_teen() { + assert!(AgePolicy::Child.is_child_or_teen()); + assert!(AgePolicy::Teen.is_child_or_teen()); + assert!(!AgePolicy::Adult.is_child_or_teen()); + } + #[test] fn test_from_entitlements_info_to_content_access_identifiers() { let entitlements_info = EntitlementsInfo { @@ -673,6 +691,7 @@ mod tests { let context = DiscoveryContext { source: "app".to_string(), age_policy: None, + profile_policy: None, }; let json = serde_json::to_string(&context).unwrap(); @@ -688,6 +707,7 @@ mod tests { let context = DiscoveryContext { source: "".to_string(), age_policy: None, + profile_policy: None, }; let json = serde_json::to_string(&context).unwrap(); let deserialized: DiscoveryContext = serde_json::from_str(&json).unwrap(); @@ -697,12 +717,31 @@ mod tests { let context = DiscoveryContext { source: "voice-control/system".to_string(), age_policy: None, + profile_policy: None, }; let json = serde_json::to_string(&context).unwrap(); let deserialized: DiscoveryContext = serde_json::from_str(&json).unwrap(); assert_eq!(deserialized.source, "voice-control/system"); } + #[test] + fn test_discovery_context_profile_policy_json() { + // Missing profilePolicy deserializes to None + let context: DiscoveryContext = serde_json::from_str(r#"{"source":"app"}"#).unwrap(); + assert_eq!(context.profile_policy, None); + + // Provided profilePolicy round-trips + let context = DiscoveryContext { + source: "app".to_string(), + age_policy: None, + profile_policy: Some("teenProfile".to_string()), + }; + let json = serde_json::to_string(&context).unwrap(); + assert_eq!(json, r#"{"source":"app","profilePolicy":"teenProfile"}"#); + let deserialized: DiscoveryContext = serde_json::from_str(&json).unwrap(); + assert_eq!(deserialized, context); + } + #[test] fn test_discovery_context_json_invalid() { // Missing required field diff --git a/core/sdk/src/api/firebolt/fb_lifecycle_management.rs b/core/sdk/src/api/firebolt/fb_lifecycle_management.rs index b51f890e0..1a5746f3c 100644 --- a/core/sdk/src/api/firebolt/fb_lifecycle_management.rs +++ b/core/sdk/src/api/firebolt/fb_lifecycle_management.rs @@ -309,6 +309,7 @@ mod tests { context: DiscoveryContext { source: "test_source".to_string(), age_policy: None, + profile_policy: None, }, }), )),