Skip to content

Commit 24bdcba

Browse files
authored
Map domain to database version using backend route (#599)
1 parent 5878900 commit 24bdcba

3 files changed

Lines changed: 80 additions & 0 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Backend;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Wiki;
7+
use Illuminate\Http\Request;
8+
9+
class IngressController extends Controller
10+
{
11+
public function getWikiVersionForDomain(Request $request): \Illuminate\Http\Response
12+
{
13+
$domain = $request->query('domain');
14+
$version = Wiki::where('domain', $domain)
15+
->whereNull('deleted_at')
16+
->leftJoin('wiki_dbs', 'wiki_id', '=', 'wikis.id')
17+
->pluck('version')
18+
->first();
19+
20+
if (is_null($version)) {
21+
abort(401);
22+
}
23+
return response('1')->header('x-version', $version);
24+
}
25+
}

routes/backend.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ function () {
1414
}
1515
);
1616

17+
$router->group(['prefix' => 'ingress'], function () use ($router) {
18+
// GET
19+
$router->get('getWikiVersionForDomain', ['uses' => 'IngressController@getWikiVersionForDomain']);
20+
});
21+
1722
$router->group(['prefix' => 'wiki'], function () use ($router) {
1823
$router->get('getWikiForDomain', ['uses' => 'WikiController@getWikiForDomain']);
1924
$router->patch('updateEntityImport', ['uses' => '\App\Http\Controllers\WikiEntityImportController@update']);
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Tests\Routes\Ingress;
4+
5+
use Tests\TestCase;
6+
use App\Wiki;
7+
use App\WikiDb;
8+
use Illuminate\Foundation\Testing\RefreshDatabase;
9+
10+
class GetWikiVersionForDomainTest extends TestCase
11+
{
12+
protected $route = '/backend/ingress/getWikiVersionForDomain';
13+
14+
use RefreshDatabase;
15+
16+
public function tearDown(): void
17+
{
18+
Wiki::query()->delete();
19+
parent::tearDown();
20+
}
21+
22+
private function createWiki(string $domain, string $version) {
23+
$wiki = Wiki::factory()->create(['domain' => $domain]);
24+
WikiDb::create([
25+
'name' => $domain,
26+
'user' => 'someUser',
27+
'password' => 'somePassword',
28+
'version' => $version,
29+
'prefix' => 'somePrefix',
30+
'wiki_id' => $wiki->id
31+
]);
32+
}
33+
34+
public function testNotFound()
35+
{
36+
$this->createWiki('found.wikibase.cloud', 'someVersion');
37+
$this->json('GET', $this->route . '?domain=notfound.wikibase.cloud')->assertStatus(401);
38+
}
39+
40+
public function testFoundVersion()
41+
{
42+
$version = 'someVersion';
43+
$this->createWiki('found.wikibase.cloud', $version);
44+
$this->createWiki('other.wikibase.cloud', 'otherVersion');
45+
$this->json('GET', $this->route . '?domain=found.wikibase.cloud')
46+
->assertStatus(200)
47+
->assertHeader('x-version', $version)
48+
->assertContent('1');
49+
}
50+
}

0 commit comments

Comments
 (0)