fn test_filter_engine_configuration_handles_basic_subvariants()

in components/search/src/selector.rs [804:1081]


    fn test_filter_engine_configuration_handles_basic_subvariants() {
        let selector = Arc::new(SearchEngineSelector::new());

        let config_overrides_result = Arc::clone(&selector).set_config_overrides(
            json!({
              "data": [
                {
                  "identifier": "overrides-engine",
                  "partnerCode": "overrides-partner-code",
                  "clickUrl": "https://example.com/click-url",
                  "telemetrySuffix": "overrides-telemetry-suffix",
                  "urls": {
                    "search": {
                      "base": "https://example.com/search-overrides",
                      "method": "GET",
                      "params": []
                    }
                  }
                }
              ]
            })
            .to_string(),
        );
        let config_result = Arc::clone(&selector).set_search_config(
            json!({
              "data": [
                {
                  "recordType": "engine",
                  "identifier": "test1",
                  "base": {
                    "name": "Test 1",
                    "partnerCode": "star",
                    "urls": {
                      "search": {
                        "base": "https://example.com/1",
                        "method": "GET",
                        "searchTermParamName": "q"
                      },
                      "suggestions": {
                        "base": "https://example.com/suggestions",
                        "method": "POST",
                        "params": [{
                          "name": "type",
                          "value": "space",
                        }],
                        "searchTermParamName": "suggest"
                      },
                      "trending": {
                        "base": "https://example.com/trending",
                        "method": "GET",
                        "params": [{
                          "name": "area",
                          "experimentConfig": "area-param",
                        }]
                      },
                      "searchForm": {
                        "base": "https://example.com/search-form",
                        "method": "GET",
                        "params": [{
                          "name": "search-form-name",
                          "value": "search-form-value",
                        }]
                      }
                    }
                  },
                  "variants": [{
                    "environment": {
                      "allRegionsAndLocales": true
                    },
                  },
                  {
                    "environment": {
                      "regions": ["FR"]
                    },
                    "urls": {
                      "search": {
                        "method": "POST",
                        "params": [{
                          "name": "variant-param-name",
                          "value": "variant-param-value"
                        }]
                      }
                    },
                    "subVariants": [
                      {
                        "environment": {
                          "locales": ["fr"]
                        },
                        "partnerCode": "fr-partner-code",
                        "telemetrySuffix": "fr-telemetry-suffix"
                      },
                      {
                        "environment": {
                          "locales": ["en-CA"]
                        },
                        "urls": {
                          "search": {
                            "method": "GET",
                            "params": [{
                              "name": "en-ca-param-name",
                              "value": "en-ca-param-value"
                            }]
                          }
                        },
                      }
                    ]
                  }],
                },
                {
                  "recordType": "defaultEngines",
                  "globalDefault": "test1"
                },
                {
                  "recordType": "availableLocales",
                  "locales": ["en-CA", "fr"]
                }
              ]
            })
            .to_string(),
        );
        assert!(
            config_result.is_ok(),
            "Should have set the configuration successfully. {:?}",
            config_result
        );
        assert!(
            config_overrides_result.is_ok(),
            "Should have set the configuration overrides successfully. {:?}",
            config_overrides_result
        );

        let mut result = Arc::clone(&selector).filter_engine_configuration(SearchUserEnvironment {
            region: "FR".into(),
            locale: "fr".into(),
            ..Default::default()
        });

        assert!(
            result.is_ok(),
            "Should have filtered the configuration without error. {:?}",
            result
        );
        assert_eq!(
            result.unwrap(),
            RefinedSearchConfig {
                engines: vec!(SearchEngineDefinition {
                    charset: "UTF-8".to_string(),
                    identifier: "test1".to_string(),
                    name: "Test 1".to_string(),
                    partner_code: "fr-partner-code".to_string(),
                    telemetry_suffix: "fr-telemetry-suffix".to_string(),
                    urls: SearchEngineUrls {
                        search: SearchEngineUrl {
                            base: "https://example.com/1".to_string(),
                            method: "POST".to_string(),
                            params: vec![SearchUrlParam {
                                name: "variant-param-name".to_string(),
                                value: Some("variant-param-value".to_string()),
                                enterprise_value: None,
                                experiment_config: None
                            }],
                            search_term_param_name: Some("q".to_string())
                        },
                        suggestions: Some(SearchEngineUrl {
                            base: "https://example.com/suggestions".to_string(),
                            method: "POST".to_string(),
                            params: vec![SearchUrlParam {
                                name: "type".to_string(),
                                value: Some("space".to_string()),
                                enterprise_value: None,
                                experiment_config: None
                            }],
                            search_term_param_name: Some("suggest".to_string())
                        }),
                        trending: Some(SearchEngineUrl {
                            base: "https://example.com/trending".to_string(),
                            method: "GET".to_string(),
                            params: vec![SearchUrlParam {
                                name: "area".to_string(),
                                value: None,
                                enterprise_value: None,
                                experiment_config: Some("area-param".to_string())
                            }],
                            search_term_param_name: None
                        }),
                        search_form: Some(SearchEngineUrl {
                            base: "https://example.com/search-form".to_string(),
                            method: "GET".to_string(),
                            params: vec![SearchUrlParam {
                                name: "search-form-name".to_string(),
                                value: Some("search-form-value".to_string()),
                                enterprise_value: None,
                                experiment_config: None,
                            }],
                            search_term_param_name: None,
                        }),
                    },
                    ..Default::default()
                }),
                app_default_engine_id: Some("test1".to_string()),
                app_private_default_engine_id: None
            },
            "Should have correctly matched and merged the fr locale sub-variant."
        );

        result = selector.filter_engine_configuration(SearchUserEnvironment {
            region: "FR".into(),
            locale: "en-CA".into(),
            ..Default::default()
        });

        assert!(
            result.is_ok(),
            "Should have filtered the configuration without error. {:?}",
            result
        );
        assert_eq!(
            result.unwrap(),
            RefinedSearchConfig {
                engines: vec!(SearchEngineDefinition {
                    charset: "UTF-8".to_string(),
                    identifier: "test1".to_string(),
                    name: "Test 1".to_string(),
                    partner_code: "star".to_string(),
                    urls: SearchEngineUrls {
                        search: SearchEngineUrl {
                            base: "https://example.com/1".to_string(),
                            method: "GET".to_string(),
                            params: vec![SearchUrlParam {
                                name: "en-ca-param-name".to_string(),
                                value: Some("en-ca-param-value".to_string()),
                                enterprise_value: None,
                                experiment_config: None
                            }],
                            search_term_param_name: Some("q".to_string())
                        },
                        suggestions: Some(SearchEngineUrl {
                            base: "https://example.com/suggestions".to_string(),
                            method: "POST".to_string(),
                            params: vec![SearchUrlParam {
                                name: "type".to_string(),
                                value: Some("space".to_string()),
                                enterprise_value: None,
                                experiment_config: None
                            }],
                            search_term_param_name: Some("suggest".to_string())
                        }),
                        trending: Some(SearchEngineUrl {
                            base: "https://example.com/trending".to_string(),
                            method: "GET".to_string(),
                            params: vec![SearchUrlParam {
                                name: "area".to_string(),
                                value: None,
                                enterprise_value: None,
                                experiment_config: Some("area-param".to_string())
                            }],
                            search_term_param_name: None
                        }),
                        search_form: Some(SearchEngineUrl {
                            base: "https://example.com/search-form".to_string(),
                            method: "GET".to_string(),
                            params: vec![SearchUrlParam {
                                name: "search-form-name".to_string(),
                                value: Some("search-form-value".to_string()),
                                enterprise_value: None,
                                experiment_config: None,
                            }],
                            search_term_param_name: None,
                        }),
                    },
                    ..Default::default()
                }),
                app_default_engine_id: Some("test1".to_string()),
                app_private_default_engine_id: None
            },
            "Should have correctly matched and merged the en-CA locale sub-variant."
        );
    }