Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
language: ruby

branches:
only:
- master
- master

rvm:
- 1.8.7
- 1.9.3
Expand All @@ -13,14 +15,16 @@ rvm:
- 2.5.0
- jruby
- rbx-2

matrix:
allow_failures:
- rvm: rbx-2
- rvm: jruby
- rvm: rbx-2
- rvm: jruby

cache: bundler
env:
global:
# ALGOLIA_APPLICATION_ID
- secure: D+xCYUPyCXiuznMX0VYaihUQ+OO/qItazlAqJRT70fQfl5UlqAMOSaeN6ybE32dm3K1meWucINeDRecvFxB8XQy0a3oxUz6GTlEUOAXtKtn7XtdzwXmNaKdQMmAxYyomiCnlLB7LX14MldPl5S95Tf4tRs4d0nPHQmzsNPshzTM=
# ALGOLIA_API_KEY
- secure: dc5+Ulb1siqrWEydpyeccxfaZ/V6sFKmq+Xc8BLv6rwR/saBsXP1M5zVRXAkF6u6jnpLAxYBBIA9rbdFUAaYPY/16PKQY1lux1QYLW4pxc0Kk9s+JOSNyxLNoIeDJp8zOTwS/heDYj6WabL4n3mr5hsy645EC1VIbpfCe4IpMnw=

before_script:
- wget https://alg.li/algolia-keys && chmod +x algolia-keys

script:
- if [ "$TRAVIS_PULL_REQUEST" != "false" ] && [[ ! "$TRAVIS_PULL_REQUEST_SLUG" =~ ^algolia\/ ]]; then eval $(./algolia-keys export) && bundle exec rspec --tag ~maintainers_only; else bundle exec rspec; fi
279 changes: 145 additions & 134 deletions spec/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
def safe_index_name(name)
return name if ENV['TRAVIS'].to_s != "true"
id = ENV['TRAVIS_JOB_NUMBER']
"#{name}_travis-#{id}"
"TRAVIS_RUBY_#{name}-#{id}"
end

def is_include(array, attr, value)
Expand All @@ -18,6 +18,150 @@ def is_include(array, attr, value)
return false
end

describe 'API keys', :maintainers_only => true do
before(:all) do
@index = Algolia::Index.new(safe_index_name("àlgol?a"))
@index.delete_index rescue "not fatal"
end

after(:all) do
@index.delete_index rescue "not fatal"
end

def wait_key(index, key, &block)
1.upto(60) do # do not wait too long
begin
k = index.get_api_key(key)
if block_given?
return if yield k
# not found
sleep 1
next
end
return
rescue
# not found
sleep 1
end
end
end

def wait_key_missing(index, key)
1.upto(60) do # do not wait too long
begin
k = index.get_api_key(key)
sleep 1
rescue
# not found
return
end
end
end

def wait_global_key(key, &block)
1.upto(60) do # do not wait too long
begin
k = Algolia.get_api_key(key)
if block_given?
return if yield k
# not found
sleep 1
next
end
return
rescue
# not found
sleep 1
end
end
end

def wait_global_key_missing(key)
1.upto(60) do # do not wait too long
begin
k = Algolia.get_api_key(key)
sleep 1
rescue
# not found
return
end
end
end

it "should test index keys" do
@index.set_settings!({}) # ensure the index exists
resIndex = @index.list_api_keys
newIndexKey = @index.add_api_key(['search'])
newIndexKey['key'].should_not eq("")
wait_key(@index, newIndexKey['key'])
resIndexAfter = @index.list_api_keys
is_include(resIndex['keys'], 'value', newIndexKey['key']).should eq(false)
is_include(resIndexAfter['keys'], 'value', newIndexKey['key']).should eq(true)
indexKey = @index.get_api_key(newIndexKey['key'])
indexKey['acl'][0].should eq('search')
@index.update_api_key(newIndexKey['key'], ['addObject'])
wait_key(@index, newIndexKey['key']) do |key|
key['acl'] == ['addObject']
end
indexKey = @index.get_api_key(newIndexKey['key'])
indexKey['acl'][0].should eq('addObject')
@index.delete_api_key(newIndexKey['key'])
wait_key_missing(@index, newIndexKey['key'])
resIndexEnd = @index.list_api_keys
is_include(resIndexEnd['keys'], 'value', newIndexKey['key']).should eq(false)
end

it "should test global keys" do
res = Algolia.list_api_keys
newKey = Algolia.add_api_key(['search'])
newKey['key'].should_not eq("")
wait_global_key(newKey['key'])
resAfter = Algolia.list_api_keys
is_include(res['keys'], 'value', newKey['key']).should eq(false)
is_include(resAfter['keys'], 'value', newKey['key']).should eq(true)
key = Algolia.get_api_key(newKey['key'])
key['acl'][0].should eq('search')
Algolia.update_api_key(newKey['key'], ['addObject'])
wait_global_key(newKey['key']) do |key|
key['acl'] == ['addObject']
end
key = Algolia.get_api_key(newKey['key'])
key['acl'][0].should eq('addObject')
Algolia.delete_api_key(newKey['key'])
wait_global_key_missing(newKey['key'])
resEnd = Algolia.list_api_keys
is_include(resEnd['keys'], 'value', newKey['key']).should eq(false)
end

it "Check add keys" do
newIndexKey = @index.add_api_key(['search'])
newIndexKey.should have_key('key')
newIndexKey['key'].should be_a(String)
newIndexKey.should have_key('createdAt')
newIndexKey['createdAt'].should be_a(String)
sleep 5 # no task ID here
resIndex = @index.list_api_keys
resIndex.should have_key('keys')
resIndex['keys'].should be_a(Array)
resIndex['keys'][0].should have_key('value')
resIndex['keys'][0]['value'].should be_a(String)
resIndex['keys'][0].should have_key('acl')
resIndex['keys'][0]['acl'].should be_a(Array)
resIndex['keys'][0].should have_key('validity')
resIndex['keys'][0]['validity'].should be_a(Integer)
indexKey = @index.get_api_key(newIndexKey['key'])
indexKey.should have_key('value')
indexKey['value'].should be_a(String)
indexKey.should have_key('acl')
indexKey['acl'].should be_a(Array)
indexKey.should have_key('validity')
indexKey['validity'].should be_a(Integer)
task = @index.delete_api_key(newIndexKey['key'])
task.should have_key('deletedAt')
task['deletedAt'].should be_a(String)
end
end

describe 'Client' do
before(:all) do
@index = Algolia::Index.new(safe_index_name("àlgol?a"))
Expand Down Expand Up @@ -452,111 +596,6 @@ def is_include(array, attr, value)
res['facets']['g']['g2'].should be_nil
end

def wait_key(index, key, &block)
1.upto(60) do # do not wait too long
begin
k = index.get_api_key(key)
if block_given?
return if yield k
# not found
sleep 1
next
end
return
rescue
# not found
sleep 1
end
end
end

def wait_key_missing(index, key)
1.upto(60) do # do not wait too long
begin
k = index.get_api_key(key)
sleep 1
rescue
# not found
return
end
end
end

def wait_global_key(key, &block)
1.upto(60) do # do not wait too long
begin
k = Algolia.get_api_key(key)
if block_given?
return if yield k
# not found
sleep 1
next
end
return
rescue
# not found
sleep 1
end
end
end

def wait_global_key_missing(key)
1.upto(60) do # do not wait too long
begin
k = Algolia.get_api_key(key)
sleep 1
rescue
# not found
return
end
end
end

it "should test index keys" do
@index.set_settings!({}) # ensure the index exists
resIndex = @index.list_api_keys
newIndexKey = @index.add_api_key(['search'])
newIndexKey['key'].should_not eq("")
wait_key(@index, newIndexKey['key'])
resIndexAfter = @index.list_api_keys
is_include(resIndex['keys'], 'value', newIndexKey['key']).should eq(false)
is_include(resIndexAfter['keys'], 'value', newIndexKey['key']).should eq(true)
indexKey = @index.get_api_key(newIndexKey['key'])
indexKey['acl'][0].should eq('search')
@index.update_api_key(newIndexKey['key'], ['addObject'])
wait_key(@index, newIndexKey['key']) do |key|
key['acl'] == ['addObject']
end
indexKey = @index.get_api_key(newIndexKey['key'])
indexKey['acl'][0].should eq('addObject')
@index.delete_api_key(newIndexKey['key'])
wait_key_missing(@index, newIndexKey['key'])
resIndexEnd = @index.list_api_keys
is_include(resIndexEnd['keys'], 'value', newIndexKey['key']).should eq(false)
end

it "should test global keys" do
res = Algolia.list_api_keys
newKey = Algolia.add_api_key(['search'])
newKey['key'].should_not eq("")
wait_global_key(newKey['key'])
resAfter = Algolia.list_api_keys
is_include(res['keys'], 'value', newKey['key']).should eq(false)
is_include(resAfter['keys'], 'value', newKey['key']).should eq(true)
key = Algolia.get_api_key(newKey['key'])
key['acl'][0].should eq('search')
Algolia.update_api_key(newKey['key'], ['addObject'])
wait_global_key(newKey['key']) do |key|
key['acl'] == ['addObject']
end
key = Algolia.get_api_key(newKey['key'])
key['acl'][0].should eq('addObject')
Algolia.delete_api_key(newKey['key'])
wait_global_key_missing(newKey['key'])
resEnd = Algolia.list_api_keys
is_include(resEnd['keys'], 'value', newKey['key']).should eq(false)
end

it "should handle slash in objectId" do
@index.clear_index!()
@index.add_object!({:firstname => "Robert", :objectID => "A/go/?a"})
Expand Down Expand Up @@ -752,34 +791,6 @@ def wait_global_key_missing(key)
status.should be_a(String)
end

it "Check add keys" do
newIndexKey = @index.add_api_key(['search'])
newIndexKey.should have_key('key')
newIndexKey['key'].should be_a(String)
newIndexKey.should have_key('createdAt')
newIndexKey['createdAt'].should be_a(String)
sleep 5 # no task ID here
resIndex = @index.list_api_keys
resIndex.should have_key('keys')
resIndex['keys'].should be_a(Array)
resIndex['keys'][0].should have_key('value')
resIndex['keys'][0]['value'].should be_a(String)
resIndex['keys'][0].should have_key('acl')
resIndex['keys'][0]['acl'].should be_a(Array)
resIndex['keys'][0].should have_key('validity')
resIndex['keys'][0]['validity'].should be_a(Integer)
indexKey = @index.get_api_key(newIndexKey['key'])
indexKey.should have_key('value')
indexKey['value'].should be_a(String)
indexKey.should have_key('acl')
indexKey['acl'].should be_a(Array)
indexKey.should have_key('validity')
indexKey['validity'].should be_a(Integer)
task = @index.delete_api_key(newIndexKey['key'])
task.should have_key('deletedAt')
task['deletedAt'].should be_a(String)
end

it 'Check attributes log : ' do
logs = Algolia.get_logs()
logs.should have_key('logs')
Expand Down