diff options
Diffstat (limited to 'spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb')
-rw-r--r-- | spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb b/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb index ee3c55cb642..5263fd40a40 100644 --- a/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb +++ b/spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Metrics::Dashboard::GrafanaMetricEmbedService do include ReactiveCachingHelpers include GrafanaApiHelpers - let_it_be(:project) { build(:project) } + let_it_be(:project) { create(:project) } let_it_be(:user) { create(:user) } let_it_be(:grafana_integration) { create(:grafana_integration, project: project) } @@ -15,7 +15,7 @@ RSpec.describe Metrics::Dashboard::GrafanaMetricEmbedService do valid_grafana_dashboard_link(grafana_integration.grafana_url) end - before do + before_all do project.add_maintainer(user) end @@ -58,6 +58,31 @@ RSpec.describe Metrics::Dashboard::GrafanaMetricEmbedService do expect(subject.current_user).to eq(user) expect(subject.params[:grafana_url]).to eq(grafana_url) end + + context 'with unknown users' do + let(:params) { [project.id, current_user_id, grafana_url] } + + context 'when anonymous' do + where(:current_user_id) do + [nil, ''] + end + + with_them do + it 'sets current_user as nil' do + expect(subject.current_user).to be_nil + end + end + end + + context 'when invalid' do + let(:current_user_id) { non_existing_record_id } + + it 'raise record not found error' do + expect { subject } + .to raise_error(ActiveRecord::RecordNotFound, /Couldn't find User/) + end + end + end end describe '#get_dashboard', :use_clean_rails_memory_store_caching do @@ -145,7 +170,17 @@ RSpec.describe Metrics::Dashboard::GrafanaMetricEmbedService do stub_datasource_request(grafana_integration.grafana_url) end - it_behaves_like 'valid embedded dashboard service response' + context 'when project is private and user is member' do + it_behaves_like 'valid embedded dashboard service response' + end + + context 'when project is public and user is anonymous' do + let(:project) { create(:project, :public) } + let(:user) { nil } + let(:grafana_integration) { create(:grafana_integration, project: project) } + + it_behaves_like 'valid embedded dashboard service response' + end end end |