From 40d23d3aeccd5d915caa259a15165a31993dda4b Mon Sep 17 00:00:00 2001 From: Julien Bourdeau Date: Mon, 12 Mar 2018 14:11:04 +0100 Subject: [PATCH 1/7] Format .travis.yml --- .travis.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index bc3c9cf0..3d3ee696 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,9 @@ language: ruby + branches: only: - - master + - master + rvm: - 1.8.7 - 1.9.3 @@ -13,11 +15,14 @@ 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 From 63f19140ba7c59dce481c7e1a4b5ed843c5358d6 Mon Sep 17 00:00:00 2001 From: Julien Bourdeau Date: Mon, 12 Mar 2018 14:17:09 +0100 Subject: [PATCH 2/7] Travis: get credentials temp credentials for community PRs --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index 3d3ee696..46dcf4c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,3 +29,9 @@ env: - 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 rake; else bundle exec rake; fi From 7d905862cf844ed2f6d8912803a0e629f80088f0 Mon Sep 17 00:00:00 2001 From: Raphael Daguenet Date: Mon, 12 Mar 2018 14:44:24 +0100 Subject: [PATCH 3/7] Normalize job name --- spec/client_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 37a10d80..c7a6cd59 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -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) From 20459c7d317f5e66937cf9e80fbb0114b1353b45 Mon Sep 17 00:00:00 2001 From: Raphael Daguenet Date: Mon, 12 Mar 2018 14:48:56 +0100 Subject: [PATCH 4/7] Separate API keys tests from the rest --- .travis.yml | 2 +- spec/client_spec.rb | 221 +++++++++++++++++++++++--------------------- 2 files changed, 117 insertions(+), 106 deletions(-) diff --git a/.travis.yml b/.travis.yml index 46dcf4c6..d841e67a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,4 +34,4 @@ 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 rake; else bundle exec rake; fi + - if [ "$TRAVIS_PULL_REQUEST" != "false" ] && [[ ! "$TRAVIS_PULL_REQUEST_SLUG" =~ ^algolia\/ ]]; then eval $(./algolia-keys export) && bundle exec rspec; else bundle exec rspec --tag ~maintainers_only; fi diff --git a/spec/client_spec.rb b/spec/client_spec.rb index c7a6cd59..356180bf 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -18,6 +18,122 @@ 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 +end + describe 'Client' do before(:all) do @index = Algolia::Index.new(safe_index_name("àlgol?a")) @@ -452,111 +568,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"}) From 579b1ba3c66221a817861c495ad3198a4d785f4d Mon Sep 17 00:00:00 2001 From: Julien Bourdeau Date: Mon, 12 Mar 2018 14:51:41 +0100 Subject: [PATCH 5/7] Travis: set Admin credentials in travis admin --- .travis.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index d841e67a..a83b5aa6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,13 +23,6 @@ matrix: 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 From c37fd91689c440edc62b32e3ad5ff0055d298f34 Mon Sep 17 00:00:00 2001 From: Raphael Daguenet Date: Tue, 13 Mar 2018 16:00:47 +0100 Subject: [PATCH 6/7] Fix maintainers only tests --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a83b5aa6..6fad69f6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,4 +27,4 @@ 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; else bundle exec rspec --tag ~maintainers_only; fi + - 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 From b220b8bf5eca8b2e5c0f01fedff2bba92ae7bf51 Mon Sep 17 00:00:00 2001 From: Julien Bourdeau Date: Wed, 14 Mar 2018 11:40:35 +0100 Subject: [PATCH 7/7] test: Regroup all api keys tests together --- spec/client_spec.rb | 56 ++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 356180bf..907c5a94 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -132,6 +132,34 @@ def wait_global_key_missing(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 @@ -763,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')