From 438fbe02492f474b274c62751a5f3ea3c6245722 Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Mon, 10 Mar 2025 20:18:31 +0000 Subject: [PATCH 1/8] Grand work for integration tests with real instance --- .github/workflows/tests.yml | 2 +- .gitignore | 3 ++ .rubocop.yml | 4 +- Gemfile | 1 + spec/fixtures/collections/companies.json | 11 +++++ spec/spec_helper.rb | 2 + spec/typesense/collection_spec.rb | 25 +---------- spec/typesense/collections_spec.rb | 55 +++--------------------- spec/typesense/document_spec.rb | 25 +---------- spec/typesense/documents_spec.rb | 25 +---------- 10 files changed, 29 insertions(+), 124 deletions(-) create mode 100644 spec/fixtures/collections/companies.json diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 439069b..eac55b3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - ruby-version: ['3.0', '3.2', '3.3'] + ruby-version: ['3.0', '3.2', '3.3', '3.4'] services: typesense: image: typesense/typesense:28.0 diff --git a/.gitignore b/.gitignore index 12ee3e5..ecb64fe 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ typesense-server-peers # rspec failure tracking .rspec_status typesense-data + +# os files +.DS_Store diff --git a/.rubocop.yml b/.rubocop.yml index 55a805b..8e71ab2 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,4 +1,6 @@ -require: rubocop-rspec +plugins: + - rubocop-rspec + - rubocop-rake AllCops: NewCops: enable diff --git a/Gemfile b/Gemfile index b18290a..99b8ec8 100644 --- a/Gemfile +++ b/Gemfile @@ -16,6 +16,7 @@ gem 'rspec', '~> 3.9' gem 'rspec_junit_formatter', '~> 0.4' gem 'rspec-legacy_formatters', '~> 1.0' # For codecov formatter gem 'rubocop', '~> 1.12' +gem 'rubocop-rake', '~> 0.7' gem 'rubocop-rspec', '~> 2.4', require: false gem 'simplecov', '~> 0.18' gem 'timecop', '~> 0.9' diff --git a/spec/fixtures/collections/companies.json b/spec/fixtures/collections/companies.json new file mode 100644 index 0000000..c873c56 --- /dev/null +++ b/spec/fixtures/collections/companies.json @@ -0,0 +1,11 @@ +{ + "name": "companies", + "num_documents": 0, + "fields": [ + { "name": "company_name", "type": "string", "facet": false }, + { "name": "num_employees", "type": "int32", "facet": false }, + { "name": "country", "type": "string", "facet": true } + ], + "token_ranking_field": "num_employees", + "default_sorting_field": "num_employees" +} diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4865ba5..82307d3 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -11,6 +11,8 @@ require 'webmock/rspec' require 'typesense' +WebMock.disable_net_connect!(allow_localhost: true) + RSpec.configure do |config| # Enable flags like --only-failures and --next-failure config.example_status_persistence_file_path = '.rspec_status' diff --git a/spec/typesense/collection_spec.rb b/spec/typesense/collection_spec.rb index 373d23d..6326802 100644 --- a/spec/typesense/collection_spec.rb +++ b/spec/typesense/collection_spec.rb @@ -8,30 +8,7 @@ include_context 'with Typesense configuration' - let(:company_schema) do - { - 'name' => 'companies', - 'num_documents' => 0, - 'fields' => [ - { - 'name' => 'company_name', - 'type' => 'string', - 'facet' => false - }, - { - 'name' => 'num_employees', - 'type' => 'int32', - 'facet' => false - }, - { - 'name' => 'country', - 'type' => 'string', - 'facet' => true - } - ], - 'token_ranking_field' => 'num_employees' - } - end + let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } describe '#retrieve' do it 'returns the specified collection' do diff --git a/spec/typesense/collections_spec.rb b/spec/typesense/collections_spec.rb index 8f0c5e7..f03beb9 100644 --- a/spec/typesense/collections_spec.rb +++ b/spec/typesense/collections_spec.rb @@ -8,30 +8,7 @@ include_context 'with Typesense configuration' - let(:company_schema) do - { - 'name' => 'companies', - 'num_documents' => 0, - 'fields' => [ - { - 'name' => 'company_name', - 'type' => 'string', - 'facet' => false - }, - { - 'name' => 'num_employees', - 'type' => 'int32', - 'facet' => false - }, - { - 'name' => 'country', - 'type' => 'string', - 'facet' => true - } - ], - 'token_ranking_field' => 'num_employees' - } - end + let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } describe '#create' do it 'creates a collection and returns it' do @@ -52,29 +29,7 @@ end context 'with integration', :integration do - let(:integration_schema) do - { - 'name' => 'integration_companies', - 'fields' => [ - { - 'name' => 'company_name', - 'type' => 'string', - 'facet' => false - }, - { - 'name' => 'num_employees', - 'type' => 'int32', - 'facet' => false - }, - { - 'name' => 'country', - 'type' => 'string', - 'facet' => true - } - ], - 'default_sorting_field' => 'num_employees' - } - end + let(:integration_schema) { company_schema } let(:integration_client) do Typesense::Client.new( @@ -135,7 +90,7 @@ before do WebMock.disable! begin - integration_client.collections['integration_companies'].delete + integration_client.collections['companies'].delete rescue Typesense::Error::ObjectNotFound # Collection doesn't exist, which is fine end @@ -143,7 +98,7 @@ after do begin - integration_client.collections['integration_companies'].delete + integration_client.collections['companies'].delete rescue Typesense::Error::ObjectNotFound # Collection doesn't exist, which is fine end @@ -153,7 +108,7 @@ it 'creates a collection on a real Typesense server' do result = integration_client.collections.create(integration_schema) - expect(result['name']).to eq('integration_companies') + expect(result['name']).to eq('companies') expect(result['fields']).to eq(expected_fields) expect(result['default_sorting_field']).to eq(integration_schema['default_sorting_field']) expect(result['num_documents']).to eq(0) diff --git a/spec/typesense/document_spec.rb b/spec/typesense/document_spec.rb index ec7c2f9..30866e5 100644 --- a/spec/typesense/document_spec.rb +++ b/spec/typesense/document_spec.rb @@ -8,30 +8,7 @@ include_context 'with Typesense configuration' - let(:company_schema) do - { - 'name' => 'companies', - 'num_documents' => 0, - 'fields' => [ - { - 'name' => 'company_name', - 'type' => 'string', - 'facet' => false - }, - { - 'name' => 'num_employees', - 'type' => 'int32', - 'facet' => false - }, - { - 'name' => 'country', - 'type' => 'string', - 'facet' => true - } - ], - 'token_ranking_field' => 'num_employees' - } - end + let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } let(:document) do { diff --git a/spec/typesense/documents_spec.rb b/spec/typesense/documents_spec.rb index ba9b78a..e2d7eb9 100644 --- a/spec/typesense/documents_spec.rb +++ b/spec/typesense/documents_spec.rb @@ -8,30 +8,7 @@ include_context 'with Typesense configuration' - let(:company_schema) do - { - 'name' => 'companies', - 'num_documents' => 0, - 'fields' => [ - { - 'name' => 'company_name', - 'type' => 'string', - 'facet' => false - }, - { - 'name' => 'num_employees', - 'type' => 'int32', - 'facet' => false - }, - { - 'name' => 'country', - 'type' => 'string', - 'facet' => true - } - ], - 'token_ranking_field' => 'num_employees' - } - end + let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } let(:document) do { From 014335074baff76736695580848875f33214f350 Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Mon, 10 Mar 2025 20:23:27 +0000 Subject: [PATCH 2/8] Rubocop correction until plugins supported --- .rubocop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.rubocop.yml b/.rubocop.yml index 8e71ab2..0bc9789 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,4 +1,4 @@ -plugins: +require: - rubocop-rspec - rubocop-rake From c8bcc0d577442310ea12b4f83729c611c60aa1c6 Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Mon, 10 Mar 2025 20:34:23 +0000 Subject: [PATCH 3/8] Update dependencies for dev --- .rubocop.yml | 2 +- Gemfile | 25 ++++++++++++------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 0bc9789..8e71ab2 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,4 +1,4 @@ -require: +plugins: - rubocop-rspec - rubocop-rake diff --git a/Gemfile b/Gemfile index 99b8ec8..47ddc4b 100644 --- a/Gemfile +++ b/Gemfile @@ -5,22 +5,21 @@ source 'https://rubygems.org' git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } # Dev dependencies -gem 'awesome_print', '~> 1.8' -gem 'bundler', '~> 2.0' -gem 'codecov', '~> 0.1' -gem 'erb' -gem 'guard', '~> 2.16' -gem 'guard-rubocop', '~> 1.3' -gem 'rake', '~> 13.0' -gem 'rspec', '~> 3.9' -gem 'rspec_junit_formatter', '~> 0.4' +gem 'awesome_print', '~> 1.9' +gem 'bundler', '~> 2.6' +gem 'codecov', '~> 0.6' +gem 'erb', '~> 4.0' +gem 'guard', '~> 2.19' +gem 'guard-rubocop', '~> 1.5' +gem 'rake', '~> 13.2' +gem 'rspec', '~> 3.13' +gem 'rspec_junit_formatter', '~> 0.6' gem 'rspec-legacy_formatters', '~> 1.0' # For codecov formatter -gem 'rubocop', '~> 1.12' +gem 'rubocop', '~> 1.73' gem 'rubocop-rake', '~> 0.7' -gem 'rubocop-rspec', '~> 2.4', require: false -gem 'simplecov', '~> 0.18' +gem 'rubocop-rspec', '~> 3.5', require: false gem 'timecop', '~> 0.9' -gem 'webmock', '~> 3.8' +gem 'webmock', '~> 3.25' # Specify your gem's dependencies in typesense.gemspec gemspec From 7396338bceea2b7190f6eead3e288c34f912fae6 Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Mon, 10 Mar 2025 20:36:28 +0000 Subject: [PATCH 4/8] Revert bundler version update --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 47ddc4b..f659300 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } # Dev dependencies gem 'awesome_print', '~> 1.9' -gem 'bundler', '~> 2.6' +gem 'bundler', '~> 2.2' gem 'codecov', '~> 0.6' gem 'erb', '~> 4.0' gem 'guard', '~> 2.19' From e7c95427da29d628b6b5ec6715e9938d2af4416c Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Tue, 11 Mar 2025 21:03:44 +0000 Subject: [PATCH 5/8] Revert fixture --- spec/fixtures/collections/companies.json | 11 ----------- spec/typesense/collection_spec.rb | 25 +++++++++++++++++++++++- spec/typesense/collections_spec.rb | 25 +++++++++++++++++++++++- spec/typesense/document_spec.rb | 25 +++++++++++++++++++++++- spec/typesense/documents_spec.rb | 25 +++++++++++++++++++++++- 5 files changed, 96 insertions(+), 15 deletions(-) delete mode 100644 spec/fixtures/collections/companies.json diff --git a/spec/fixtures/collections/companies.json b/spec/fixtures/collections/companies.json deleted file mode 100644 index c873c56..0000000 --- a/spec/fixtures/collections/companies.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "companies", - "num_documents": 0, - "fields": [ - { "name": "company_name", "type": "string", "facet": false }, - { "name": "num_employees", "type": "int32", "facet": false }, - { "name": "country", "type": "string", "facet": true } - ], - "token_ranking_field": "num_employees", - "default_sorting_field": "num_employees" -} diff --git a/spec/typesense/collection_spec.rb b/spec/typesense/collection_spec.rb index 6326802..b7acb70 100644 --- a/spec/typesense/collection_spec.rb +++ b/spec/typesense/collection_spec.rb @@ -8,7 +8,30 @@ include_context 'with Typesense configuration' - let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } + let(:company_schema) do + { + 'name' => 'companies', + 'num_documents' => 0, + 'fields' => [ + { + 'name' => 'company_name', + 'type' => 'string', + 'facet' => false + }, + { + 'name' => 'num_employees', + 'type' => 'int32', + 'facet' => false + }, + { + 'name' => 'country', + 'type' => 'string', + 'facet' => true + } + ], + 'default_sorting_field' => 'num_employees' + } + end describe '#retrieve' do it 'returns the specified collection' do diff --git a/spec/typesense/collections_spec.rb b/spec/typesense/collections_spec.rb index f03beb9..6f7f1b2 100644 --- a/spec/typesense/collections_spec.rb +++ b/spec/typesense/collections_spec.rb @@ -8,7 +8,30 @@ include_context 'with Typesense configuration' - let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } + let(:company_schema) do + { + 'name' => 'companies', + 'num_documents' => 0, + 'fields' => [ + { + 'name' => 'company_name', + 'type' => 'string', + 'facet' => false + }, + { + 'name' => 'num_employees', + 'type' => 'int32', + 'facet' => false + }, + { + 'name' => 'country', + 'type' => 'string', + 'facet' => true + } + ], + 'default_sorting_field' => 'num_employees' + } + end describe '#create' do it 'creates a collection and returns it' do diff --git a/spec/typesense/document_spec.rb b/spec/typesense/document_spec.rb index 30866e5..cf140f9 100644 --- a/spec/typesense/document_spec.rb +++ b/spec/typesense/document_spec.rb @@ -8,7 +8,30 @@ include_context 'with Typesense configuration' - let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } + let(:company_schema) do + { + 'name' => 'companies', + 'num_documents' => 0, + 'fields' => [ + { + 'name' => 'company_name', + 'type' => 'string', + 'facet' => false + }, + { + 'name' => 'num_employees', + 'type' => 'int32', + 'facet' => false + }, + { + 'name' => 'country', + 'type' => 'string', + 'facet' => true + } + ], + 'default_sorting_field' => 'num_employees' + } + end let(:document) do { diff --git a/spec/typesense/documents_spec.rb b/spec/typesense/documents_spec.rb index e2d7eb9..c6d9712 100644 --- a/spec/typesense/documents_spec.rb +++ b/spec/typesense/documents_spec.rb @@ -8,7 +8,30 @@ include_context 'with Typesense configuration' - let(:company_schema) { JSON.parse(File.read('spec/fixtures/collections/companies.json')) } + let(:company_schema) do + { + 'name' => 'companies', + 'num_documents' => 0, + 'fields' => [ + { + 'name' => 'company_name', + 'type' => 'string', + 'facet' => false + }, + { + 'name' => 'num_employees', + 'type' => 'int32', + 'facet' => false + }, + { + 'name' => 'country', + 'type' => 'string', + 'facet' => true + } + ], + 'default_sorting_field' => 'num_employees' + } + end let(:document) do { From c5108139d24c3a28849c551f9af3b4d3c772f612 Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Tue, 11 Mar 2025 21:05:15 +0000 Subject: [PATCH 6/8] Revert integration schema --- spec/typesense/collections_spec.rb | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/spec/typesense/collections_spec.rb b/spec/typesense/collections_spec.rb index 6f7f1b2..e40e6bb 100644 --- a/spec/typesense/collections_spec.rb +++ b/spec/typesense/collections_spec.rb @@ -52,7 +52,30 @@ end context 'with integration', :integration do - let(:integration_schema) { company_schema } + let(:integration_schema) do + { + 'name' => 'companies', + 'num_documents' => 0, + 'fields' => [ + { + 'name' => 'company_name', + 'type' => 'string', + 'facet' => false + }, + { + 'name' => 'num_employees', + 'type' => 'int32', + 'facet' => false + }, + { + 'name' => 'country', + 'type' => 'string', + 'facet' => true + } + ], + 'default_sorting_field' => 'num_employees' + } + end let(:integration_client) do Typesense::Client.new( From c54b1074253e010bfb0bf6c846e9dd2b4bf611ba Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Tue, 11 Mar 2025 21:06:18 +0000 Subject: [PATCH 7/8] Revert integration collection name --- spec/typesense/collections_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/typesense/collections_spec.rb b/spec/typesense/collections_spec.rb index e40e6bb..a0c27d0 100644 --- a/spec/typesense/collections_spec.rb +++ b/spec/typesense/collections_spec.rb @@ -54,7 +54,7 @@ context 'with integration', :integration do let(:integration_schema) do { - 'name' => 'companies', + 'name' => 'integration_companies', 'num_documents' => 0, 'fields' => [ { @@ -136,7 +136,7 @@ before do WebMock.disable! begin - integration_client.collections['companies'].delete + integration_client.collections['integration_companies'].delete rescue Typesense::Error::ObjectNotFound # Collection doesn't exist, which is fine end @@ -144,7 +144,7 @@ after do begin - integration_client.collections['companies'].delete + integration_client.collections['integration_companies'].delete rescue Typesense::Error::ObjectNotFound # Collection doesn't exist, which is fine end @@ -154,7 +154,7 @@ it 'creates a collection on a real Typesense server' do result = integration_client.collections.create(integration_schema) - expect(result['name']).to eq('companies') + expect(result['name']).to eq('integration_companies') expect(result['fields']).to eq(expected_fields) expect(result['default_sorting_field']).to eq(integration_schema['default_sorting_field']) expect(result['num_documents']).to eq(0) From 417f83ee79c34b6b0b19ef3052b2b4a8f7e7274f Mon Sep 17 00:00:00 2001 From: Erim Icel Date: Tue, 11 Mar 2025 21:07:14 +0000 Subject: [PATCH 8/8] Remove num documents --- spec/typesense/collection_spec.rb | 1 - spec/typesense/collections_spec.rb | 2 -- spec/typesense/document_spec.rb | 1 - spec/typesense/documents_spec.rb | 1 - 4 files changed, 5 deletions(-) diff --git a/spec/typesense/collection_spec.rb b/spec/typesense/collection_spec.rb index b7acb70..2eb1084 100644 --- a/spec/typesense/collection_spec.rb +++ b/spec/typesense/collection_spec.rb @@ -11,7 +11,6 @@ let(:company_schema) do { 'name' => 'companies', - 'num_documents' => 0, 'fields' => [ { 'name' => 'company_name', diff --git a/spec/typesense/collections_spec.rb b/spec/typesense/collections_spec.rb index a0c27d0..a70c446 100644 --- a/spec/typesense/collections_spec.rb +++ b/spec/typesense/collections_spec.rb @@ -11,7 +11,6 @@ let(:company_schema) do { 'name' => 'companies', - 'num_documents' => 0, 'fields' => [ { 'name' => 'company_name', @@ -55,7 +54,6 @@ let(:integration_schema) do { 'name' => 'integration_companies', - 'num_documents' => 0, 'fields' => [ { 'name' => 'company_name', diff --git a/spec/typesense/document_spec.rb b/spec/typesense/document_spec.rb index cf140f9..bdaec6a 100644 --- a/spec/typesense/document_spec.rb +++ b/spec/typesense/document_spec.rb @@ -11,7 +11,6 @@ let(:company_schema) do { 'name' => 'companies', - 'num_documents' => 0, 'fields' => [ { 'name' => 'company_name', diff --git a/spec/typesense/documents_spec.rb b/spec/typesense/documents_spec.rb index c6d9712..5970950 100644 --- a/spec/typesense/documents_spec.rb +++ b/spec/typesense/documents_spec.rb @@ -11,7 +11,6 @@ let(:company_schema) do { 'name' => 'companies', - 'num_documents' => 0, 'fields' => [ { 'name' => 'company_name',