このコミットが含まれているのは:
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする