Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #4
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)
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #11
0
    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)
Exemple #13
0
    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)
Exemple #15
0
    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)
Exemple #16
0
    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")
Exemple #17
0
    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)
Exemple #26
0
    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"])
Exemple #28
0
    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']))
Exemple #30
0
    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"]),
        )
Exemple #31
0
    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)