AA
Size: a a a
AA
AA
describe 'valid simple query' do
let!(:user){create :user, role: :user, email: 'im@gmail.com'}
subject do
str = "id eq '1'"
filter = FilterParser::FilterGenerator.new(str).generate_filter
query = filter.apply_filter User
query
end
it 'should have one user' do
expect(subject.size).to eq 1
end
it 'should have email of user' do
expect(subject.first.email).to eq user.email
end
end
describe 'valid composite query' do
let!(:user){create :user, role: :user, email: 'im@gmail.com'}
let!(:another_user){create :user, role: :user, email: 'jo@gmail.com'}
subject do
str = "(id ne '99') and (email eq 'jo@gmail.com')"
filter = FilterParser::FilterGenerator.new(str).generate_filter
query = filter.apply_filter User
query
end
it 'should have email of another_user' do
expect(subject.first.email).to eq another_user.email
end
end
describe 'valid composite query 2' do
let!(:user){create :user, id: 97}
let!(:second_user){create :user, id: 98}
let!(:third_user){create :user, id: 99}
subject do
str = "id eq '97' or id eq '98' and id lt '50' or id gt '20' and id ne '99'"
filter = FilterParser::FilterGenerator.new(str).generate_filter
query = filter.apply_filter User
query
end
it 'should have email of another_user' do
expect(subject.first.id).to eq user.id
end
end
describe 'invalid query_string' do
it 'should raise error ' do
query_string = "(id eq '1)"
expect{
FilterParser::FilterGenerator.new(query_string).generate_filter
}.to raise_error(Parslet::ParseFailed)
end
it 'should raise error ' do
query_string = "(id eq 1)"
expect{
FilterParser::FilterGenerator.new(query_string).generate_filter
}.to raise_error(Parslet::ParseFailed)
end
it 'should raise error ' do
query_string = "id gg '1'"
expect{
FilterParser::FilterGenerator.new(query_string).generate_filter
}.to raise_error(Parslet::ParseFailed)
end
it 'should raise error ' do
query_string = "(id eq '1') or and eq 55"
expect{
FilterParser::FilterGenerator.new(query_string).generate_filter
}.to raise_error(Parslet::ParseFailed)
end
it 'should raise error ' do
query_string = "(id! eq '1)"
expect{
FilterParser::FilterGenerator.new(query_string).generate_filter
}.to raise_error(Parslet::ParseFailed)
end
it 'should raise error ' do
query_string = "(id eq '1'"
expect{
FilterParser::FilterGenerator.new(query_string).generate_filter
}.to raise_error(Parslet::ParseFailed)
end
it 'should raise error ' do
query_string = "(id eq '1' or) ne '2'"
expect{
FilterParser::FilterGenerator.new(query_string).generate_filter
}.to raise_error(Parslet::ParseFailed)
end
end
describe 'valid query_string, but invaid expression' do
subject do
query_string = "non_existing_field_name eq '5'"
filter = FilterParser::FilterGenerator.new(query_string).generate_filter
query = filter.apply_filter User
query.first
end
it 'should raise error ' do
expect{ subject }.to raise_exception(ActiveRecord::StatementInvalid)
end
end
AA
AA
МВ
AA
AA
AA
AA
AA
AA
context 'admin can delete any user' do
before do
sign_in admin
user.entries << FactoryBot.build(:entry)
delete :destroy, params: { id: user.id }
end
subject { JSON.parse(response.body)['data'] }
it 'should return HTTP status OK (200)' do
expect(response).to have_http_status(:success)
end
it 'should have id in response' do
expect(subject['id'].present?).to eq true
end
it 'should remove record in db' do
expect{ User.find(subject['id']) }.to raise_error(ActiveRecord::RecordNotFound)
end
it 'should remove user entries in db' do
expect{ Entry.find_by_user_id!(subject['id']) }.to raise_error(ActiveRecord::RecordNotFound)
end
end
AA
AA
AA
AA
AA
МР
ES
ES
IY