152 lines
4.4 KiB
Ruby
152 lines
4.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'gitlab-dangerfiles'
|
|
require 'gitlab/dangerfiles/spec_helper'
|
|
|
|
require_relative '../../../tooling/danger/database_dictionary'
|
|
|
|
RSpec.describe Tooling::Danger::DatabaseDictionary, feature_category: :shared do
|
|
include_context "with dangerfile"
|
|
|
|
let(:fake_danger) { DangerSpecHelper.fake_danger.include(described_class) }
|
|
|
|
subject(:database_dictionary) { fake_danger.new(helper: fake_helper) }
|
|
|
|
describe '#database_dictionary_files' do
|
|
let(:database_dictionary_files) do
|
|
[
|
|
'db/docs/ci_pipelines.yml',
|
|
'db/docs/projects.yml'
|
|
]
|
|
end
|
|
|
|
let(:other_files) do
|
|
[
|
|
'app/models/model.rb',
|
|
'app/assets/javascripts/file.js'
|
|
]
|
|
end
|
|
|
|
shared_examples 'an array of Found objects' do |change_type|
|
|
it 'returns an array of Found objects' do
|
|
expect(database_dictionary.database_dictionary_files(change_type: change_type))
|
|
.to contain_exactly(
|
|
an_instance_of(described_class::Found),
|
|
an_instance_of(described_class::Found)
|
|
)
|
|
|
|
expect(database_dictionary.database_dictionary_files(change_type: change_type).map(&:path))
|
|
.to eq(database_dictionary_files)
|
|
end
|
|
end
|
|
|
|
shared_examples 'an empty array' do |change_type|
|
|
it 'returns an array of Found objects' do
|
|
expect(database_dictionary.database_dictionary_files(change_type: change_type)).to be_empty
|
|
end
|
|
end
|
|
|
|
describe 'retrieves added database dictionary files' do
|
|
context 'with added added database dictionary files' do
|
|
let(:added_files) { database_dictionary_files }
|
|
|
|
include_examples 'an array of Found objects', :added
|
|
end
|
|
|
|
context 'without added added database dictionary files' do
|
|
let(:added_files) { other_files }
|
|
|
|
include_examples 'an empty array', :added
|
|
end
|
|
end
|
|
|
|
describe 'retrieves modified database dictionary files' do
|
|
context 'with modified modified database dictionary files' do
|
|
let(:modified_files) { database_dictionary_files }
|
|
|
|
include_examples 'an array of Found objects', :modified
|
|
end
|
|
|
|
context 'without modified modified database dictionary files' do
|
|
let(:modified_files) { other_files }
|
|
|
|
include_examples 'an empty array', :modified
|
|
end
|
|
end
|
|
|
|
describe 'retrieves deleted database dictionary files' do
|
|
context 'with deleted deleted database dictionary files' do
|
|
let(:deleted_files) { database_dictionary_files }
|
|
|
|
include_examples 'an array of Found objects', :deleted
|
|
end
|
|
|
|
context 'without deleted deleted database dictionary files' do
|
|
let(:deleted_files) { other_files }
|
|
|
|
include_examples 'an empty array', :deleted
|
|
end
|
|
end
|
|
end
|
|
|
|
describe described_class::Found do
|
|
let(:database_dictionary_path) { 'db/docs/ci_pipelines.yml' }
|
|
let(:gitlab_schema) { 'gitlab_ci' }
|
|
|
|
let(:yaml) do
|
|
{
|
|
|
|
'table_name' => 'ci_pipelines',
|
|
'classes' => ['Ci::Pipeline'],
|
|
'feature_categories' => ['continuous_integration'],
|
|
'description' => 'TODO',
|
|
'introduced_by_url' => 'https://gitlab.com/gitlab-org/gitlab/-/commit/c6ae290cea4b88ecaa9cfe0bc9d88e8fd32070c1',
|
|
'milestone' => '9.0',
|
|
'gitlab_schema' => gitlab_schema
|
|
}
|
|
end
|
|
|
|
let(:raw_yaml) { YAML.dump(yaml) }
|
|
|
|
subject(:found) { described_class.new(database_dictionary_path) }
|
|
|
|
before do
|
|
allow(File).to receive(:read).and_call_original
|
|
allow(File).to receive(:read).with(database_dictionary_path).and_return(raw_yaml)
|
|
end
|
|
|
|
described_class::ATTRIBUTES.each do |attribute|
|
|
describe "##{attribute}" do
|
|
it 'returns value from the YAML' do
|
|
expect(found.public_send(attribute)).to eq(yaml[attribute])
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#raw' do
|
|
it 'returns the raw YAML' do
|
|
expect(found.raw).to eq(raw_yaml)
|
|
end
|
|
end
|
|
|
|
describe '#ci_schema?' do
|
|
it { expect(found.ci_schema?).to be_truthy }
|
|
|
|
context 'with main schema' do
|
|
let(:gitlab_schema) { 'gitlab_main' }
|
|
|
|
it { expect(found.ci_schema?).to be_falsey }
|
|
end
|
|
end
|
|
|
|
describe '#main_schema?' do
|
|
it { expect(found.main_schema?).to be_falsey }
|
|
|
|
context 'with main schema' do
|
|
let(:gitlab_schema) { 'gitlab_main' }
|
|
|
|
it { expect(found.main_schema?).to be_truthy }
|
|
end
|
|
end
|
|
end
|
|
end
|