Fix antenna fabricator tests and move duplicate check to db

This commit is contained in:
KMY 2023-08-22 13:33:20 +09:00
parent e656ab15a1
commit df0b1a4632
8 changed files with 34 additions and 19 deletions

View file

@ -15,14 +15,11 @@ class AntennaAccount < ApplicationRecord
belongs_to :antenna belongs_to :antenna
belongs_to :account belongs_to :account
validate :duplicate_account
validate :limit_per_antenna validate :limit_per_antenna
private validates :account_id, uniqueness: { scope: :antenna_id }
def duplicate_account private
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_account') if AntennaAccount.exists?(antenna_id: antenna_id, account_id: account_id, exclude: exclude)
end
def limit_per_antenna 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 raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.accounts') if AntennaAccount.where(antenna_id: antenna_id).count >= Antenna::ACCOUNTS_PER_ANTENNA_LIMIT

View file

@ -14,14 +14,11 @@
class AntennaDomain < ApplicationRecord class AntennaDomain < ApplicationRecord
belongs_to :antenna belongs_to :antenna
validate :duplicate_domain
validate :limit_per_antenna validate :limit_per_antenna
private validates :name, uniqueness: { scope: :antenna_id }
def duplicate_domain private
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_domain') if AntennaDomain.exists?(antenna_id: antenna_id, name: name, exclude: exclude)
end
def limit_per_antenna 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 raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.domains') if AntennaDomain.where(antenna_id: antenna_id).count >= Antenna::DOMAINS_PER_ANTENNA_LIMIT

View file

@ -15,14 +15,11 @@ class AntennaTag < ApplicationRecord
belongs_to :antenna belongs_to :antenna
belongs_to :tag belongs_to :tag
validate :duplicate_tag
validate :limit_per_antenna validate :limit_per_antenna
private validates :tag_id, uniqueness: { scope: :antenna_id }
def duplicate_tag private
raise Mastodon::ValidationError, I18n.t('antennas.errors.duplicate_tag') if AntennaTag.exists?(antenna_id: antenna_id, tag_id: tag_id, exclude: exclude)
end
def limit_per_antenna 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 raise Mastodon::ValidationError, I18n.t('antennas.errors.limit.tags') if AntennaTag.where(antenna_id: antenna_id).count >= Antenna::TAGS_PER_ANTENNA_LIMIT

View file

@ -1023,8 +1023,6 @@ ja:
keyword: キーワード keyword: キーワード
tag: ハッシュタグ tag: ハッシュタグ
errors: errors:
duplicate_domain: すでに同じドメインが登録されています
duplicate_keyword: すでに同じキーワードが登録されています
empty_contexts: 絞り込み条件が1つも指定されていないため無効です除外条件はカウントされません empty_contexts: 絞り込み条件が1つも指定されていないため無効です除外条件はカウントされません
invalid_list_owner: これはあなたのリストではありません invalid_list_owner: これはあなたのリストではありません
limit: limit:

View 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

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # 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 # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" 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 "created_at", precision: nil, null: false
t.datetime "updated_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 ["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 ["antenna_id"], name: "index_antenna_accounts_on_antenna_id"
t.index ["exclude"], name: "index_antenna_accounts_on_exclude" t.index ["exclude"], name: "index_antenna_accounts_on_exclude"
end end
@ -272,6 +273,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_21_061713) do
t.boolean "exclude", default: false, null: false t.boolean "exclude", default: false, null: false
t.datetime "created_at", precision: nil, null: false t.datetime "created_at", precision: nil, null: false
t.datetime "updated_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 ["antenna_id"], name: "index_antenna_domains_on_antenna_id"
t.index ["exclude"], name: "index_antenna_domains_on_exclude" t.index ["exclude"], name: "index_antenna_domains_on_exclude"
t.index ["name"], name: "index_antenna_domains_on_name" 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.boolean "exclude", default: false, null: false
t.datetime "created_at", precision: nil, null: false t.datetime "created_at", precision: nil, null: false
t.datetime "updated_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 ["antenna_id"], name: "index_antenna_tags_on_antenna_id"
t.index ["exclude"], name: "index_antenna_tags_on_exclude" t.index ["exclude"], name: "index_antenna_tags_on_exclude"
t.index ["tag_id"], name: "index_antenna_tags_on_tag_id" t.index ["tag_id"], name: "index_antenna_tags_on_tag_id"

View file

@ -1,5 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
Fabricator(:antenna_account) do Fabricator(:antenna_account) do
antenna { Fabricate.build(:antenna) }
account { Fabricate.build(:account) }
exclude false exclude false
end end

View file

@ -1,3 +1,7 @@
# frozen_string_literal: true # 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