diff --git a/spec/scripts/internal_events/cli_spec.rb b/spec/scripts/internal_events/cli_spec.rb
index 30d4db7d195977f2d03c349875ba3b876a1fec3a..3bbda97d4b3d0103e165d78b93e7f782f8179eeb 100644
--- a/spec/scripts/internal_events/cli_spec.rb
+++ b/spec/scripts/internal_events/cli_spec.rb
@@ -85,6 +85,29 @@ def wait_for_cli_completion
     end
   end
 
+  shared_examples 'definition fixtures are valid' do |directory, schema_path|
+    let(:schema) { ::JSONSchemer.schema(Pathname(schema_path)) }
+    # The generator can return an invalid definition if the user skips the MR link
+    let(:expected_errors) { a_hash_including('data_pointer' => '/introduced_by_url', 'data' => 'TODO') }
+
+    it "for #{directory}", :aggregate_failures do
+      Dir[Rails.root.join('spec', 'fixtures', 'scripts', 'internal_events', directory, '*.yml')].each do |filepath|
+        attributes = YAML.safe_load(File.read(filepath))
+        errors = schema.validate(attributes).to_a
+
+        error_message = <<~TEXT
+        Unexpected validation errors in: #{filepath}
+        #{errors.map { |e| JSONSchemer::Errors.pretty(e) }.join("\n")}
+        TEXT
+
+        expect(errors).to contain_exactly(expected_errors), error_message
+      end
+    end
+  end
+
+  it_behaves_like 'definition fixtures are valid', 'events', 'config/events/schema.json'
+  it_behaves_like 'definition fixtures are valid', 'metrics', 'config/metrics/schema/base.json'
+
   context 'when creating new events' do
     YAML.safe_load(File.read('spec/fixtures/scripts/internal_events/new_events.yml')).each do |test_case|
       it_behaves_like 'creates the right defintion files', test_case['description'], test_case