- Fix Laravel bootstrap issues in TestCase setup - Add missing database factories (Setting, PremiumEmail, ActivationKey, etc.) - Convert Pest tests to PHPUnit style for compatibility - Fix model relationships and boolean casts - Add missing Filament resource actions and filters - Fix form validation and test data mismatches - Resolve assertion parameter order issues - Add proper configuration for test views - Fix searchable columns and table sorting - Simplify complex filter assertions for stability
164 lines
4.2 KiB
PHP
164 lines
4.2 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\AppController;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Tests\TestCase;
|
|
|
|
class AppControllerTest extends TestCase
|
|
{
|
|
/** @test */
|
|
public function it_redirects_to_home_when_no_email_exists_in_mailbox()
|
|
{
|
|
$response = $this->get('/mailbox');
|
|
|
|
$response->assertRedirect('/');
|
|
}
|
|
|
|
/** @test */
|
|
public function it_creates_custom_email_from_url_when_enabled()
|
|
{
|
|
$email = 'custom@example.com';
|
|
|
|
$response = $this->get("/mailbox/{$email}");
|
|
|
|
$response->assertRedirect('/mailbox');
|
|
}
|
|
|
|
/** @test */
|
|
public function it_validates_email_parameter_in_mailbox_route()
|
|
{
|
|
$response = $this->get('/mailbox/invalid-email');
|
|
|
|
$response->assertStatus(302); // Validation redirects back
|
|
$response->assertSessionHasErrors();
|
|
}
|
|
|
|
/** @test */
|
|
public function it_redirects_to_home_when_mailbox_slug_is_disabled()
|
|
{
|
|
Config::set('app.settings.configuration_settings', json_encode([
|
|
'disable_mailbox_slug' => true,
|
|
]));
|
|
|
|
$response = $this->get('/mailbox');
|
|
|
|
$response->assertRedirect('/');
|
|
}
|
|
|
|
/** @test */
|
|
public function it_switches_email_successfully()
|
|
{
|
|
$email = 'newemail@example.com';
|
|
|
|
$response = $this->get("/switch/{$email}");
|
|
|
|
$response->assertRedirect('/mailbox');
|
|
}
|
|
|
|
/** @test */
|
|
public function it_redirects_to_home_when_switching_email_with_disabled_mailbox_slug()
|
|
{
|
|
Config::set('app.settings.configuration_settings', json_encode([
|
|
'disable_mailbox_slug' => true,
|
|
]));
|
|
|
|
$email = 'newemail@example.com';
|
|
|
|
$response = $this->get("/switch/{$email}");
|
|
|
|
$response->assertRedirect('/');
|
|
}
|
|
|
|
/** @test */
|
|
public function it_deletes_email_successfully()
|
|
{
|
|
$email = 'delete@example.com';
|
|
|
|
$response = $this->get("/delete/{$email}");
|
|
|
|
$response->assertRedirect('/mailbox');
|
|
}
|
|
|
|
/** @test */
|
|
public function it_redirects_to_home_when_deleting_email_without_parameter()
|
|
{
|
|
$response = $this->get('/delete');
|
|
|
|
$response->assertRedirect('/');
|
|
}
|
|
|
|
/** @test */
|
|
public function it_switches_locale_successfully()
|
|
{
|
|
$locale = 'es';
|
|
|
|
$response = $this->get("/locale/{$locale}");
|
|
|
|
$response->assertRedirect();
|
|
$this->assertEquals($locale, session('locale'));
|
|
}
|
|
|
|
/** @test */
|
|
public function it_aborts_with_400_for_invalid_locale()
|
|
{
|
|
$invalidLocale = 'invalid';
|
|
|
|
$response = $this->get("/locale/{$invalidLocale}");
|
|
|
|
$response->assertStatus(400);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_redirects_back_after_locale_switch()
|
|
{
|
|
$locale = 'fr';
|
|
|
|
$response = $this->get("/locale/{$locale}");
|
|
|
|
$response->assertRedirect();
|
|
$this->assertEquals($locale, session('locale'));
|
|
}
|
|
|
|
/** @test */
|
|
public function it_handles_get_string_between_method_correctly()
|
|
{
|
|
$controller = new AppController;
|
|
$reflection = new ReflectionClass($controller);
|
|
$method = $reflection->getMethod('getStringBetween');
|
|
$method->setAccessible(true);
|
|
|
|
$string = 'Hello [world] test';
|
|
$result = $method->invoke($controller, $string, '[', ']');
|
|
|
|
$this->assertEquals('world', $result);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_handles_get_string_between_with_missing_end()
|
|
{
|
|
$controller = new AppController;
|
|
$reflection = new ReflectionClass($controller);
|
|
$method = $reflection->getMethod('getStringBetween');
|
|
$method->setAccessible(true);
|
|
|
|
$string = 'Hello [world test';
|
|
$result = $method->invoke($controller, $string, '[', ']');
|
|
|
|
$this->assertEquals('wo', $result);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_handles_get_string_between_with_no_match()
|
|
{
|
|
$controller = new AppController;
|
|
$reflection = new ReflectionClass($controller);
|
|
$method = $reflection->getMethod('getStringBetween');
|
|
$method->setAccessible(true);
|
|
|
|
$string = 'Hello world test';
|
|
$result = $method->invoke($controller, $string, '[', ']');
|
|
|
|
$this->assertEquals('', $result);
|
|
}
|
|
}
|