コード例 #1
0
ファイル: factory.py プロジェクト: maedoc/tvb-framework
 def generate_users(nr_users, nr_projects):
     """
     The generate_users method will create a clean state db with
     :param nr_users: number of users to be generated (with random roles between
                             CLINICIAN and RESEARCHER and random validated state)
     :param nr_projects: maximum number of projects to be generated for each user
     """
     users = []
     
     for i in range(nr_users):
         coin_flip = random.randint(0, 1)
         role = 'CLINICIAN' if coin_flip == 1 else 'RESEARCHER'
         password = md5("test").hexdigest()
         new_user = model.User("gen" + str(i), password, "*****@*****.**", True, role)
         dao.store_entity(new_user)
         new_user = dao.get_user_by_name("gen" + str(i))
         ExtremeTestFactory.VALIDATION_DICT[new_user.id] = 0
         users.append(new_user)
         
     for i in range(nr_users):
         current_user = dao.get_user_by_name("gen" + str(i))
         projects_for_user = random.randint(0, nr_projects)
         for j in range(projects_for_user):         
             data = dict(name='GeneratedProject' + str(i) + '_' + str(j),
                         description='test_desc',
                         users=ExtremeTestFactory.get_users_ids(random.randint(0, nr_users - 3),
                                                                nr_users, current_user.id, users))
             ProjectService().store_project(current_user, True, None, **data)
             ExtremeTestFactory.VALIDATION_DICT[current_user.id] += 1 
コード例 #2
0
 def generate_users(nr_users, nr_projects):
     """
     The generate_users method will create a clean state db with
     :param nr_users: number of users to be generated (with random roles between
                             CLINICIAN and RESEARCHER and random validated state)
     :param nr_projects: maximum number of projects to be generated for each user
     """
     config.EVENTS_FOLDER = ''
     users = []
     
     for i in range(nr_users):
         coin_flip = random.randint(0, 1)
         role = 'CLINICIAN' if coin_flip == 1 else 'RESEARCHER'
         password = md5("test").hexdigest()
         new_user = model.User("gen" + str(i), password, "*****@*****.**", True, role)
         dao.store_entity(new_user)
         new_user = dao.get_user_by_name("gen" + str(i))
         ExtremeTestFactory.VALIDATION_DICT[new_user.id] = 0
         users.append(new_user)
         
     for i in range(nr_users):
         current_user = dao.get_user_by_name("gen" + str(i))
         projects_for_user = random.randint(0, nr_projects)
         for j in range(projects_for_user):         
             data = dict(name='GeneratedProject' + str(i) + '_' + str(j),
                         description='test_desc',
                         users=ExtremeTestFactory.get_users_ids(random.randint(0, nr_users - 3),
                                                                nr_users, current_user.id, users))
             ProjectService().store_project(current_user, True, None, **data)
             ExtremeTestFactory.VALIDATION_DICT[current_user.id] += 1 
コード例 #3
0
 def test_get_users_for_project(self):
     """
     Get all members of a project except the current user.
     """
     user_1 = model.User("test_user1", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_1)
     user_2 = model.User("test_user2", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_2)
     user_3 = model.User("test_user3", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_3)
     user_4 = model.User("test_user4", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_4)
     user_5 = model.User("test_user5", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_5)
     admin = dao.get_user_by_name("test_user1")
     member1 = dao.get_user_by_name("test_user2")
     member2 = dao.get_user_by_name("test_user5")
     data = dict(name="test_proj", description="test_desc", users=[member1.id, member2.id])
     project = ProjectService().store_project(admin, True, None, **data)
     all_users, members, pag = self.user_service.get_users_for_project(admin.username, project.id)
     self.assertEquals(len(members), 2, "More members than there should be.")
     self.assertEquals(len(all_users), 5, "Admin should not be viewed as member. "
                                          "Neither should users that were not part of the project's users list.")
     self.assertEqual(pag, 1, "Invalid total pages number.")
     for user in all_users:
         self.assertNotEqual(user.username, admin.username, "Admin is in members!")
コード例 #4
0
 def test_usermanagement_post_valid(self):
     """
     Create a valid post and check that user is created.
     """
     self.test_user.role = "ADMINISTRATOR"
     self.test_user = dao.store_entity(self.test_user)
     cherrypy.session[common.KEY_USER] = self.test_user
     TestFactory.create_user(username="******")
     TestFactory.create_user(username="******", validated=False)
     user_before_delete = dao.get_user_by_name("to_be_deleted")
     self.assertTrue(user_before_delete is not None)
     user_before_validation = dao.get_user_by_name("to_validate")
     self.assertFalse(user_before_validation.validated)
     data = {
         "delete_%i" % user_before_delete.id: True,
         "role_%i" % user_before_validation.id: "ADMINISTRATOR",
         "validate_%i" % user_before_validation.id: True
     }
     self.user_c.usermanagement(do_persist=True, **data)
     user_after_delete = dao.get_user_by_id(user_before_delete.id)
     self.assertTrue(user_after_delete is None, "User should be deleted.")
     user_after_validation = dao.get_user_by_id(user_before_validation.id)
     self.assertTrue(user_after_validation.validated,
                     "User should be validated now.")
     self.assertTrue(user_after_validation.role == "ADMINISTRATOR",
                     "Role has not changed.")
コード例 #5
0
    def test_get_users_for_project(self):
        """
        Get all members of a project except the current user.
        """
        user_ids = []
        for i in range(5):
            user = model_project.User("test_user" + str(i),
                                      "test_user_no" + str(i), "pass",
                                      "*****@*****.**")
            user = dao.store_entity(user)
            user_ids.append(user.id)
        admin = dao.get_user_by_name("test_user1")
        member1 = dao.get_user_by_name("test_user2")
        member2 = dao.get_user_by_name("test_user4")
        data = dict(name="test_proj",
                    description="test_desc",
                    users=[member1.id, member2.id])
        project = ProjectService().store_project(admin, True, None, **data)
        all_users, members, pag = self.user_service.get_users_for_project(
            admin.username, project.id)
        assert len(members) == 3, "More members than there should be."
        assert len(all_users) == 5
        assert pag == 1, "Invalid total pages number."

        admin_found_member = False
        for user in members:
            if user.username == admin.username:
                admin_found_member = True
        assert admin_found_member, "Admin is expected to be a project member"

        admin_found_editable = False
        for user in all_users:
            if user.username == admin.username:
                admin_found_editable = True
        assert not admin_found_editable, "Admin membership should not be editable"
コード例 #6
0
 def test_get_users_for_project(self):
     """
     Get all members of a project except the current user.
     """
     user_1 = model.User("test_user1", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_1)
     user_2 = model.User("test_user2", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_2)
     user_3 = model.User("test_user3", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_3)
     user_4 = model.User("test_user4", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_4)
     user_5 = model.User("test_user5", "test_pass", "*****@*****.**", False, "user")
     dao.store_entity(user_5)
     admin = dao.get_user_by_name("test_user1")
     member1 = dao.get_user_by_name("test_user2")
     member2 = dao.get_user_by_name("test_user5")
     data = dict(name="test_proj", description="test_desc", users=[member1.id, member2.id])
     project = ProjectService().store_project(admin, True, None, **data)
     all_users, members, pag = self.user_service.get_users_for_project(admin.username, project.id)
     assert len(members) == 2, "More members than there should be."
     assert len(all_users) == 5, "Admin should not be viewed as member. " \
                                 "Neither should users that were not part of the project's users list."
     assert pag == 1, "Invalid total pages number."
     for user in all_users:
         assert user.username != admin.username, "Admin is in members!"
コード例 #7
0
 def test_reset_password_happy_flow(self):
     """
     Test method for the reset password method. Happy flow.
     """
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     self.assertEqual(inserted_user.password, md5("test_password").hexdigest(), "Incorrect password")
     reset_pass_data = dict(username="******", email="*****@*****.**")
     self.user_service.reset_password(**reset_pass_data)
     inserted_user = dao.get_user_by_name("test_user")
     self.assertNotEqual(inserted_user.password, md5("test_password"), "Password not reset for some reason!")
コード例 #8
0
ファイル: user_service_test.py プロジェクト: yop0/tvb-root
 def test_reset_password_happy_flow(self):
     """
     Test method for the reset password method. Happy flow.
     """
     data = dict(username="******", display_name="test_name", password=hash_password("test_password"),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == hash_password("test_password"), "Incorrect password"
     reset_pass_data = dict(username="******", email="*****@*****.**")
     self.user_service.reset_password(**reset_pass_data)
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password != hash_password("test_password"), "Password not reset for some reason!"
コード例 #9
0
 def test_reset_password_happy_flow(self):
     """
     Test method for the reset password method. Happy flow.
     """
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == md5("test_password").hexdigest(), "Incorrect password"
     reset_pass_data = dict(username="******", email="*****@*****.**")
     self.user_service.reset_password(**reset_pass_data)
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password != md5("test_password"), "Password not reset for some reason!"
コード例 #10
0
ファイル: user_service_test.py プロジェクト: yop0/tvb-root
 def test_edit_user_happy_flow(self):
     """
     Test the method of editing a user.
     """
     data = dict(username="******", display_name="test_name", password=hash_password("test_password"),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == hash_password("test_password"), "Incorrect password"
     inserted_user.role = "new_role"
     inserted_user.validated = 1
     self.user_service.edit_user(inserted_user)
     changed_user = dao.get_user_by_name("test_user")
     assert changed_user.role == "new_role", "role unchanged"
     assert changed_user.validated == 1, "user not validated"
コード例 #11
0
 def test_edit_user_happy_flow(self):
     """
     Test the method of editing a user.
     """
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == md5("test_password").hexdigest(), "Incorrect password"
     inserted_user.role = "new_role"
     inserted_user.validated = 1
     self.user_service.edit_user(inserted_user)
     changed_user = dao.get_user_by_name("test_user")
     assert changed_user.role == "new_role", "role unchanged"
     assert changed_user.validated == 1, "user not validated"
コード例 #12
0
 def test_edit_user_happy_flow(self):
     """
     Test the method of editing a user.
     """
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     self.assertEqual(inserted_user.password, md5("test_password").hexdigest(), "Incorrect password")
     inserted_user.role = "new_role"
     inserted_user.validated = 1
     self.user_service.edit_user(inserted_user)
     changed_user = dao.get_user_by_name("test_user")
     self.assertEqual(changed_user.role, "new_role", "role unchanged")
     self.assertEqual(changed_user.validated, 1, "user not validated")
コード例 #13
0
 def validate_user(self, name='', user_id=None):
     """
     Service layer for editing a user and validating the account.
     """
     try:
         if user_id:
             user = dao.get_user_by_id(user_id)
         else:
             user = dao.get_user_by_name(name)
         if user is None or user.validated:
             self.logger.debug("UserName not found or already validated:" +
                               name)
             return False
         user.validated = True
         user = dao.store_entity(user)
         self.logger.debug("Sending validation email for userName="******" to address=" + user.email)
         email_sender.send(
             FROM_ADDRESS, user.email, SUBJECT_VALIDATE, "Hello " + name +
             TEXT_VALIDATED + TvbProfile.current.web.BASE_URL + "user/")
         self.logger.info("User:"******" was validated successfully" +
                          " and notification email sent!")
         return True
     except Exception as excep:
         self.logger.warning('Could not validate user:'******'WARNING : ' + str(excep))
         return False
コード例 #14
0
    def test_retrieve_projects_random(self):
        """
        Generate a large number of users/projects, and validate the results.
        """
        ExtremeTestFactory.generate_users(NR_USERS, MAX_PROJ_PER_USER)
        for i in range(NR_USERS):
            current_user = dao.get_user_by_name("gen" + str(i))
            expected_projects = ExtremeTestFactory.VALIDATION_DICT[
                current_user.id]
            if expected_projects % PROJECTS_PAGE_SIZE == 0:
                expected_pages = expected_projects / PROJECTS_PAGE_SIZE
                exp_proj_per_page = PROJECTS_PAGE_SIZE
            else:
                expected_pages = expected_projects // PROJECTS_PAGE_SIZE + 1
                exp_proj_per_page = expected_projects % PROJECTS_PAGE_SIZE
            if expected_projects == 0:
                expected_pages = 0
                exp_proj_per_page = 0
            projects, pages = self.project_service.retrieve_projects_for_user(
                current_user.id, expected_pages)
            assert len(projects) == exp_proj_per_page, "Projects not retrieved properly! Expected:" + \
                                                       str(exp_proj_per_page) + "but got:" + str(len(projects))
            assert pages == expected_pages, "Pages not retrieved properly!"

        for folder in os.listdir(TvbProfile.current.TVB_STORAGE):
            full_path = os.path.join(TvbProfile.current.TVB_STORAGE, folder)
            if os.path.isdir(full_path) and folder.startswith('Generated'):
                shutil.rmtree(full_path)
コード例 #15
0
    def test_retrieve_projects_random(self):
        """
        Generate a large number of users/projects, and validate the results.
        """
        ExtremeTestFactory.generate_users(NR_USERS, MAX_PROJ_PER_USER)
        for i in range(NR_USERS):
            current_user = dao.get_user_by_name("gen" + str(i))
            expected_projects = ExtremeTestFactory.VALIDATION_DICT[current_user.id]
            if expected_projects % PROJECTS_PAGE_SIZE == 0:
                expected_pages = expected_projects / PROJECTS_PAGE_SIZE
                exp_proj_per_page = PROJECTS_PAGE_SIZE
            else:
                expected_pages = expected_projects / PROJECTS_PAGE_SIZE + 1
                exp_proj_per_page = expected_projects % PROJECTS_PAGE_SIZE
            if expected_projects == 0:
                expected_pages = 0
                exp_proj_per_page = 0
            projects, pages = self.project_service.retrieve_projects_for_user(current_user.id, expected_pages)
            self.assertEqual(len(projects), exp_proj_per_page, "Projects not retrieved properly! Expected:" +
                             str(exp_proj_per_page) + "but got:" + str(len(projects)))
            self.assertEqual(pages, expected_pages, "Pages not retrieved properly!")

        for folder in os.listdir(TvbProfile.current.TVB_STORAGE):
            full_path = os.path.join(TvbProfile.current.TVB_STORAGE, folder)
            if os.path.isdir(full_path) and folder.startswith('Generated'): 
                shutil.rmtree(full_path)
コード例 #16
0
 def test_get_users_second_page(self):
     """
     Try to get the second page of users for a given project
     """
     for i in range(USERS_PAGE_SIZE + 3):
         exec 'user_' + str(i) + '= model.User("test_user' + str(
             i) + '", "test_pass", "*****@*****.**", False, "user")'
         exec "dao.store_entity(user_" + str(i) + ")"
     for i in range(USERS_PAGE_SIZE + 3):
         exec 'member' + str(i) + '=dao.get_user_by_name("test_user' + str(
             i) + '")'
     admin = dao.get_user_by_name("test_user1")
     data = dict(name='test_proj',
                 description='test_desc',
                 users=[
                     eval('member' + str(i) + '.id')
                     for i in range(USERS_PAGE_SIZE + 3)
                 ])
     project = ProjectService().store_project(admin, True, None, **data)
     page_users, all_users, pag = self.user_service.get_users_for_project(
         admin.username, project.id, 2)
     self.assertEqual(len(page_users),
                      (USERS_PAGE_SIZE + 3) % USERS_PAGE_SIZE)
     self.assertEqual(len(all_users), USERS_PAGE_SIZE + 3,
                      'Not all members returned')
     self.assertEqual(pag, 2, 'Invalid page number returned')
コード例 #17
0
 def test_create_user_happy_flow(self):
     """
     Standard flow for creating a user.
     """
     initial_user_count = dao.get_all_users()
     data = dict(username="******",
                 password=md5("test_password").hexdigest(),
                 email="*****@*****.**",
                 role="user",
                 comment="")
     self.user_service.create_user(**data)
     final_user_count = dao.get_all_users()
     self.assertEqual(len(initial_user_count),
                      len(final_user_count) - 1,
                      "User count was not increased after create.")
     inserted_user = dao.get_user_by_name("test_user")
     self.assertEqual(inserted_user.password,
                      md5("test_password").hexdigest(),
                      "Incorrect password")
     self.assertEqual(inserted_user.email, "*****@*****.**",
                      "The email inserted is not correct.")
     self.assertEqual(inserted_user.role, "user",
                      "The role inserted is not correct.")
     self.assertFalse(inserted_user.validated,
                      "User validation  is not correct.")
コード例 #18
0
    def test_get_users_second_page_del(self):
        """
        Try to get the second page of users for a given project where only one user on last page.
        Then delete that user.
        """
        for i in range(USERS_PAGE_SIZE + 1):
            exec 'user_' + str(i) + '= model.User("test_user' + str(i) + \
                 '", "test_pass", "*****@*****.**", False, "user")'
            exec "dao.store_entity(user_" + str(i) + ")"
        for i in range(USERS_PAGE_SIZE + 1):
            exec 'member' + str(i) + '=dao.get_user_by_name("test_user' + str(i) + '")'

        admin = dao.get_user_by_name("test_user1")
        data = dict(name='test_proj', description='test_desc',
                    users=[eval('member' + str(i) + '.id') for i in range(USERS_PAGE_SIZE + 1)])
        project = ProjectService().store_project(admin, True, None, **data)
        page_users, all_users, pag = self.user_service.get_users_for_project(admin.username, project.id, 2)
        self.assertEqual(len(page_users), 1, 'Paging not working properly')
        self.assertEqual(len(all_users), USERS_PAGE_SIZE + 1, 'Not all members returned')
        self.assertEqual(pag, 2, 'Invalid page number returned')
        self.user_service.delete_user(member2.id)
        page_users, all_users, pag = self.user_service.get_users_for_project(admin.username, project.id, 2)
        self.assertEqual(len(page_users), 0, 'Paging not working properly')
        self.assertEqual(len(all_users), USERS_PAGE_SIZE, 'Not all members returned')
        self.assertEqual(pag, 1, 'Invalid page number returned')
        page_users, all_users, pag = self.user_service.get_users_for_project(admin.username, project.id, 1)
        self.assertEqual(len(page_users), USERS_PAGE_SIZE, 'Paging not working properly')
        self.assertEqual(len(all_users), USERS_PAGE_SIZE, 'Not all members returned')
        self.assertEqual(pag, 1, 'Invalid page number returned')
コード例 #19
0
    def test_get_users_second_page_del(self):
        """
        Try to get the second page of users for a given project where only one user on last page.
        Then delete that user.
        """
        for i in range(USERS_PAGE_SIZE + 1):
            exec 'user_' + str(i) + '= model.User("test_user' + str(i) + \
                 '", "test_pass", "*****@*****.**", False, "user")'
            exec "dao.store_entity(user_" + str(i) + ")"
        for i in range(USERS_PAGE_SIZE + 1):
            exec 'member' + str(i) + '=dao.get_user_by_name("test_user' + str(i) + '")'

        admin = dao.get_user_by_name("test_user1")
        data = dict(name='test_proj', description='test_desc',
                    users=[eval('member' + str(i) + '.id') for i in range(USERS_PAGE_SIZE + 1)])
        project = ProjectService().store_project(admin, True, None, **data)
        page_users, all_users, pag = self.user_service.get_users_for_project(admin.username, project.id, 2)
        assert len(page_users) == 1, 'Paging not working properly'
        assert len(all_users) == USERS_PAGE_SIZE + 1, 'Not all members returned'
        assert pag == 2, 'Invalid page number returned'
        self.user_service.delete_user(member2.id)
        page_users, all_users, pag = self.user_service.get_users_for_project(admin.username, project.id, 2)
        assert len(page_users) == 0, 'Paging not working properly'
        assert len(all_users) == USERS_PAGE_SIZE, 'Not all members returned'
        assert pag == 1, 'Invalid page number returned'
        page_users, all_users, pag = self.user_service.get_users_for_project(admin.username, project.id, 1)
        assert len(page_users) == USERS_PAGE_SIZE, 'Paging not working properly'
        assert len(all_users) == USERS_PAGE_SIZE, 'Not all members returned'
        assert pag == 1, 'Invalid page number returned'
コード例 #20
0
 def test_validate_invalid(self):
     """
     Pass a valid user and test that it is actually validate.
     """
     unexisting = dao.get_user_by_name("should-not-exist")
     self.assertTrue(unexisting is None, "This user should not exist")
     self._expect_redirect('/tvb', self.user_c.validate, "should-not-exist")
     self.assertTrue(cherrypy.session[b_c.KEY_MESSAGE_TYPE] == b_c.TYPE_ERROR)   
コード例 #21
0
 def test_change_password_happy_flow(self):
     """
     Test method for the change password method. Happy flow.
     """
     inserted_user = self._prepare_user_for_change_pwd()
     self.user_service.edit_user(inserted_user, md5("test_password").hexdigest())
     changed_user = dao.get_user_by_name("test_user")
     assert changed_user.password == md5("new_test_password").hexdigest(), "The password did not change."
コード例 #22
0
 def test_validate_invalid(self):
     """
     Pass a valid user and test that it is actually validate.
     """
     unexisting = dao.get_user_by_name("should-not-exist")
     self.assertTrue(unexisting is None, "This user should not exist")
     self._expect_redirect('/tvb', self.user_c.validate, "should-not-exist")
     self.assertTrue(cherrypy.session[common.KEY_MESSAGE_TYPE] == common.TYPE_ERROR)
コード例 #23
0
ファイル: user_service_test.py プロジェクト: yop0/tvb-root
 def test_change_password_happy_flow(self):
     """
     Test method for the change password method. Happy flow.
     """
     inserted_user = self._prepare_user_for_change_pwd()
     self.user_service.edit_user(inserted_user, hash_password("test_password"))
     changed_user = dao.get_user_by_name("test_user")
     assert changed_user.password == hash_password("new_test_password"), "The password did not change."
コード例 #24
0
 def check_login(username, password):
     """
     Service layer to check if given UserName and Password are according to DB.
     """
     user = dao.get_user_by_name(username)
     if user is not None and user.password == hash_password(password) and user.validated:
         return user
     else:
         return None
コード例 #25
0
 def test_change_password_happy_flow(self):
     """
     Test method for the change password method. Happy flow.
     """
     inserted_user = self._prepare_user_for_change_pwd()
     self.user_service.edit_user(inserted_user, md5("test_password").hexdigest())
     changed_user = dao.get_user_by_name("test_user")
     self.assertEqual(changed_user.password, md5("new_test_password").hexdigest(),
                      "The password did not change.")
コード例 #26
0
 def check_login(username, password):
     """
     Service layer to check if given UserName and Password are according to DB.
     """
     user = dao.get_user_by_name(username)
     if user is not None and user.password == md5(password).hexdigest() and user.validated:
         return user
     else:
         return None
コード例 #27
0
 def test_change_password_wrong_old(self):
     """
     Test method for the change password method. Old password is wrong, should return false.
     """
     inserted_user = self._prepare_user_for_change_pwd()
     params = dict(edited_user=inserted_user, old_password=md5("wrong_old_pwd").hexdigest())
     self.assertRaises(UsernameException, self.user_service.edit_user, **params)
     user = dao.get_user_by_name("test_user")
     self.assertEqual(user.password, md5("test_password").hexdigest(),
                      "The password should have not been changed!")
コード例 #28
0
ファイル: user_service_test.py プロジェクト: yop0/tvb-root
 def test_change_password_wrong_old(self):
     """
     Test method for the change password method. Old password is wrong, should return false.
     """
     inserted_user = self._prepare_user_for_change_pwd()
     params = dict(edited_user=inserted_user, old_password=hash_password("wrong_old_pwd"))
     with pytest.raises(UsernameException):
         self.user_service.edit_user(**params)
     user = dao.get_user_by_name("test_user")
     assert user.password == hash_password("test_password"), "The password should have not been changed!"
コード例 #29
0
ファイル: user_service_test.py プロジェクト: yop0/tvb-root
 def _prepare_user_for_change_pwd(self):
     """Private method to prepare password change operation"""
     data = dict(username="******", display_name="test_name", password=hash_password("test_password"),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     self.user_service.validate_user("test_user")
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == hash_password("test_password"), "The password inserted is not correct."
     inserted_user.password = hash_password("new_test_password")
     return inserted_user
コード例 #30
0
 def check_login(username, password):
     """
     Service layer to check if given UserName and Password are according to DB.
     """
     user = dao.get_user_by_name(username)
     if user is not None and user.password == md5(
             password.encode('utf-8')).hexdigest() and user.validated:
         return user
     else:
         return None
コード例 #31
0
 def _prepare_user_for_change_pwd(self):
     """Private method to prepare password change operation"""
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     self.user_service.validate_user("test_user")
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == md5("test_password").hexdigest(), "The password inserted is not correct."
     inserted_user.password = md5('new_test_password').hexdigest()
     return inserted_user
コード例 #32
0
 def test_change_password_wrong_old(self):
     """
     Test method for the change password method. Old password is wrong, should return false.
     """
     inserted_user = self._prepare_user_for_change_pwd()
     params = dict(edited_user=inserted_user, old_password=md5("wrong_old_pwd").hexdigest())
     with pytest.raises(UsernameException):
         self.user_service.edit_user(**params)
     user = dao.get_user_by_name("test_user")
     assert user.password == md5("test_password").hexdigest(), "The password should have not been changed!"
コード例 #33
0
    def test_get_members_pages(self):
        """
        Create many users (more than one page of members.
        Create a project and asign all Users as members.
        Test that 2 pages or Project Members are retrieved.
        Now remove extra users, to have only one page of members for the project.
        """
        user_ids = []
        for i in range(MEMBERS_PAGE_SIZE + 3):
            user = model_project.User("test_user_no" + str(i),
                                      "test_user_no" + str(i), "pass",
                                      "*****@*****.**")
            user = dao.store_entity(user)
            user_ids.append(user.id)

        admin = dao.get_user_by_name("test_user_no1")
        data = dict(name='test_proj', description='test_desc', users=user_ids)
        project = ProjectService().store_project(admin, True, None, **data)

        page_users, all_users, pag = self.user_service.get_users_for_project(
            admin.username, project.id, 2)
        assert len(page_users) == (MEMBERS_PAGE_SIZE + 3) % MEMBERS_PAGE_SIZE
        assert len(
            all_users) == MEMBERS_PAGE_SIZE + 3, 'Not all members returned'
        assert pag == 2, 'Invalid page number returned'

        for i in range(3):
            user = dao.get_user_by_name("test_user_no" + str(i + 2))
            self.user_service.delete_user(user.id)

        page_users, all_users, pag = self.user_service.get_users_for_project(
            "test_user_no1", project.id, 2)
        assert len(page_users) == 0, 'Paging not working properly'
        assert len(all_users) == MEMBERS_PAGE_SIZE, 'Not all members returned'
        assert pag == 1, 'Invalid page number returned'

        page_users, all_users, pag = self.user_service.get_users_for_project(
            "test_user_no1", project.id, 1)
        assert len(
            page_users) == MEMBERS_PAGE_SIZE, 'Paging not working properly'
        assert len(all_users) == MEMBERS_PAGE_SIZE, 'Not all members returned'
        assert pag == 1, 'Invalid page number returned'
コード例 #34
0
 def _prepare_user_for_change_pwd(self):
     """Private method to prepare password change operation"""
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     self.user_service.validate_user("test_user")
     inserted_user = dao.get_user_by_name("test_user")
     self.assertEqual(inserted_user.password, md5("test_password").hexdigest(),
                      "The password inserted is not correct.")
     inserted_user.password = md5('new_test_password').hexdigest()
     return inserted_user
コード例 #35
0
 def test_reset_pass_wrong_email(self):
     """
     Test method for the reset password method. Email is not valid, 
     should raise exception
     """
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     self.assertEqual(inserted_user.password, md5("test_password").hexdigest(), "Incorrect password")
     reset_pass_data = dict(username="******", email="*****@*****.**")
     self.assertRaises(UsernameException, self.user_service.reset_password, **reset_pass_data)
コード例 #36
0
ファイル: conftest.py プロジェクト: bvalean/tvb-root
    def build(username='******', display_name='test_name', password='******',
              mail='*****@*****.**', validated=True, role='test'):
        """
        Create persisted User entity.
        :returns: User entity after persistence.
        """
        existing_user = dao.get_user_by_name(username)
        if existing_user is not None:
            return existing_user

        user = User(username, display_name, password, mail, validated, role)
        return dao.store_entity(user)
コード例 #37
0
 def test_usermanagement_post_valid(self):
     """
     Create a valid post and check that user is created.
     """
     self.test_user.role = "ADMINISTRATOR"
     self.test_user = dao.store_entity(self.test_user)
     cherrypy.session[common.KEY_USER] = self.test_user
     TestFactory.create_user(username="******")
     TestFactory.create_user(username="******", validated=False)
     user_before_delete = dao.get_user_by_name("to_be_deleted")
     self.assertTrue(user_before_delete is not None)
     user_before_validation = dao.get_user_by_name("to_validate")
     self.assertFalse(user_before_validation.validated)
     data = {"delete_%i" % user_before_delete.id: True,
             "role_%i" % user_before_validation.id: "ADMINISTRATOR",
             "validate_%i" % user_before_validation.id: True}
     self.user_c.usermanagement(do_persist=True, **data)
     user_after_delete = dao.get_user_by_id(user_before_delete.id)
     self.assertTrue(user_after_delete is None, "User should be deleted.")
     user_after_validation = dao.get_user_by_id(user_before_validation.id)
     self.assertTrue(user_after_validation.validated, "User should be validated now.")
     self.assertTrue(user_after_validation.role == "ADMINISTRATOR", "Role has not changed.")
コード例 #38
0
ファイル: user_service_test.py プロジェクト: yop0/tvb-root
 def test_reset_pass_wrong_email(self):
     """
     Test method for the reset password method. Email is not valid,
     should raise exception
     """
     data = dict(username="******", display_name="test_name", password=hash_password("test_password"),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == hash_password("test_password"), "Incorrect password"
     reset_pass_data = dict(username="******", email="*****@*****.**")
     with pytest.raises(UsernameException):
         self.user_service.reset_password(**reset_pass_data)
コード例 #39
0
 def test_validate_valid(self):
     """
     Pass a valid user and test that it is actually validate.
     """
     self.test_user.role = "ADMINISTRATOR"
     self.test_user = dao.store_entity(self.test_user)
     cherrypy.session[b_c.KEY_USER] = self.test_user
     TestFactory.create_user(username="******", validated=False)
     user_before_validation = dao.get_user_by_name("to_validate")
     self.assertFalse(user_before_validation.validated)
     self._expect_redirect('/tvb', self.user_c.validate, user_before_validation.username)
     user_after_validation = dao.get_user_by_id(user_before_validation.id)
     self.assertTrue(user_after_validation.validated, "User should be validated.")
     self.assertTrue(cherrypy.session[b_c.KEY_MESSAGE_TYPE] == b_c.TYPE_INFO)
コード例 #40
0
 def test_create_new_valid_post(self):
     """
     Test that a valid create new post will actually create a new user in database.
     """
     data = dict(username = "******",
                 password = "******",
                 password2 = "pass",
                 email = "*****@*****.**",
                 comment = "This is some dummy comment",
                 role = "CLINICIAN")
     cherrypy.request.method = "POST"
     self._expect_redirect('/user/usermanagement', self.user_c.create_new, **data)
     created_user = dao.get_user_by_name("registered_user")
     self.assertTrue(created_user is not None, "Should have a new user created.")
コード例 #41
0
 def test_register_post_valid(self):
     """
     Test with valid data and check user is created.
     """
     cherrypy.request.method = "POST"
     data = dict(username = "******",
                 password = "******",
                 password2 = "pass",
                 email = "*****@*****.**",
                 comment = "This is some dummy comment",
                 role = "CLINICIAN")
     self._expect_redirect('/user', self.user_c.register, **data)
     stored_user = dao.get_user_by_name('registered_user')
     self.assertTrue(stored_user is not None, "New user should be saved.")
コード例 #42
0
 def test_validate_valid(self):
     """
     Pass a valid user and test that it is actually validate.
     """
     self.test_user.role = "ADMINISTRATOR"
     self.test_user = dao.store_entity(self.test_user)
     cherrypy.session[common.KEY_USER] = self.test_user
     TestFactory.create_user(username="******", validated=False)
     user_before_validation = dao.get_user_by_name("to_validate")
     self.assertFalse(user_before_validation.validated)
     self._expect_redirect('/tvb', self.user_c.validate, user_before_validation.username)
     user_after_validation = dao.get_user_by_id(user_before_validation.id)
     self.assertTrue(user_after_validation.validated, "User should be validated.")
     self.assertTrue(cherrypy.session[common.KEY_MESSAGE_TYPE] == common.TYPE_INFO)
コード例 #43
0
 def test_create_new_valid_post(self):
     """
     Test that a valid create new post will actually create a new user in database.
     """
     data = dict(username="******",
                 password="******",
                 password2="pass",
                 email="*****@*****.**",
                 comment="This is some dummy comment",
                 role="CLINICIAN")
     cherrypy.request.method = "POST"
     self._expect_redirect('/user/usermanagement', self.user_c.create_new, **data)
     created_user = dao.get_user_by_name("registered_user")
     self.assertTrue(created_user is not None, "Should have a new user created.")
コード例 #44
0
 def test_register_post_valid(self):
     """
     Test with valid data and check user is created.
     """
     cherrypy.request.method = "POST"
     data = dict(username="******",
                 password="******",
                 password2="pass",
                 email="*****@*****.**",
                 comment="This is some dummy comment",
                 role="CLINICIAN")
     self._expect_redirect('/user', self.user_c.register, **data)
     stored_user = dao.get_user_by_name('registered_user')
     self.assertTrue(stored_user is not None, "New user should be saved.")
コード例 #45
0
ファイル: user_service_test.py プロジェクト: yop0/tvb-root
 def test_create_user_happy_flow(self):
     """
     Standard flow for creating a user.
     """
     initial_user_count = dao.get_all_users()
     data = dict(username="******", display_name="test_name", password=hash_password("test_password"),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     final_user_count = dao.get_all_users()
     assert len(initial_user_count) == len(final_user_count) - 1, "User count was not increased after create."
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == hash_password("test_password"), "Incorrect password"
     assert inserted_user.email == "*****@*****.**", "The email inserted is not correct."
     assert inserted_user.role == "user", "The role inserted is not correct."
     assert not inserted_user.validated, "User validation  is not correct."
コード例 #46
0
 def test_create_user_happy_flow(self):
     """
     Standard flow for creating a user.
     """
     initial_user_count = dao.get_all_users()
     data = dict(username="******", password=md5("test_password").hexdigest(),
                 email="*****@*****.**", role="user", comment="")
     self.user_service.create_user(**data)
     final_user_count = dao.get_all_users()
     assert len(initial_user_count) == len(final_user_count) - 1, "User count was not increased after create."
     inserted_user = dao.get_user_by_name("test_user")
     assert inserted_user.password == md5("test_password").hexdigest(), "Incorrect password"
     assert inserted_user.email == "*****@*****.**", "The email inserted is not correct."
     assert inserted_user.role == "user", "The role inserted is not correct."
     assert not inserted_user.validated, "User validation  is not correct."
コード例 #47
0
 def test_get_users_second_page(self):
     """
     Try to get the second page of users for a given project
     """
     for i in range(USERS_PAGE_SIZE + 3):
         exec 'user_' + str(i) + '= model.User("test_user' + str(
             i) + '", "test_pass", "*****@*****.**", False, "user")'
         exec "dao.store_entity(user_" + str(i) + ")"
     for i in range(USERS_PAGE_SIZE + 3):
         exec 'member' + str(i) + '=dao.get_user_by_name("test_user' + str(i) + '")'
     admin = dao.get_user_by_name("test_user1")
     data = dict(name='test_proj', description='test_desc',
                 users=[eval('member' + str(i) + '.id') for i in range(USERS_PAGE_SIZE + 3)])
     project = ProjectService().store_project(admin, True, None, **data)
     page_users, all_users, pag = self.user_service.get_users_for_project(admin.username, project.id, 2)
     assert len(page_users) == (USERS_PAGE_SIZE + 3) % USERS_PAGE_SIZE
     assert len(all_users) == USERS_PAGE_SIZE + 3, 'Not all members returned'
     assert pag == 2, 'Invalid page number returned'
コード例 #48
0
 def validate_user(self, name='', user_id=None):
     """
     Service layer for editing a user and validating the account.
     """
     try:
         if user_id:
             user = dao.get_user_by_id(user_id)
         else:
             user = dao.get_user_by_name(name)
         if user is None or user.validated:
             self.logger.debug("UserName not found or already validated:" + name)
             return False
         user.validated = True
         user = dao.store_entity(user)
         self.logger.debug("Sending validation email for userName="******" to address=" + user.email)
         email_sender.send(FROM_ADDRESS, user.email, SUBJECT_VALIDATE,
                           "Hello " + name + TEXT_VALIDATED + TvbProfile.current.web.BASE_URL + "user/")
         self.logger.info("User:"******" was validated successfully" + " and notification email sent!")
         return True
     except Exception, excep:
         self.logger.warning('Could not validate user:'******'WARNING : ' + str(excep))
         return False