scinote-web/spec/models/concerns/searchable_model_spec.rb

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