このコミットが含まれているのは:
2026-09-28 01:39:26 +09:00
コミット 3dd13171fc
7個のファイルの変更、96行の追加、29行の削除
+2 -2
ファイルの表示
@@ -62,7 +62,7 @@ RSpec.describe TagNameSanitisationRule, type: :model do
name: 'foobar', language_code: 'en', tag_id: english.id)
expect(primary_tag_name_for(japanese.reload, 'ja')).to have_attributes(
name: 'foobar', language_code: 'ja', tag_id: japanese.id)
expect(english.reload.tag_name_id).to eq(english_name.id)
expect(primary_tag_name_for(english.reload, 'en')).to eq(english_name)
end
end
@@ -109,7 +109,7 @@ RSpec.describe TagNameSanitisationRule, type: :model do
expect(existing.reload).to have_attributes(
tag_id: source_tag.id, language_code: 'ja', primary_flg: true)
expect(primary_tag_name_for(source_tag, 'ja')).to eq(existing)
expect(source_tag.reload.tag_name_id).to eq(existing.id)
expect(primary_tag_name_for(source_tag.reload, 'ja')).to eq(existing)
expect(TagName.unscoped.exists?(source_tag_name_id)).to be(false)
end
end
+16
ファイルの表示
@@ -67,6 +67,22 @@ RSpec.describe TagName, type: :model do
end
describe '.canonicalise' do
it 'leaves detached aliases unchanged' do
create(:tag_name, :alias, name: 'detached_alias')
expect(described_class.canonicalise(Locale.nipponese, ['detached_alias']))
.to eq(['detached_alias'])
end
it 'leaves an alias unchanged when its language has no primary' do
tag = create(:tag, primary_name: '日本語のみ')
create(:tag_name, :alias, tag:, name: 'orphan_english_alias',
language_code: 'en', script_code: 'Latn')
expect(described_class.canonicalise(locale, ['orphan_english_alias']))
.to eq(['orphan_english_alias'])
end
it 'resolves the primary name of the alias language on the same tag' do
tag = create(:tag, primary_name: '日本語正本')
english_primary = create(:tag_name, tag:, name: 'english_primary',
+44 -3
ファイルの表示
@@ -331,6 +331,40 @@ RSpec.describe Tag, type: :model do
Post.create!(url: 'https://example.com/posts/1', title: 'test post')
end
context 'with names in multiple languages' do
include_context 'English locale'
it 'keeps the target primary and moves source names as aliases' do
english_primary = create(:tag_name, tag: target_tag,
name: 'target_english', language_code: 'en', script_code: 'Latn')
source_primary = create(:tag_name, tag: source_tag,
name: 'source_english', language_code: 'en', script_code: 'Latn')
source_alias = create(:tag_name, :alias, tag: source_tag,
name: 'source_english_alias', language_code: 'en', script_code: 'Latn')
described_class.merge_tags!(target_tag, [source_tag])
expect(primary_tag_name_for(target_tag.reload, 'en')).to eq(english_primary)
expect([source_primary.reload, source_alias.reload]).to all(have_attributes(
tag_id: target_tag.id, language_code: 'en', primary_flg: false))
end
it 'inherits a source primary when the target has no name in that language' do
source_primary = create(:tag_name, tag: source_tag,
name: 'inherited_english', language_code: 'en', script_code: 'Latn')
source_alias = create(:tag_name, :alias, tag: source_tag,
name: 'inherited_alias', language_code: 'en', script_code: 'Latn')
described_class.merge_tags!(target_tag, [source_tag])
expect(primary_tag_name_for(target_tag.reload, 'en')).to eq(source_primary)
expect(source_primary.reload).to have_attributes(
tag_id: target_tag.id, language_code: 'en', primary_flg: true)
expect(source_alias.reload).to have_attributes(
tag_id: target_tag.id, language_code: 'en', primary_flg: false)
end
end
context 'when merging a simple source tag' do
let!(:source_post_tag) { PostTag.create!(post: post_record, tag: source_tag) }
@@ -388,13 +422,20 @@ RSpec.describe Tag, type: :model do
expect(versions.pluck(:version_no, :event_type))
.to eq([[1, 'create'], [2, 'discard']])
expect(versions.first).to eq(original_version)
expect(versions.last).to have_attributes(
name: source_name, aliases: source_alias.name, created_by_user: user)
expect(versions.last.created_by_user).to eq(user)
expect(versions.last.names).to include(
hash_including('language_code' => 'ja', 'name' => source_name,
'primary_flg' => true, 'auto_generated' => false),
hash_including('language_code' => 'ja', 'name' => source_alias.name,
'primary_flg' => false, 'auto_generated' => false))
expect(Tag.unscoped.exists?(source_tag.id)).to be(false)
target_versions = target_tag.tag_versions.order(:version_no)
expect(target_versions.pluck(:event_type)).to eq(['create', 'update'])
expect(target_versions.last.aliases.split).to contain_exactly('merge_alias', source_name)
target_aliases = target_versions.last.names.filter_map { |name|
name['name'] if name['language_code'] == 'ja' && !name['primary_flg']
}
expect(target_aliases).to contain_exactly('merge_alias', source_name)
end
it 'deletes source relationships while preserving unrelated relationships' do