spec/elastic_apm/span_helpers_spec.rb (67 lines of code) (raw):

# Licensed to Elasticsearch B.V. under one or more contributor # license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright # ownership. Elasticsearch B.V. licenses this file to you under # the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # frozen_string_literal: true require 'spec_helper' module ElasticAPM RSpec.describe SpanHelpers do class Thing include ElasticAPM::SpanHelpers def do_the_thing 'ok' end span_method :do_the_thing def self.do_all_things 'all ok' end span_class_method :do_all_things def do_the_block_thing(&block) block.call end span_method :do_the_block_thing def do_mixed_args_thing(one, two, three: nil) [one, two, three] end span_method :do_mixed_args_thing end context 'on class methods', :intercept do it 'wraps in a span' do with_agent do ElasticAPM.with_transaction do Thing.do_all_things end end expect(@intercepted.spans.length).to be 1 expect(@intercepted.spans.last.name).to eq 'do_all_things' end end context 'on instance methods', :intercept do it 'wraps in a span' do thing = Thing.new with_agent do ElasticAPM.with_transaction do thing.do_the_thing end end expect(@intercepted.spans.length).to be 1 expect(@intercepted.spans.last.name).to eq 'do_the_thing' end it 'handles blocks' do thing = Thing.new with_agent do ElasticAPM.with_transaction do thing.do_the_block_thing { 'ok' } end end expect(@intercepted.spans.length).to be 1 expect(@intercepted.spans.last.name).to eq 'do_the_block_thing' end it 'handles mixed positional and keyword arguments' do thing = Thing.new with_agent do ElasticAPM.with_transaction do thing.do_mixed_args_thing('one', 'two', three: 'three') end end expect(@intercepted.spans.length).to be 1 expect(@intercepted.spans.last.name).to eq 'do_mixed_args_thing' end end end end