Fix antenna fabricator tests and move duplicate check to db
This commit is contained in:
parent
e656ab15a1
commit
df0b1a4632
8 changed files with 34 additions and 19 deletions
|
@ -15,14 +15,11 @@ class AntennaAccount < ApplicationRecord
|
|||
belongs_to :antenna
|
||||
belongs_to :account
|
||||
|
||||
validate :duplicate_account
|
||||
validate :limit_per_antenna
|
||||
|
||||
private
|
||||
validates :account_id, uniqueness: { scope: :antenna_id }
|
||||
|
||||
def duplicate_account
|
||||
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_account') if AntennaAccount.exists?(antenna_id: antenna_id, account_id: account_id, exclude: exclude)
|
||||
end
|
||||
private
|
||||
|
||||
def limit_per_antenna
|
||||
raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.accounts') if AntennaAccount.where(antenna_id: antenna_id).count >= Antenna::ACCOUNTS_PER_ANTENNA_LIMIT
|
||||
|
|
|
@ -14,14 +14,11 @@
|
|||
class AntennaDomain < ApplicationRecord
|
||||
belongs_to :antenna
|
||||
|
||||
validate :duplicate_domain
|
||||
validate :limit_per_antenna
|
||||
|
||||
private
|
||||
validates :name, uniqueness: { scope: :antenna_id }
|
||||
|
||||
def duplicate_domain
|
||||
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_domain') if AntennaDomain.exists?(antenna_id: antenna_id, name: name, exclude: exclude)
|
||||
end
|
||||
private
|
||||
|
||||
def limit_per_antenna
|
||||
raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.domains') if AntennaDomain.where(antenna_id: antenna_id).count >= Antenna::DOMAINS_PER_ANTENNA_LIMIT
|
||||
|
|
|
@ -15,14 +15,11 @@ class AntennaTag < ApplicationRecord
|
|||
belongs_to :antenna
|
||||
belongs_to :tag
|
||||
|
||||
validate :duplicate_tag
|
||||
validate :limit_per_antenna
|
||||
|
||||
private
|
||||
validates :tag_id, uniqueness: { scope: :antenna_id }
|
||||
|
||||
def duplicate_tag
|
||||
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_tag') if AntennaTag.exists?(antenna_id: antenna_id, tag_id: tag_id, exclude: exclude)
|
||||
end
|
||||
private
|
||||
|
||||
def limit_per_antenna
|
||||
raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.tags') if AntennaTag.where(antenna_id: antenna_id).count >= Antenna::TAGS_PER_ANTENNA_LIMIT
|
||||
|
|
|
@ -1023,8 +1023,6 @@ ja:
|
|||
keyword: キーワード
|
||||
tag: ハッシュタグ
|
||||
errors:
|
||||
duplicate_domain: すでに同じドメインが登録されています
|
||||
duplicate_keyword: すでに同じキーワードが登録されています
|
||||
empty_contexts: 絞り込み条件が1つも指定されていないため無効です(除外条件はカウントされません)
|
||||
invalid_list_owner: これはあなたのリストではありません
|
||||
limit:
|
||||
|
|
17
db/migrate/20230822041804_add_antenna_elements_uniqueness.rb
Normal file
17
db/migrate/20230822041804_add_antenna_elements_uniqueness.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
|
||||
|
||||
class AddAntennaElementsUniqueness < ActiveRecord::Migration[7.0]
|
||||
include Mastodon::MigrationHelpers
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def change
|
||||
safety_assured do
|
||||
add_index :antenna_accounts, [:antenna_id, :account_id], unique: true
|
||||
add_index :antenna_domains, [:antenna_id, :name], unique: true
|
||||
add_index :antenna_tags, [:antenna_id, :tag_id], unique: true
|
||||
end
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.0].define(version: 2023_08_21_061713) do
|
||||
ActiveRecord::Schema[7.0].define(version: 2023_08_22_041804) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
||||
|
@ -262,6 +262,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_21_061713) do
|
|||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.index ["account_id"], name: "index_antenna_accounts_on_account_id"
|
||||
t.index ["antenna_id", "account_id"], name: "index_antenna_accounts_on_antenna_id_and_account_id", unique: true
|
||||
t.index ["antenna_id"], name: "index_antenna_accounts_on_antenna_id"
|
||||
t.index ["exclude"], name: "index_antenna_accounts_on_exclude"
|
||||
end
|
||||
|
@ -272,6 +273,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_21_061713) do
|
|||
t.boolean "exclude", default: false, null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.index ["antenna_id", "name"], name: "index_antenna_domains_on_antenna_id_and_name", unique: true
|
||||
t.index ["antenna_id"], name: "index_antenna_domains_on_antenna_id"
|
||||
t.index ["exclude"], name: "index_antenna_domains_on_exclude"
|
||||
t.index ["name"], name: "index_antenna_domains_on_name"
|
||||
|
@ -283,6 +285,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_21_061713) do
|
|||
t.boolean "exclude", default: false, null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.index ["antenna_id", "tag_id"], name: "index_antenna_tags_on_antenna_id_and_tag_id", unique: true
|
||||
t.index ["antenna_id"], name: "index_antenna_tags_on_antenna_id"
|
||||
t.index ["exclude"], name: "index_antenna_tags_on_exclude"
|
||||
t.index ["tag_id"], name: "index_antenna_tags_on_tag_id"
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Fabricator(:antenna_account) do
|
||||
antenna { Fabricate.build(:antenna) }
|
||||
account { Fabricate.build(:account) }
|
||||
exclude false
|
||||
end
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Fabricator(:circle_account)
|
||||
Fabricator(:circle_account) do
|
||||
circle { Fabricate(:circle) }
|
||||
account { Fabricate(:account) }
|
||||
before_create { |circle_account, _| circle_account.account.follow!(circle_account.circle.account) }
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue