spec/elastic_apm/normalizers/action_view_spec.rb (64 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'
require 'elastic_apm/normalizers'
require 'elastic_apm/normalizers/rails'
module ElasticAPM
module Normalizers
RSpec.describe ActionView do
let(:normalizers) do
config = Config.new.tap do |c|
c.__view_paths = ['/var/www/app/views']
end
Normalizers.build(config)
end
shared_examples_for :action_view_normalizer do |key|
describe '#normalize' do
it 'normalizes an unknown template' do
result = subject.normalize(nil, key, {})
type = described_class.const_get(:TYPE)
subtype = described_class.const_get(:SUBTYPE)
expected = ['Unknown template', type, subtype, action, nil]
expect(result).to eq expected
end
it 'returns a local template' do
path = 'somewhere/local.html.erb'
result, * = subject.normalize(nil, key, identifier: path)
expect(result).to eq 'somewhere/local.html.erb'
end
it 'looks up a template in config.view_paths' do
path = '/var/www/app/views/users/index.html.erb'
result, * = subject.normalize(nil, key, identifier: path)
expect(result).to eq 'users/index.html.erb'
end
it 'truncates gem path' do
path = "#{Gem.path[0]}/some/template.html.erb"
result, * = subject.normalize(nil, key, identifier: path)
expect(result).to eq '$GEM_PATH/some/template.html.erb'
end
it 'returns absolute if not found in known dirs' do
path = '/somewhere/else.html.erb'
expect(subject.normalize(nil, key, identifier: path)[0])
.to eq 'Absolute path'
end
end
end
describe ActionView::RenderTemplateNormalizer do
let(:action) { nil }
subject { normalizers.for('render_template.action_view') }
it { expect(subject).to be_a ActionView::RenderTemplateNormalizer }
it_should_behave_like :action_view_normalizer
end
describe ActionView::RenderPartialNormalizer do
let(:action) { 'partial' }
subject { normalizers.for('render_partial.action_view') }
it { expect(subject).to be_a ActionView::RenderPartialNormalizer }
it_should_behave_like :action_view_normalizer
end
describe ActionView::RenderCollectionNormalizer do
let(:action) { 'collection' }
subject { normalizers.for('render_collection.action_view') }
it { expect(subject).to be_a ActionView::RenderCollectionNormalizer }
it_should_behave_like :action_view_normalizer
end
end
end
end