Add mailgateway
This commit is contained in:
parent
595980cb1d
commit
600243bad1
|
@ -4,7 +4,6 @@ namespace App\Setting;
|
||||||
|
|
||||||
use App\Fileshare\FileshareSettings;
|
use App\Fileshare\FileshareSettings;
|
||||||
use App\Form\FormSettings;
|
use App\Form\FormSettings;
|
||||||
use App\Mailgateway\MailgatewaySettings;
|
|
||||||
use Modules\Module\ModuleSettings;
|
use Modules\Module\ModuleSettings;
|
||||||
use App\Prevention\PreventionSettings;
|
use App\Prevention\PreventionSettings;
|
||||||
use App\Setting\Data\SettingSynthesizer;
|
use App\Setting\Data\SettingSynthesizer;
|
||||||
|
@ -35,7 +34,6 @@ class SettingServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
app(SettingFactory::class)->register(ModuleSettings::class);
|
app(SettingFactory::class)->register(ModuleSettings::class);
|
||||||
app(SettingFactory::class)->register(InvoiceSettings::class);
|
app(SettingFactory::class)->register(InvoiceSettings::class);
|
||||||
app(SettingFactory::class)->register(MailgatewaySettings::class);
|
|
||||||
app(SettingFactory::class)->register(NamiSettings::class);
|
app(SettingFactory::class)->register(NamiSettings::class);
|
||||||
app(SettingFactory::class)->register(FormSettings::class);
|
app(SettingFactory::class)->register(FormSettings::class);
|
||||||
app(SettingFactory::class)->register(FileshareSettings::class);
|
app(SettingFactory::class)->register(FileshareSettings::class);
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mailgateway\Components;
|
||||||
|
|
||||||
|
use App\Mailgateway\Models\Mailgateway;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
use Illuminate\Validation\ValidationException;
|
||||||
|
use Livewire\Attributes\On;
|
||||||
|
use Livewire\Attributes\Validate;
|
||||||
|
use Livewire\Component;
|
||||||
|
|
||||||
|
class Form extends Component
|
||||||
|
{
|
||||||
|
|
||||||
|
public string $id = '';
|
||||||
|
public string $name = '';
|
||||||
|
public string $domain = '';
|
||||||
|
public array $params = [];
|
||||||
|
#[Validate('required')]
|
||||||
|
public ?string $cls = null;
|
||||||
|
public Collection $types;
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'domain' => 'required|string|max:255',
|
||||||
|
'cls' => ['required', 'string', 'max:255', Rule::in(app('mail-gateways'))],
|
||||||
|
'params' => 'present|array',
|
||||||
|
...$this->cls ? collect($this->cls::rules($this->id ? 'updateValidator' : 'storeValidator'))->mapWithKeys(fn ($rules, $key) => ["params.{$key}" => $rules]) : [],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function validationAttributes(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'cls' => 'Typ',
|
||||||
|
'name' => 'Beschreibung',
|
||||||
|
'domain' => 'Domain',
|
||||||
|
...$this->cls ? collect($this->cls::fieldNames())->mapWithKeys(fn ($attribute, $key) => ["params.{$key}" => $attribute]) : [],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mount(?string $model = null): void
|
||||||
|
{
|
||||||
|
$this->types = app('mail-gateways')->map(fn ($gateway) => [
|
||||||
|
'name' => $gateway::name(),
|
||||||
|
'id' => $gateway,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$model = Mailgateway::find($model);
|
||||||
|
|
||||||
|
if ($model) {
|
||||||
|
$this->id = $model->id;
|
||||||
|
$this->name = $model->name;
|
||||||
|
$this->domain = $model->domain;
|
||||||
|
$this->cls = get_class($model->type);
|
||||||
|
$this->params = (array) $model->type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updatedType(string $type): void
|
||||||
|
{
|
||||||
|
$this->params = $type::defaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fields(): array
|
||||||
|
{
|
||||||
|
return $this->cls ? $this->cls::fields() : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
#[On('onStoreFromModal')]
|
||||||
|
public function onSave(): void
|
||||||
|
{
|
||||||
|
$this->validate();
|
||||||
|
|
||||||
|
if (!app($this->cls)->setParams($this->params)->works()) {
|
||||||
|
throw ValidationException::withMessages(['connection' => 'Verbindung fehlgeschlagen.']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'name' => $this->name,
|
||||||
|
'domain' => $this->domain,
|
||||||
|
'type' => ['cls' => $this->cls, 'params' => $this->params],
|
||||||
|
];
|
||||||
|
if ($this->id) {
|
||||||
|
Mailgateway::find($this->id)->update($payload);
|
||||||
|
} else {
|
||||||
|
Mailgateway::create($payload);
|
||||||
|
}
|
||||||
|
$this->dispatch('closeModal');
|
||||||
|
$this->dispatch('refresh');
|
||||||
|
$this->dispatch('success', 'Erfolgreich gespeichert.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
return <<<'HTML'
|
||||||
|
<div>
|
||||||
|
<form class="grid grid-cols-2 gap-3">
|
||||||
|
<x-form::text name="name" wire:model="name" label="Beschreibung" required />
|
||||||
|
<x-form::text name="domain" wire:model="domain" label="Domain" required />
|
||||||
|
<x-form::select name="cls" wire:model.live="cls" label="Typ" :options="$types" required />
|
||||||
|
@foreach($this->fields() as $index => $field)
|
||||||
|
<x-form::text
|
||||||
|
wire:key="index"
|
||||||
|
wire:model="params.{{$field['name']}}"
|
||||||
|
:label="$field['label']"
|
||||||
|
:type="$field['type']"
|
||||||
|
:name="$field['name']"
|
||||||
|
:required="str_contains('required', $field['storeValidator'])"
|
||||||
|
></x-form::text>
|
||||||
|
@endforeach
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
HTML;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mailgateway\Components;
|
||||||
|
|
||||||
|
use App\Mailgateway\Models\Mailgateway;
|
||||||
|
use Livewire\Component;
|
||||||
|
use Modules\Mailgateway\MailgatewaySettings;
|
||||||
|
|
||||||
|
class SettingView extends Component
|
||||||
|
{
|
||||||
|
public string $settingClass = MailgatewaySettings::class;
|
||||||
|
|
||||||
|
public $listeners = ['refresh' => '$refresh'];
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
return view('mailgateway::setting-view', [
|
||||||
|
'data' => Mailgateway::get(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
<x-page::setting-layout :active="$settingClass">
|
||||||
|
<div>
|
||||||
|
<x-ui::table>
|
||||||
|
<thead>
|
||||||
|
<th>Bezeichnung</th>
|
||||||
|
<th>Domain</th>
|
||||||
|
<th>Typ</th>
|
||||||
|
<th>Prüfung</th>
|
||||||
|
<th>Aktion</th>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<x-ui::action wire:click.prevent="$dispatch('openModal', {component: 'modules.mailgateway.components.form', props: {model: ''}, title: 'Verbindung erstellen'})" icon="plus" variant="danger">Neu</x-ui::action>
|
||||||
|
|
||||||
|
@foreach ($data as $index => $gateway)
|
||||||
|
<tr wire:key="$index">
|
||||||
|
<td>{{ $gateway->name }}</td>
|
||||||
|
<td>{{ $gateway->domain }}</td>
|
||||||
|
<td>{{ $gateway->type::name() }}</td>
|
||||||
|
<td>
|
||||||
|
<x-ui::boolean-display :value="$gateway->type->works()"
|
||||||
|
hint="Verbindungsstatus"
|
||||||
|
right="Verbindung erfolgreich"
|
||||||
|
wrong="Verbindung fehlgeschlagen"
|
||||||
|
></x-ui::boolean-display>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<x-ui::action wire:click="$dispatch('openModal', {
|
||||||
|
component: 'modules.mailgateway.components.form',
|
||||||
|
props: {model: '{{$gateway->id}}'},
|
||||||
|
title: 'Verbindung {{$gateway->name}} bearbeiten'}
|
||||||
|
)" icon="pencil" variant="warning">Bearbeiten</x-ui::action>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</x-ui::table>
|
||||||
|
</div>
|
||||||
|
</x-page::setting-layout>
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Mailgateway;
|
||||||
|
|
||||||
|
use App\Mailgateway\Models\Mailgateway;
|
||||||
|
use App\Mailgateway\Types\LocalType;
|
||||||
|
use App\Mailgateway\Types\MailmanType;
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use Livewire\Livewire;
|
||||||
|
use Modules\Mailgateway\Components\SettingView;
|
||||||
|
use Tests\RequestFactories\MailmanTypeRequest;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
uses(DatabaseTransactions::class);
|
||||||
|
uses(TestCase::class);
|
||||||
|
|
||||||
|
it('test it can view index page', function () {
|
||||||
|
test()->login()->loginNami();
|
||||||
|
test()->get('/setting/mailgateway')->assertSeeLivewire(SettingView::class);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it displays local gateways', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
Mailgateway::factory()->type(LocalType::class, [])->name('Lore')->domain('example.com')->create();
|
||||||
|
|
||||||
|
Livewire::test(SettingView::class)
|
||||||
|
->assertSeeHtml('example.com')
|
||||||
|
->assertSeeHtml('Lore')
|
||||||
|
->assertSeeHtml('Lokal')
|
||||||
|
->assertSeeHtml('Verbindung erfolgreich');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('displays mailman gateways', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
$typeParams = MailmanTypeRequest::new()->succeeds()->create(['url' => 'https://mailman.example.com', 'user' => 'user', 'password' => 'password', 'owner' => 'owner']);
|
||||||
|
Mailgateway::factory()->type(MailmanType::class, $typeParams)->create();
|
||||||
|
|
||||||
|
Livewire::test(SettingView::class)->assertSeeHtml('Verbindung erfolgreich');
|
||||||
|
});
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mailgateway;
|
||||||
|
|
||||||
|
use App\Setting\SettingFactory;
|
||||||
|
use Illuminate\Routing\Router;
|
||||||
|
use Illuminate\Support\Facades\View;
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Modules\Mailgateway\Components\SettingView;
|
||||||
|
|
||||||
|
class MailgatewayServiceProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Register services.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function register()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bootstrap services.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function boot()
|
||||||
|
{
|
||||||
|
app(SettingFactory::class)->register(MailgatewaySettings::class);
|
||||||
|
|
||||||
|
app(Router::class)->middleware(['web', 'auth:web'])->group(function ($router) {
|
||||||
|
$router->get('/setting/mailgateway', SettingView::class)->name('setting.mailgateway');
|
||||||
|
});
|
||||||
|
|
||||||
|
View::addNamespace('mailgateway', __DIR__ . '/Components');
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mailgateway;
|
||||||
|
|
||||||
|
use App\Setting\LocalSettings;
|
||||||
|
|
||||||
|
class MailgatewaySettings extends LocalSettings
|
||||||
|
{
|
||||||
|
public static function group(): string
|
||||||
|
{
|
||||||
|
return 'mailgateway';
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function title(): string
|
||||||
|
{
|
||||||
|
return 'E-Mail-Verbindungen';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
public function viewData(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,128 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Mailgateway;
|
||||||
|
|
||||||
|
use App\Mailgateway\Types\LocalType;
|
||||||
|
use App\Mailgateway\Types\MailmanType;
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use Livewire\Livewire;
|
||||||
|
use Modules\Mailgateway\Components\Form;
|
||||||
|
use Tests\RequestFactories\MailmanTypeRequest;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
uses(DatabaseTransactions::class);
|
||||||
|
uses(TestCase::class);
|
||||||
|
|
||||||
|
it('test it saves a mail gateway', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
Livewire::test(Form::class)
|
||||||
|
->set('name', 'lala')
|
||||||
|
->set('domain', 'example.com')
|
||||||
|
->set('cls', LocalType::class)
|
||||||
|
->call('onSave')
|
||||||
|
->assertDispatched('closeModal')
|
||||||
|
->assertDispatched('refresh')
|
||||||
|
->assertDispatched('success');
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('mailgateways', [
|
||||||
|
'domain' => 'example.com',
|
||||||
|
'name' => 'lala',
|
||||||
|
'type' => json_encode([
|
||||||
|
'cls' => LocalType::class,
|
||||||
|
'params' => [],
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('validates type', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
Livewire::test(Form::class)
|
||||||
|
->set('cls', '')
|
||||||
|
->assertHasErrors(['cls' => 'required']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it validates mail gateway', function (array $attributes, array $errors) {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
Livewire::test(Form::class)
|
||||||
|
->set('name', 'lala')
|
||||||
|
->set('domain', 'example.com')
|
||||||
|
->set('cls', LocalType::class)
|
||||||
|
->setArray($attributes)
|
||||||
|
->call('onSave')
|
||||||
|
->assertHasErrors($errors)
|
||||||
|
->assertNotDispatched('closeModal')
|
||||||
|
->assertNotDispatched('refresh')
|
||||||
|
->assertNotDispatched('success');
|
||||||
|
})->with([
|
||||||
|
[['name' => ''], ['name' => 'required']],
|
||||||
|
[['domain' => ''], ['domain' => 'required']],
|
||||||
|
]);
|
||||||
|
|
||||||
|
it('test it validates mailman type', function (array $attributes, array $errors) {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
Livewire::test(Form::class)
|
||||||
|
->set('name', 'lala')
|
||||||
|
->set('domain', 'example.com')
|
||||||
|
->set('cls', MailmanType::class)
|
||||||
|
->set('params.url', 'exampl.com')
|
||||||
|
->set('params.user', '::user::')
|
||||||
|
->set('params.password', 'password')
|
||||||
|
->setArray($attributes)
|
||||||
|
->call('onSave')
|
||||||
|
->assertHasErrors($errors)
|
||||||
|
->assertNotDispatched('closeModal');
|
||||||
|
})->with([
|
||||||
|
[['params.url' => ''], ['params.url' => 'required']],
|
||||||
|
[['params.user' => ''], ['params.user' => 'required']],
|
||||||
|
[['params.password' => ''], ['params.password' => 'required']],
|
||||||
|
[['params.owner' => ''], ['params.owner' => 'required']],
|
||||||
|
[['params.owner' => 'aaa'], ['params.owner' => 'email']],
|
||||||
|
]);
|
||||||
|
|
||||||
|
it('test it stores mailman gateway', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$typeParams = MailmanTypeRequest::new()->succeeds()->create(['url' => 'https://example.com', 'user' => 'user', 'password' => 'secret', 'owner' => 'owner@example.com']);
|
||||||
|
|
||||||
|
Livewire::test(Form::class)
|
||||||
|
->setArray([
|
||||||
|
'name' => 'lala',
|
||||||
|
'domain' => 'https://example.com',
|
||||||
|
'cls' => MailmanType::class,
|
||||||
|
'params' => $typeParams
|
||||||
|
])
|
||||||
|
->call('onSave')
|
||||||
|
->assertDispatched('closeModal');
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('mailgateways', [
|
||||||
|
'type' => json_encode([
|
||||||
|
'cls' => MailmanType::class,
|
||||||
|
'params' => $typeParams,
|
||||||
|
]),
|
||||||
|
'name' => 'lala',
|
||||||
|
'domain' => 'https://example.com',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it checks mailman connection', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$typeParams = MailmanTypeRequest::new()->fails()->create(['url' => 'https://example.com', 'user' => 'user', 'password' => 'secret', 'owner' => 'owner@example.com']);
|
||||||
|
|
||||||
|
Livewire::test(Form::class)
|
||||||
|
->setArray([
|
||||||
|
'name' => 'lala',
|
||||||
|
'domain' => 'https://example.com',
|
||||||
|
'cls' => MailmanType::class,
|
||||||
|
'params' => $typeParams
|
||||||
|
])
|
||||||
|
->call('onSave')
|
||||||
|
->assertHasErrors('connection')
|
||||||
|
->assertNotDispatched('closeModal');
|
||||||
|
|
||||||
|
$this->assertDatabaseCount('mailgateways', 0);
|
||||||
|
});
|
|
@ -0,0 +1,104 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Mailgateway;
|
||||||
|
|
||||||
|
use App\Mailgateway\Models\Mailgateway;
|
||||||
|
use App\Mailgateway\Types\LocalType;
|
||||||
|
use App\Mailgateway\Types\MailmanType;
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use Livewire\Livewire;
|
||||||
|
use Modules\Mailgateway\Components\Form;
|
||||||
|
use Phake;
|
||||||
|
use Tests\RequestFactories\MailmanTypeRequest;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
uses(DatabaseTransactions::class);
|
||||||
|
uses(TestCase::class);
|
||||||
|
|
||||||
|
it('test it sets attributes for mailman', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$typeParams = MailmanTypeRequest::new()->create(['url' => 'https://mailman.example.com', 'user' => 'user', 'password' => 'password', 'owner' => 'owner']);
|
||||||
|
$mailgateway = Mailgateway::factory()->type(MailmanType::class, $typeParams)->create(['name' => '::name::', 'domain' => 'example.com']);
|
||||||
|
|
||||||
|
Livewire::test(Form::class, ['model' => $mailgateway->id])
|
||||||
|
->assertSet('id', $mailgateway->id)
|
||||||
|
->assertSet('name', '::name::')
|
||||||
|
->assertSet('domain', 'example.com')
|
||||||
|
->assertSet('cls', MailmanType::class)
|
||||||
|
->assertSet('params.url', 'https://mailman.example.com')
|
||||||
|
->assertSet('params.user', 'user')
|
||||||
|
->assertSet('params.password', 'password')
|
||||||
|
->assertSet('params.owner', 'owner');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it sets attributes for local', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$mailgateway = Mailgateway::factory()->type(LocalType::class, [])->create(['name' => '::name::', 'domain' => 'example.com']);
|
||||||
|
|
||||||
|
Livewire::test(Form::class, ['model' => $mailgateway->id])
|
||||||
|
->assertSet('name', '::name::')
|
||||||
|
->assertSet('domain', 'example.com')
|
||||||
|
->assertSet('cls', LocalType::class)
|
||||||
|
->assertSet('params', []);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it validates type', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$mailgateway = Mailgateway::factory()->type(LocalType::class, [])->create(['name' => '::name::', 'domain' => 'example.com']);
|
||||||
|
|
||||||
|
Livewire::test(Form::class, ['model' => $mailgateway->id])
|
||||||
|
->set('cls', '')
|
||||||
|
->assertHasErrors(['cls' => 'required']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it updates a mailman gateway without updating password', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$typeParams = MailmanTypeRequest::new()->succeeds()->create(['url' => 'https://mailman.example.com', 'user' => 'user', 'password' => 'password', 'owner' => 'owner@example.com']);
|
||||||
|
$mailgateway = Mailgateway::factory()->type(MailmanType::class, $typeParams)->create(['name' => '::name::', 'domain' => 'example.com']);
|
||||||
|
|
||||||
|
Livewire::test(Form::class, ['model' => $mailgateway->id])
|
||||||
|
->set('name', '::newname::')
|
||||||
|
->call('onSave')
|
||||||
|
->assertHasNoErrors();
|
||||||
|
|
||||||
|
$this->assertDatabaseCount('mailgateways', 1);
|
||||||
|
$this->assertDatabaseHas('mailgateways', [
|
||||||
|
'name' => '::newname::',
|
||||||
|
'type' => json_encode(['cls' => MailmanType::class, 'params' => $typeParams]),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it updates a mailman gateway with password', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$typeParams = MailmanTypeRequest::new()->create(['url' => 'https://mailman.example.com', 'user' => 'user', 'password' => 'password', 'owner' => 'owner@example.com']);
|
||||||
|
$newTypeParams = MailmanTypeRequest::new()->succeeds()->create(['url' => 'https://mailman.example.com', 'user' => 'newuser', 'password' => 'password', 'owner' => 'owner@example.com']);
|
||||||
|
$mailgateway = Mailgateway::factory()->type(MailmanType::class, $typeParams)->create();
|
||||||
|
|
||||||
|
Livewire::test(Form::class, ['model' => $mailgateway->id])
|
||||||
|
->set('params.user', 'newuser')
|
||||||
|
->call('onSave')
|
||||||
|
->assertHasNoErrors();
|
||||||
|
|
||||||
|
$this->assertDatabaseCount('mailgateways', 1);
|
||||||
|
$this->assertDatabaseHas('mailgateways', [
|
||||||
|
'type' => json_encode(['cls' => MailmanType::class, 'params' => $newTypeParams]),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test it checks mailgateway connection when updating', function () {
|
||||||
|
test()->withoutExceptionHandling()->login()->loginNami();
|
||||||
|
|
||||||
|
$typeParams = MailmanTypeRequest::new()->create(['url' => 'https://mailman.example.com', 'user' => 'user', 'password' => 'password', 'owner' => 'owner@example.com']);
|
||||||
|
MailmanTypeRequest::new()->fails()->create(['url' => 'https://mailman.example.com', 'user' => 'newuser', 'password' => 'password', 'owner' => 'owner@example.com']);
|
||||||
|
$mailgateway = Mailgateway::factory()->type(MailmanType::class, $typeParams)->create();
|
||||||
|
|
||||||
|
Livewire::test(Form::class, ['model' => $mailgateway->id])
|
||||||
|
->set('params.user', 'newuser')
|
||||||
|
->call('onSave')
|
||||||
|
->assertHasErrors('connection');
|
||||||
|
});
|
|
@ -1,32 +0,0 @@
|
||||||
<template>
|
|
||||||
<div v-tooltip="longLabel" class="flex space-x-2 items-center">
|
|
||||||
<div class="border-2 rounded-full w-5 h-5 flex items-center justify-center" :class="value ? (dark ? 'border-green-500' : 'border-green-700') : dark ? 'border-red-500' : 'border-red-700'">
|
|
||||||
<ui-sprite :src="value ? 'check' : 'close'" :class="value ? (dark ? 'text-green-600' : 'text-green-800') : dark ? 'text-red-600' : 'text-red-800'" class="w-3 h-3 flex-none"></ui-sprite>
|
|
||||||
</div>
|
|
||||||
<div class="text-gray-400 text-xs" v-text="label"></div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
value: {
|
|
||||||
required: true,
|
|
||||||
type: Boolean,
|
|
||||||
},
|
|
||||||
label: {
|
|
||||||
type: String,
|
|
||||||
default: () => '',
|
|
||||||
},
|
|
||||||
longLabel: {
|
|
||||||
default: function () {
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
dark: {
|
|
||||||
type: Boolean,
|
|
||||||
default: () => false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
Loading…
Reference in New Issue