このコミットが含まれているのは:
2026-09-28 00:30:03 +09:00
コミット 28e638e360
18個のファイルの変更、209行の追加、68行の削除
+47
ファイルの表示
@@ -0,0 +1,47 @@
require 'rails_helper'
RSpec.describe TagVersionRecorder do
let(:user) { create_member_user! }
let(:tag) { create(:tag, primary_name: '日本語名') }
before do
Language.insert_all!([{ code: 'en', name: 'English', created_at: Time.current }])
Script.insert_all!([{ code: 'Latn', name: 'Latin', created_at: Time.current }])
Locale.insert_all!([{ code: 'en', language_code: 'en', script_code: 'Latn',
name: 'English', created_at: Time.current }])
TagName.create!(tag:, language_code: 'ja', script_code: 'Jpan', name: '別名',
primary_flg: false,
canonical_id: tag.tag_name_id)
TagName.create!(tag:, language_code: 'en', script_code: 'Latn', name: 'English name',
primary_flg: true)
TagName.create!(tag:, language_code: 'en', script_code: 'Latn', name: 'English alias',
primary_flg: false)
end
it 'snapshots every language primary name and alias deterministically' do
version = described_class.record!(tag:, event_type: :create, created_by_user: user)
expect(version.names).to eq([
{ 'language_code' => 'en', 'name' => 'English name', 'script_code' => 'Latn',
'primary_flg' => true },
{ 'language_code' => 'en', 'name' => 'English alias', 'script_code' => 'Latn',
'primary_flg' => false },
{ 'language_code' => 'ja', 'name' => '日本語名', 'script_code' => 'Jpan',
'primary_flg' => true },
{ 'language_code' => 'ja', 'name' => '別名', 'script_code' => 'Jpan',
'primary_flg' => false }
])
end
it 'creates a version for an English-only name change and preserves prior names' do
original = described_class.record!(tag:, event_type: :create, created_by_user: user)
TagName.find_by!(tag:, language_code: 'en', primary_flg: true).update!(name: 'Renamed')
updated = described_class.record!(tag:, event_type: :update, created_by_user: user)
expect(updated.version_no).to eq(2)
expect(original.reload.names).to include(
hash_including('language_code' => 'en', 'name' => 'English name'))
expect(updated.names).to include(hash_including('language_code' => 'en', 'name' => 'Renamed'))
end
end