|
100 | 100 | pending |
101 | 101 | end |
102 | 102 |
|
| 103 | + context "Requirement 1.3.4" do |
| 104 | + context "Guarantee the returned value of any typed flag evaluation method is of the expected type. If the value returned by the underlying provider implementation does not match the expected type, it's to be considered abnormal execution, and the supplied default value should be returned." do |
| 105 | + let(:provider) do |
| 106 | + OpenFeature::SDK::Provider::InMemoryProvider.new( |
| 107 | + { |
| 108 | + "bool" => "no", |
| 109 | + "str" => 123, |
| 110 | + "num" => true, |
| 111 | + "int" => "one", |
| 112 | + "float" => "1.23", |
| 113 | + "obj" => "{}" |
| 114 | + } |
| 115 | + ) |
| 116 | + end |
| 117 | + |
| 118 | + context "boolean value" do |
| 119 | + let(:flag_key) { "bool" } |
| 120 | + let(:default_value) { false } |
| 121 | + |
| 122 | + it "returns default as type mismatch" do |
| 123 | + fetched = client.fetch_boolean_details(flag_key:, default_value:) |
| 124 | + |
| 125 | + expect(fetched.value).to be(default_value) |
| 126 | + expect(fetched.error_code).to eq(OpenFeature::SDK::Provider::ErrorCode::TYPE_MISMATCH) |
| 127 | + expect(fetched.reason).to eq(OpenFeature::SDK::Provider::Reason::ERROR) |
| 128 | + end |
| 129 | + end |
| 130 | + |
| 131 | + context "string value" do |
| 132 | + let(:flag_key) { "str" } |
| 133 | + let(:default_value) { "default" } |
| 134 | + |
| 135 | + it "returns default as type mismatch" do |
| 136 | + fetched = client.fetch_string_details(flag_key:, default_value:) |
| 137 | + |
| 138 | + expect(fetched.value).to be(default_value) |
| 139 | + expect(fetched.error_code).to eq(OpenFeature::SDK::Provider::ErrorCode::TYPE_MISMATCH) |
| 140 | + expect(fetched.reason).to eq(OpenFeature::SDK::Provider::Reason::ERROR) |
| 141 | + end |
| 142 | + end |
| 143 | + |
| 144 | + context "number value" do |
| 145 | + let(:flag_key) { "num" } |
| 146 | + let(:default_value) { 4 } |
| 147 | + |
| 148 | + it "returns default as type mismatch" do |
| 149 | + fetched = client.fetch_number_details(flag_key:, default_value:) |
| 150 | + |
| 151 | + expect(fetched.value).to be(default_value) |
| 152 | + expect(fetched.error_code).to eq(OpenFeature::SDK::Provider::ErrorCode::TYPE_MISMATCH) |
| 153 | + expect(fetched.reason).to eq(OpenFeature::SDK::Provider::Reason::ERROR) |
| 154 | + end |
| 155 | + end |
| 156 | + |
| 157 | + context "integer value" do |
| 158 | + let(:flag_key) { "int" } |
| 159 | + let(:default_value) { 4 } |
| 160 | + |
| 161 | + it "returns default as type mismatch" do |
| 162 | + fetched = client.fetch_integer_details(flag_key:, default_value:) |
| 163 | + |
| 164 | + expect(fetched.value).to be(default_value) |
| 165 | + expect(fetched.error_code).to eq(OpenFeature::SDK::Provider::ErrorCode::TYPE_MISMATCH) |
| 166 | + expect(fetched.reason).to eq(OpenFeature::SDK::Provider::Reason::ERROR) |
| 167 | + end |
| 168 | + end |
| 169 | + |
| 170 | + context "float value" do |
| 171 | + let(:flag_key) { "float" } |
| 172 | + let(:default_value) { 1.23 } |
| 173 | + |
| 174 | + it "returns default as type mismatch" do |
| 175 | + fetched = client.fetch_float_details(flag_key:, default_value:) |
| 176 | + |
| 177 | + expect(fetched.value).to be(default_value) |
| 178 | + expect(fetched.error_code).to eq(OpenFeature::SDK::Provider::ErrorCode::TYPE_MISMATCH) |
| 179 | + expect(fetched.reason).to eq(OpenFeature::SDK::Provider::Reason::ERROR) |
| 180 | + end |
| 181 | + end |
| 182 | + |
| 183 | + context "object value" do |
| 184 | + let(:flag_key) { "obj" } |
| 185 | + let(:default_value) { {} } |
| 186 | + |
| 187 | + it "returns default as type mismatch" do |
| 188 | + fetched = client.fetch_object_details(flag_key:, default_value:) |
| 189 | + |
| 190 | + expect(fetched.value).to be(default_value) |
| 191 | + expect(fetched.error_code).to eq(OpenFeature::SDK::Provider::ErrorCode::TYPE_MISMATCH) |
| 192 | + expect(fetched.reason).to eq(OpenFeature::SDK::Provider::Reason::ERROR) |
| 193 | + end |
| 194 | + end |
| 195 | + end |
| 196 | + end |
| 197 | + |
103 | 198 | context "Detailed Feature Evaluation" do |
104 | 199 | let(:flag_key) { "my-awesome-feature-flag-key" } |
105 | 200 |
|
|
0 commit comments