flagsmith-flutter-client icon indicating copy to clipboard operation
flagsmith-flutter-client copied to clipboard

feat: change cache to use Map<String, Flag> instead of Set<Flag>

Open yuzurihaaa opened this issue 1 year ago • 0 comments

Hi.

I realised that the cached uses quite a number of firstWhereOrNull for lookup. This PR changes to use Map so that getting flag value will be in O(1). I am currently thinking of using this but would also like some opinion from original maintainer on this idea :)

Unit test result
~/flagsmith-flutter-client git:[main]
git reset --soft HEAD~1
~/flagsmith-flutter-client git:[main]
git push -f
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 10 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 767 bytes | 767.00 KiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:yuzurihaaa/flagsmith-flutter-client.git
 + b792203...139d338 main -> main (forced update)
~/flagsmith-flutter-client git:[main]
git reset --soft HEAD~1
~/flagsmith-flutter-client git:[main]
git push -f
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 10 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 765 bytes | 765.00 KiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:yuzurihaaa/flagsmith-flutter-client.git
 + 139d338...9e9c928 main -> main (forced update)
~/flagsmith-flutter-client git:[main]
flutter test
00:02 +34: (REDACTED)/flagsmith-flutter-client/test/core/storage_reactive_test.dart: [Streams] Stream successfuly changed when flag was updated                   
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
_updateSubject my_feature -> false f: false
00:02 +35: (REDACTED)/flagsmith-flutter-client/test/core/storage_reactive_test.dart: [Streams] Subject value changed when flag was changed.                       
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:03 +36: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: adds one to input values                                                       
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:03 +38: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: Update with enabled false                                                      
_updateSubject my_feature -> false f: false
00:03 +41: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: Create a flag                                                                  
_createSubject test_feature -> F(test_feature:false)
00:03 +42: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: Save all flags                                                                 
_createSubject test_feature_a -> F(test_feature_a:false)
_createSubject test_feature_b -> F(test_feature_b:true)
00:03 +42: (REDACTED)/flagsmith-flutter-client/test/storage/storage_test.dart: adds one to input values                                                           
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:03 +44: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: Update all flags                                                               
_updateSubject test_feature_a -> false f: false
00:03 +44: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: Update all flags                                                               
_updateSubject test_feature_b -> true f: true
00:03 +45: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: Init storage over                                                              
_createSubject test_feature -> F(test_feature:false)
_createSubject test_feature_a -> F(test_feature_a:false)
_createSubject test_feature_b -> F(test_feature_b:true)
00:03 +46: (REDACTED)/flagsmith-flutter-client/test/core/flagsmith_core_test.dart: Init storage over                                                              
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:03 +47: (REDACTED)/flagsmith-flutter-client/test/storage/storage_test.dart: Update with enabled false                                                          
_updateSubject my_feature -> false f: false
00:03 +51: (REDACTED)/flagsmith-flutter-client/test/storage/storage_test.dart: Create a flag                                                                      
_createSubject test_feature -> F(test_feature:false)
00:03 +52: (REDACTED)/flagsmith-flutter-client/test/storage/storage_test.dart: Save all flags                                                                     
_createSubject test_feature_a -> F(test_feature_a:false)
_createSubject test_feature_b -> F(test_feature_b:true)
00:03 +53: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_config_test.dart: [Config] When debug is enabled, then we should have LogInterceptor inside client
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:03 +53: (REDACTED)/flagsmith-flutter-client/test/storage/storage_test.dart: Update all flags                                                                   
_updateSubject test_feature_a -> false f: false
_updateSubject test_feature_b -> true f: true
00:03 +54: (REDACTED)/flagsmith-flutter-client/test/storage/storage_test.dart: Init storage over                                                                  
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:03 +58: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_config_test.dart: [External config] When self signed cert is enabled, then adapter is SelfSigned type
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:03 +60: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_config_test.dart: [Standard config] When self signed cert is disabled, then adapter is not SelfSigned type
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
00:05 +91 ~1: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_analytics_test.dart: [Analytics] Settings When starts client analytics are enabled as default 
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
*** Request ***
uri: https://offline.net/flags/
method: GET
responseType: ResponseType.json
followRedirects: true
persistentConnection: true
connectTimeout: 0:00:10.000000
sendTimeout: 0:00:20.000000
receiveTimeout: 0:00:20.000000
receiveDataWhenStatusError: true
extra: {}
headers:
 X-Environment-Key: CoJErJUXmihfMDVwTzBff4_fake
 Accept: application/json
data:
null

00:05 +99 ~1: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_analytics_test.dart: [Analytics] Settings When starts client analytics are enabled as default 
*** Response ***
uri: https://offline.net/flags/
statusCode: 200
headers:
 content-type: application/json
Response Text:
[{id: 48540, feature: {id: 9368, name: fake_disabled_feature, created_date: 2021-05-24T08:38:29.203517Z, description: Fake Disabled feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 48541, feature: {id: 9368, name: disabled_feature, created_date: 2021-05-24T08:38:29.203517Z, description: Disabled feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 48543, feature: {id: 9369, name: enabled_feature, created_date: 2021-05-24T08:38:47.375641Z, description: Enabled test feature, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48545, feature: {id: 9370, name: min_version, created_date: 2021-05-24T08:39:05.095219Z, description: test min version, initial_value: 1.0.1, default_enabled: true, type: STANDARD}, feature_state_value: 2.0.0, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48547, feature: {id: 9371, name: my_feature, created_date: 2021-05-24T08:39:24.938442Z, description: My feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: my_feature_value, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48549, feature: {id: 9372, name: show_title_logo, created_date: 2021-05-24T08:40:25.683907Z, description: Show logo in Navigation bar, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 52786, feature: {id: 10101, name: max_version, created_date: 2021-06-20T07:14:26.446931Z, description: Max version of package, initial_value: 3.0.0, default_enabled: false, type: STANDARD}, feature_state_value: 3.0.0, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 58, feature: {id: 24, name: try_it, created_date: 2018-06-15T11:01:46.018370Z, description: Try it panels, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 5815, feature: {id: 1530, name: segment_operators, created_date: 2019-10-07T16:25:47.073428Z, description: Determines what rules are shown when creating a segment, initial_value: [
  {
    "value": "EQUAL",
    "label": "Exactly Matches (=)"
  },
  {
    "value": "NOT_EQUAL",
    "label": "Does not match (!=)"
  },
  {
    "value": "PERCENTAGE_SPLIT",
    "label": "% Split"
  },
  {
    "value": "GREATER_THAN",
    "label": ">"
  },
  {
    "value": "GREATER_THAN_INCLUSIVE",
    "label": ">="
  },
  {
    "value": "LESS_THAN",
    "label": "<"
  },
  {
    "value": "LESS_THAN_INCLUSIVE",
    "label": "<="
  },
  {
    "value": "CONTAINS",
    "label": "Contains"
  },
  {
    "value": "NOT_CONTAINS",
    "label": "Does not contain"
  },
  {
    "value": "REGEX",
    "label": "Matches regex"
  }
], default_enabled: false, type: STANDARD}, feature_state_value: [
  {
    "value": "EQUAL",
    "label": "Exactly Matches (=)"
  },
  {
    "value": "NOT_EQUAL",
    "label": "Does not match (!=)"
  },
  {
    "value": "PERCENTAGE_SPLIT",
    "label": "% Split"
  },
  {
    "value": "GREATER_THAN",
    "label": ">"
  },
  {
    "value": "GREATER_THAN_INCLUSIVE",
    "label": ">="
  },
  {
    "value": "LESS_THAN",
    "label": "<"
  },
  {
    "value": "LESS_THAN_INCLUSIVE",
    "label": "<="
  },
  {
    "value": "CONTAINS",
    "label": "Contains"
  },
  {
    "value": "NOT_CONTAINS",
    "label": "Does not contain"
  },
  {
    "value": "REGEX",
    "label": "Matches regex"
  }
], enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 9209, feature: {id: 2201, name: demo_link_color, created_date: 2020-01-29T14:55:06.097715Z, description: Colour of demo feature, initial_value: blue, default_enabled: false, type: STANDARD}, feature_state_value: white2, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 11065, feature: {id: 2509, name: demo_feature, created_date: 2020-03-07T17:30:47.410158Z, description: Shows a demo feature in the side navigation bar, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 12307, feature: {id: 2712, name: oauth_github, created_date: 2020-03-28T21:04:37.376577Z, description: GitHub login key, initial_value: {
  "url": "https://github.com/login/oauth/authorize?scope=user&client_id=5d99dd45d6cdf4a4ac61&redirect_uri=https%3A%2F%2Fdev.bullet-train.io%2Foauth%2Fgithub"
}, default_enabled: true, type: STANDARD}, feature_state_value: {
  "url": "https://github.com/login/oauth/authorize?scope=user&client_id=5d99dd45d6cdf4a4ac61&redirect_uri=https%3A%2F%2Fdev.bullet-train.io%2Foauth%2Fgithub"
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12310, feature: {id: 2713, name: oauth_google, created_date: 2020-03-28T21:04:51.557946Z, description: Google login key, initial_value: {
 "clientId":"*****9427810-*****nrgouktp0ngsbs04o14ueb*****.apps.googleusercontent.com",
 "apiKey":"AIza****HuN-y6B********SXaz3X9GpEP*****"
}, default_enabled: false, type: STANDARD}, feature_state_value: {
 "clientId":"*****9427810-*****nrgouktp0ngsbs04o14ueb*****.apps.googleusercontent.com",
 "apiKey":"AIza****HuN-y6B********SXaz3X9GpEP*****"
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12313, feature: {id: 2714, name: oauth_facebook, created_date: 2020-03-28T21:05:00.766672Z, description: Soon TM, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12316, feature: {id: 2715, name: oauth_microsoft, created_date: 2020-03-28T21:05:13.100534Z, description: Soon TM, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: , enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27322, feature: {id: 5538, name: plan_based_access, created_date: 2020-11-04T10:50:21.174891Z, description: Controls rbac and 2f based on plans, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27418, feature: {id: 5560, name: integrations, created_date: 2020-11-05T16:52:57.918094Z, description: Defines the integrations we display, initial_value: ["amplitude", "datadog"], default_enabled: false, type: STANDARD}, feature_state_value: ["amplitude","datadog","new-relic","segment","heap","mixpanel"], enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27481, feature: {id: 5564, name: integration_data, created_date: 2020-11-06T20:17:13.139643Z, description: Integration config for different providers, initial_value: {
  "datadog": {
    "perEnvironment": false,
    "image": "https://www.vectorlogo.zone/logos/datadoghq/datadoghq-icon.svg",
    "fields": [
      {
        "key": "base_url",
        "label": "Base URL"
      },
      {
        "key": "api_key",
        "label": "API Key"
      }
    ],
    "tags": [
      "logging"
    ],
    "title": "Data dog",
    "description": "Sends events to Data dog for when flags are created, updated and removed. Logs are tagged with the environment they came from e.g. production."
  },
  "amplitude": {
    "perEnvironment": true,
    "image": "https://braze-marketing-assets.s3.amazonaws.com/images/partner_logos/amplitude-1.png",
    "fields": [
      {
        "key": "api_key",
        "label": "API Key"
      }
    ],
    "tags": [
      "analytics"
    ],
    "title": "Amplitude",
    "description": "Sends data on what flags served to each identity."
  }
}, default_enabled: false, type: STANDARD}, feature_state_value: {
    "datadog": {
        "perEnvironment": false,
        "image": "https://app.flagsmith.com/images/integrations/datadog.svg",
        "docs": "https://docs.flagsmith.com/integrations/datadog/",
        "fields": [{
            "key": "base_url",
            "label": "Base URL"
        }, {
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["logging"],
        "title": "Datadog",
        "description": "Sends events to Datadog for when flags are created, updated and removed. Logs are tagged with the environment they came from e.g. production."
    },
    "amplitude": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/amplitude.svg",
        "docs": "https://docs.flagsmith.com/integrations/amplitude/",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Amplitude",
        "description": "Sends data on what flags served to each identity."
    },
    "new-relic": {
        "perEnvironment": false,
        "image": "https://app.flagsmith.com/images/integrations/new_relic.svg",
        "docs": "https://docs.flagsmith.com/integrations/newrelic",
        "fields": [{
            "key": "base_url",
            "label": "New Relic Base URL"
        }, {
            "key": "api_key",
            "label": "New Relic API Key"
        }, {
            "key": "app_id",
            "label": "New Relic Application ID"
        }],
        "tags": ["analytics"],
        "title": "New Relic",
        "description": "Sends events to New Relic for when flags are created, updated and removed."
    },
    "segment": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/segment.svg",
        "docs": "https://docs.flagsmith.com/integrations/segment",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Segment",
        "description": "Sends data on what flags served to each identity."
    },"heap": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/heap.svg",
        "docs": "https://docs.flagsmith.com/integrations/heap",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Heap Analytics",
        "description": "Sends data on what flags served to each identity."
    },"mixpanel": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/mixpanel.svg",
        "docs": "https://docs.flagsmith.com/integrations/mixpanel",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Mixpanel",
        "description": "Sends data on what flags served to each identity."
    }
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 29558, feature: {id: 6006, name: usage_chart, created_date: 2020-11-28T11:36:45.715798Z, description: Display influx usage chart and number, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 34292, feature: {id: 6903, name: scaleup_audit, created_date: 2021-01-27T20:41:28.931473Z, description: Disables audit log for anyone under scaleup, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 35671, feature: {id: 7168, name: butter_bar, created_date: 2021-02-10T20:03:43.348556Z, description: Show html in a butter bar for certain users, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: <strong>
You are using the develop environment.
</strong>, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 37186, feature: {id: 7460, name: flag_analytics, created_date: 2021-02-23T18:53:11.138355Z, description: Surface analytics when viewing a flag, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 41662, feature: {id: 8266, name: dark_mode, created_date: 2021-03-28T11:18:17.782264Z, description: Controlled via segments, determines if the user has dark mode on, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 44942, feature: {id: 8798, name: read_only_mode, created_date: 2021-04-24T10:17:23.574373Z, description: Determines if org needs to contact sales, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 53307, feature: {id: 10202, name: saml, created_date: 2021-06-23T17:40:39.556589Z, description: Enables SAML auth, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 59621, feature: {id: 11243, name: clone_environment, created_date: 2021-08-02T12:13:36.234860Z, description: adds the ability to clone an environment, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 62248, feature: {id: 11639, name: payments_enabled, created_date: 2021-08-15T15:42:53.454540Z, description: Determines whether to show payment UI / seats, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 62798, feature: {id: 11727, name: disable_create_org, created_date: 2021-08-16T17:18:28.052286Z, description: Turning this on will prevent users from creating any additional organisations, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}]

_createSubject fake_disabled_feature -> F(fake_disabled_feature:false)
_createSubject disabled_feature -> F(disabled_feature:false)
_updateSubject enabled_feature -> true f: true
_createSubject min_version -> F(min_version:true)
_updateSubject my_feature -> true f: true
_createSubject show_title_logo -> F(show_title_logo:false)
_createSubject max_version -> F(max_version:false)
_createSubject try_it -> F(try_it:true)
_createSubject segment_operators -> F(segment_operators:true)
_createSubject demo_link_color -> F(demo_link_color:true)
_createSubject demo_feature -> F(demo_feature:false)
_createSubject oauth_github -> F(oauth_github:true)
_createSubject oauth_google -> F(oauth_google:true)
_createSubject oauth_facebook -> F(oauth_facebook:true)
_createSubject oauth_microsoft -> F(oauth_microsoft:true)
_createSubject plan_based_access -> F(plan_based_access:true)
_createSubject integrations -> F(integrations:true)
00:05 +100 ~1: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_analytics_test.dart: [Analytics] Settings When starts client analytics are enabled as default
_createSubject integration_data -> F(integration_data:true)
_createSubject usage_chart -> F(usage_chart:true)
_createSubject scaleup_audit -> F(scaleup_audit:false)
_createSubject butter_bar -> F(butter_bar:true)
_createSubject flag_analytics -> F(flag_analytics:true)
_createSubject dark_mode -> F(dark_mode:false)
_createSubject read_only_mode -> F(read_only_mode:false)
_createSubject saml -> F(saml:true)
_createSubject clone_environment -> F(clone_environment:false)
_createSubject payments_enabled -> F(payments_enabled:true)
_createSubject disable_create_org -> F(disable_create_org:false)
00:05 +101 ~1: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_analytics_test.dart: [Analytics] Settings When starts client analytics are empty             
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
*** Request ***
uri: https://offline.net/flags/
method: GET
responseType: ResponseType.json
followRedirects: true
persistentConnection: true
connectTimeout: 0:00:10.000000
sendTimeout: 0:00:20.000000
receiveTimeout: 0:00:20.000000
receiveDataWhenStatusError: true
extra: {}
headers:
 X-Environment-Key: CoJErJUXmihfMDVwTzBff4_fake
 Accept: application/json
data:
null

00:05 +110 ~1: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_analytics_test.dart: [Analytics] Settings When starts client analytics are empty             
*** Response ***
uri: https://offline.net/flags/
statusCode: 200
headers:
 content-type: application/json
Response Text:
[{id: 48540, feature: {id: 9368, name: fake_disabled_feature, created_date: 2021-05-24T08:38:29.203517Z, description: Fake Disabled feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 48541, feature: {id: 9368, name: disabled_feature, created_date: 2021-05-24T08:38:29.203517Z, description: Disabled feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 48543, feature: {id: 9369, name: enabled_feature, created_date: 2021-05-24T08:38:47.375641Z, description: Enabled test feature, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48545, feature: {id: 9370, name: min_version, created_date: 2021-05-24T08:39:05.095219Z, description: test min version, initial_value: 1.0.1, default_enabled: true, type: STANDARD}, feature_state_value: 2.0.0, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48547, feature: {id: 9371, name: my_feature, created_date: 2021-05-24T08:39:24.938442Z, description: My feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: my_feature_value, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48549, feature: {id: 9372, name: show_title_logo, created_date: 2021-05-24T08:40:25.683907Z, description: Show logo in Navigation bar, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 52786, feature: {id: 10101, name: max_version, created_date: 2021-06-20T07:14:26.446931Z, description: Max version of package, initial_value: 3.0.0, default_enabled: false, type: STANDARD}, feature_state_value: 3.0.0, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 58, feature: {id: 24, name: try_it, created_date: 2018-06-15T11:01:46.018370Z, description: Try it panels, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 5815, feature: {id: 1530, name: segment_operators, created_date: 2019-10-07T16:25:47.073428Z, description: Determines what rules are shown when creating a segment, initial_value: [
  {
    "value": "EQUAL",
    "label": "Exactly Matches (=)"
  },
  {
    "value": "NOT_EQUAL",
    "label": "Does not match (!=)"
  },
  {
    "value": "PERCENTAGE_SPLIT",
    "label": "% Split"
  },
  {
    "value": "GREATER_THAN",
    "label": ">"
  },
  {
    "value": "GREATER_THAN_INCLUSIVE",
    "label": ">="
  },
  {
    "value": "LESS_THAN",
    "label": "<"
  },
  {
    "value": "LESS_THAN_INCLUSIVE",
    "label": "<="
  },
  {
    "value": "CONTAINS",
    "label": "Contains"
  },
  {
    "value": "NOT_CONTAINS",
    "label": "Does not contain"
  },
  {
    "value": "REGEX",
    "label": "Matches regex"
  }
], default_enabled: false, type: STANDARD}, feature_state_value: [
  {
    "value": "EQUAL",
    "label": "Exactly Matches (=)"
  },
  {
    "value": "NOT_EQUAL",
    "label": "Does not match (!=)"
  },
  {
    "value": "PERCENTAGE_SPLIT",
    "label": "% Split"
  },
  {
    "value": "GREATER_THAN",
    "label": ">"
  },
  {
    "value": "GREATER_THAN_INCLUSIVE",
    "label": ">="
  },
  {
    "value": "LESS_THAN",
    "label": "<"
  },
  {
    "value": "LESS_THAN_INCLUSIVE",
    "label": "<="
  },
  {
    "value": "CONTAINS",
    "label": "Contains"
  },
  {
    "value": "NOT_CONTAINS",
    "label": "Does not contain"
  },
  {
    "value": "REGEX",
    "label": "Matches regex"
  }
], enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 9209, feature: {id: 2201, name: demo_link_color, created_date: 2020-01-29T14:55:06.097715Z, description: Colour of demo feature, initial_value: blue, default_enabled: false, type: STANDARD}, feature_state_value: white2, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 11065, feature: {id: 2509, name: demo_feature, created_date: 2020-03-07T17:30:47.410158Z, description: Shows a demo feature in the side navigation bar, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 12307, feature: {id: 2712, name: oauth_github, created_date: 2020-03-28T21:04:37.376577Z, description: GitHub login key, initial_value: {
  "url": "https://github.com/login/oauth/authorize?scope=user&client_id=5d99dd45d6cdf4a4ac61&redirect_uri=https%3A%2F%2Fdev.bullet-train.io%2Foauth%2Fgithub"
}, default_enabled: true, type: STANDARD}, feature_state_value: {
  "url": "https://github.com/login/oauth/authorize?scope=user&client_id=5d99dd45d6cdf4a4ac61&redirect_uri=https%3A%2F%2Fdev.bullet-train.io%2Foauth%2Fgithub"
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12310, feature: {id: 2713, name: oauth_google, created_date: 2020-03-28T21:04:51.557946Z, description: Google login key, initial_value: {
 "clientId":"*****9427810-*****nrgouktp0ngsbs04o14ueb*****.apps.googleusercontent.com",
 "apiKey":"AIza****HuN-y6B********SXaz3X9GpEP*****"
}, default_enabled: false, type: STANDARD}, feature_state_value: {
 "clientId":"*****9427810-*****nrgouktp0ngsbs04o14ueb*****.apps.googleusercontent.com",
 "apiKey":"AIza****HuN-y6B********SXaz3X9GpEP*****"
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12313, feature: {id: 2714, name: oauth_facebook, created_date: 2020-03-28T21:05:00.766672Z, description: Soon TM, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12316, feature: {id: 2715, name: oauth_microsoft, created_date: 2020-03-28T21:05:13.100534Z, description: Soon TM, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: , enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27322, feature: {id: 5538, name: plan_based_access, created_date: 2020-11-04T10:50:21.174891Z, description: Controls rbac and 2f based on plans, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27418, feature: {id: 5560, name: integrations, created_date: 2020-11-05T16:52:57.918094Z, description: Defines the integrations we display, initial_value: ["amplitude", "datadog"], default_enabled: false, type: STANDARD}, feature_state_value: ["amplitude","datadog","new-relic","segment","heap","mixpanel"], enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27481, feature: {id: 5564, name: integration_data, created_date: 2020-11-06T20:17:13.139643Z, description: Integration config for different providers, initial_value: {
  "datadog": {
    "perEnvironment": false,
    "image": "https://www.vectorlogo.zone/logos/datadoghq/datadoghq-icon.svg",
    "fields": [
      {
        "key": "base_url",
        "label": "Base URL"
      },
      {
        "key": "api_key",
        "label": "API Key"
      }
    ],
    "tags": [
      "logging"
    ],
    "title": "Data dog",
    "description": "Sends events to Data dog for when flags are created, updated and removed. Logs are tagged with the environment they came from e.g. production."
  },
  "amplitude": {
    "perEnvironment": true,
    "image": "https://braze-marketing-assets.s3.amazonaws.com/images/partner_logos/amplitude-1.png",
    "fields": [
      {
        "key": "api_key",
        "label": "API Key"
      }
    ],
    "tags": [
      "analytics"
    ],
    "title": "Amplitude",
    "description": "Sends data on what flags served to each identity."
  }
}, default_enabled: false, type: STANDARD}, feature_state_value: {
    "datadog": {
        "perEnvironment": false,
        "image": "https://app.flagsmith.com/images/integrations/datadog.svg",
        "docs": "https://docs.flagsmith.com/integrations/datadog/",
        "fields": [{
            "key": "base_url",
            "label": "Base URL"
        }, {
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["logging"],
        "title": "Datadog",
        "description": "Sends events to Datadog for when flags are created, updated and removed. Logs are tagged with the environment they came from e.g. production."
    },
    "amplitude": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/amplitude.svg",
        "docs": "https://docs.flagsmith.com/integrations/amplitude/",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Amplitude",
        "description": "Sends data on what flags served to each identity."
    },
    "new-relic": {
        "perEnvironment": false,
        "image": "https://app.flagsmith.com/images/integrations/new_relic.svg",
        "docs": "https://docs.flagsmith.com/integrations/newrelic",
        "fields": [{
            "key": "base_url",
            "label": "New Relic Base URL"
        }, {
            "key": "api_key",
            "label": "New Relic API Key"
        }, {
            "key": "app_id",
            "label": "New Relic Application ID"
        }],
        "tags": ["analytics"],
        "title": "New Relic",
        "description": "Sends events to New Relic for when flags are created, updated and removed."
    },
    "segment": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/segment.svg",
        "docs": "https://docs.flagsmith.com/integrations/segment",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Segment",
        "description": "Sends data on what flags served to each identity."
    },"heap": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/heap.svg",
        "docs": "https://docs.flagsmith.com/integrations/heap",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Heap Analytics",
        "description": "Sends data on what flags served to each identity."
    },"mixpanel": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/mixpanel.svg",
        "docs": "https://docs.flagsmith.com/integrations/mixpanel",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Mixpanel",
        "description": "Sends data on what flags served to each identity."
    }
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 29558, feature: {id: 6006, name: usage_chart, created_date: 2020-11-28T11:36:45.715798Z, description: Display influx usage chart and number, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 34292, feature: {id: 6903, name: scaleup_audit, created_date: 2021-01-27T20:41:28.931473Z, description: Disables audit log for anyone under scaleup, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 35671, feature: {id: 7168, name: butter_bar, created_date: 2021-02-10T20:03:43.348556Z, description: Show html in a butter bar for certain users, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: <strong>
You are using the develop environment.
</strong>, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 37186, feature: {id: 7460, name: flag_analytics, created_date: 2021-02-23T18:53:11.138355Z, description: Surface analytics when viewing a flag, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 41662, feature: {id: 8266, name: dark_mode, created_date: 2021-03-28T11:18:17.782264Z, description: Controlled via segments, determines if the user has dark mode on, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 44942, feature: {id: 8798, name: read_only_mode, created_date: 2021-04-24T10:17:23.574373Z, description: Determines if org needs to contact sales, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 53307, feature: {id: 10202, name: saml, created_date: 2021-06-23T17:40:39.556589Z, description: Enables SAML auth, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 59621, feature: {id: 11243, name: clone_environment, created_date: 2021-08-02T12:13:36.234860Z, description: adds the ability to clone an environment, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 62248, feature: {id: 11639, name: payments_enabled, created_date: 2021-08-15T15:42:53.454540Z, description: Determines whether to show payment UI / seats, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 62798, feature: {id: 11727, name: disable_create_org, created_date: 2021-08-16T17:18:28.052286Z, description: Turning this on will prevent users from creating any additional organisations, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}]

_createSubject fake_disabled_feature -> F(fake_disabled_feature:false)
_createSubject disabled_feature -> F(disabled_feature:false)
_updateSubject enabled_feature -> true f: true
_createSubject min_version -> F(min_version:true)
_updateSubject my_feature -> true f: true
_createSubject show_title_logo -> F(show_title_logo:false)
_createSubject max_version -> F(max_version:false)
_createSubject try_it -> F(try_it:true)
_createSubject segment_operators -> F(segment_operators:true)
_createSubject demo_link_color -> F(demo_link_color:true)
_createSubject demo_feature -> F(demo_feature:false)
_createSubject oauth_github -> F(oauth_github:true)
_createSubject oauth_google -> F(oauth_google:true)
_createSubject oauth_facebook -> F(oauth_facebook:true)
_createSubject oauth_microsoft -> F(oauth_microsoft:true)
_createSubject plan_based_access -> F(plan_based_access:true)
_createSubject integrations -> F(integrations:true)
_createSubject integration_data -> F(integration_data:true)
_createSubject usage_chart -> F(usage_chart:true)
_createSubject scaleup_audit -> F(scaleup_audit:false)
_createSubject butter_bar -> F(butter_bar:true)
_createSubject flag_analytics -> F(flag_analytics:true)
_createSubject dark_mode -> F(dark_mode:false)
_createSubject read_only_mode -> F(read_only_mode:false)
_createSubject saml -> F(saml:true)
_createSubject clone_environment -> F(clone_environment:false)
_createSubject payments_enabled -> F(payments_enabled:true)
_createSubject disable_create_org -> F(disable_create_org:false)
00:05 +111 ~1: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_analytics_test.dart: [Analytics] Settings When client check flag value, then increment value in map
_createSubject my_feature -> F(my_feature:true)
_createSubject enabled_feature -> F(enabled_feature:true)
_createSubject enabled_value -> F(enabled_value:true)
*** Request ***
uri: https://offline.net/flags/
method: GET
responseType: ResponseType.json
followRedirects: true
persistentConnection: true
connectTimeout: 0:00:10.000000
sendTimeout: 0:00:20.000000
receiveTimeout: 0:00:20.000000
receiveDataWhenStatusError: true
extra: {}
headers:
 X-Environment-Key: CoJErJUXmihfMDVwTzBff4_fake
 Accept: application/json
data:
null

00:05 +113 ~1: (REDACTED)/flagsmith-flutter-client/test/fg/flagsmith_analytics_test.dart: [Analytics] Settings When client check flag value, then increment value in map
*** Response ***
uri: https://offline.net/flags/
statusCode: 200
headers:
 content-type: application/json
Response Text:
[{id: 48540, feature: {id: 9368, name: fake_disabled_feature, created_date: 2021-05-24T08:38:29.203517Z, description: Fake Disabled feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 48541, feature: {id: 9368, name: disabled_feature, created_date: 2021-05-24T08:38:29.203517Z, description: Disabled feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 48543, feature: {id: 9369, name: enabled_feature, created_date: 2021-05-24T08:38:47.375641Z, description: Enabled test feature, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48545, feature: {id: 9370, name: min_version, created_date: 2021-05-24T08:39:05.095219Z, description: test min version, initial_value: 1.0.1, default_enabled: true, type: STANDARD}, feature_state_value: 2.0.0, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48547, feature: {id: 9371, name: my_feature, created_date: 2021-05-24T08:39:24.938442Z, description: My feature, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: my_feature_value, enabled: true, environment: 7822, identity: null, feature_segment: null}, {id: 48549, feature: {id: 9372, name: show_title_logo, created_date: 2021-05-24T08:40:25.683907Z, description: Show logo in Navigation bar, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 52786, feature: {id: 10101, name: max_version, created_date: 2021-06-20T07:14:26.446931Z, description: Max version of package, initial_value: 3.0.0, default_enabled: false, type: STANDARD}, feature_state_value: 3.0.0, enabled: false, environment: 7822, identity: null, feature_segment: null}, {id: 58, feature: {id: 24, name: try_it, created_date: 2018-06-15T11:01:46.018370Z, description: Try it panels, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 5815, feature: {id: 1530, name: segment_operators, created_date: 2019-10-07T16:25:47.073428Z, description: Determines what rules are shown when creating a segment, initial_value: [
  {
    "value": "EQUAL",
    "label": "Exactly Matches (=)"
  },
  {
    "value": "NOT_EQUAL",
    "label": "Does not match (!=)"
  },
  {
    "value": "PERCENTAGE_SPLIT",
    "label": "% Split"
  },
  {
    "value": "GREATER_THAN",
    "label": ">"
  },
  {
    "value": "GREATER_THAN_INCLUSIVE",
    "label": ">="
  },
  {
    "value": "LESS_THAN",
    "label": "<"
  },
  {
    "value": "LESS_THAN_INCLUSIVE",
    "label": "<="
  },
  {
    "value": "CONTAINS",
    "label": "Contains"
  },
  {
    "value": "NOT_CONTAINS",
    "label": "Does not contain"
  },
  {
    "value": "REGEX",
    "label": "Matches regex"
  }
], default_enabled: false, type: STANDARD}, feature_state_value: [
  {
    "value": "EQUAL",
    "label": "Exactly Matches (=)"
  },
  {
    "value": "NOT_EQUAL",
    "label": "Does not match (!=)"
  },
  {
    "value": "PERCENTAGE_SPLIT",
    "label": "% Split"
  },
  {
    "value": "GREATER_THAN",
    "label": ">"
  },
  {
    "value": "GREATER_THAN_INCLUSIVE",
    "label": ">="
  },
  {
    "value": "LESS_THAN",
    "label": "<"
  },
  {
    "value": "LESS_THAN_INCLUSIVE",
    "label": "<="
  },
  {
    "value": "CONTAINS",
    "label": "Contains"
  },
  {
    "value": "NOT_CONTAINS",
    "label": "Does not contain"
  },
  {
    "value": "REGEX",
    "label": "Matches regex"
  }
], enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 9209, feature: {id: 2201, name: demo_link_color, created_date: 2020-01-29T14:55:06.097715Z, description: Colour of demo feature, initial_value: blue, default_enabled: false, type: STANDARD}, feature_state_value: white2, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 11065, feature: {id: 2509, name: demo_feature, created_date: 2020-03-07T17:30:47.410158Z, description: Shows a demo feature in the side navigation bar, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 12307, feature: {id: 2712, name: oauth_github, created_date: 2020-03-28T21:04:37.376577Z, description: GitHub login key, initial_value: {
  "url": "https://github.com/login/oauth/authorize?scope=user&client_id=5d99dd45d6cdf4a4ac61&redirect_uri=https%3A%2F%2Fdev.bullet-train.io%2Foauth%2Fgithub"
}, default_enabled: true, type: STANDARD}, feature_state_value: {
  "url": "https://github.com/login/oauth/authorize?scope=user&client_id=5d99dd45d6cdf4a4ac61&redirect_uri=https%3A%2F%2Fdev.bullet-train.io%2Foauth%2Fgithub"
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12310, feature: {id: 2713, name: oauth_google, created_date: 2020-03-28T21:04:51.557946Z, description: Google login key, initial_value: {
 "clientId":"*****9427810-*****nrgouktp0ngsbs04o14ueb*****.apps.googleusercontent.com",
 "apiKey":"AIza****HuN-y6B********SXaz3X9GpEP*****"
}, default_enabled: false, type: STANDARD}, feature_state_value: {
 "clientId":"*****9427810-*****nrgouktp0ngsbs04o14ueb*****.apps.googleusercontent.com",
 "apiKey":"AIza****HuN-y6B********SXaz3X9GpEP*****"
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12313, feature: {id: 2714, name: oauth_facebook, created_date: 2020-03-28T21:05:00.766672Z, description: Soon TM, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 12316, feature: {id: 2715, name: oauth_microsoft, created_date: 2020-03-28T21:05:13.100534Z, description: Soon TM, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: , enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27322, feature: {id: 5538, name: plan_based_access, created_date: 2020-11-04T10:50:21.174891Z, description: Controls rbac and 2f based on plans, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27418, feature: {id: 5560, name: integrations, created_date: 2020-11-05T16:52:57.918094Z, description: Defines the integrations we display, initial_value: ["amplitude", "datadog"], default_enabled: false, type: STANDARD}, feature_state_value: ["amplitude","datadog","new-relic","segment","heap","mixpanel"], enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 27481, feature: {id: 5564, name: integration_data, created_date: 2020-11-06T20:17:13.139643Z, description: Integration config for different providers, initial_value: {
  "datadog": {
    "perEnvironment": false,
    "image": "https://www.vectorlogo.zone/logos/datadoghq/datadoghq-icon.svg",
    "fields": [
      {
        "key": "base_url",
        "label": "Base URL"
      },
      {
        "key": "api_key",
        "label": "API Key"
      }
    ],
    "tags": [
      "logging"
    ],
    "title": "Data dog",
    "description": "Sends events to Data dog for when flags are created, updated and removed. Logs are tagged with the environment they came from e.g. production."
  },
  "amplitude": {
    "perEnvironment": true,
    "image": "https://braze-marketing-assets.s3.amazonaws.com/images/partner_logos/amplitude-1.png",
    "fields": [
      {
        "key": "api_key",
        "label": "API Key"
      }
    ],
    "tags": [
      "analytics"
    ],
    "title": "Amplitude",
    "description": "Sends data on what flags served to each identity."
  }
}, default_enabled: false, type: STANDARD}, feature_state_value: {
    "datadog": {
        "perEnvironment": false,
        "image": "https://app.flagsmith.com/images/integrations/datadog.svg",
        "docs": "https://docs.flagsmith.com/integrations/datadog/",
        "fields": [{
            "key": "base_url",
            "label": "Base URL"
        }, {
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["logging"],
        "title": "Datadog",
        "description": "Sends events to Datadog for when flags are created, updated and removed. Logs are tagged with the environment they came from e.g. production."
    },
    "amplitude": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/amplitude.svg",
        "docs": "https://docs.flagsmith.com/integrations/amplitude/",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Amplitude",
        "description": "Sends data on what flags served to each identity."
    },
    "new-relic": {
        "perEnvironment": false,
        "image": "https://app.flagsmith.com/images/integrations/new_relic.svg",
        "docs": "https://docs.flagsmith.com/integrations/newrelic",
        "fields": [{
            "key": "base_url",
            "label": "New Relic Base URL"
        }, {
            "key": "api_key",
            "label": "New Relic API Key"
        }, {
            "key": "app_id",
            "label": "New Relic Application ID"
        }],
        "tags": ["analytics"],
        "title": "New Relic",
        "description": "Sends events to New Relic for when flags are created, updated and removed."
    },
    "segment": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/segment.svg",
        "docs": "https://docs.flagsmith.com/integrations/segment",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Segment",
        "description": "Sends data on what flags served to each identity."
    },"heap": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/heap.svg",
        "docs": "https://docs.flagsmith.com/integrations/heap",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Heap Analytics",
        "description": "Sends data on what flags served to each identity."
    },"mixpanel": {
        "perEnvironment": true,
        "image": "https://app.flagsmith.com/images/integrations/mixpanel.svg",
        "docs": "https://docs.flagsmith.com/integrations/mixpanel",
        "fields": [{
            "key": "api_key",
            "label": "API Key"
        }],
        "tags": ["analytics"],
        "title": "Mixpanel",
        "description": "Sends data on what flags served to each identity."
    }
}, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 29558, feature: {id: 6006, name: usage_chart, created_date: 2020-11-28T11:36:45.715798Z, description: Display influx usage chart and number, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 34292, feature: {id: 6903, name: scaleup_audit, created_date: 2021-01-27T20:41:28.931473Z, description: Disables audit log for anyone under scaleup, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 35671, feature: {id: 7168, name: butter_bar, created_date: 2021-02-10T20:03:43.348556Z, description: Show html in a butter bar for certain users, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: <strong>
You are using the develop environment.
</strong>, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 37186, feature: {id: 7460, name: flag_analytics, created_date: 2021-02-23T18:53:11.138355Z, description: Surface analytics when viewing a flag, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 41662, feature: {id: 8266, name: dark_mode, created_date: 2021-03-28T11:18:17.782264Z, description: Controlled via segments, determines if the user has dark mode on, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 44942, feature: {id: 8798, name: read_only_mode, created_date: 2021-04-24T10:17:23.574373Z, description: Determines if org needs to contact sales, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 53307, feature: {id: 10202, name: saml, created_date: 2021-06-23T17:40:39.556589Z, description: Enables SAML auth, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 59621, feature: {id: 11243, name: clone_environment, created_date: 2021-08-02T12:13:36.234860Z, description: adds the ability to clone an environment, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}, {id: 62248, feature: {id: 11639, name: payments_enabled, created_date: 2021-08-15T15:42:53.454540Z, description: Determines whether to show payment UI / seats, initial_value: null, default_enabled: true, type: STANDARD}, feature_state_value: null, enabled: true, environment: 23, identity: null, feature_segment: null}, {id: 62798, feature: {id: 11727, name: disable_create_org, created_date: 2021-08-16T17:18:28.052286Z, description: Turning this on will prevent users from creating any additional organisations, initial_value: null, default_enabled: false, type: STANDARD}, feature_state_value: null, enabled: false, environment: 23, identity: null, feature_segment: null}]

_createSubject fake_disabled_feature -> F(fake_disabled_feature:false)
_createSubject disabled_feature -> F(disabled_feature:false)
_updateSubject enabled_feature -> true f: true
_createSubject min_version -> F(min_version:true)
_updateSubject my_feature -> true f: true
_createSubject show_title_logo -> F(show_title_logo:false)
_createSubject max_version -> F(max_version:false)
_createSubject try_it -> F(try_it:true)
_createSubject segment_operators -> F(segment_operators:true)
_createSubject demo_link_color -> F(demo_link_color:true)
_createSubject demo_feature -> F(demo_feature:false)
_createSubject oauth_github -> F(oauth_github:true)
_createSubject oauth_google -> F(oauth_google:true)
_createSubject oauth_facebook -> F(oauth_facebook:true)
_createSubject oauth_microsoft -> F(oauth_microsoft:true)
_createSubject plan_based_access -> F(plan_based_access:true)
_createSubject integrations -> F(integrations:true)
_createSubject integration_data -> F(integration_data:true)
_createSubject usage_chart -> F(usage_chart:true)
_createSubject scaleup_audit -> F(scaleup_audit:false)
_createSubject butter_bar -> F(butter_bar:true)
_createSubject flag_analytics -> F(flag_analytics:true)
_createSubject dark_mode -> F(dark_mode:false)
_createSubject read_only_mode -> F(read_only_mode:false)
_createSubject saml -> F(saml:true)
_createSubject clone_environment -> F(clone_environment:false)
_createSubject payments_enabled -> F(payments_enabled:true)
_createSubject disable_create_org -> F(disable_create_org:false)
00:06 +119 ~1: All tests passed!                                                                                                                                                 

yuzurihaaa avatar Nov 29 '24 06:11 yuzurihaaa