diff --git a/lib/fixturebot/rails/schema_loader.rb b/lib/fixturebot/rails/schema_loader.rb index 480f6f1..2568451 100644 --- a/lib/fixturebot/rails/schema_loader.rb +++ b/lib/fixturebot/rails/schema_loader.rb @@ -45,6 +45,7 @@ def build_table(name) columns = @connection.columns(name) .reject { |c| c.name == pk_column_name || timestamp_column?(c.name) } .map { |c| c.name.to_sym } + .sort fk_associations = @connection.foreign_keys(name).map do |fk| Schema::BelongsTo.new( @@ -96,6 +97,7 @@ def foreign_key_columns(table_name) @connection.columns(table_name) .select { |c| foreign_key_column?(c) } .map { |c| c.name } + .sort end def association_name(column_name) diff --git a/spec/fixturebot/schema_loader_spec.rb b/spec/fixturebot/schema_loader_spec.rb index 1b5988d..fa1e4e9 100644 --- a/spec/fixturebot/schema_loader_spec.rb +++ b/spec/fixturebot/schema_loader_spec.rb @@ -50,6 +50,11 @@ expect(schema.tables[:tags].columns).to contain_exactly(:name) end + it "orders columns alphabetically regardless of database column order" do + expect(schema.tables[:users].columns).to eq([:email, :name]) + expect(schema.tables[:posts].columns).to eq([:author_id, :body, :title]) + end + it "detects belongs_to associations from foreign keys" do associations = schema.tables[:posts].belongs_to_associations expect(associations.size).to eq(1)