|
222 | 222 | end |
223 | 223 | end |
224 | 224 |
|
| 225 | + context "1.4 - Flag Metadata" do |
| 226 | + context "Requirement 1.4.14" do |
| 227 | + specify "flag_metadata defaults to an empty hash when not provided" do |
| 228 | + resolution = OpenFeature::SDK::Provider::ResolutionDetails.new(value: true) |
| 229 | + expect(resolution.flag_metadata).to eq({}) |
| 230 | + end |
| 231 | + |
| 232 | + specify "flag_metadata defaults to an empty hash when explicitly set to nil" do |
| 233 | + resolution = OpenFeature::SDK::Provider::ResolutionDetails.new(value: true, flag_metadata: nil) |
| 234 | + expect(resolution.flag_metadata).to eq({}) |
| 235 | + end |
| 236 | + |
| 237 | + specify "flag_metadata preserves provided values" do |
| 238 | + metadata = {"scope" => "user", "version" => 2} |
| 239 | + resolution = OpenFeature::SDK::Provider::ResolutionDetails.new(value: true, flag_metadata: metadata) |
| 240 | + expect(resolution.flag_metadata).to eq({"scope" => "user", "version" => 2}) |
| 241 | + end |
| 242 | + |
| 243 | + specify "flag_metadata defaults correctly through client evaluation" do |
| 244 | + provider = OpenFeature::SDK::Provider::NoOpProvider.new |
| 245 | + OpenFeature::SDK.set_provider(provider) |
| 246 | + client = OpenFeature::SDK.build_client |
| 247 | + |
| 248 | + details = client.fetch_boolean_details(flag_key: "test", default_value: false) |
| 249 | + expect(details.flag_metadata).to eq({}) |
| 250 | + end |
| 251 | + end |
| 252 | + |
| 253 | + context "Requirement 1.4.15.1" do |
| 254 | + specify "flag_metadata is frozen when not provided" do |
| 255 | + resolution = OpenFeature::SDK::Provider::ResolutionDetails.new(value: true) |
| 256 | + expect(resolution.flag_metadata).to be_frozen |
| 257 | + end |
| 258 | + |
| 259 | + specify "flag_metadata is frozen when provided" do |
| 260 | + metadata = {"scope" => "user"} |
| 261 | + resolution = OpenFeature::SDK::Provider::ResolutionDetails.new(value: true, flag_metadata: metadata) |
| 262 | + expect(resolution.flag_metadata).to be_frozen |
| 263 | + end |
| 264 | + |
| 265 | + specify "flag_metadata cannot be mutated" do |
| 266 | + metadata = {"scope" => "user"} |
| 267 | + resolution = OpenFeature::SDK::Provider::ResolutionDetails.new(value: true, flag_metadata: metadata) |
| 268 | + expect { resolution.flag_metadata["new_key"] = "value" }.to raise_error(FrozenError) |
| 269 | + end |
| 270 | + end |
| 271 | + end |
| 272 | + |
225 | 273 | context "Logger Methods" do |
226 | 274 | specify "delegates logger getter to configuration" do |
227 | 275 | logger = double("Logger") |
|
0 commit comments