|
| 1 | +# frozen_string_literal: true |
| 2 | + |
| 3 | +require 'spec_helper' |
| 4 | + |
| 5 | + |
| 6 | +RSpec.describe Flagsmith::Client do |
| 7 | + it "gets environment flags with an environment document with an offline_handler" do |
| 8 | + offline_handler = \ |
| 9 | + Flagsmith::OfflineHandlers::LocalFileHandler.new("spec/sdk/fixtures/environment.json") |
| 10 | + |
| 11 | + flagsmith = Flagsmith::Client.new( |
| 12 | + offline_mode: true, |
| 13 | + offline_handler: offline_handler, |
| 14 | + ) |
| 15 | + |
| 16 | + response = flagsmith.get_environment_flags |
| 17 | + expect(response.count).to eq(1) |
| 18 | + expect(response.first[-1].feature_name).to eq("some_feature") |
| 19 | + end |
| 20 | + |
| 21 | + it "gets identity flags with an offline_handler" do |
| 22 | + offline_handler = \ |
| 23 | + Flagsmith::OfflineHandlers::LocalFileHandler.new("spec/sdk/fixtures/environment.json") |
| 24 | + |
| 25 | + flagsmith = Flagsmith::Client.new( |
| 26 | + offline_mode: true, |
| 27 | + offline_handler: offline_handler, |
| 28 | + ) |
| 29 | + |
| 30 | + response = flagsmith.get_identity_flags("some_identity") |
| 31 | + expect(response.first[-1].feature_name).to eq("some_feature") |
| 32 | + end |
| 33 | + |
| 34 | + it "raises an error if offline_mode is present but offline_handler is missing" do |
| 35 | + expect { |
| 36 | + flagsmith = Flagsmith::Client.new(offline_mode: true) |
| 37 | + }.to raise_error( |
| 38 | + Flagsmith::ClientError, |
| 39 | + "The offline_mode config param requires a matching offline_handler." |
| 40 | + ) |
| 41 | + end |
| 42 | + |
| 43 | + it "raises an error if both the default_flag_handler and offline_handler are used" do |
| 44 | + default_flag_handler = lambda { |feature_name| |
| 45 | + Flagsmith::Flags::DefaultFlag.new(enabled: false, value: {}.to_json) |
| 46 | + } |
| 47 | + offline_handler = \ |
| 48 | + Flagsmith::OfflineHandlers::LocalFileHandler.new("spec/sdk/fixtures/environment.json") |
| 49 | + expect { |
| 50 | + Flagsmith::Client.new( |
| 51 | + default_flag_handler: default_flag_handler, |
| 52 | + offline_handler: offline_handler, |
| 53 | + ) |
| 54 | + }.to raise_error( |
| 55 | + Flagsmith::ClientError, |
| 56 | + "Cannot use offline_handler and default_flag_handler at the same time." |
| 57 | + ) |
| 58 | + end |
| 59 | +end |
| 60 | + |
| 61 | +RSpec.describe Flagsmith::Flags::Collection do |
| 62 | + it "works with get_flag with an offline_handler" do |
| 63 | + offline_handler = \ |
| 64 | + Flagsmith::OfflineHandlers::LocalFileHandler.new("spec/sdk/fixtures/environment.json") |
| 65 | + |
| 66 | + flags_collection = Flagsmith::Flags::Collection.new(offline_handler: offline_handler) |
| 67 | + flag = flags_collection.get_flag("some_feature") |
| 68 | + |
| 69 | + expect(flag.feature_name).to eq("some_feature") |
| 70 | + expect(flag.value).to eq("some-value") |
| 71 | + end |
| 72 | +end |
0 commit comments