Added attachment tests.
This commit is contained in:
parent
eac41c1ab7
commit
de7d403d16
6 changed files with 153 additions and 30 deletions
|
@ -20,9 +20,9 @@ returns
|
|||
|
||||
# default ignored attributes
|
||||
ignore_attributes = {
|
||||
:created_by_id => true,
|
||||
:updated_by_id => true,
|
||||
:active => true,
|
||||
:created_by_id => true,
|
||||
:updated_by_id => true,
|
||||
:active => true,
|
||||
}
|
||||
if self.class.search_index_support_config[:ignore_attributes]
|
||||
self.class.search_index_support_config[:ignore_attributes].each {|key, value|
|
||||
|
@ -51,11 +51,14 @@ returns
|
|||
attributes = search_index_attribute_lookup( attributes, ticket )
|
||||
|
||||
# list ignored file extentions
|
||||
ignore_attachments = [ '.png', '.jpg', '.jpeg', '.mpeg', '.mov' ]
|
||||
attachments_ignore = Setting.set('es_attachment_ignore') || [ '.png', '.jpg', '.jpeg', '.mpeg', '.mpg', '.mov', '.bin', '.exe' ]
|
||||
|
||||
# max attachment size
|
||||
attachment_max_size_in_mb = Setting.set('es_attachment_max_size_in_mb') || 40
|
||||
|
||||
# collect article data
|
||||
articles = Ticket::Article.where( :ticket_id => self.id )
|
||||
attributes['articles_all'] = []
|
||||
attributes['articles'] = []
|
||||
articles.each {|article|
|
||||
article_attributes = article.attributes
|
||||
|
||||
|
@ -80,21 +83,23 @@ returns
|
|||
end
|
||||
|
||||
# check file size
|
||||
if true
|
||||
|
||||
# check ignored files
|
||||
if attachment.filename
|
||||
filename_extention = attachment.filename.downcase
|
||||
filename_extention.gsub!(/^.*(\..+?)$/, "\\1")
|
||||
if !ignore_attachments.include?( filename_extention.downcase )
|
||||
data = {
|
||||
"_name" => attachment.filename,
|
||||
"content" => Base64.encode64( attachment.content )
|
||||
}
|
||||
attributes['attachments'].push data
|
||||
# check ignored files
|
||||
if attachment.filename
|
||||
filename_extention = attachment.filename.downcase
|
||||
filename_extention.gsub!(/^.*(\..+?)$/, "\\1")
|
||||
if !attachments_ignore.include?( filename_extention.downcase )
|
||||
data = {
|
||||
'_name' => attachment.filename,
|
||||
'content' => Base64.encode64( attachment.content )
|
||||
}
|
||||
attributes['attachments'].push data
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
attributes['articles_all'].push article_attributes
|
||||
attributes['articles'].push article_attributes
|
||||
}
|
||||
|
||||
return if !attributes
|
||||
|
|
|
@ -12,7 +12,7 @@ create/update/delete index
|
|||
:mappings => {
|
||||
:Ticket => {
|
||||
:properties => {
|
||||
:articles_all => {
|
||||
:articles => {
|
||||
:type => 'nested',
|
||||
:properties => {
|
||||
'attachments' => { :type => 'attachment' }
|
||||
|
@ -121,7 +121,8 @@ remove whole data from index
|
|||
)
|
||||
#puts "# #{response.code.to_s}"
|
||||
return true if response.success?
|
||||
puts "NOTICE: can't drop index: " + response.inspect
|
||||
#puts "NOTICE: can't drop index: " + response.inspect
|
||||
false
|
||||
end
|
||||
|
||||
=begin
|
||||
|
@ -209,8 +210,8 @@ return search result
|
|||
|
||||
puts "# #{response.code.to_s}"
|
||||
if !response.success?
|
||||
puts "ERROR: #{response.inspect}"
|
||||
return []
|
||||
# raise data.inspect
|
||||
end
|
||||
data = response.data
|
||||
|
||||
|
|
17
test/fixtures/es-box1.box
vendored
Normal file
17
test/fixtures/es-box1.box
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
From: Martin Edenhofer <martin@example.com>
|
||||
Content-Type: text/plain;
|
||||
charset=iso-8859-1
|
||||
Content-Transfer-Encoding: quoted-printable
|
||||
Subject: =?iso-8859-1?Q?aa=E4=F6=FC=DFad_asd?=
|
||||
X-Universally-Unique-Identifier: d12c15d2-e6d6-4ccd-86c7-abc2c3d0a2a2
|
||||
Date: Fri, 4 May 2012 14:01:03 +0200
|
||||
Message-Id: <BC182994-03FA-4DC5-8202-98CBFACA0887@example.com>
|
||||
To: metest@znuny.com
|
||||
Mime-Version: 1.0 (Apple Message framework v1257)
|
||||
|
||||
=E4=F6=FC=DF ad asd
|
||||
|
||||
-Martin
|
||||
|
||||
--
|
||||
Old programmers never die. They just branch to a new address.
|
1
test/fixtures/es-normal.txt
vendored
Normal file
1
test/fixtures/es-normal.txt
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
some normal text
|
18
test/fixtures/es-too-big.txt
vendored
Normal file
18
test/fixtures/es-too-big.txt
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -4,15 +4,25 @@ require 'integration_test_helper'
|
|||
class ElasticsearchTest < ActiveSupport::TestCase
|
||||
|
||||
# set config
|
||||
if !ENV['ES_URL']
|
||||
raise "ERROR: Need ES_URL - hint ES_URL='http://172.0.0.1:9200'"
|
||||
end
|
||||
Setting.set('es_url', ENV['ES_URL'])
|
||||
if !ENV['ES_INDEX']
|
||||
raise "ERROR: Need ES_INDEX - hint ES_INDEX='estest.local_zammad'"
|
||||
end
|
||||
Setting.set('es_index', ENV['ES_INDEX'])
|
||||
|
||||
# Setting.set('es_url', 'http://172.0.0.1:9200')
|
||||
Setting.set('es_url', 'http://10.240.2.11:9200')
|
||||
Setting.set('es_index', 'estest.local_zammad')
|
||||
# Setting.set('es_index', 'estest.local_zammad')
|
||||
# Setting.set('es_user', 'elasticsearch')
|
||||
# Setting.set('es_password', 'zammad')
|
||||
|
||||
# set max attachment size
|
||||
# set max attachment size in mb
|
||||
Setting.set('es_attachment_max_size_in_mb', 1 )
|
||||
|
||||
# set attachment types
|
||||
Setting.set('es_attachment_ignore', [ '.png', '.jpg', '.jpeg', '.mpeg', '.mpg', '.mov', '.bin', '.exe' ] )
|
||||
|
||||
# drop/create indexes
|
||||
#Rake::Task["searchindex:drop"].execute
|
||||
|
@ -108,6 +118,57 @@ class ElasticsearchTest < ActiveSupport::TestCase
|
|||
:updated_by_id => 1,
|
||||
:created_by_id => 1,
|
||||
)
|
||||
|
||||
# simulate upload
|
||||
|
||||
|
||||
|
||||
form_id = '123456789'
|
||||
|
||||
# add attachments which should get index / .txt
|
||||
# "some normal text"
|
||||
Store.add(
|
||||
:object => 'UploadCache',
|
||||
:o_id => form_id,
|
||||
:data => File.read("#{Rails.root.to_s}/test/fixtures/es-normal.txt"),
|
||||
:filename => 'es-normal.txt',
|
||||
:preferences => {},
|
||||
)
|
||||
|
||||
# add attachments which should get index / .pdf
|
||||
Store.add(
|
||||
:object => 'UploadCache',
|
||||
:o_id => form_id,
|
||||
:data => File.read("#{Rails.root.to_s}/test/fixtures/test1.pdf"),
|
||||
:filename => 'test1.pdf',
|
||||
:preferences => {},
|
||||
)
|
||||
|
||||
# add attachments which should get index / .box
|
||||
# "Old programmers never die"
|
||||
Store.add(
|
||||
:object => 'UploadCache',
|
||||
:o_id => form_id,
|
||||
:data => File.read("#{Rails.root.to_s}/test/fixtures/es-box1.box"),
|
||||
:filename => 'mail1.box',
|
||||
:preferences => {},
|
||||
)
|
||||
|
||||
# add to big attachment which should not get index
|
||||
# "some too big text"
|
||||
Store.add(
|
||||
:object => 'UploadCache',
|
||||
:o_id => form_id,
|
||||
:data => File.read("#{Rails.root.to_s}/test/fixtures/es-too-big.txt"),
|
||||
:filename => 'es-too-big.txt',
|
||||
:preferences => {},
|
||||
)
|
||||
|
||||
article.attachments = Store.list(
|
||||
:object => 'UploadCache',
|
||||
:o_id => form_id,
|
||||
)
|
||||
|
||||
sleep 1
|
||||
|
||||
ticket2 = Ticket.create(
|
||||
|
@ -134,14 +195,6 @@ class ElasticsearchTest < ActiveSupport::TestCase
|
|||
:created_by_id => 1,
|
||||
)
|
||||
|
||||
# add attachments which should get index
|
||||
|
||||
# add attachments which should not get index
|
||||
|
||||
# add to big attachment which should not get index
|
||||
|
||||
|
||||
|
||||
sleep 1
|
||||
|
||||
ticket3 = Ticket.create(
|
||||
|
@ -200,9 +253,37 @@ class ElasticsearchTest < ActiveSupport::TestCase
|
|||
assert_equal(result[0].id, ticket2.id)
|
||||
|
||||
# search for indexed attachment
|
||||
result = Ticket.search(
|
||||
:current_user => agent,
|
||||
:query => '"some normal text"',
|
||||
:limit => 15,
|
||||
)
|
||||
assert(result[0], 'record 1')
|
||||
assert_equal(result[0].id, ticket1.id)
|
||||
|
||||
result = Ticket.search(
|
||||
:current_user => agent,
|
||||
:query => '"otrs.org"',
|
||||
:limit => 15,
|
||||
)
|
||||
assert(result[0], 'record 1')
|
||||
assert_equal(result[0].id, ticket1.id)
|
||||
|
||||
|
||||
# search for not indexed attachment
|
||||
result = Ticket.search(
|
||||
:current_user => agent,
|
||||
:query => '"some too big text"',
|
||||
:limit => 15,
|
||||
)
|
||||
assert(!result[0], 'record 1')
|
||||
|
||||
result = Ticket.search(
|
||||
:current_user => agent,
|
||||
:query => '"Old programmers never die"',
|
||||
:limit => 15,
|
||||
)
|
||||
assert(!result[0], 'record 1')
|
||||
|
||||
|
||||
# search for ticket with no permissions
|
||||
|
|
Loading…
Reference in a new issue