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
 |