mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-29 16:16:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			276 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Tests\Unit\Commands\Environment;
 | |
| 
 | |
| use Mockery as m;
 | |
| use Tests\Unit\Commands\CommandTestCase;
 | |
| use Illuminate\Contracts\Config\Repository;
 | |
| use Pterodactyl\Console\Commands\Environment\EmailSettingsCommand;
 | |
| 
 | |
| class EmailSettingsCommandTest extends CommandTestCase
 | |
| {
 | |
|     /**
 | |
|      * @var \Pterodactyl\Console\Commands\Environment\EmailSettingsCommand|\Mockery\Mock
 | |
|      */
 | |
|     protected $command;
 | |
| 
 | |
|     /**
 | |
|      * @var \Illuminate\Contracts\Config\Repository|\Mockery\Mock
 | |
|      */
 | |
|     protected $config;
 | |
| 
 | |
|     /**
 | |
|      * Setup tests.
 | |
|      */
 | |
|     public function setUp(): void
 | |
|     {
 | |
|         parent::setUp();
 | |
| 
 | |
|         $this->config = m::mock(Repository::class);
 | |
|         $this->command = m::mock(EmailSettingsCommand::class . '[call, writeToEnvironment]', [$this->config]);
 | |
|         $this->command->setLaravel($this->app);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test selection of the SMTP driver with no options passed.
 | |
|      */
 | |
|     public function testSmtpDriverSelection()
 | |
|     {
 | |
|         // TODO(dane): fix this
 | |
|         $this->markTestSkipped('Skipped, GitHub actions cannot run successfully.');
 | |
| //        $data = [
 | |
| //            'MAIL_DRIVER' => 'smtp',
 | |
| //            'MAIL_HOST' => 'mail.test.com',
 | |
| //            'MAIL_PORT' => '567',
 | |
| //            'MAIL_USERNAME' => 'username',
 | |
| //            'MAIL_PASSWORD' => 'password',
 | |
| //            'MAIL_FROM' => 'mail@from.com',
 | |
| //            'MAIL_FROM_NAME' => 'MailName',
 | |
| //            'MAIL_ENCRYPTION' => 'tls',
 | |
| //        ];
 | |
| //
 | |
| //        $this->setupCoreFunctions($data);
 | |
| //        $display = $this->runCommand($this->command, [], array_values($data));
 | |
| //
 | |
| //        $this->assertNotEmpty($display);
 | |
| //        $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test that the command can run when all variables are passed in as options.
 | |
|      */
 | |
|     public function testSmtpDriverSelectionWithOptionsPassed()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'smtp',
 | |
|             'MAIL_HOST' => 'mail.test.com',
 | |
|             'MAIL_PORT' => '567',
 | |
|             'MAIL_USERNAME' => 'username',
 | |
|             'MAIL_PASSWORD' => 'password',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
|         $display = $this->withoutInteraction()->runCommand($this->command, [
 | |
|             '--driver' => $data['MAIL_DRIVER'],
 | |
|             '--email' => $data['MAIL_FROM'],
 | |
|             '--from' => $data['MAIL_FROM_NAME'],
 | |
|             '--encryption' => $data['MAIL_ENCRYPTION'],
 | |
|             '--host' => $data['MAIL_HOST'],
 | |
|             '--port' => $data['MAIL_PORT'],
 | |
|             '--username' => $data['MAIL_USERNAME'],
 | |
|             '--password' => $data['MAIL_PASSWORD'],
 | |
|         ]);
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test selection of PHP mail() as the driver.
 | |
|      */
 | |
|     public function testPHPMailDriverSelection()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'mail',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
| 
 | |
|         // The driver flag is passed because there seems to be some issue with the command tester
 | |
|         // when using a choice() method when two keys start with the same letters.
 | |
|         //
 | |
|         // In this case, mail and mailgun.
 | |
|         unset($data['MAIL_DRIVER']);
 | |
|         $display = $this->runCommand($this->command, ['--driver' => 'mail'], array_values($data));
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test selection of the Mailgun driver with no options passed.
 | |
|      */
 | |
|     public function testMailgunDriverSelection()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'mailgun',
 | |
|             'MAILGUN_DOMAIN' => 'domain.com',
 | |
|             'MAILGUN_SECRET' => '123456',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
|         $display = $this->runCommand($this->command, [], array_values($data));
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test mailgun driver selection when variables are passed as options.
 | |
|      */
 | |
|     public function testMailgunDriverSelectionWithOptionsPassed()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'mailgun',
 | |
|             'MAILGUN_DOMAIN' => 'domain.com',
 | |
|             'MAILGUN_SECRET' => '123456',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
|         $display = $this->withoutInteraction()->runCommand($this->command, [
 | |
|             '--driver' => $data['MAIL_DRIVER'],
 | |
|             '--email' => $data['MAIL_FROM'],
 | |
|             '--from' => $data['MAIL_FROM_NAME'],
 | |
|             '--encryption' => $data['MAIL_ENCRYPTION'],
 | |
|             '--host' => $data['MAILGUN_DOMAIN'],
 | |
|             '--password' => $data['MAILGUN_SECRET'],
 | |
|         ]);
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test selection of the Mandrill driver with no options passed.
 | |
|      */
 | |
|     public function testMandrillDriverSelection()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'mandrill',
 | |
|             'MANDRILL_SECRET' => '123456',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
|         $display = $this->runCommand($this->command, [], array_values($data));
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test mandrill driver selection when variables are passed as options.
 | |
|      */
 | |
|     public function testMandrillDriverSelectionWithOptionsPassed()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'mandrill',
 | |
|             'MANDRILL_SECRET' => '123456',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
|         $display = $this->withoutInteraction()->runCommand($this->command, [
 | |
|             '--driver' => $data['MAIL_DRIVER'],
 | |
|             '--email' => $data['MAIL_FROM'],
 | |
|             '--from' => $data['MAIL_FROM_NAME'],
 | |
|             '--encryption' => $data['MAIL_ENCRYPTION'],
 | |
|             '--password' => $data['MANDRILL_SECRET'],
 | |
|         ]);
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test selection of the Postmark driver with no options passed.
 | |
|      */
 | |
|     public function testPostmarkDriverSelection()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'smtp',
 | |
|             'MAIL_HOST' => 'smtp.postmarkapp.com',
 | |
|             'MAIL_PORT' => '587',
 | |
|             'MAIL_USERNAME' => '123456',
 | |
|             'MAIL_PASSWORD' => '123456',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
|         $display = $this->runCommand($this->command, [], [
 | |
|             'postmark', '123456', $data['MAIL_FROM'], $data['MAIL_FROM_NAME'], $data['MAIL_ENCRYPTION'],
 | |
|         ]);
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test postmark driver selection when variables are passed as options.
 | |
|      */
 | |
|     public function testPostmarkDriverSelectionWithOptionsPassed()
 | |
|     {
 | |
|         $data = [
 | |
|             'MAIL_DRIVER' => 'smtp',
 | |
|             'MAIL_HOST' => 'smtp.postmarkapp.com',
 | |
|             'MAIL_PORT' => '587',
 | |
|             'MAIL_USERNAME' => '123456',
 | |
|             'MAIL_PASSWORD' => '123456',
 | |
|             'MAIL_FROM' => 'mail@from.com',
 | |
|             'MAIL_FROM_NAME' => 'MailName',
 | |
|             'MAIL_ENCRYPTION' => 'tls',
 | |
|         ];
 | |
| 
 | |
|         $this->setupCoreFunctions($data);
 | |
|         $display = $this->withoutInteraction()->runCommand($this->command, [
 | |
|             '--driver' => 'postmark',
 | |
|             '--email' => $data['MAIL_FROM'],
 | |
|             '--from' => $data['MAIL_FROM_NAME'],
 | |
|             '--encryption' => $data['MAIL_ENCRYPTION'],
 | |
|             '--username' => $data['MAIL_USERNAME'],
 | |
|         ]);
 | |
| 
 | |
|         $this->assertNotEmpty($display);
 | |
|         $this->assertStringContainsString('Updating stored environment configuration file.', $display);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Setup the core functions that are repeated across all of these tests.
 | |
|      *
 | |
|      * @param array $data
 | |
|      */
 | |
|     private function setupCoreFunctions(array $data)
 | |
|     {
 | |
|         $this->config->shouldReceive('get')->withAnyArgs()->zeroOrMoreTimes()->andReturnNull();
 | |
|         $this->command->shouldReceive('writeToEnvironment')->with($data)->once()->andReturnNull();
 | |
|     }
 | |
| }
 | 
