repository = m::mock(EggVariableRepositoryInterface::class); $this->service = new VariableCreationService($this->repository); } /** * Test basic functionality, data should be stored in the database. */ public function testVariableIsCreatedAndStored() { $data = ['env_variable' => 'TEST_VAR_123']; $this->repository->shouldReceive('create')->with([ 'egg_id' => 1, 'user_viewable' => false, 'user_editable' => false, 'env_variable' => 'TEST_VAR_123', ])->once()->andReturn(new EggVariable); $this->assertInstanceOf(EggVariable::class, $this->service->handle(1, $data)); } /** * Test that the option key in the data array is properly parsed. */ public function testOptionsPassedInArrayKeyAreParsedProperly() { $data = ['env_variable' => 'TEST_VAR_123', 'options' => ['user_viewable', 'user_editable']]; $this->repository->shouldReceive('create')->with([ 'egg_id' => 1, 'user_viewable' => true, 'user_editable' => true, 'env_variable' => 'TEST_VAR_123', 'options' => ['user_viewable', 'user_editable'], ])->once()->andReturn(new EggVariable); $this->assertInstanceOf(EggVariable::class, $this->service->handle(1, $data)); } /** * Test that an empty (null) value passed in the option key is handled * properly as an array. * * @see https://github.com/Pterodactyl/Panel/issues/841 */ public function testNullOptionValueIsPassedAsArray() { $data = ['env_variable' => 'TEST_VAR_123', 'options' => null]; $this->repository->shouldReceive('create')->with([ 'egg_id' => 1, 'user_viewable' => false, 'user_editable' => false, 'env_variable' => 'TEST_VAR_123', 'options' => null, ])->once()->andReturn(new EggVariable); $this->assertInstanceOf(EggVariable::class, $this->service->handle(1, $data)); } /** * Test that all of the reserved variables defined in the model trigger an exception. * * @dataProvider reservedNamesProvider * @expectedException \Pterodactyl\Exceptions\Service\Egg\Variable\ReservedVariableNameException */ public function testExceptionIsThrownIfEnvironmentVariableIsInListOfReservedNames(string $variable) { $this->service->handle(1, ['env_variable' => $variable]); } /** * Test that the egg ID applied in the function takes higher priority than an * ID passed into the handler. */ public function testEggIdPassedInDataIsNotApplied() { $data = ['egg_id' => 123456, 'env_variable' => 'TEST_VAR_123']; $this->repository->shouldReceive('create')->with([ 'egg_id' => 1, 'user_viewable' => false, 'user_editable' => false, 'env_variable' => 'TEST_VAR_123', ])->once()->andReturn(new EggVariable); $this->assertInstanceOf(EggVariable::class, $this->service->handle(1, $data)); } /** * Provides the data to be used in the tests. * * @return array */ public function reservedNamesProvider() { $data = []; $exploded = explode(',', EggVariable::RESERVED_ENV_NAMES); foreach ($exploded as $e) { $data[] = [$e]; } return $data; } }