Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/db/docs_spec.rb')
-rw-r--r--spec/db/docs_spec.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/spec/db/docs_spec.rb b/spec/db/docs_spec.rb
index 6cfff725988..5960b8bebcc 100644
--- a/spec/db/docs_spec.rb
+++ b/spec/db/docs_spec.rb
@@ -2,12 +2,20 @@
require 'spec_helper'
+# This list is used to provide temporary exceptions for feature categories
+# that are transitioning and not yet in the feature_categories.yml file
+# any additions here should be accompanied by a link to an issue link
+VALID_FEATURE_CATEGORIES = [
+ 'jihu' # https://gitlab.com/gitlab-org/database-team/team-tasks/-/issues/192
+].freeze
+
RSpec.shared_examples 'validate dictionary' do |objects, directory_path, required_fields|
context 'for each object' do
let(:directory_path) { directory_path }
let(:metadata_allowed_fields) do
required_fields + %i[
+ feature_categories
classes
description
introduced_by_url
@@ -40,6 +48,10 @@ RSpec.shared_examples 'validate dictionary' do |objects, directory_path, require
metadata.select { |_, t| t.has_key?(:missing_required_fields) }.keys
end
+ let(:objects_with_invalid_feature_category) do
+ metadata.select { |_, t| t.has_key?(:invalid_feature_category) }.keys
+ end
+
it 'has a metadata file' do
expect(objects_without_metadata).to be_empty, multiline_error(
'Missing metadata files',
@@ -55,6 +67,14 @@ RSpec.shared_examples 'validate dictionary' do |objects, directory_path, require
)
end
+ it 'has a valid feature category' do
+ expect(objects_with_invalid_feature_category).to be_empty, object_metadata_errors(
+ 'Table metadata files with an invalid feature category',
+ :error,
+ objects_with_invalid_feature_category
+ )
+ end
+
it 'has a valid metadata file with allowed fields' do
expect(objects_with_disallowed_fields).to be_empty, object_metadata_errors(
'Table metadata files with disallowed fields',
@@ -82,6 +102,13 @@ RSpec.shared_examples 'validate dictionary' do |objects, directory_path, require
Rails.root.join(object_metadata_file(object_name))
end
+ def feature_categories_valid?(object_feature_categories)
+ return false unless object_feature_categories.present?
+
+ all_feature_categories = YAML.load_file(Rails.root.join('config/feature_categories.yml')) + VALID_FEATURE_CATEGORIES
+ object_feature_categories.all? { |category| all_feature_categories.include?(category) }
+ end
+
def load_object_metadata(required_fields, object_name)
result = {}
begin
@@ -94,6 +121,16 @@ RSpec.shared_examples 'validate dictionary' do |objects, directory_path, require
unless missing_required_fields.empty?
result[:missing_required_fields] = "missing required fields: #{missing_required_fields.join(', ')}"
end
+
+ if required_fields.include?(:feature_categories)
+ object_feature_categories = result.dig(:metadata, :feature_categories)
+
+ unless feature_categories_valid?(object_feature_categories)
+ result[:invalid_feature_category] =
+ "invalid feature category: #{object_feature_categories}" \
+ "Please use a category from https://about.gitlab.com/handbook/product/categories/#categories-a-z"
+ end
+ end
rescue Psych::SyntaxError => ex
result[:error] = ex.message
end
@@ -139,3 +176,19 @@ RSpec.describe 'Tables documentation', feature_category: :database do
include_examples 'validate dictionary', tables, directory_path, required_fields
end
+
+RSpec.describe 'Deleted tables documentation', feature_category: :database do
+ directory_path = File.join('db', 'docs', 'deleted_tables')
+ tables = Dir.glob(File.join(directory_path, '*.yml')).map { |f| File.basename(f, '.yml') }.sort.uniq
+ required_fields = %i[table_name gitlab_schema removed_by_url removed_in_milestone]
+
+ include_examples 'validate dictionary', tables, directory_path, required_fields
+end
+
+RSpec.describe 'Deleted views documentation', feature_category: :database do
+ directory_path = File.join('db', 'docs', 'deleted_views')
+ views = Dir.glob(File.join(directory_path, '*.yml')).map { |f| File.basename(f, '.yml') }.sort.uniq
+ required_fields = %i[view_name gitlab_schema removed_by_url removed_in_milestone]
+
+ include_examples 'validate dictionary', views, directory_path, required_fields
+end