このコミットが含まれているのは:
@@ -0,0 +1,73 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'Shared Tag and ExternalTag IDs', type: :model do
|
||||
include TagGroupRecords
|
||||
|
||||
def create_resource resource
|
||||
if resource == :tag
|
||||
Tag.find_or_create_by_tag_name!(Locale.nipponese, 'shared_id_new', category: :general)
|
||||
else
|
||||
ExternalTag.create!(platform: :nico, name: 'shared_id_new')
|
||||
end
|
||||
end
|
||||
|
||||
[:tag, :external_tag].each do |resource|
|
||||
it "starts #{ resource } at 1 when both tables are empty" do
|
||||
expect(Tag.count).to eq(0)
|
||||
expect(ExternalTag.count).to eq(0)
|
||||
expect(create_resource(resource).id).to eq(1)
|
||||
end
|
||||
|
||||
it "allocates #{ resource } above the other table's maximum" do
|
||||
create(:tag, id: resource == :tag ? 1 : 20)
|
||||
create(:external_tag, id: resource == :external_tag ? 1 : 20)
|
||||
|
||||
expect(create_resource(resource).id).to eq(21)
|
||||
end
|
||||
|
||||
it "preserves legacy overlaps and gaps when creating #{ resource }" do
|
||||
[1, 2, 5].each { create(:tag, id: _1) }
|
||||
[1, 3, 8].each { create(:external_tag, id: _1) }
|
||||
tags = Tag.order(:id).map(&:attributes)
|
||||
external_tags = ExternalTag.order(:id).map(&:attributes)
|
||||
|
||||
record = create_resource(resource)
|
||||
|
||||
aggregate_failures do
|
||||
expect(record.id).to eq(9)
|
||||
expect(Tag.where(id: [1, 2, 5]).order(:id).map(&:attributes)).to eq(tags)
|
||||
expect(ExternalTag.where(id: [1, 3, 8]).order(:id).map(&:attributes)).to eq(external_tags)
|
||||
expect(Tag.exists?(id: 3)).to be(false)
|
||||
expect(ExternalTag.exists?(id: 2)).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
it "ignores the description and group ID space when creating #{ resource }" do
|
||||
tag = create(:tag, id: 1)
|
||||
create(:external_tag, id: 2)
|
||||
TagDescription.create!(id: 100, tag:, language_code: 'ja', body: '', version_no: 1)
|
||||
seed_group(name: 'separate_space', id: 200)
|
||||
|
||||
expect(create_resource(resource).id).to eq(3)
|
||||
end
|
||||
end
|
||||
|
||||
it 'preserves overlapping IDs during updates without rewriting the other resource' do
|
||||
tag = create(:tag, id: 5)
|
||||
external = create(:external_tag, id: 5)
|
||||
tag.update!(category: :meta)
|
||||
external.update!(name: 'updated_external')
|
||||
|
||||
expect(tag.reload.id).to eq(5)
|
||||
expect(external.reload.id).to eq(5)
|
||||
expect(tag.category).to eq('meta')
|
||||
expect(external.name).to eq('updated_external')
|
||||
expect(Tag.count).to eq(1)
|
||||
expect(ExternalTag.count).to eq(1)
|
||||
end
|
||||
|
||||
it 'allocates distinct IDs for successive creations across both tables' do
|
||||
records = [:tag, :external_tag].map { create_resource(_1) }
|
||||
expect(records.map(&:id)).to eq([1, 2])
|
||||
end
|
||||
end
|
||||
新しいイシューから参照
ユーザーをブロックする