|
1 | 1 | # frozen_string_literal: true |
2 | 2 |
|
3 | 3 | RSpec.describe 'MeiliSearch::Client - Keys' do |
4 | | - context 'Test the default key roles' do |
5 | | - let(:public_key) { client.keys['results'].filter { |k| k['description'].start_with? 'Default Search API Key' }.first } |
6 | | - let(:private_key) { client.keys['results'].filter { |k| k['description'].start_with? 'Default Admin API Key' }.first } |
| 4 | + context 'When a client uses default key roles' do |
| 5 | + let(:search_key) { client.keys['results'].find { |k| k['description'].start_with? 'Default Search' } } |
| 6 | + let(:admin_key) { client.keys['results'].find { |k| k['description'].start_with? 'Default Admin' } } |
7 | 7 |
|
8 | 8 | it 'fails to get settings if public key used' do |
9 | | - new_client = MeiliSearch::Client.new(URL, public_key['key']) |
| 9 | + new_client = MeiliSearch::Client.new(URL, search_key['key']) |
| 10 | + |
10 | 11 | expect do |
11 | 12 | new_client.index(random_uid).settings |
12 | 13 | end.to raise_meilisearch_api_error_with(403, 'invalid_api_key', 'auth') |
13 | 14 | end |
14 | 15 |
|
15 | 16 | it 'fails to get keys if private key used' do |
16 | | - new_client = MeiliSearch::Client.new(URL, private_key['key']) |
| 17 | + new_client = MeiliSearch::Client.new(URL, admin_key['key']) |
| 18 | + |
17 | 19 | expect do |
18 | 20 | new_client.keys |
19 | 21 | end.to raise_meilisearch_api_error_with(403, 'invalid_api_key', 'auth') |
20 | 22 | end |
21 | 23 |
|
22 | | - it 'fails to search if no key used' do |
| 24 | + it 'fails to get settings if no key is used' do |
23 | 25 | new_client = MeiliSearch::Client.new(URL) |
| 26 | + |
24 | 27 | expect do |
25 | 28 | new_client.index(random_uid).settings |
26 | 29 | end.to raise_meilisearch_api_error_with(401, 'missing_authorization_header', 'auth') |
|
30 | 33 | uid = random_uid |
31 | 34 | index = client.index(uid) |
32 | 35 | index.add_documents!(title: 'Test') |
33 | | - |
34 | | - new_client = MeiliSearch::Client.new(URL, public_key['key']) |
| 36 | + new_client = MeiliSearch::Client.new(URL, search_key['key']) |
35 | 37 | response = new_client.index(uid).search('test') |
| 38 | + |
36 | 39 | expect(response).to have_key('hits') |
37 | 40 | end |
38 | 41 |
|
39 | 42 | it 'succeeds to get settings when using private key' do |
40 | 43 | uid = random_uid |
41 | 44 | client.create_index!(uid) |
42 | | - new_client = MeiliSearch::Client.new(URL, private_key['key']) |
| 45 | + new_client = MeiliSearch::Client.new(URL, admin_key['key']) |
43 | 46 | response = new_client.index(uid).settings |
| 47 | + |
44 | 48 | expect(response).to have_key('rankingRules') |
45 | 49 | end |
46 | 50 | end |
47 | 51 |
|
48 | | - context 'Test the key managements' do |
| 52 | + context 'When managing keys' do |
| 53 | + let(:delete_docs_key_options) do |
| 54 | + { |
| 55 | + description: 'A new key to delete docs', |
| 56 | + actions: ['documents.delete'], |
| 57 | + indexes: ['*'], |
| 58 | + expiresAt: nil |
| 59 | + } |
| 60 | + end |
| 61 | + let(:add_docs_key_options) do |
| 62 | + { |
| 63 | + description: 'A new key to add docs', |
| 64 | + actions: ['documents.add'], |
| 65 | + indexes: ['*'], |
| 66 | + expiresAt: nil |
| 67 | + } |
| 68 | + end |
| 69 | + |
49 | 70 | it 'gets the list of the default keys' do |
50 | 71 | results = client.keys['results'] |
| 72 | + |
51 | 73 | expect(results).to be_a(Array) |
52 | 74 | expect(results.count).to be >= 2 |
53 | 75 | end |
54 | 76 |
|
55 | 77 | it 'creates a key' do |
56 | | - key_options = { |
57 | | - description: 'A new key to add docs', |
58 | | - actions: ['documents.add'], |
59 | | - indexes: ['*'], |
60 | | - expiresAt: nil |
61 | | - } |
62 | | - new_key = client.create_key(key_options) |
| 78 | + new_key = client.create_key(add_docs_key_options) |
| 79 | + |
63 | 80 | expect(new_key['expiresAt']).to be_nil |
64 | 81 | expect(new_key['key']).to be_a(String) |
65 | 82 | expect(new_key['createdAt']).to be_a(String) |
|
69 | 86 | end |
70 | 87 |
|
71 | 88 | it 'creates a key using snake_case' do |
72 | | - key_options = { |
73 | | - description: 'A new key to add docs', |
74 | | - actions: ['documents.add'], |
75 | | - indexes: ['*'], |
76 | | - expires_at: nil |
77 | | - } |
78 | | - new_key = client.create_key(key_options) |
| 89 | + new_key = client.create_key(add_docs_key_options) |
| 90 | + |
79 | 91 | expect(new_key['expiresAt']).to be_nil |
80 | 92 | expect(new_key['key']).to be_a(String) |
81 | 93 | expect(new_key['createdAt']).to be_a(String) |
|
85 | 97 | end |
86 | 98 |
|
87 | 99 | it 'gets a key' do |
88 | | - key_options = { |
89 | | - description: 'A new key to delete docs', |
90 | | - actions: ['documents.delete'], |
91 | | - indexes: ['*'], |
92 | | - expiresAt: nil |
93 | | - } |
94 | | - new_key = client.create_key(key_options) |
| 100 | + new_key = client.create_key(delete_docs_key_options) |
| 101 | + |
95 | 102 | expect(client.key(new_key['key'])['description']).to eq('A new key to delete docs') |
96 | | - end |
97 | 103 |
|
98 | | - it 'update a key' do |
99 | | - key_options = { |
100 | | - description: 'A new key to delete docs', |
101 | | - actions: ['documents.delete'], |
102 | | - indexes: ['*'], |
103 | | - expiresAt: nil |
104 | | - } |
105 | | - new_key = client.create_key(key_options) |
| 104 | + key = client.key(new_key['key']) |
106 | 105 |
|
| 106 | + expect(key['expiresAt']).to be_nil |
| 107 | + expect(key['key']).to be_a(String) |
| 108 | + expect(key['createdAt']).to be_a(String) |
| 109 | + expect(key['updatedAt']).to be_a(String) |
| 110 | + expect(key['indexes']).to eq(['*']) |
| 111 | + expect(key['description']).to eq('A new key to delete docs') |
| 112 | + end |
| 113 | + |
| 114 | + it 'updates a key' do |
| 115 | + new_key = client.create_key(delete_docs_key_options) |
107 | 116 | new_updated_key = client.update_key(new_key['key'], indexes: ['coco']) |
108 | 117 |
|
109 | 118 | expect(new_updated_key['key']).to eq(new_key['key']) |
110 | 119 | expect(new_updated_key['description']).to eq(new_key['description']) |
111 | 120 | expect(new_updated_key['indexes']).to eq(['coco']) |
112 | 121 | end |
113 | 122 |
|
114 | | - it 'update a key using snake_case' do |
115 | | - key_options = { |
116 | | - description: 'A new key to delete docs', |
117 | | - actions: ['documents.delete'], |
118 | | - indexes: ['*'], |
119 | | - expires_at: nil |
120 | | - } |
121 | | - new_key = client.create_key(key_options) |
122 | | - |
| 123 | + it 'updates a key using snake_case' do |
| 124 | + new_key = client.create_key(delete_docs_key_options) |
123 | 125 | new_updated_key = client.update_key(new_key['key'], indexes: ['coco']) |
124 | 126 |
|
125 | 127 | expect(new_updated_key['key']).to eq(new_key['key']) |
|
128 | 130 | end |
129 | 131 |
|
130 | 132 | it 'deletes a key' do |
131 | | - key_options = { |
132 | | - description: 'A new key to add docs', |
133 | | - actions: ['documents.add'], |
134 | | - indexes: ['*'], |
135 | | - expiresAt: nil |
136 | | - } |
137 | | - new_key = client.create_key(key_options) |
138 | | - |
| 133 | + new_key = client.create_key(add_docs_key_options) |
139 | 134 | client.delete_key(new_key['key']) |
| 135 | + |
140 | 136 | expect(client.keys.filter { |k| k['key'] == new_key['key'] }).to be_empty |
141 | 137 | end |
142 | 138 | end |
|
0 commit comments