1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe Gql::Queries::Search, type: :graphql do
- context 'when performing generic searches' do
- let(:group) { create(:group) }
- let(:organization) { create(:organization, name: search) }
- let(:agent) { create(:agent, firstname: search, groups: [ticket.group]) }
- let!(:ticket) do
- create(:ticket, title: search, organization: organization).tap do |ticket|
- # Article required to find ticket via SQL
- create(:ticket_article, ticket: ticket)
- end
- end
- let(:search) { SecureRandom.uuid }
- let(:query) do
- <<~QUERY
- query search($query: String!) {
- search(query: $query) {
- ... on Ticket {
- __typename
- number
- title
- }
- ... on User {
- __typename
- firstname
- lastname
- }
- ... on Organization {
- __typename
- name
- }
- }
- }
- QUERY
- end
- let(:variables) { { query: search } }
- let(:es_setup) do
- Setting.set('es_url', nil)
- end
- before do
- es_setup
- gql.execute(query, variables: variables)
- end
- shared_examples 'test search query' do
- context 'with an agent', authenticated_as: :agent do
- let(:expected_result) do
- [
- { '__typename' => 'Organization', 'name' => organization.name },
- { '__typename' => 'User', 'firstname' => agent.firstname, 'lastname' => agent.lastname },
- { '__typename' => 'Ticket', 'number' => ticket.number, 'title' => ticket.title },
- ]
- end
- it 'finds expected objects' do
- expect(gql.result.data).to eq(expected_result)
- end
- end
- context 'with a customer', authenticated_as: :customer do
- let(:customer) { create(:customer, firstname: search, organization: organization) }
- let(:expected_result) do
- [
- { '__typename' => 'Organization', 'name' => organization.name },
- ]
- end
- it 'finds only objects available to the customer' do
- expect(gql.result.data).to eq(expected_result)
- end
- end
- end
- context 'without search index' do
- include_examples 'test search query'
- end
- context 'with search index', searchindex: true do
- let(:es_setup) do
- configure_elasticsearch
- rebuild_searchindex
- end
- include_examples 'test search query'
- end
- it_behaves_like 'graphql responds with error if unauthenticated'
- end
- end
|