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