Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

132 lines (102 sloc) 4.594 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"}, :refresh => true) }
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"}, :refresh => true) }
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 => true
}
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 => true
}
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 => true
}
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 "update the document with a partial one" do
Tire.index('articles-with-tags') do
update( 'article', '1', {:doc => { :title => 'One UPDATED' }}, :refresh => true )
end
document = Tire.search('articles-with-tags') { query { string 'title:one' } }.results.first
assert_equal 'One UPDATED', document.title, 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 }
}, {
:refresh => true
}
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.