From e94b26c861f80efd63361f15da8964a6d62c3093 Mon Sep 17 00:00:00 2001 From: Anton Smith <asmith@gitlab.com> Date: Thu, 4 Jul 2024 16:54:50 +0000 Subject: [PATCH] Fix broken schema path The schema path on an Omnibus GitLab instance can be incorrect causing a 500 error in the group analytics dashboard. This change fixes that scenario by returning the path to the root of the Rails application. Changelog: fixed EE: true --- .../concerns/product_analytics/schema_validator.rb | 2 +- .../models/product_analytics/visualization_spec.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ee/app/models/concerns/product_analytics/schema_validator.rb b/ee/app/models/concerns/product_analytics/schema_validator.rb index 5b8fc4d161d00..140bfe8fe14d0 100644 --- a/ee/app/models/concerns/product_analytics/schema_validator.rb +++ b/ee/app/models/concerns/product_analytics/schema_validator.rb @@ -3,7 +3,7 @@ module ProductAnalytics module SchemaValidator def schema_errors_for(yaml) - validator = JSONSchemer.schema(Pathname.new(self.class::SCHEMA_PATH)) + validator = JSONSchemer.schema(Pathname.new(Rails.root.join(self.class::SCHEMA_PATH))) validator_errors = validator.validate(yaml) validator_errors.map { |e| JSONSchemer::Errors.pretty(e) } if validator_errors.any? end diff --git a/ee/spec/models/product_analytics/visualization_spec.rb b/ee/spec/models/product_analytics/visualization_spec.rb index 174b6fb733ec1..30cd6a21d413c 100644 --- a/ee/spec/models/product_analytics/visualization_spec.rb +++ b/ee/spec/models/product_analytics/visualization_spec.rb @@ -47,6 +47,17 @@ end end + describe '#schema_errors_for' do + let(:dashboard) { dashboards.find { |d| d.title == 'Audience' } } + + it 'fetches correct schema path' do + allow(JSONSchemer).to receive(:schema).and_call_original + expect(JSONSchemer).to receive(:schema).with(Rails.root.join(described_class::SCHEMA_PATH)) + + dashboard.panels.first.visualization + end + end + describe '.for' do context 'when resource_parent is a Project' do subject { described_class.for(container: project, user: user) } -- GitLab