From 1df5ece43bd74cd3c234be4c7e173c3ff532825f Mon Sep 17 00:00:00 2001 From: Nishiki Liu Date: Thu, 4 May 2023 08:19:36 -0700 Subject: [PATCH] feat: use config pk type in Action Mailbox migration --- actionmailbox/CHANGELOG.md | 4 ++ ...0917164000_create_action_mailbox_tables.rb | 8 ++- ...0208205311_create_action_mailbox_tables.rb | 8 ++- actionmailbox/test/migrations_test.rb | 52 +++++++++++++++++++ 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 actionmailbox/test/migrations_test.rb diff --git a/actionmailbox/CHANGELOG.md b/actionmailbox/CHANGELOG.md index 828e00514d..fdec3909ca 100644 --- a/actionmailbox/CHANGELOG.md +++ b/actionmailbox/CHANGELOG.md @@ -1,3 +1,7 @@ +* Support configured primary key types in generated migrations. + + *Nishiki Liu* + * Fixed ingress controllers' ability to accept emails that contain no UTF-8 encoded parts. Fixes #46297. diff --git a/actionmailbox/db/migrate/20180917164000_create_action_mailbox_tables.rb b/actionmailbox/db/migrate/20180917164000_create_action_mailbox_tables.rb index 2bf4335808..2a1e2f7a8e 100644 --- a/actionmailbox/db/migrate/20180917164000_create_action_mailbox_tables.rb +++ b/actionmailbox/db/migrate/20180917164000_create_action_mailbox_tables.rb @@ -1,6 +1,6 @@ class CreateActionMailboxTables < ActiveRecord::Migration[6.0] def change - create_table :action_mailbox_inbound_emails do |t| + create_table :action_mailbox_inbound_emails, id: primary_key_type do |t| t.integer :status, default: 0, null: false t.string :message_id, null: false t.string :message_checksum, null: false @@ -10,4 +10,10 @@ def change t.index [ :message_id, :message_checksum ], name: "index_action_mailbox_inbound_emails_uniqueness", unique: true end end + + private + def primary_key_type + config = Rails.configuration.generators + config.options[config.orm][:primary_key_type] || :primary_key + end end diff --git a/actionmailbox/test/dummy/db/migrate/20180208205311_create_action_mailbox_tables.rb b/actionmailbox/test/dummy/db/migrate/20180208205311_create_action_mailbox_tables.rb index 2bf4335808..2a1e2f7a8e 100644 --- a/actionmailbox/test/dummy/db/migrate/20180208205311_create_action_mailbox_tables.rb +++ b/actionmailbox/test/dummy/db/migrate/20180208205311_create_action_mailbox_tables.rb @@ -1,6 +1,6 @@ class CreateActionMailboxTables < ActiveRecord::Migration[6.0] def change - create_table :action_mailbox_inbound_emails do |t| + create_table :action_mailbox_inbound_emails, id: primary_key_type do |t| t.integer :status, default: 0, null: false t.string :message_id, null: false t.string :message_checksum, null: false @@ -10,4 +10,10 @@ def change t.index [ :message_id, :message_checksum ], name: "index_action_mailbox_inbound_emails_uniqueness", unique: true end end + + private + def primary_key_type + config = Rails.configuration.generators + config.options[config.orm][:primary_key_type] || :primary_key + end end diff --git a/actionmailbox/test/migrations_test.rb b/actionmailbox/test/migrations_test.rb new file mode 100644 index 0000000000..ff78d4d3b7 --- /dev/null +++ b/actionmailbox/test/migrations_test.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require "test_helper" +require ActionMailbox::Engine.root.join("db/migrate/20180917164000_create_action_mailbox_tables.rb").to_s + +class ActionMailbox::MigrationsTest < ActiveSupport::TestCase + setup do + @original_verbose = ActiveRecord::Migration.verbose + ActiveRecord::Migration.verbose = false + + @connection = ActiveRecord::Base.connection + @original_options = Rails.configuration.generators.options.deep_dup + end + + teardown do + Rails.configuration.generators.options = @original_options + rerun_migration + ActiveRecord::Migration.verbose = @original_verbose + end + + test "migration creates tables with default primary key type" do + action_mailbox_tables.each do |table| + assert_equal :integer, primary_key(table).type + end + end + + test "migration creates tables with configured primary key type" do + Rails.configuration.generators do |g| + g.orm :active_record, primary_key_type: :string + end + + rerun_migration + + action_mailbox_tables.each do |table| + assert_equal :string, primary_key(table).type + end + end + + private + def rerun_migration + CreateActionMailboxTables.migrate(:down) + CreateActionMailboxTables.migrate(:up) + end + + def action_mailbox_tables + [:action_mailbox_inbound_emails] + end + + def primary_key(table) + @connection.columns(table).find { |c| c.name == "id" } + end +end