Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

112 lines (82 sloc) 4.014 kB
require 'test_helper'
module Tire
class IndexUpdateDocumentIntegrationTest < Test::Unit::TestCase
include Test::Integration
context "Updating a document" do
setup do
Tire.index 'articles-with-tags' do
delete
create
store :type => 'article', :id => 1, :title => 'One', :tags => ['foo'], :views => 0
store :type => 'article', :id => 2, :title => 'Two', :tags => ['foo', 'bar'], :views => 10
store :type => 'article', :id => 3, :title => 'Three', :tags => ['foobar']
refresh
end
end
teardown { Tire.index('articles-with-tags').delete }
should "increment a counter" do
Tire.index('articles-with-tags') { update( 'article', '1', :script => "ctx._source.views += 1" ) and refresh }
document = Tire.search('articles-with-tags') { query { string 'title:one' } }.results.first
assert_equal 1, document.views, document.inspect
Tire.index('articles-with-tags') { update( 'article', '2', :script => "ctx._source.views += 1" ) and refresh }
document = Tire.search('articles-with-tags') { query { string 'title:two' } }.results.first
assert_equal 11, document.views, document.inspect
end
should "add a tag to document" do
Tire.index('articles-with-tags') do
update 'article', '1', :script => "ctx._source.tags += tag",
:params => { :tag => 'new' }
refresh
end
document = Tire.search('articles-with-tags') { query { string 'title:one' } }.results.first
assert_equal ['foo', 'new'], document.tags, document.inspect
end
should "remove a tag from document" do
Tire.index('articles-with-tags') do
update 'article', '1', :script => "ctx._source.tags = tags",
:params => { :tags => [] }
refresh
end
document = Tire.index('articles-with-tags').retrieve 'article', '1'
assert_equal [], document.tags, document.inspect
end
should "remove the entire document if specific condition is met" do
Tire.index('articles-with-tags') do
# Remove document when it contains tag 'foobar'
update 'article', '3', :script => "ctx._source.tags.contains(tag) ? ctx.op = 'delete' : 'none'",
:params => { :tag => 'foobar' }
refresh
end
assert_nil Tire.index('articles-with-tags').retrieve 'article', '3'
end
should "pass the operation parameters to the API" do
Tire.index('articles-with-tags').update 'article', '2', { :script => "ctx._source.tags += tag",
:params => { :tag => 'new' }
},
{
:refresh => true
}
document = Tire.search('articles-with-tags') { query { string 'title:two' } }.results.first
assert_equal 3, document.tags.size, document.inspect
end
should "access variables from the outer scope" do
$t = self
class Updater
@tags = ['foo', 'bar', 'baz']
def self.perform_update!
$t.assert_not_nil @tags
Tire.index('articles-with-tags') do |index|
$t.assert_not_nil @tags
index.update 'article', '3', :script => "ctx._source.tags = tags",
:params => { :tags => @tags }
index.refresh
end
end
end
Updater.perform_update!
document = Tire.search('articles-with-tags') { query { string 'title:three' } }.results.first
assert_equal 3, document.tags.size, document.inspect
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.