Skip to content

Commit e1e6f8e

Browse files
committed
test(curation): add test suite for curation sets
1 parent b54e8c0 commit e1e6f8e

4 files changed

Lines changed: 358 additions & 0 deletions

File tree

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../spec_helper'
4+
5+
describe Typesense::CurationSetItem do
6+
subject(:curation_set_item) { typesense.curation_sets['test-curation-set'].items['rule-1'] }
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(:curation_set_data) do
24+
{
25+
'items' => [
26+
{
27+
'id' => 'rule-1',
28+
'rule' => {
29+
'query' => 'test',
30+
'match' => 'exact'
31+
},
32+
'includes' => [{ 'id' => '123', 'position' => 1 }],
33+
'excludes' => [],
34+
'filter_curated_hits' => false,
35+
'remove_matched_tokens' => false,
36+
'stop_processing' => true
37+
}
38+
]
39+
}
40+
end
41+
42+
before do
43+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
44+
45+
# Create a test curation set
46+
typesense.curation_sets.upsert('test-curation-set', curation_set_data)
47+
end
48+
49+
after do
50+
typesense.curation_sets['test-curation-set'].delete
51+
rescue StandardError
52+
# Ignore errors if already deleted
53+
end
54+
55+
describe '#retrieve' do
56+
it 'returns the specified curation set item' do
57+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
58+
59+
result = curation_set_item.retrieve
60+
61+
expect(result['id']).to eq('rule-1')
62+
expect(result['rule']['query']).to eq('test')
63+
end
64+
end
65+
66+
describe '#upsert' do
67+
it 'updates the specified curation set item' do
68+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
69+
70+
updated_item_data = {
71+
'id' => 'rule-1',
72+
'rule' => {
73+
'query' => 'updated test',
74+
'match' => 'exact'
75+
},
76+
'includes' => [{ 'id' => '999', 'position' => 1 }]
77+
}
78+
79+
result = curation_set_item.upsert(updated_item_data)
80+
81+
expect(result['id']).to eq('rule-1')
82+
expect(result['rule']['query']).to eq('updated test')
83+
expect(result['includes'].first['id']).to eq('999')
84+
end
85+
end
86+
87+
describe '#delete' do
88+
it 'deletes the specified curation set item' do
89+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
90+
91+
result = curation_set_item.delete
92+
93+
expect(result['id']).to eq('rule-1')
94+
95+
expect { curation_set_item.retrieve }.to raise_error(Typesense::Error::ObjectNotFound)
96+
end
97+
end
98+
end
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../spec_helper'
4+
5+
describe Typesense::CurationSetItems do
6+
subject(:curation_set_items) { typesense.curation_sets['test-curation-set'].items }
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(:curation_set_data) do
24+
{
25+
'items' => [
26+
{
27+
'id' => 'rule-1',
28+
'rule' => {
29+
'query' => 'test',
30+
'match' => 'exact'
31+
},
32+
'includes' => [{ 'id' => '123', 'position' => 1 }],
33+
'excludes' => [],
34+
'filter_curated_hits' => false,
35+
'remove_matched_tokens' => false,
36+
'stop_processing' => true
37+
}
38+
]
39+
}
40+
end
41+
42+
before do
43+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
44+
45+
typesense.curation_sets.upsert('test-curation-set', curation_set_data)
46+
end
47+
48+
after do
49+
typesense.curation_sets['test-curation-set'].delete
50+
rescue StandardError
51+
# Ignore errors if already deleted
52+
end
53+
54+
describe '#retrieve' do
55+
it 'retrieves all items in a curation set' do
56+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
57+
58+
result = curation_set_items.retrieve
59+
60+
expect(result).to be_an(Array)
61+
expect(result.length).to be >= 1
62+
expect(result.first['id']).to eq('rule-1')
63+
end
64+
end
65+
66+
describe '#[]' do
67+
it 'creates a curation set item object and returns it' do
68+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
69+
70+
result = curation_set_items['rule-1']
71+
72+
expect(result).to be_a(Typesense::CurationSetItem)
73+
expect(result.instance_variable_get(:@curation_set_name)).to eq('test-curation-set')
74+
expect(result.instance_variable_get(:@item_id)).to eq('rule-1')
75+
end
76+
end
77+
end
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../spec_helper'
4+
5+
describe Typesense::CurationSet do
6+
subject(:curation_set) { typesense.curation_sets['test-curation-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(:curation_set_data) do
24+
{
25+
'items' => [
26+
{
27+
'id' => 'rule-1',
28+
'rule' => {
29+
'query' => 'test',
30+
'match' => 'exact'
31+
},
32+
'includes' => [{ 'id' => '123', 'position' => 1 }],
33+
'excludes' => [],
34+
'filter_curated_hits' => false,
35+
'remove_matched_tokens' => false,
36+
'stop_processing' => true
37+
}
38+
]
39+
}
40+
end
41+
42+
before do
43+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
44+
45+
typesense.curation_sets.upsert('test-curation-set', curation_set_data)
46+
end
47+
48+
after do
49+
typesense.curation_sets['test-curation-set'].delete
50+
rescue StandardError
51+
# Ignore errors if already deleted
52+
end
53+
54+
describe '#retrieve' do
55+
it 'returns the specified curation set' do
56+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
57+
58+
result = curation_set.retrieve
59+
60+
expect(result['items']).to eq(curation_set_data['items'])
61+
end
62+
end
63+
64+
describe '#delete' do
65+
it 'deletes the specified curation set' do
66+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
67+
68+
result = curation_set.delete
69+
70+
expect(result['name']).to eq('test-curation-set')
71+
72+
# Verify it's deleted by trying to retrieve it
73+
expect { curation_set.retrieve }.to raise_error(Typesense::Error::ObjectNotFound)
74+
end
75+
end
76+
77+
describe '#items' do
78+
it 'returns a CurationSetItems instance' do
79+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
80+
81+
items = curation_set.items
82+
83+
expect(items).to be_a(Typesense::CurationSetItems)
84+
expect(items.instance_variable_get(:@curation_set_name)).to eq('test-curation-set')
85+
end
86+
end
87+
end
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../spec_helper'
4+
5+
describe Typesense::CurationSets do
6+
subject(:curation_sets) { typesense.curation_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(:curation_set_data) do
24+
{
25+
'items' => [
26+
{
27+
'id' => 'rule-1',
28+
'rule' => {
29+
'query' => 'test',
30+
'match' => 'exact'
31+
},
32+
'includes' => [{ 'id' => '123', 'position' => 1 }],
33+
'excludes' => [],
34+
'filter_curated_hits' => false,
35+
'remove_matched_tokens' => false,
36+
'stop_processing' => true
37+
}
38+
]
39+
}
40+
end
41+
42+
before do
43+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
44+
end
45+
46+
after do
47+
next unless typesense_v30_or_above?
48+
49+
existing_sets = curation_sets.retrieve
50+
existing_sets.each do |set|
51+
curation_sets[set['name']].delete
52+
end
53+
rescue StandardError
54+
# Ignore errors if no curation sets exist
55+
end
56+
57+
describe '#upsert' do
58+
it 'creates a curation set and returns it' do
59+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
60+
61+
result = curation_sets.upsert('test-curation-set', curation_set_data)
62+
63+
expect(result['items']).to eq(curation_set_data['items'])
64+
end
65+
end
66+
67+
describe '#retrieve' do
68+
it 'retrieves all curation sets' do
69+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
70+
71+
# Create a curation set first
72+
curation_sets.upsert('test-curation-set', curation_set_data)
73+
74+
result = curation_sets.retrieve
75+
76+
expect(result).to be_an(Array)
77+
expect(result.length).to be >= 1
78+
79+
# Find our test curation set
80+
test_set = result.find { |set| set['name'] == 'test-curation-set' }
81+
expect(test_set).not_to be_nil
82+
expect(test_set['items']).to eq(curation_set_data['items'])
83+
end
84+
end
85+
86+
describe '#[]' do
87+
it 'creates a curation set object and returns it' do
88+
skip('CurationSets is only supported in Typesense v30+') unless typesense_v30_or_above?
89+
90+
result = curation_sets['test-curation-set']
91+
92+
expect(result).to be_a(Typesense::CurationSet)
93+
expect(result.instance_variable_get(:@curation_set_name)).to eq('test-curation-set')
94+
end
95+
end
96+
end

0 commit comments

Comments
 (0)