@@ -98,6 +98,66 @@ def init(_evaluation_context)
9898 end
9999 end
100100
101+ context "Requirement 5.1.4" do
102+ specify "PROVIDER_ERROR events SHOULD populate the error message field" do
103+ event_details_received = nil
104+ handler = -> ( event_details ) { event_details_received = event_details }
105+
106+ OpenFeature ::SDK . add_handler ( OpenFeature ::SDK ::ProviderEvent ::PROVIDER_ERROR , handler )
107+
108+ provider = OpenFeature ::SDK ::Provider ::InMemoryProvider . new
109+ allow ( provider ) . to receive ( :init ) . and_raise ( "Custom init failure" )
110+
111+ OpenFeature ::SDK . set_provider ( provider )
112+ sleep ( 0.001 ) until event_details_received
113+
114+ expect ( event_details_received [ :message ] ) . to eq ( "Custom init failure" )
115+
116+ OpenFeature ::SDK . remove_handler ( OpenFeature ::SDK ::ProviderEvent ::PROVIDER_ERROR , handler )
117+ end
118+ end
119+
120+ context "Requirement 5.1.5" do
121+ specify "PROVIDER_ERROR events SHOULD populate the error code field" do
122+ event_details_received = nil
123+ handler = -> ( event_details ) { event_details_received = event_details }
124+
125+ OpenFeature ::SDK . add_handler ( OpenFeature ::SDK ::ProviderEvent ::PROVIDER_ERROR , handler )
126+
127+ provider = OpenFeature ::SDK ::Provider ::InMemoryProvider . new
128+ allow ( provider ) . to receive ( :init ) . and_raise ( "Init failed" )
129+
130+ OpenFeature ::SDK . set_provider ( provider )
131+ sleep ( 0.001 ) until event_details_received
132+
133+ expect ( event_details_received [ :error_code ] ) . to eq ( OpenFeature ::SDK ::Provider ::ErrorCode ::GENERAL )
134+
135+ OpenFeature ::SDK . remove_handler ( OpenFeature ::SDK ::ProviderEvent ::PROVIDER_ERROR , handler )
136+ end
137+
138+ specify "error details are available in immediate handlers attached after the error" do
139+ provider = OpenFeature ::SDK ::Provider ::InMemoryProvider . new
140+ allow ( provider ) . to receive ( :init ) . and_raise ( "Delayed failure" )
141+
142+ begin
143+ OpenFeature ::SDK . set_provider_and_wait ( provider )
144+ rescue OpenFeature ::SDK ::ProviderInitializationError
145+ # Expected — provider init fails, putting provider in ERROR state
146+ end
147+
148+ event_details_received = nil
149+ handler = -> ( event_details ) { event_details_received = event_details }
150+
151+ OpenFeature ::SDK . add_handler ( OpenFeature ::SDK ::ProviderEvent ::PROVIDER_ERROR , handler )
152+
153+ expect ( event_details_received ) . not_to be_nil
154+ expect ( event_details_received [ :error_code ] ) . to eq ( OpenFeature ::SDK ::Provider ::ErrorCode ::GENERAL )
155+ expect ( event_details_received [ :message ] ) . to eq ( "Delayed failure" )
156+
157+ OpenFeature ::SDK . remove_handler ( OpenFeature ::SDK ::ProviderEvent ::PROVIDER_ERROR , handler )
158+ end
159+ end
160+
101161 context "Requirement 5.2.1" do
102162 specify "The client MUST provide a function for associating handler functions with provider event types" do
103163 client = OpenFeature ::SDK . build_client ( domain : "test-domain" )
0 commit comments