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