Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion lib/schematic/schematic_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,6 @@ def check_flags_via_datastream(keys, company, user)
keys.each do |key|
result = @datastream_client.check_flag(eval_ctx, key)
response = CheckFlagResponse.new(result)
enqueue_flag_check_event(key, response, company, user)
results << { flag: key, value: response.value, reason: response.reason }
rescue DataStream::EvaluationError => e
@logger.debug("DataStream check_flags falling back to API: #{e.message}")
Expand Down
34 changes: 34 additions & 0 deletions test/custom.test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,40 @@ def stop = @inner.stop
WebMock.reset!
end

it "does not enqueue flag_check events for bulk check_flags via DataStream" do
captured_bodies = []
stub_request(:post, CAPTURE_URL).to_return do |req|
captured_bodies << JSON.parse(req.body, symbolize_names: true)
{ status: 200 }
end

client = Schematic::SchematicClient.new(api_key: "api_test_key_123")

mock_ds = Object.new
mock_ds.define_singleton_method(:connected?) { true }
mock_ds.define_singleton_method(:close) { nil }
mock_ds.define_singleton_method(:check_flag) do |_eval_ctx, flag_key|
{ value: true, flag_key: flag_key, reason: "match" }
end
client.instance_variable_set(:@datastream_client, mock_ds)

client.check_flags(
company: { "org_id" => "abc" },
keys: %w[ds-flag-a ds-flag-b]
)

# Force the buffer to flush any pending events
client.instance_variable_get(:@event_buffer).flush

flag_check_events = captured_bodies.flat_map { |b| b[:events] || [] }
.select { |e| e[:type] == "flag_check" }

assert_empty flag_check_events, "bulk check_flags should not emit flag_check events"

client.close
WebMock.reset!
end

it "falls back to API when any DataStream flag evaluation fails" do
stub_request(:post, CAPTURE_URL).to_return(status: 200)

Expand Down