public static function setUpBeforeClass() { parent::setUpBeforeClass(); if (self::isSkippedFunctionalTest(self::TEST_TYPE_UI)) { return; } $db = \Scalr::getDb(); self::deleteTestVariables(); $envId = \Scalr::config('scalr.phpunit.envid'); if (!$envId) { return; } $env = \Scalr_Environment::init()->loadById($envId); self::$vars[ScopeInterface::SCOPE_SCALR] = new Scalr_Scripting_GlobalVariables(); self::$vars[ScopeInterface::SCOPE_ACCOUNT] = new Scalr_Scripting_GlobalVariables($env->clientId, 0, ScopeInterface::SCOPE_ACCOUNT); self::$vars[ScopeInterface::SCOPE_ENVIRONMENT] = new Scalr_Scripting_GlobalVariables($env->clientId, $env->id, ScopeInterface::SCOPE_ENVIRONMENT); self::$args[ScopeInterface::SCOPE_SCALR] = self::$args[ScopeInterface::SCOPE_ACCOUNT] = self::$args[ScopeInterface::SCOPE_ENVIRONMENT] = [0, 0, 0, '']; /* @var $farm Farm */ $farm = Farm::findOne([['envId' => $env->id]]); if ($farm) { self::$vars[ScopeInterface::SCOPE_FARM] = new Scalr_Scripting_GlobalVariables($env->clientId, $env->id, ScopeInterface::SCOPE_FARM); self::$args[ScopeInterface::SCOPE_FARM] = [0, $farm->id, 0, '']; /* @var $farmRole FarmRole */ $farmRole = FarmRole::findOne([['farmId' => $farm->id]]); if ($farmRole) { self::$vars[ScopeInterface::SCOPE_ROLE] = new Scalr_Scripting_GlobalVariables($env->clientId, $env->id, ScopeInterface::SCOPE_ROLE); self::$args[ScopeInterface::SCOPE_ROLE] = [$farmRole->roleId, 0, 0, '']; self::$vars[ScopeInterface::SCOPE_FARMROLE] = new Scalr_Scripting_GlobalVariables($env->clientId, $env->id, ScopeInterface::SCOPE_FARMROLE); self::$args[ScopeInterface::SCOPE_FARMROLE] = [$farmRole->roleId, $farm->id, $farmRole->id, '']; } } }
/** * @test * @functional */ public function testFarmRoleGlobalVariables() { $db = \Scalr::getDb(); $testName = str_replace('-', '', $this->getTestName()); $farm = Farm::findOne([['envId' => static::$testEnvId]]); /* @var $farm Farm */ $farmRole = FarmRole::findOne([['farmId' => $farm->id]]); /* @var $farmRole FarmRole */ $roleId = $farmRole->id; $uri = static::getUserApiUrl("farm-roles/{$roleId}/global-variables"); $variables = null; $declaredNotInRole = null; do { $query = []; if (isset($variables->pagination->next)) { $parts = parse_url($variables->pagination->next); parse_str($parts['query'], $query); } $query[ApiController::QUERY_PARAM_MAX_RESULTS] = 2; $describe = $this->request($uri, Request::METHOD_GET, $query); $this->assertDescribeResponseNotEmpty($describe); $this->assertNotEmpty($describe->getBody()); $variables = $describe->getBody(); $this->assertLessThanOrEqual(2, count($variables->data)); foreach ($variables->data as $variable) { $this->assertVariableObjectNotEmpty($variable); if (empty($declaredNotInRole) && $variable->declaredIn !== ScopeInterface::SCOPE_FARMROLE && !$variable->hidden) { $declaredNotInRole = $variable->name; } if (strpos($variable->name, $testName) !== false) { $delete = $this->request($uri . '/' . $variable->name, Request::METHOD_DELETE); $this->assertEquals(200, $delete->response->getStatus()); } } } while (!empty($variables->pagination->next)); $this->assertNotNull($declaredNotInRole); $notFoundRoleId = 10 + $db->GetOne("SELECT MAX(f.id) FROM farm_roles f"); $describe = $this->request(static::getUserApiUrl("/farm-roles/{$notFoundRoleId}/global-variables"), Request::METHOD_GET); $this->assertErrorMessageContains($describe, 404, ErrorMessage::ERR_OBJECT_NOT_FOUND); $create = $this->request($uri, Request::METHOD_POST, [], ['invalid' => 'value']); $this->assertErrorMessageContains($create, 400, ErrorMessage::ERR_INVALID_STRUCTURE, 'You are trying to set'); $create = $this->request($uri, Request::METHOD_POST, [], ['name' => 'invalid val--ue']); $this->assertErrorMessageContains($create, 400, ErrorMessage::ERR_INVALID_VALUE, 'Name should contain only letters, numbers and underscores, start with letter and be from 2 to 128 chars long'); //test invalid category name $create = $this->request($uri, Request::METHOD_POST, [], ['name' => 'TestName', 'category' => 'invalid category']); $this->assertErrorMessageContains($create, 400, ErrorMessage::ERR_INVALID_VALUE); $create = $this->request($uri, Request::METHOD_POST); $this->assertErrorMessageContains($create, 400, ErrorMessage::ERR_INVALID_STRUCTURE, 'Invalid body'); $create = $this->request($uri, Request::METHOD_POST, [], ['name' => $testName, 'value' => $testName, 'description' => $testName]); $this->assertEquals(201, $create->response->getStatus()); $this->assertFetchResponseNotEmpty($create); $createBody = $create->getBody(); $this->assertNotEmpty($createBody); $this->assertVariableObjectNotEmpty($createBody->data); $this->assertEquals($testName, $createBody->data->name); $this->assertEquals($testName, $createBody->data->value); $this->assertEquals($testName, $createBody->data->description); $create = $this->request($uri, Request::METHOD_POST, [], ['name' => $testName]); $this->assertErrorMessageContains($create, 409, ErrorMessage::ERR_UNICITY_VIOLATION, 'Variable with name'); $fetch = $this->request($uri . '/' . $testName, Request::METHOD_GET); $this->assertEquals(200, $fetch->response->getStatus()); $this->assertFetchResponseNotEmpty($fetch); $fetchBody = $fetch->getBody(); $this->assertNotEmpty($fetchBody); $this->assertVariableObjectNotEmpty($fetchBody->data); $this->assertEquals($testName, $fetchBody->data->name); $this->assertEquals($testName, $fetchBody->data->value); $modify = $this->request($uri . '/' . $testName, Request::METHOD_PATCH, [], ['value' => '']); $this->assertEquals(200, $modify->response->getStatus()); $this->assertFetchResponseNotEmpty($modify); $modifyBody = $modify->getBody(); $this->assertNotEmpty($modifyBody); $this->assertVariableObjectNotEmpty($modifyBody->data); $this->assertEquals($testName, $modifyBody->data->name); $this->assertEquals('', $modifyBody->data->value); $modify = $this->request($uri . '/' . $testName . 'notFound', Request::METHOD_PATCH, [], ['value' => '']); $this->assertEquals(404, $modify->response->getStatus()); $this->assertErrorMessageErrorEquals(ErrorMessage::ERR_OBJECT_NOT_FOUND, $modify); $modify = $this->request($uri . '/' . $testName, Request::METHOD_PATCH, [], ['name' => '']); $this->assertErrorMessageContains($modify, 400, ErrorMessage::ERR_INVALID_STRUCTURE, 'You are trying to set'); $modify = $this->request($uri . '/' . $declaredNotInRole, Request::METHOD_PATCH, [], ['hidden' => 1]); $this->assertEquals(403, $modify->response->getStatus()); $this->assertErrorMessageErrorEquals(ErrorMessage::ERR_SCOPE_VIOLATION, $modify); $delete = $this->request($uri . '/' . $declaredNotInRole, Request::METHOD_DELETE); $this->assertEquals(403, $delete->response->getStatus()); $this->assertErrorMessageErrorEquals(ErrorMessage::ERR_SCOPE_VIOLATION, $delete); $delete = $this->request($uri . '/' . $testName . 'notfound', Request::METHOD_DELETE); $this->assertEquals(404, $delete->response->getStatus()); $this->assertErrorMessageErrorEquals(ErrorMessage::ERR_OBJECT_NOT_FOUND, $delete); $delete = $this->request($uri . '/' . $testName, Request::METHOD_DELETE); $this->assertEquals(200, $delete->response->getStatus()); }