From 8f7e6dbcb7409aee5f7a2c91e2096f52f6207fcd Mon Sep 17 00:00:00 2001 From: Codex Night Worker Date: Fri, 13 Nov 2026 12:44:52 +0900 Subject: [PATCH] AI: address review on PR #464 --- backend/spec/requests/tag_versions_spec.rb | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/backend/spec/requests/tag_versions_spec.rb b/backend/spec/requests/tag_versions_spec.rb index f05bb0b..b16cd4f 100644 --- a/backend/spec/requests/tag_versions_spec.rb +++ b/backend/spec/requests/tag_versions_spec.rb @@ -215,6 +215,36 @@ RSpec.describe 'TagVersions API', type: :request do expect(first.fetch('created_at')).to eq(t_v1.iso8601) end + [:parent_shared, :parent_new, :parent_old].each do |parent_key| + it "omits deleted #{ parent_key } from parent diffs" do + deleted_parent = public_send(parent_key) + deleted_parent.tag_names.destroy_all + deleted_parent.destroy! + + get '/tags/versions', params: { id: tag.id } + + expect(response).to have_http_status(:ok) + expect(json.fetch('count')).to eq(2) + + versions = json.fetch('versions') + expect(versions.map { _1.fetch('version_no') }).to eq([2, 1]) + + expected_parents = [ + [parent_shared.id, 'context'], + [parent_new.id, 'added'], + [parent_old.id, 'removed']].reject { _1.first == deleted_parent.id } + expect(versions.first.fetch('parent_tags').map { |entry| + [entry.fetch('tag').fetch('id'), entry.fetch('type')] + }).to eq(expected_parents) + + expected_first_parents = [parent_shared.id, parent_old.id] + .reject { _1 == deleted_parent.id }.map { [_1, 'added'] } + expect(versions.second.fetch('parent_tags').map { |entry| + [entry.fetch('tag').fetch('id'), entry.fetch('type')] + }).to eq(expected_first_parents) + end + end + it 'returns empty when the specified tag has no versions' do fresh_tag = create(:tag, primary_name: 'no_versions_tag', category: :general)