mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-25 05:27:33 +08:00
67 lines
1.8 KiB
Ruby
67 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
SEARCH_SPECIAL_CHARACTER_TEST_NAMES = %w(
|
|
NameWithNoSpecialCharacters
|
|
NameWith_Underscore
|
|
NameWith@At
|
|
NameWith.Dot
|
|
NameWith-Minus
|
|
NameWith+Plus
|
|
NameWith&Ampersand
|
|
NameWith;Semicolon
|
|
NameWith:Colon
|
|
NameWith,Comma
|
|
NameWith$Dollar
|
|
NameWith/Slash
|
|
NameWith=Equals
|
|
NameWith~Tilde
|
|
NameWith^Caret
|
|
NameWith°Degree
|
|
NameWith`Backtick
|
|
NameWith"DoubleQuote
|
|
NameWith'SingleQuote
|
|
NameWith*Asterisk
|
|
NameWith?QuestionMark
|
|
NameWith%Percent
|
|
NameWith\Backslash
|
|
NameWith[SquareBracket]
|
|
NameWith{CurlyBracket}
|
|
NameWith(Parenthesis)
|
|
NameWith|Pipe
|
|
NameWith!Exclamation
|
|
).freeze
|
|
|
|
describe SearchableModel, type: :concern do
|
|
let!(:user) { create :user }
|
|
let!(:team) { create :team, created_by: user }
|
|
|
|
let!(:projects) do
|
|
SEARCH_SPECIAL_CHARACTER_TEST_NAMES.map do |name|
|
|
Project.create!(name: name, team: user.teams.first, created_by: user)
|
|
end
|
|
end
|
|
|
|
it '#where_attributes_like_boolean finds all projects by name' do
|
|
SEARCH_SPECIAL_CHARACTER_TEST_NAMES.each do |name|
|
|
expect(Project.where_attributes_like_boolean(:name, "#{name} OR something")&.first&.name).to eq name
|
|
puts "Found #{name}"
|
|
end
|
|
end
|
|
|
|
it '#where_attributes_like_boolean finds all projects by exact name' do
|
|
SEARCH_SPECIAL_CHARACTER_TEST_NAMES.filter { |n| n != 'NameWith"DoubleQuote' }.each do |name|
|
|
expect(Project.where_attributes_like_boolean(:name, "\"#{name}\"")&.first&.name).to eq name
|
|
expect(Project.where_attributes_like_boolean(:name, "\"#{name} not exact\"").count).to eq 0
|
|
puts "Found #{name}"
|
|
end
|
|
end
|
|
|
|
it '#where_attributes_like finds all projects by name ' do
|
|
SEARCH_SPECIAL_CHARACTER_TEST_NAMES.each do |name|
|
|
expect(Project.where_attributes_like(:name, name)&.first&.name).to eq name
|
|
puts "Found #{name}"
|
|
end
|
|
end
|
|
end
|