setup tests

This commit is contained in:
Saeed Vaziry 2023-08-11 12:58:38 +02:00
parent 3dc9ac7505
commit 75fad44fc4
10 changed files with 76 additions and 289 deletions

56
.github/workflows/tests.yml vendored Normal file
View File

@ -0,0 +1,56 @@
name: tests
on:
push:
pull_request:
schedule:
- cron: '0 0 * * *'
jobs:
tests:
runs-on: ubuntu-20.04
services:
mysql:
image: mysql
env:
MYSQL_DATABASE: test_db
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
strategy:
fail-fast: true
matrix:
php: [ 8.1 ]
steps:
- uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v2
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Install dependencies
if: steps.composer-cache.outputs.cache-hit != 'true'
run: composer install --prefer-dist --no-progress --no-suggest
- name: Run test suite
run: php artisan test
env:
DB_HOST: 127.0.0.1
DB_DATABASE: test_db
DB_USERNAME: user
DB_PASSWORD: password

View File

@ -1,44 +0,0 @@
<?php
namespace App\Http\Livewire\SourceControls;
use App\Actions\SourceControl\ConnectSourceControl;
use App\Models\SourceControl;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Bitbucket extends Component
{
public string $token;
public ?string $url;
public function mount(): void
{
$this->url = request()->input('redirect') ?? null;
$this->token = SourceControl::query()
->where('provider', \App\Enums\SourceControl::BITBUCKET)
->first()?->access_token ?? '';
}
public function connect(): void
{
app(ConnectSourceControl::class)->connect(\App\Enums\SourceControl::BITBUCKET, $this->all());
session()->flash('status', 'bitbucket-updated');
if ($this->url) {
$this->redirect($this->url);
}
}
public function render(): View
{
return view('livewire.source-controls.bitbucket', [
'sourceControl' => SourceControl::query()
->where('provider', \App\Enums\SourceControl::BITBUCKET)
->first(),
]);
}
}

View File

@ -1,44 +0,0 @@
<?php
namespace App\Http\Livewire\SourceControls;
use App\Actions\SourceControl\ConnectSourceControl;
use App\Models\SourceControl;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Github extends Component
{
public string $token;
public ?string $url;
public function mount(): void
{
$this->url = request()->input('redirect') ?? null;
$this->token = SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITHUB)
->first()?->access_token ?? '';
}
public function connect(): void
{
app(ConnectSourceControl::class)->connect(\App\Enums\SourceControl::GITHUB, array_merge($this->all()));
session()->flash('status', 'github-updated');
if ($this->url) {
$this->redirect($this->url);
}
}
public function render(): View
{
return view('livewire.source-controls.github', [
'sourceControl' => SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITHUB)
->first(),
]);
}
}

View File

@ -1,44 +0,0 @@
<?php
namespace App\Http\Livewire\SourceControls;
use App\Actions\SourceControl\ConnectSourceControl;
use App\Models\SourceControl;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Gitlab extends Component
{
public string $token;
public ?string $url;
public function mount(): void
{
$this->url = request()->input('redirect') ?? null;
$this->token = SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITLAB)
->first()?->access_token ?? '';
}
public function connect(): void
{
app(ConnectSourceControl::class)->connect(\App\Enums\SourceControl::GITLAB, $this->all());
session()->flash('status', 'gitlab-updated');
if ($this->url) {
$this->redirect($this->url);
}
}
public function render(): View
{
return view('livewire.source-controls.gitlab', [
'sourceControl' => SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITLAB)
->first(),
]);
}
}

View File

@ -1,48 +0,0 @@
<div x-data="">
<x-item-card>
<div class="flex-none">
@include('livewire.source-controls.partials.bitbucket-icon')
</div>
<div class="ml-3 flex flex-grow flex-col items-start justify-center">
<span class="mb-1">{{ __("Bitbucket") }}</span>
</div>
<div class="flex items-center">
<div class="inline">
@if($sourceControl)
<x-secondary-button x-on:click="$dispatch('open-modal', 'connect-bitbucket')">{{ __("Modify") }}</x-secondary-button>
@else
<x-primary-button x-on:click="$dispatch('open-modal', 'connect-bitbucket')">{{ __("Connect") }}</x-primary-button>
@endif
</div>
</div>
</x-item-card>
<x-modal name="connect-bitbucket">
<form wire:submit.prevent="connect" class="p-6">
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
{{ __('Connect to Bitbucket') }}
</h2>
<div class="mt-6">
<x-input-label for="token" :value="__('Access Token')" />
<x-text-input wire:model.defer="token" id="token" name="token" type="text" :value="$sourceControl ? $sourceControl->token : ''" class="mt-1 w-full" />
@error('token')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6 flex items-center justify-end">
@if (session('status') === 'bitbucket-updated')
<p class="mr-2">{{ __('Updated') }}</p>
@endif
<x-secondary-button type="button" x-on:click="$dispatch('close')">
{{ __('Cancel') }}
</x-secondary-button>
<x-primary-button class="ml-3" @connected.window="$dispatch('close')">
{{ __('Connect') }}
</x-primary-button>
</div>
</form>
</x-modal>
</div>

View File

@ -1,48 +0,0 @@
<div x-data="">
<x-item-card>
<div class="flex-none">
@include('livewire.source-controls.partials.github-icon')
</div>
<div class="ml-3 flex flex-grow flex-col items-start justify-center">
<span class="mb-1">{{ __("Github") }}</span>
</div>
<div class="flex items-center">
<div class="inline">
@if($sourceControl)
<x-secondary-button x-on:click="$dispatch('open-modal', 'connect-github')">{{ __("Modify") }}</x-secondary-button>
@else
<x-primary-button x-on:click="$dispatch('open-modal', 'connect-github')">{{ __("Connect") }}</x-primary-button>
@endif
</div>
</div>
</x-item-card>
<x-modal name="connect-github">
<form wire:submit.prevent="connect" class="p-6">
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
{{ __('Connect to Github') }}
</h2>
<div class="mt-6">
<x-input-label for="token" :value="__('Access Token')" />
<x-text-input wire:model.defer="token" id="token" name="token" type="text" :value="$sourceControl ? $sourceControl->token : ''" class="mt-1 w-full" />
@error('token')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6 flex items-center justify-end">
@if (session('status') === 'github-updated')
<p class="mr-2">{{ __('Updated') }}</p>
@endif
<x-secondary-button type="button" x-on:click="$dispatch('close')">
{{ __('Cancel') }}
</x-secondary-button>
<x-primary-button class="ml-3" @connected.window="$dispatch('close')">
{{ __('Connect') }}
</x-primary-button>
</div>
</form>
</x-modal>
</div>

View File

@ -1,48 +0,0 @@
<div x-data="">
<x-item-card>
<div class="flex-none">
@include('livewire.source-controls.partials.gitlab-icon')
</div>
<div class="ml-3 flex flex-grow flex-col items-start justify-center">
<span class="mb-1">{{ __("Gitlab") }}</span>
</div>
<div class="flex items-center">
<div class="inline">
@if($sourceControl)
<x-secondary-button x-on:click="$dispatch('open-modal', 'connect-gitlab')">{{ __("Modify") }}</x-secondary-button>
@else
<x-primary-button x-on:click="$dispatch('open-modal', 'connect-gitlab')">{{ __("Connect") }}</x-primary-button>
@endif
</div>
</div>
</x-item-card>
<x-modal name="connect-gitlab">
<form wire:submit.prevent="connect" class="p-6">
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
{{ __('Connect to Gitlab') }}
</h2>
<div class="mt-6">
<x-input-label for="token" :value="__('Access Token')" />
<x-text-input wire:model.defer="token" id="token" name="token" type="text" :value="$sourceControl ? $sourceControl->token : ''" class="mt-1 w-full" />
@error('token')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6 flex items-center justify-end">
@if (session('status') === 'gitlab-updated')
<p class="mr-2">{{ __('Updated') }}</p>
@endif
<x-secondary-button type="button" x-on:click="$dispatch('close')">
{{ __('Cancel') }}
</x-secondary-button>
<x-primary-button class="ml-3" @connected.window="$dispatch('close')">
{{ __('Connect') }}
</x-primary-button>
</div>
</form>
</x-modal>
</div>

View File

@ -21,7 +21,7 @@ public function test_visit_application()
$this->actingAs($this->user);
$this->get(
route('servers.sites.application', [
route('servers.sites.show', [
'server' => $this->server,
'site' => $this->site
])

View File

@ -29,7 +29,8 @@ public function test_create_site(): void
$this->actingAs($this->user);
\App\Models\SourceControl::factory()->create([
/** @var \App\Models\SourceControl $sourceControl */
$sourceControl = \App\Models\SourceControl::factory()->create([
'provider' => SourceControl::GITHUB,
]);
@ -39,7 +40,7 @@ public function test_create_site(): void
->set('alias', 'www.example.com')
->set('php_version', '8.2')
->set('web_directory', 'public')
->set('source_control', SourceControl::GITHUB)
->set('source_control', $sourceControl->id)
->set('repository', 'test/test')
->set('branch', 'main')
->set('composer', true)

View File

@ -3,8 +3,10 @@
namespace Tests\Feature\Http;
use App\Http\Livewire\SourceControls\Bitbucket;
use App\Http\Livewire\SourceControls\Connect;
use App\Http\Livewire\SourceControls\Github;
use App\Http\Livewire\SourceControls\Gitlab;
use App\Http\Livewire\SourceControls\SourceControlsList;
use App\Models\SourceControl;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
@ -18,14 +20,16 @@ class SourceControlsTest extends TestCase
/**
* @dataProvider data
*/
public function test_connect_provider(string $provider, string $component): void
public function test_connect_provider(string $provider): void
{
$this->actingAs($this->user);
Http::fake();
Livewire::test($component)
Livewire::test(Connect::class)
->set('token', 'token')
->set('name', 'profile')
->set('provider', $provider)
->call('connect')
->assertSuccessful();
@ -37,17 +41,19 @@ public function test_connect_provider(string $provider, string $component): void
/**
* @dataProvider data
*/
public function test_delete_provider(string $provider, string $component): void
public function test_delete_provider(string $provider): void
{
$this->actingAs($this->user);
SourceControl::factory()->create([
/** @var SourceControl $sourceControl */
$sourceControl = SourceControl::factory()->create([
'provider' => $provider,
'profile' => 'test'
]);
Livewire::test($component)
->set('token', '')
->call('connect')
Livewire::test(SourceControlsList::class)
->set('deleteId', $sourceControl->id)
->call('delete')
->assertSuccessful();
$this->assertDatabaseMissing('source_controls', [
@ -58,9 +64,9 @@ public function test_delete_provider(string $provider, string $component): void
public static function data(): array
{
return [
['github', Github::class],
['gitlab', Gitlab::class],
['bitbucket', Bitbucket::class],
['github'],
['gitlab'],
['bitbucket'],
];
}
}