craton/craton/tests/functional/test_project_calls.py

152 lines
6.0 KiB
Python

import copy
from craton.tests import functional
from craton.tests.functional.test_variable_calls import \
APIV1ResourceWithVariablesTestCase
class ProjectTests(functional.TestCase):
def setUp(self):
super(ProjectTests, self).setUp()
self.root_headers = copy.deepcopy(self.session.headers)
self.root_headers[functional.HEADER_USERNAME] = \
functional.FAKE_DATA_GEN_BOOTSTRAP_USERNAME
self.root_headers[functional.HEADER_TOKEN] = \
functional.FAKE_DATA_GEN_BOOTSTRAP_TOKEN
def tearDown(self):
super(ProjectTests, self).tearDown()
class TestPaginationOfProjects(ProjectTests):
def setUp(self):
super(TestPaginationOfProjects, self).setUp()
self.projects = [
self.create_project('project-{}'.format(i),
headers=self.root_headers)
for i in range(0, 61)
]
def test_lists_first_thirty_projects(self):
response = self.get(self.url + '/v1/projects',
headers=self.root_headers)
self.assertSuccessOk(response)
json = response.json()
self.assertIn('projects', json)
projects = json['projects']
self.assertEqual(30, len(projects))
def test_lists_projects_with_the_same_name(self):
self.create_project('project-0', headers=self.root_headers)
response = self.get(self.url + '/v1/projects',
name='project-0',
headers=self.root_headers)
self.assertSuccessOk(response)
projects = response.json()['projects']
self.assertEqual(2, len(projects))
class APIV1ProjectTest(ProjectTests, APIV1ResourceWithVariablesTestCase):
resource = 'projects'
def test_project_create_with_variables(self):
variables = {'a': 'b'}
project_name = 'test'
project = self.create_project(project_name,
headers=self.root_headers,
variables=variables)
self.assertEqual(project_name, project['name'])
self.assertEqual(variables, project['variables'])
def test_create_project_supports_vars_ops(self):
project = self.create_project('test', headers=self.root_headers,
variables={'a': 'b'})
self.assert_vars_get_expected(project['id'], {'a': 'b'})
self.assert_vars_can_be_set(project['id'])
self.assert_vars_can_be_deleted(project['id'])
def test_project_create_with_duplicate_name_works(self):
project_name = 'test'
self.create_project(project_name, headers=self.root_headers)
url = self.url + '/v1/projects'
payload = {'name': project_name}
project = self.post(url, headers=self.root_headers, data=payload)
self.assertEqual(201, project.status_code)
def test_project_get_all_with_name_filter(self):
proj1 = 'test1'
proj2 = 'test2'
self.create_project(proj2, headers=self.root_headers)
for i in range(3):
self.create_project(proj1, headers=self.root_headers)
url = self.url + '/v1/projects?name={}'.format(proj1)
resp = self.get(url, headers=self.root_headers)
projects = resp.json()['projects']
self.assertEqual(3, len(projects))
for project in projects:
self.assertEqual(proj1, project['name'])
def test_get_project_details(self):
project_name = 'test'
project_vars = {"who": "that"}
project = self.create_project(project_name, headers=self.root_headers,
variables=project_vars)
url = self.url + '/v1/projects/{}'.format(project['id'])
project_with_detail = self.get(url, headers=self.root_headers)
self.assertEqual(project_name, project_with_detail.json()['name'])
self.assertEqual(project_vars, project_with_detail.json()['variables'])
def test_project_delete(self):
project1 = self.create_project('test1', headers=self.root_headers)
url = self.url + '/v1/projects'
projects = self.get(url, headers=self.root_headers)
# NOTE(thomasem): Have to include the default project created by
# test setup.
self.assertEqual(2, len(projects.json()['projects']))
delurl = self.url + '/v1/projects/{}'.format(project1['id'])
self.delete(delurl, headers=self.root_headers)
projects = self.get(url, headers=self.root_headers)
self.assertEqual(1, len(projects.json()['projects']))
def test_project_variables_update(self):
project_name = 'test'
project = self.create_project(project_name, headers=self.root_headers)
variables = {"bumbleywump": "cucumberpatch"}
put_url = self.url + '/v1/projects/{}/variables'.format(project['id'])
resp = self.put(put_url, headers=self.root_headers, data=variables)
self.assertEqual(200, resp.status_code)
get_url = self.url + '/v1/projects/{}'.format(project['id'])
project = self.get(get_url, headers=self.root_headers)
self.assertEqual(variables, project.json()['variables'])
def test_project_variables_delete(self):
project_name = 'test'
delete_key = 'bumbleywump'
variables = {
delete_key: 'cucumberpatch'
}
expected_vars = {'foo': 'bar'}
variables.update(expected_vars)
project = self.create_project(project_name, headers=self.root_headers,
variables=variables)
self.assert_vars_get_expected(project['id'], variables)
self.assert_vars_can_be_deleted(project['id'])
def test_project_create_missing_all_properties_fails(self):
url = self.url + '/v1/projects'
project = self.post(url, data={})
self.assertEqual(400, project.status_code)
msg = (
"The request included the following errors:\n"
"- 'name' is a required property"
)
self.assertEqual(project.json()['message'], msg)