def test_new_user_no_tenant(self): """ No user, no tenant. """ setup_identity_cache() task = Task.objects.create(ip_address="0.0.0.0", keystone_user={ 'roles': ['admin', 'project_mod'], 'project_id': 'test_project_id', 'project_domain_id': 'default', }) data = { 'email': '*****@*****.**', 'project_id': 'test_project_id', 'roles': ['_member_'], 'inherited_roles': [], 'domain_id': 'default', } action = NewUserAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, False) action.post_approve() self.assertEqual(action.valid, False) token_data = {} action.submit(token_data) self.assertEqual(action.valid, False)
def test_new_user_only_member(self): """ Existing user, valid project, no edit permissions. Action should be invalid. """ project = fake_clients.FakeProject(name="test_project") user = fake_clients.FakeUser(name="*****@*****.**", password="******", email="*****@*****.**") setup_identity_cache(projects=[project], users=[user]) task = Task.objects.create(ip_address="0.0.0.0", keystone_user={ 'roles': ['_member_'], 'project_id': project.id, 'project_domain_id': 'default', }) data = { 'email': '*****@*****.**', 'project_id': project.id, 'roles': ['_member_'], 'inherited_roles': [], 'domain_id': 'default', } action = NewUserAction(data, task=task, order=1) action.pre_approve() self.assertFalse(action.valid)
def test_new_project_network_setup_no_id(self): """ No project id given, should do nothing. """ setup_identity_cache() setup_neutron_cache("RegionOne", "test_project_id") task = Task.objects.create(keystone_user={"roles": ["admin"]}) data = { "setup_network": True, "region": "RegionOne", } action = NewProjectDefaultNetworkAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, False) self.assertEqual(action.action.cache, {}) global neutron_cache self.assertEqual( len(neutron_cache["RegionOne"]["test_project_id"]["networks"]), 0) self.assertEqual( len(neutron_cache["RegionOne"]["test_project_id"]["routers"]), 0) self.assertEqual( len(neutron_cache["RegionOne"]["test_project_id"]["subnets"]), 0)
def test_update_email_invalid_user(self): """ Test case for an invalid user being updated. """ setup_identity_cache() task = Task.objects.create(ip_address="0.0.0.0", keystone_user={ 'roles': ['project_mod'], 'project_id': 'test_project_id', 'project_domain_id': 'default', }) data = { 'new_email': '*****@*****.**', 'user_id': "non_user_id", } action = UpdateUserEmailAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, False) action.post_approve() self.assertEqual(action.valid, False) token_data = {'confirm': True} action.submit(token_data) self.assertEqual(action.valid, False)
def test_reset_user_password_no_user(self): """ Reset password for a non-existant user. """ setup_identity_cache() task = Task.objects.create( keystone_user={ "roles": ["admin", "project_mod"], "project_id": "test_project_id", "project_domain_id": "default", } ) data = { "domain_name": "Default", "email": "*****@*****.**", } action = ResetUserPasswordAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, False) action.approve() self.assertEqual(action.valid, False) token_data = {} action.submit(token_data) self.assertEqual(action.valid, False)
def test_new_user_only_member(self): """ Existing user, valid project, no edit permissions. Action should be invalid. """ project = fake_clients.FakeProject(name="test_project") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) setup_identity_cache(projects=[project], users=[user]) task = Task.objects.create( keystone_user={ "roles": ["member"], "project_id": project.id, "project_domain_id": "default", } ) data = { "email": "*****@*****.**", "project_id": project.id, "roles": ["member"], "inherited_roles": [], "domain_id": "default", } action = NewUserAction(data, task=task, order=1) action.prepare() self.assertFalse(action.valid)
def test_new_user_wrong_project(self): """ Existing user, valid project, project does not match keystone user. Action should be invalid. """ project = fake_clients.FakeProject(name="test_project") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) setup_identity_cache(projects=[project], users=[user]) task = Task.objects.create( keystone_user={ "roles": ["project_mod"], "project_id": "test_project_id", "project_domain_id": "default", } ) data = { "email": "*****@*****.**", "project_id": "test_project_id_1", "roles": ["member"], "inherited_roles": [], "domain_id": "default", } action = NewUserAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, False)
def test_reset_user_password_no_user(self): """ Reset password for a non-existant user. """ setup_identity_cache() task = Task.objects.create(ip_address="0.0.0.0", keystone_user={ 'roles': ['admin', 'project_mod'], 'project_id': 'test_project_id', 'project_domain_id': 'default', }) data = { 'domain_name': 'Default', 'email': '*****@*****.**', } action = ResetUserPasswordAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, False) action.post_approve() self.assertEqual(action.valid, False) token_data = {} action.submit(token_data) self.assertEqual(action.valid, False)
def test_set_multi_region_quota(self): """ Sets a quota to all to all regions in a project """ project = fake_clients.FakeProject(name="test_project", id="test_project_id") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) setup_identity_cache(projects=[project], users=[user]) headers = { "project_name": "test_project", "project_id": project.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": "user_id", "authenticated": True, } url = "/v1/openstack/quotas/" data = {"size": "medium", "regions": ["RegionOne", "RegionTwo"]} response = self.client.post(url, data, headers=headers, format="json") self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.check_quota_cache("RegionOne", "test_project_id", "medium") self.check_quota_cache("RegionTwo", "test_project_id", "medium")
def test_update_email_invalid_user(self): """ Test case for an invalid user being updated. """ setup_identity_cache() task = Task.objects.create( keystone_user={ "roles": ["project_mod"], "project_id": "test_project_id", "project_domain_id": "default", } ) data = { "new_email": "*****@*****.**", "user_id": "non_user_id", } action = UpdateUserEmailAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, False) action.approve() self.assertEqual(action.valid, False) token_data = {"confirm": True} action.submit(token_data) self.assertEqual(action.valid, False)
def setUp(self) -> None: super().setUp() self.users = [ fake_clients.FakeUser(name='*****@*****.**') ] fake_clients.setup_identity_cache(users=self.users)
def test_new_project_user_removed(self): """ Tests when the user is removed after the post approve step. """ setup_identity_cache() task = Task.objects.create(keystone_user={}) data = { "domain_id": "default", "parent_id": None, "email": "*****@*****.**", "project_name": "test_project", } action = NewProjectWithUserAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) new_user = fake_clients.identity_cache["new_users"][0] self.assertEqual(new_user.name, "*****@*****.**") self.assertEqual(new_user.email, "*****@*****.**") fake_clients.identity_cache["users"] = {} token_data = {"password": "******"} action.submit(token_data) self.assertEqual(action.valid, False)
def test_calculate_custom_quota_size(self): """ Calculates the best 'fit' quota size from a custom quota. """ project = fake_clients.FakeProject(name="test_project", id="test_project_id") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) setup_identity_cache(projects=[project], users=[user]) admin_headers = { "project_name": "test_project", "project_id": project.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": user.id, "authenticated": True, } cinderquota = cinder_cache["RegionOne"]["test_project_id"]["quota"] cinderquota["gigabytes"] = 6000 novaquota = nova_cache["RegionOne"]["test_project_id"]["quota"] novaquota["ram"] = 70000 neutronquota = neutron_cache["RegionOne"]["test_project_id"]["quota"] neutronquota["network"] = 4 url = "/v1/openstack/quotas/?regions=RegionOne" response = self.client.get(url, headers=admin_headers) # First check we can actually access the page correctly self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data["regions"][0]["current_quota_size"], "small")
def test_new_user_no_tenant(self): """ No user, no tenant. """ setup_identity_cache() task = Task.objects.create( keystone_user={ "roles": ["admin", "project_mod"], "project_id": "test_project_id", "project_domain_id": "default", } ) data = { "email": "*****@*****.**", "project_id": "test_project_id", "roles": ["member"], "inherited_roles": [], "domain_id": "default", } action = NewUserAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, False) action.approve() self.assertEqual(action.valid, False) token_data = {} action.submit(token_data) self.assertEqual(action.valid, False)
def test_new_user(self): """ Ensure the new user workflow goes as expected. Create task, create token, submit token. """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) url = "/v1/openstack/users" headers = { "project_name": "test_project", "project_id": project.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": "test_user_id", "authenticated": True, } data = { "email": "*****@*****.**", "roles": ["member"], "project_id": project.id, } response = self.client.post(url, data, format="json", headers=headers) self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.assertEqual(response.json(), {"notes": ["task created"]}) new_token = Token.objects.all()[0] url = "/v1/tokens/" + new_token.token data = {"password": "******"} response = self.client.post(url, data, format="json") self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_update_quota_no_history(self): """ Update the quota size of a project with no history """ project = fake_clients.FakeProject(name="test_project", id="test_project_id") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) setup_identity_cache(projects=[project], users=[user]) admin_headers = { "project_name": "test_project", "project_id": project.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": "user_id", "authenticated": True, } url = "/v1/openstack/quotas/" data = {"size": "medium", "regions": ["RegionOne"]} response = self.client.post(url, data, headers=admin_headers, format="json") self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) # Then check to see the quotas have changed self.check_quota_cache("RegionOne", project.id, "medium")
def test_remove_user_role(self): """ Remove all roles on a user from our project """ project = fake_clients.FakeProject(name="test_project") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) assignment = fake_clients.FakeRoleAssignment( scope={"project": {"id": project.id}}, role_name="member", user={"id": user.id}, ) setup_identity_cache( projects=[project], users=[user], role_assignments=[assignment] ) admin_headers = { "project_name": "test_project", "project_id": project.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": "test_user_id", "authenticated": True, } # admins removes role from the test user url = "/v1/openstack/users/%s/roles" % user.id data = {"roles": ["member"]} response = self.client.delete(url, data, format="json", headers=admin_headers) self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.assertEqual(response.json(), {"notes": ["task created"]})
def test_new_project_existing_project(self): """ Create a project that already exists. """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) task = Task.objects.create( keystone_user={ "roles": ["admin", "project_mod"], "project_id": "test_project_id", "project_domain_id": "default", }) data = { "domain_id": "default", "parent_id": None, "email": "*****@*****.**", "project_name": "test_project", } action = NewProjectWithUserAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, False) action.approve() self.assertEqual(action.valid, False)
def test_new_project_invalid_domain_id(self): """ Create a project using an invalid domain """ setup_identity_cache() task = Task.objects.create( keystone_user={ "roles": ["admin", "project_mod"], "project_id": "test_project_id", "project_domain_id": "default", }) data = { "domain_id": "not_default_id", "parent_id": None, "email": "*****@*****.**", "project_name": "test_project", } action = NewProjectWithUserAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, False) action.approve() self.assertEqual(action.valid, False)
def test_add_default_users(self): """ Base case, adds admin user with admin role to project. NOTE(adriant): This test assumes the conf setting of: default_users = ['admin'] default_roles = ['admin'] """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) task = Task.objects.create(keystone_user={"roles": ["admin"]}) task.cache = {"project_id": project.id} action = AddDefaultUsersToProjectAction({"domain_id": "default"}, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) fake_client = fake_clients.FakeManager() user = fake_client.find_user("admin", "default") roles = fake_client._get_roles_as_names(user, project) self.assertEqual(roles, ["admin"])
def test_add_default_users(self): """ Base case, adds admin user with admin role to project. NOTE(adriant): both the lists of users, and the roles to add come from test_settings. This test assumes the conf setting of: default_users = ['admin'] default_roles = ['admin'] """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) task = Task.objects.create(ip_address="0.0.0.0", keystone_user={'roles': ['admin']}) task.cache = {'project_id': project.id} action = AddDefaultUsersToProjectAction({'domain_id': 'default'}, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, True) action.post_approve() self.assertEqual(action.valid, True) fake_client = fake_clients.FakeManager() user = fake_client.find_user('admin', 'default') roles = fake_client._get_roles_as_names(user, project) self.assertEqual(roles, ['admin'])
def test_add_default_users_reapprove(self): """ Ensure nothing happens or changes during rerun of approve. """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) task = Task.objects.create(ip_address="0.0.0.0", keystone_user={'roles': ['admin']}) task.cache = {'project_id': project.id} action = AddDefaultUsersToProjectAction({'domain_id': 'default'}, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, True) action.post_approve() self.assertEqual(action.valid, True) fake_client = fake_clients.FakeManager() user = fake_client.find_user('admin', 'default') roles = fake_client._get_roles_as_names(user, project) self.assertEqual(roles, ['admin']) action.post_approve() self.assertEqual(action.valid, True) roles = fake_client._get_roles_as_names(user, project) self.assertEqual(roles, ['admin'])
def test_new_project_existing_project(self): """ Create a project that already exists. """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) task = Task.objects.create(ip_address="0.0.0.0", keystone_user={ 'roles': ['admin', 'project_mod'], 'project_id': 'test_project_id', 'project_domain_id': 'default', }) data = { 'domain_id': 'default', 'parent_id': None, 'email': '*****@*****.**', 'project_name': 'test_project', } action = NewProjectWithUserAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, False) action.post_approve() self.assertEqual(action.valid, False)
def test_new_project_invalid_domain_id(self): """ Create a project using an invalid domain """ setup_identity_cache() task = Task.objects.create(ip_address="0.0.0.0", keystone_user={ 'roles': ['admin', 'project_mod'], 'project_id': 'test_project_id', 'project_domain_id': 'default', }) data = { 'domain_id': 'not_default_id', 'parent_id': None, 'email': '*****@*****.**', 'project_name': 'test_project', } action = NewProjectWithUserAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, False) action.post_approve() self.assertEqual(action.valid, False)
def test_new_project_user_removed(self): """ Tests when the user is removed after the post approve step. """ setup_identity_cache() task = Task.objects.create(ip_address="0.0.0.0", keystone_user={}) data = { 'domain_id': 'default', 'parent_id': None, 'email': '*****@*****.**', 'project_name': 'test_project', } action = NewProjectWithUserAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, True) action.post_approve() self.assertEqual(action.valid, True) new_user = fake_clients.identity_cache['new_users'][0] self.assertEqual(new_user.name, '*****@*****.**') self.assertEqual(new_user.email, '*****@*****.**') fake_clients.identity_cache['users'] = {} token_data = {'password': '******'} action.submit(token_data) self.assertEqual(action.valid, False)
def test_new_project_sends_notification(self): """ Confirm that the email notification engine correctly acknowledges notifications it sends out. """ setup_identity_cache() url = "/v1/actions/CreateProject" data = {'project_name': "test_project", 'email': "*****@*****.**"} response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) headers = { 'project_name': "test_project", 'project_id': "test_project_id", 'roles': "admin,_member_", 'username': "******", 'user_id': "test_user_id", 'authenticated': True } new_task = Task.objects.all()[0] url = "/v1/tasks/" + new_task.uuid response = self.client.post(url, {'approved': True}, format='json', headers=headers) self.assertEqual(Notification.objects.count(), 1) self.assertEqual(len(mail.outbox), 3) notif = Notification.objects.all()[0] self.assertEqual(notif.task.uuid, new_task.uuid) self.assertTrue(notif.acknowledged)
def test_add_default_users_reapprove(self): """ Ensure nothing happens or changes during rerun of approve. """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) task = Task.objects.create(keystone_user={"roles": ["admin"]}) task.cache = {"project_id": project.id} action = AddDefaultUsersToProjectAction({"domain_id": "default"}, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) fake_client = fake_clients.FakeManager() user = fake_client.find_user("admin", "default") roles = fake_client._get_roles_as_names(user, project) self.assertEqual(roles, ["admin"]) action.approve() self.assertEqual(action.valid, True) roles = fake_client._get_roles_as_names(user, project) self.assertEqual(roles, ["admin"])
def test_set_quota_invalid_region(self): """ Attempts to set a quota on a non-existent region """ project = fake_clients.FakeProject(name="test_project", id="test_project_id") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) setup_identity_cache(projects=[project], users=[user]) headers = { "project_name": "test_project", "project_id": project.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": "user_id", "authenticated": True, } url = "/v1/openstack/quotas/" data = {"size": "small", "regions": ["RegionThree"]} response = self.client.post(url, data, headers=headers, format="json") self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_new_project_signup(self): """ Base case, no project, no user. Organisation, and primary is billing. Project and user created at post_approve step, user password at submit step. """ setup_identity_cache() task = Task.objects.create( ip_address="0.0.0.0", keystone_user={} ) task.cache = { 'project_name': 'test_project', 'partner_id': 1, 'primary_id': 2, 'billing_id': 2, } data = { 'domain_id': 'default', 'parent_id': None, 'email': '*****@*****.**', 'signup_type': 'organisation', } action = NewProjectSignUpAction(data, task=task, order=1) action.pre_approve() self.assertEquals(action.valid, True) action.post_approve() self.assertEquals(len(odoo_cache['projects']), 1) self.assertEquals(len(odoo_cache['project_rels']), 3) self.assertEquals(action.valid, True) self.assertEquals( fake_clients.identity_cache['new_projects'][0].name, 'test_project') token_data = {'password': '******'} action.submit(token_data) self.assertEquals(action.valid, True) new_project = fake_clients.identity_cache['new_projects'][0] new_user = fake_clients.identity_cache['new_users'][0] self.assertEquals(new_user.email, '*****@*****.**') fake_client = fake_clients.FakeManager() roles = fake_client._get_roles_as_names(new_user, new_project) self.assertEquals( sorted(roles), sorted(['_member_', 'project_admin', 'project_mod', 'heat_stack_owner']))
def test_new_project_email_not_username(self): """ Base case, no project, no user. Project and user created at approve step, user password at submit step. """ setup_identity_cache() task = Task.objects.create(keystone_user={}) data = { "domain_id": "default", "parent_id": None, "email": "*****@*****.**", "username": "******", "project_name": "test_project", } action = NewProjectWithUserAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) new_project = fake_clients.identity_cache["new_projects"][0] self.assertEqual(new_project.name, "test_project") new_user = fake_clients.identity_cache["new_users"][0] self.assertEqual(new_user.name, "test_user") self.assertEqual(new_user.email, "*****@*****.**") self.assertEqual( task.cache, { "project_id": new_project.id, "user_id": new_user.id, "user_state": "default", }, ) token_data = {"password": "******"} action.submit(token_data) self.assertEqual(action.valid, True) self.assertEqual(new_user.password, "123456") fake_client = fake_clients.FakeManager() roles = fake_client._get_roles_as_names(new_user, new_project) self.assertEqual( sorted(roles), sorted( ["member", "project_admin", "project_mod", "heat_stack_owner"]), )
def test_edit_user_roles_modified_settings_add(self): """ Tests that the role mappings do come from settings and a new role added there will be allowed. """ project = fake_clients.FakeProject(name="test_project") user = fake_clients.FakeUser(name="*****@*****.**", password="******", email="*****@*****.**") assignment = fake_clients.FakeRoleAssignment( scope={'project': { 'id': project.id }}, role_name="project_mod", user={'id': user.id}) setup_identity_cache(projects=[project], users=[user], role_assignments=[assignment]) new_role = fake_clients.FakeRole("new_role") fake_clients.identity_cache['roles'][new_role.id] = new_role task = Task.objects.create(ip_address="0.0.0.0", keystone_user={ 'roles': ['project_mod'], 'project_id': project.id, 'project_domain_id': 'default', }) data = { 'domain_id': 'default', 'user_id': user.id, 'project_id': project.id, 'roles': ['new_role'], 'inherited_roles': [], 'remove': False } action = EditUserRolesAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, True) action.post_approve() self.assertEqual(action.valid, True) token_data = {} action.submit(token_data) self.assertEqual(action.valid, True) fake_client = fake_clients.FakeManager() roles = fake_client._get_roles_as_names(user, project) self.assertEqual(roles, ['project_mod', 'new_role'])
def test_new_project_signup_existing(self): """ Existing project case, existing project, no user. Organisation, and primary is billing. Project and user created at post_approve step, user password at submit step. The only difference here to the default case is that we find/create a new unique project name and thus avoid the conflict entirely. """ project = fake_clients.FakeProject(name="test_project") setup_identity_cache(projects=[project]) task = Task.objects.create( ip_address="0.0.0.0", keystone_user={} ) task.cache = { 'project_name': 'test_project', 'partner_id': 1, 'primary_id': 2, 'billing_id': 2, } data = { 'domain_id': 'default', 'parent_id': None, 'email': '*****@*****.**', 'signup_type': 'organisation', } action = NewProjectSignUpAction(data, task=task, order=1) action.pre_approve() self.assertEquals(action.valid, True) action.post_approve() self.assertEquals(len(odoo_cache['projects']), 1) self.assertEquals(len(odoo_cache['project_rels']), 3) self.assertEquals(action.valid, True) self.assertEquals( len(fake_clients.identity_cache['new_projects']), 1) self.assertNotEquals( action.project_name, 'test_project') token_data = {'password': '******'} action.submit(token_data) self.assertEquals(action.valid, True) new_project = fake_clients.identity_cache['new_projects'][0] new_user = fake_clients.identity_cache['new_users'][0] self.assertEquals(new_user.email, '*****@*****.**') fake_client = fake_clients.FakeManager() roles = fake_client._get_roles_as_names(new_user, new_project) self.assertEquals( sorted(roles), sorted(['_member_', 'project_admin', 'project_mod', 'heat_stack_owner']))
def test_new_signup(self): """ Ensure the new signup workflow goes as expected. """ setup_identity_cache() url = "/v1/openstack/sign-up" signup_data = { 'signup_type': 'organisation', 'name': 'jim james', 'email': '*****@*****.**', 'phone': '123456', 'payment_method': 'invoice', 'toc_agreed': 'true', 'company_name': 'Jim-co', 'address_1': "a street", 'city': 'some city', 'postal_code': 'NW1', 'country': 'NZ', } response = self.client.post(url, signup_data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) headers = { 'project_name': "test_project", 'project_id': "test_project_id", 'roles': "admin,_member_", 'username': "******", 'user_id': "test_user_id", 'authenticated': True, } new_task = Task.objects.all()[0] url = "/v1/tasks/" + new_task.uuid data = {"approved": True} response = self.client.post(url, data, format='json', headers=headers) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data, {'notes': ['created token']} ) self.assertEquals(len(odoo_cache['partners']), 2) odooclient = get_odoo_client() search = [ ('is_company', '=', True), ('name', '=', signup_data['company_name']) ] partners = odooclient.partners.list(search) self.assertEquals(len(partners), 1) self.assertEquals(partners[0].name, signup_data['company_name']) search = [ ('is_company', '=', False), ('name', '=', signup_data['name']) ] partners = odooclient.partners.list(search) self.assertEquals(len(partners), 1) self.assertEquals(partners[0].name, signup_data['name']) search = [ ('is_company', '=', False), ('name', '=', DEFAULT_PHYSICAL_ADDRESS_CONTACT_NAME) ] partners = odooclient.partners.list(search) self.assertEquals(len(partners), 0) self.assertEquals(len(odoo_cache['projects']), 1) self.assertEquals(len(odoo_cache['project_rels']), 3) self.assertEquals(len(odoo_cache['credits']), 1) self.assertEquals( list(odoo_cache['credits'].values())[0]['current_balance'], 300.00) new_token = Token.objects.all()[0] url = "/v1/tokens/" + new_token.token data = {'password': '******'} response = self.client.post(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK)