Skip to content

Commit

Permalink
Test for schema order of non-public-schema views
Browse files Browse the repository at this point in the history
Upcoming changes like [topological sorting][1] have the potential to
write views to `db/schema.rb` in an order that does not respect
dependencies. This adds a test to ensure that views in all schemas are
both included, and in the correct dependency order.

[1]: scenic-views#398
  • Loading branch information
edwardloveall committed Jan 22, 2024
1 parent 4440870 commit 3e6c16f
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions spec/scenic/schema_dumper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,22 @@ class SearchInAHaystack < ActiveRecord::Base

Search.connection.drop_view :"scenic.searches"
end

it "sorts dependency order when views exist in a non-public schema" do
Search.connection.execute("CREATE SCHEMA IF NOT EXISTS scenic; SET search_path TO public, scenic")
Search.connection.execute("CREATE VIEW scenic.apples AS SELECT 1;")
Search.connection.execute("CREATE VIEW scenic.bananas AS SELECT 2;")
Search.connection.execute("CREATE OR REPLACE VIEW scenic.apples AS SELECT * FROM scenic.bananas;")
stream = StringIO.new

ActiveRecord::SchemaDumper.dump(Search.connection, stream)
views = stream.string.lines.grep(/create_view/).map do |view_line|
view_line.match('create_view "(?<name>.*)"')[:name]
end
expect(views).to eq(%w[scenic.bananas scenic.apples])

Search.connection.execute("DROP SCHEMA IF EXISTS scenic CASCADE; SET search_path TO public")
end
end

it "handles active record table name prefixes and suffixes" do
Expand Down

0 comments on commit 3e6c16f

Please sign in to comment.