Skip to content

Commit 0749834

Browse files
committed
Add OpenSearch integration tests
1 parent 1c003c7 commit 0749834

4 files changed

Lines changed: 101 additions & 3 deletions

File tree

.github/workflows/run-tests.yml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ on:
66
jobs:
77
test:
88
runs-on: ${{ matrix.os }}
9+
services:
10+
opensearch:
11+
image: opensearchproject/opensearch:2.13.0
12+
env:
13+
discovery.type: single-node
14+
plugins.security.disabled: true
15+
OPENSEARCH_JAVA_OPTS: -Xms512m -Xmx512m
16+
ports:
17+
- 9200:9200
18+
919
strategy:
1020
fail-fast: true
1121
matrix:
@@ -42,5 +52,21 @@ jobs:
4252
composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update
4353
composer update --prefer-dist --no-interaction
4454
55+
- name: Wait for OpenSearch
56+
run: |
57+
for attempt in {1..60}; do
58+
if curl --fail --silent http://127.0.0.1:9200 > /dev/null; then
59+
exit 0
60+
fi
61+
62+
sleep 1
63+
done
64+
65+
echo "OpenSearch did not become available in time."
66+
docker logs "${{ job.services.opensearch.id }}"
67+
exit 1
68+
4569
- name: Execute tests
46-
run: vendor/bin/pest --ci
70+
run: vendor/bin/pest tests/Feature tests/Integration tests/Unit --ci
71+
env:
72+
OPENSEARCH_HOST: http://127.0.0.1:9200
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
use DirectoryTree\OpenSearchAdapter\Indices\IndexManager;
4+
use DirectoryTree\OpenSearchScoutDriver\Tests\Fixtures\Client;
5+
use Illuminate\Database\Schema\Blueprint;
6+
use Illuminate\Support\Facades\Schema;
7+
use Laravel\Scout\EngineManager;
8+
9+
beforeEach(function (): void {
10+
config()->set('scout.prefix', sprintf('scout_integration_%s_', bin2hex(random_bytes(4))));
11+
12+
Schema::create('clients', function (Blueprint $table): void {
13+
$table->id();
14+
$table->string('name');
15+
$table->string('email');
16+
$table->timestamp('deleted_at')->nullable();
17+
});
18+
19+
Client::query()->insert([
20+
['id' => 1, 'name' => 'John Smith', 'email' => 'john@example.com'],
21+
['id' => 2, 'name' => 'Jane Smith', 'email' => 'jane@example.com'],
22+
['id' => 3, 'name' => 'Taylor Otwell', 'email' => 'taylor@example.com'],
23+
]);
24+
25+
$this->indexName = (new Client)->searchableAs();
26+
$this->indexManager = app(IndexManager::class);
27+
28+
if ($this->indexManager->exists($this->indexName)) {
29+
$this->indexManager->drop($this->indexName);
30+
}
31+
32+
app(EngineManager::class)->engine('opensearch')->createIndex($this->indexName);
33+
34+
$this->indexManager->putMappingRaw($this->indexName, [
35+
'properties' => [
36+
'name' => [
37+
'type' => 'text',
38+
'fielddata' => true,
39+
],
40+
'email' => [
41+
'type' => 'keyword',
42+
],
43+
],
44+
]);
45+
});
46+
47+
afterEach(function (): void {
48+
if (isset($this->indexManager, $this->indexName) && $this->indexManager->exists($this->indexName)) {
49+
$this->indexManager->drop($this->indexName);
50+
}
51+
52+
Schema::dropIfExists('clients');
53+
});
54+
55+
it('indexes searches paginates deletes and flushes models against opensearch', function (): void {
56+
$engine = app(EngineManager::class)->engine('opensearch');
57+
58+
$engine->update(Client::query()->orderBy('id')->get());
59+
60+
expect(Client::search('Smith')->get()->pluck('id')->all())->toBe([1, 2])
61+
->and(Client::search('')->where('email', 'jane@example.com')->get()->pluck('id')->all())->toBe([2])
62+
->and(Client::search('')->whereIn('email', ['john@example.com', 'taylor@example.com'])->get()->pluck('id')->all())->toBe([1, 3])
63+
->and(Client::search('')->orderBy('name', 'asc')->paginate(2)->pluck('id')->all())->toBe([2, 1]);
64+
65+
$engine->delete(Client::query()->whereKey(1)->get());
66+
67+
expect(Client::search('John')->get())->toHaveCount(0);
68+
69+
$engine->flush(new Client);
70+
71+
expect(Client::search('')->get())->toHaveCount(0);
72+
});

tests/Pest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
use DirectoryTree\OpenSearchScoutDriver\Tests\TestCase;
44

5-
uses(TestCase::class)->in('Feature', 'Unit');
5+
uses(TestCase::class)->in('Feature', 'Integration', 'Unit');

tests/TestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ protected function defineEnvironment($app): void
3030
$app['config']->set('opensearch.scout.refresh_documents', true);
3131
$app['config']->set('opensearch.client.default', 'default');
3232
$app['config']->set('opensearch.client.connections.default', [
33-
'base_uri' => 'http://127.0.0.1:9200',
33+
'base_uri' => env('OPENSEARCH_HOST', 'http://127.0.0.1:9200'),
3434
]);
3535
}
3636
}

0 commit comments

Comments
 (0)