50 lines
1.5 KiB
Ruby
50 lines
1.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'rails_helper'
|
||
|
|
||
|
describe Admin::Db::SchemaParser do
|
||
|
let(:dummy_schema) do
|
||
|
<<~SCHEMA
|
||
|
# Comment
|
||
|
ActiveRecord::Schema[7.1].define(version: 23) do
|
||
|
create_table "people", force: :cascade do |t|
|
||
|
t.string "name"
|
||
|
end
|
||
|
|
||
|
create_table "posts", force: :cascade do |t|
|
||
|
t.string "title", null: false
|
||
|
t.bigint "size", null: false
|
||
|
t.string "description"
|
||
|
# t.index ["size", "title"], name: "index_posts_on_size_and_title"
|
||
|
t.index ["title"], name: "index_posts_on_title", unique: true
|
||
|
t.index ["size"], name: "index_posts_on_size"
|
||
|
end
|
||
|
|
||
|
# add_index "people", ["name"], name: "commented_out_index"
|
||
|
add_index "people", ["name"], name: "index_people_on_name"
|
||
|
end
|
||
|
SCHEMA
|
||
|
end
|
||
|
let(:schema_parser) { described_class.new(dummy_schema) }
|
||
|
|
||
|
describe '#indexes_by_table' do
|
||
|
subject { schema_parser.indexes_by_table }
|
||
|
|
||
|
it 'returns index info for all affected tables' do
|
||
|
expect(subject.keys).to match_array(%w(people posts))
|
||
|
end
|
||
|
|
||
|
it 'returns all index information for the `people` table' do
|
||
|
people_info = subject['people']
|
||
|
expect(people_info.map(&:name)).to contain_exactly('index_people_on_name')
|
||
|
end
|
||
|
|
||
|
it 'returns all index information for the `posts` table' do
|
||
|
posts_info = subject['posts']
|
||
|
expect(posts_info.map(&:name)).to contain_exactly(
|
||
|
'index_posts_on_title', 'index_posts_on_size'
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|