diff --git a/backend/spec/requests/posts_spec.rb b/backend/spec/requests/posts_spec.rb index aa5f7c1..e13036a 100644 --- a/backend/spec/requests/posts_spec.rb +++ b/backend/spec/requests/posts_spec.rb @@ -206,6 +206,25 @@ RSpec.describe 'Posts API', type: :request do end context 'when q is provided' do + ['SPEC_TAG', 'SpEc_TaG', 'spec_tág', 'MANKO', 'MaNkO', 'mánko'].each do |name| + it "matches #{ name } using database collation" do + get '/posts', params: { locale: 'ja', tags: name } + + expect(response).to have_http_status(:ok) + expect(json.fetch('count')).to eq(2) + expect(json.fetch('posts').map { _1.fetch('id') }) + .to contain_exactly(post_record.id, hit_post.id) + end + + it "excludes #{ name } using database collation" do + get '/posts', params: { locale: 'ja', tags: "not:#{ name }" } + + expect(response).to have_http_status(:ok) + expect(json.fetch('count')).to eq(1) + expect(json.fetch('posts').map { _1.fetch('id') }).to eq([miss_post.id]) + end + end + it 'filters posts by q (hit case)' do get '/posts', params: { tags: 'spec_tag' } @@ -266,6 +285,26 @@ RSpec.describe 'Posts API', type: :request do PostExternalTag.create!(post: miss_post, external_tag:) end + ['NICO:SEARCH_EXTERNAL', 'NiCo:SeArCh_ExTeRnAl', 'nico:séarch_external'].each do |name| + it "matches #{ name } using database collation" do + get '/posts', params: { locale: 'ja', tags: name } + + expect(response).to have_http_status(:ok) + expect(json.fetch('count')).to eq(2) + expect(json.fetch('posts').map { _1.fetch('id') }) + .to contain_exactly(miss_post.id, both_post.id) + end + + it "excludes #{ name } using database collation" do + get '/posts', params: { locale: 'ja', tags: "not:#{ name }" } + + expect(response).to have_http_status(:ok) + expect(json.fetch('count')).to eq(2) + expect(json.fetch('posts').map { _1.fetch('id') }) + .to contain_exactly(post_record.id, hit_post.id) + end + end + it 'keeps internal name searches independent of colliding external ids' do get '/posts', params: { tags: primary_tag_name_for(tag, 'ja').name }