Skip to content

Commit 14583b5

Browse files
committed
test: add test suite for synonym sets
1 parent a28ec0f commit 14583b5

File tree

2 files changed

+161
-0
lines changed

2 files changed

+161
-0
lines changed

spec/typesense/synonym_set_spec.rb

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../spec_helper'
4+
5+
describe Typesense::SynonymSet do
6+
subject(:synonym_set) { typesense.synonym_sets['test-synonym-set'] }
7+
8+
let(:typesense) do
9+
Typesense::Client.new(
10+
api_key: 'xyz',
11+
nodes: [
12+
{
13+
host: 'localhost',
14+
port: 8108,
15+
protocol: 'http'
16+
}
17+
],
18+
connection_timeout_seconds: 10,
19+
retry_interval_seconds: 0.01
20+
)
21+
end
22+
23+
let(:synonym_set_data) do
24+
{
25+
'synonyms' => [
26+
{
27+
'id' => 'dummy',
28+
'synonyms' => %w[foo bar baz],
29+
'root' => ''
30+
}
31+
]
32+
}
33+
end
34+
35+
before do
36+
skip('SynonymSets is only supported in Typesense v30+') unless typesense_v30_or_above?
37+
38+
# Create a test synonym set
39+
typesense.synonym_sets.upsert('test-synonym-set', synonym_set_data)
40+
end
41+
42+
after do
43+
# Clean up the test synonym set
44+
typesense.synonym_sets['test-synonym-set'].delete
45+
rescue StandardError
46+
# Ignore errors if already deleted
47+
end
48+
49+
describe '#retrieve' do
50+
it 'returns the specified synonym set' do
51+
skip('SynonymSets is only supported in Typesense v30+') unless typesense_v30_or_above?
52+
53+
result = synonym_set.retrieve
54+
55+
expect(result['synonyms']).to eq(synonym_set_data['synonyms'])
56+
end
57+
end
58+
59+
describe '#delete' do
60+
it 'deletes the specified synonym set' do
61+
skip('SynonymSets is only supported in Typesense v30+') unless typesense_v30_or_above?
62+
63+
result = synonym_set.delete
64+
65+
expect(result['name']).to eq('test-synonym-set')
66+
67+
# Verify it's deleted by trying to retrieve it
68+
expect { synonym_set.retrieve }.to raise_error(Typesense::Error::ObjectNotFound)
69+
end
70+
end
71+
end
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../spec_helper'
4+
5+
describe Typesense::SynonymSets do
6+
subject(:synonym_sets) { typesense.synonym_sets }
7+
8+
let(:typesense) do
9+
Typesense::Client.new(
10+
api_key: 'xyz',
11+
nodes: [
12+
{
13+
host: 'localhost',
14+
port: 8108,
15+
protocol: 'http'
16+
}
17+
],
18+
connection_timeout_seconds: 10,
19+
retry_interval_seconds: 0.01
20+
)
21+
end
22+
23+
let(:synonym_set_data) do
24+
{
25+
'synonyms' => [
26+
{
27+
'id' => 'dummy',
28+
'synonyms' => %w[foo bar baz],
29+
'root' => ''
30+
}
31+
]
32+
}
33+
end
34+
35+
before do
36+
skip('SynonymSets is only supported in Typesense v30+') unless typesense_v30_or_above?
37+
end
38+
39+
after do
40+
next unless typesense_v30_or_above?
41+
42+
# Clean up any created synonym sets
43+
existing_sets = synonym_sets.retrieve
44+
existing_sets.each do |set|
45+
synonym_sets[set['name']].delete
46+
end
47+
rescue StandardError
48+
# Ignore errors if no synonym sets exist
49+
end
50+
51+
describe '#upsert' do
52+
it 'creates a synonym set and returns it' do
53+
skip('SynonymSets is only supported in Typesense v30+') unless typesense_v30_or_above?
54+
55+
result = synonym_sets.upsert('test-synonym-set', synonym_set_data)
56+
57+
expect(result['synonyms']).to eq(synonym_set_data['synonyms'])
58+
end
59+
end
60+
61+
describe '#retrieve' do
62+
it 'retrieves all synonym sets' do
63+
skip('SynonymSets is only supported in Typesense v30+') unless typesense_v30_or_above?
64+
65+
# Create a synonym set first
66+
synonym_sets.upsert('test-synonym-set', synonym_set_data)
67+
68+
result = synonym_sets.retrieve
69+
70+
expect(result).to be_an(Array)
71+
expect(result.length).to be >= 1
72+
73+
# Find our test synonym set
74+
test_set = result.find { |set| set['name'] == 'test-synonym-set' }
75+
expect(test_set).not_to be_nil
76+
expect(test_set['synonyms']).to eq(synonym_set_data['synonyms'])
77+
end
78+
end
79+
80+
describe '#[]' do
81+
it 'creates a synonym set object and returns it' do
82+
skip('SynonymSets is only supported in Typesense v30+') unless typesense_v30_or_above?
83+
84+
result = synonym_sets['test-synonym-set']
85+
86+
expect(result).to be_a(Typesense::SynonymSet)
87+
expect(result.instance_variable_get(:@synonym_set_name)).to eq('test-synonym-set')
88+
end
89+
end
90+
end

0 commit comments

Comments
 (0)