Scalr\Tests\Functional\Api\Service\User\V1beta0\Controller\FarmRolesTest::testFarmRoleGlobalVariables PHP Метод

testFarmRoleGlobalVariables() публичный Метод

    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());
    }