112 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace Modules\Mailgateway\Tests;
 | 
						|
 | 
						|
use Modules\Mailgateway\Models\Mailgateway;
 | 
						|
use Modules\Mailgateway\Types\LocalType;
 | 
						|
use Modules\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 sets attributes for mailman', function () {
 | 
						|
    test()->withoutExceptionHandling()->login()->loginNami();
 | 
						|
 | 
						|
    $typeParams = MailmanTypeRequest::new()->state(['url' => 'https://mailman.example.com', 'user' => 'user', 'password' => 'password', 'owner' => 'owner']);
 | 
						|
    $mailgateway = Mailgateway::factory()->type($typeParams->toData())->create(['name' => '::name::', 'domain' => 'example.com']);
 | 
						|
 | 
						|
    Livewire::test(Form::class, ['id' => $mailgateway->id])
 | 
						|
        ->assertSet('model', fn ($m) => $m->is($mailgateway))
 | 
						|
        ->assertSet('name', '::name::')
 | 
						|
        ->assertSet('domain', 'example.com')
 | 
						|
        ->assertSet(
 | 
						|
            'type',
 | 
						|
            fn ($type) => $type instanceof MailmanType
 | 
						|
                && $type->url === 'https://mailman.example.com'
 | 
						|
                && $type->user === 'user' &&
 | 
						|
                $type->password === 'password'
 | 
						|
                && $type->owner === 'owner'
 | 
						|
        );
 | 
						|
});
 | 
						|
 | 
						|
it('test it sets attributes for local', function () {
 | 
						|
    test()->withoutExceptionHandling()->login()->loginNami();
 | 
						|
 | 
						|
    $mailgateway = Mailgateway::factory()->create(['name' => '::name::', 'domain' => 'example.com']);
 | 
						|
 | 
						|
    Livewire::test(Form::class, ['id' => $mailgateway->id])
 | 
						|
        ->assertSet('name', '::name::')
 | 
						|
        ->assertSet('domain', 'example.com')
 | 
						|
        ->assertSet('type', fn ($type) => $type instanceof LocalType);
 | 
						|
});
 | 
						|
 | 
						|
it('test it validates type', function () {
 | 
						|
    test()->withoutExceptionHandling()->login()->loginNami();
 | 
						|
 | 
						|
    $mailgateway = Mailgateway::factory()->create(['name' => '::name::', 'domain' => 'example.com']);
 | 
						|
 | 
						|
    Livewire::test(Form::class, ['id' => $mailgateway->id])
 | 
						|
        ->set('typeClass', '')
 | 
						|
        ->assertHasErrors(['typeClass' => 'required']);
 | 
						|
});
 | 
						|
 | 
						|
it('test it updates a mailman gateway without updating password', function () {
 | 
						|
    test()->withoutExceptionHandling()->login()->loginNami();
 | 
						|
 | 
						|
    $typeParams = MailmanTypeRequest::new()
 | 
						|
        ->succeeds()
 | 
						|
        ->state(['url' => 'https://mailman.example.com', 'user' => 'user', 'password' => 'password', 'owner' => 'owner@example.com'])
 | 
						|
        ->toData();
 | 
						|
    $mailgateway = Mailgateway::factory()->type($typeParams)->create(['name' => '::name::', 'domain' => 'example.com']);
 | 
						|
 | 
						|
    Livewire::test(Form::class, ['id' => $mailgateway->id])
 | 
						|
        ->set('name', '::newname::')
 | 
						|
        ->call('onSave')
 | 
						|
        ->assertHasNoErrors()
 | 
						|
        ->assertDispatched('closeModal')
 | 
						|
        ->assertDispatched('refresh-page')
 | 
						|
        ->assertDispatched('success');
 | 
						|
 | 
						|
    $this->assertDatabaseCount('mailgateways', 1);
 | 
						|
    $this->assertDatabaseHas('mailgateways', [
 | 
						|
        'name' => '::newname::',
 | 
						|
        'type' => json_encode(['type' => MailmanType::class, 'data' => $typeParams]),
 | 
						|
    ]);
 | 
						|
});
 | 
						|
 | 
						|
it('test it updates a mailman gateway with password', function () {
 | 
						|
    test()->withoutExceptionHandling()->login()->loginNami();
 | 
						|
 | 
						|
    $typeParams = MailmanTypeRequest::new()->state(['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($typeParams->toData())->create();
 | 
						|
 | 
						|
    Livewire::test(Form::class, ['id' => $mailgateway->id])
 | 
						|
        ->set('type.user', 'newuser')
 | 
						|
        ->call('onSave')
 | 
						|
        ->assertHasNoErrors();
 | 
						|
 | 
						|
    $this->assertDatabaseCount('mailgateways', 1);
 | 
						|
    $this->assertDatabaseHas('mailgateways', [
 | 
						|
        'type' => json_encode(['type' => MailmanType::class, 'data' => $newTypeParams]),
 | 
						|
    ]);
 | 
						|
});
 | 
						|
 | 
						|
it('test it checks mailgateway connection when updating', function () {
 | 
						|
    test()->withoutExceptionHandling()->login()->loginNami();
 | 
						|
 | 
						|
    $typeParams = MailmanTypeRequest::new()->state(['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($typeParams->toData())->create();
 | 
						|
 | 
						|
    Livewire::test(Form::class, ['id' => $mailgateway->id])
 | 
						|
        ->set('type.user', 'newuser')
 | 
						|
        ->call('onSave')
 | 
						|
        ->assertHasErrors('connection');
 | 
						|
});
 |