Exemple #1
0
    def test_other_user_role(self):
        user_to_update = User(password='******', id='uid2')
        user_doing_update = User(password='******', id='uid')

        result = yield user_to_update.can_update(user_doing_update,
                                                 first_name='TestName')
        assert result == (False, set([]))
Exemple #2
0
    def test_sys_admin(self):
        user_to_update = User(password='******', id='uid2')
        user_doing_update = User(password='******',
                                 role='administrator',
                                 id='uid')

        result = yield user_to_update.can_update(user_doing_update,
                                                 first_name='TestName')
        assert result == (True, set([]))
Exemple #3
0
 def test_is_deactivated(self):
     user = User(password='******',
                 role='administrator',
                 state='deactivated',
                 id='uid')
     result = user.is_admin()
     assert result is False
Exemple #4
0
 def test_can_approve(self, role, expected):
     u = deepcopy(USER)
     u['role'] = role
     user = User(**u)
     func = partial(self.organisation.can_approve, user)
     result = IOLoop.instance().run_sync(func)
     assert result == expected
Exemple #5
0
 def test_can_approve_admin_joins(self, org_info, expected):
     u = deepcopy(USER)
     u['organisations']['org0'] = org_info
     user = User(**u)
     func = partial(self.user_org.can_approve, user)
     result = IOLoop.instance().run_sync(func)
     assert result == expected
Exemple #6
0
 def test_can_approve_no_org(self, org_info, expected):
     u = deepcopy(USER)
     u['role'] = org_info
     user = User(**u)
     func = partial(self.user_org.can_approve, user)
     result = IOLoop.instance().run_sync(func)
     assert result == expected
Exemple #7
0
    def test_current_user_role(self):
        user = User(password='******', id='uid')

        result = yield user.can_update(user,
                                       first_name='TestName',
                                       role='administrator')
        assert result == (False, {'role'})
Exemple #8
0
def test_internal_fields_not_returned(user):
    u = User(**user)
    result = u.clean()

    assert '_id' not in result
    assert 'password' not in result
    assert 'verification_hash' not in result
Exemple #9
0
    def test_get_repository_no_parent(self):
        service = Service(id="serv1",
                          type="service",
                          name="service",
                          organisation_id="org2",
                          location="https://example.com")

        with patch.object(Repository,
                          "get_parent",
                          side_effect=couch.NotFound(
                              HTTPError(404, 'Not Found'))):
            with patch.object(
                    Service, "get",
                    return_value=make_future(service)) as get_service:
                repo = Repository(**self.REPOSITORY)
                user = User(**self.USER)
                result = yield repo.with_relations(user)

                get_service.assert_called_with('serv1')

                assert result == {
                    "organisation": {
                        "id": "org1"
                    },
                    "name": "repository",
                    "created_by": "user1",
                    "state": "approved",
                    "service": {
                        "id": "serv1",
                        "name": "service",
                        "organisation_id": "org2",
                        "location": "https://example.com"
                    },
                    "id": "repo1"
                }
Exemple #10
0
 def test_can_approve_non_external_provided(self, role, expected):
     service = Service(id='serv0', service_type="external")
     u = deepcopy(USER)
     u['role'] = role
     user = User(**u)
     func = partial(service.can_approve, user, service_type='repository')
     result = IOLoop.instance().run_sync(func)
     assert result == expected
Exemple #11
0
 def test_can_approve_service_provided(self):
     with patch.object(Service,
                       'get',
                       return_value=make_future(
                           self.service)) as mock_response:
         user = User(**USER)
         func = partial(self.repo.can_approve, user, service_id='serv1')
         IOLoop.instance().run_sync(func)
         mock_response.assert_called_once_with('serv1')
Exemple #12
0
 def test_can_approve_no_service(self):
     with patch.object(Service,
                       'get',
                       side_effect=couch.NotFound(
                           HTTPError(404, 'Not Found'))):
         user = User(**USER)
         func = partial(self.repo.can_approve, user)
         result = IOLoop.instance().run_sync(func)
         assert result is False
Exemple #13
0
 def test_can_approve_external_provided(self, role, expected):
     service = Service(id='serv0', service_type="repository")
     u = deepcopy(USER)
     u['role'] = role
     user = User(**u)
     func = partial(service.can_approve, user, service_type='external')
     result = IOLoop.instance().run_sync(func)
     # External services should always be approvable
     assert result is True
Exemple #14
0
    def test_change_password(self):
        user = User(password=User.hash_password('password1'))
        assert user.verify_password('password1')

        with patch.object(User, '_save', return_value=make_future()):
            yield user.change_password('password1', 'password2')

            assert user.verify_password('password2')
            assert User._save.call_count == 1
Exemple #15
0
 def test_get_required_fields_with_defaults(self):
     test_user = User(password='******', id='uid')
     expected_org_defaults = {
         'state': 'approved',
         'role': 'user',
         'type': 'user',
         'organisations': {}
     }
     returned_defaults = test_user.get_required_fields_with_defaults()
     assert expected_org_defaults == returned_defaults
 def test_create_organisation(self):
     user = User()
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         org = yield Organisation.create(user,
                                         name='testorg',
                                         created_by='testuser')
         assert org.name == 'testorg'
         assert org.created_by == 'testuser'
Exemple #17
0
 def test_can_approve_no_org(self, role, expected):
     with patch.object(Service,
                       'get',
                       return_value=make_future(self.service)):
         u = deepcopy(USER)
         u['role'] = role
         user = User(**u)
         func = partial(self.repo.can_approve, user)
         result = IOLoop.instance().run_sync(func)
         assert result == expected
Exemple #18
0
 def test_can_approve_srv_admin_joins(self, org_info, expected):
     with patch.object(Service,
                       'get',
                       return_value=make_future(self.service)):
         u = deepcopy(USER)
         u['organisations']['org1'] = org_info
         user = User(**u)
         func = partial(self.repo.can_approve, user)
         result = IOLoop.instance().run_sync(func)
         assert result is False
 def test_create_org_with_reference_links_empty_links(self):
     reference_links = {'links': {}}
     user = User()
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         org = yield Organisation.create(user,
                                         name='testorg',
                                         created_by='testuser',
                                         reference_links=reference_links)
         validate_schema(org)
         assert org.reference_links == {'links': {}}
 def test_get_organisation_defaults(self):
     user = User(password='******', id='uid')
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         org = yield Organisation.create(user,
                                         name='testorg',
                                         created_by='testuser')
         assert org.repositories == {}
         assert org.services == {}
         assert org.state.name == 'pending'
         assert org.type == 'organisation'
         assert org.star_rating == 0
 def test_create_org_with_redirect_id_type(self):
     reference_links = TEST_REFERENCE_LINKS['valid']
     user = User()
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         org = yield Organisation.create(user,
                                         name='testorg',
                                         created_by='testuser',
                                         reference_links=reference_links)
         validate_schema(org)
         assert org.reference_links['redirect_id_type'] == 'id1'
         assert org.reference_links['links']['id1'] == 'https://id1.com'
         assert org.reference_links['links']['id2'] == 'https://id2.com'
 def test_create_org_with_invalid_reference_url(self):
     user = User()
     reference_links = TEST_REFERENCE_LINKS['invalid_url']
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         with pytest.raises(MultipleInvalid) as exc:
             org = yield Organisation.create(
                 user,
                 name='testorg',
                 created_by='testuser',
                 reference_links=reference_links)
             validate_schema(org)
         assert exc.value.error_message == 'Missing URL scheme'
 def test_create_org_with_reference_links_with_extra_keys(self):
     user = User()
     reference_links = TEST_REFERENCE_LINKS['extra_keys']
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         with pytest.raises(MultipleInvalid) as exc:
             org = yield Organisation.create(
                 user,
                 name='testorg',
                 created_by='testuser',
                 reference_links=reference_links)
             validate_schema(org)
         assert exc.value.error_message == 'Key extra1 is not allowed'
 def test_create_organisation_as_admin(self):
     user = User(password='******', role='administrator', id='uid')
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         with patch.object(Service,
                           'create',
                           return_value=make_future(Service())):
             org = yield Organisation.create(user,
                                             name='testorg',
                                             created_by='testuser',
                                             id='testorgid')
             assert org.name == 'testorg'
             assert org.created_by == 'testuser'
             assert org.state.name == 'approved'
 def test_create_org_with_non_existent_redirect_id_type(self):
     user = User()
     reference_links = TEST_REFERENCE_LINKS['missing_links']
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         with pytest.raises(MultipleInvalid) as exc:
             org = yield Organisation.create(
                 user,
                 name='testorg',
                 created_by='testuser',
                 reference_links=reference_links)
             validate_schema(org)
         msg = 'Redirect ID type must point to one of the links\' ID types'
         assert exc.value.error_message == msg
Exemple #26
0
    def test_create_user(self, db_client):
        user = yield User.create(User(),
                                 'password',
                                 email='*****@*****.**',
                                 first_name='test',
                                 last_name='user',
                                 has_agreed_to_terms=True)

        assert user.first_name == 'test'
        assert user.last_name == 'user'
        assert user.password != 'password'
        assert user.verify_password('password')
        assert user.state == State.approved
        assert user.verification_hash

        assert db_client().save_doc.call_count == 1
 def test_update_redirect_id_type(self):
     orgs = {'testorgid': {'state': 'approved', 'role': 'administrator'}}
     user = User(password='******', id='testuserid', organisations=orgs)
     reference_links = TEST_REFERENCE_LINKS['valid']
     updated_reference_links = TEST_REFERENCE_LINKS['valid2']
     with patch.object(Organisation,
                       '_save',
                       return_value=make_future(None)):
         org = yield Organisation.create(user,
                                         _id='testorgid',
                                         name='testorg',
                                         created_by='testuser',
                                         reference_links=reference_links)
         validate_schema(org)
         yield org.update(user, reference_links=updated_reference_links)
         validate_schema(org)
Exemple #28
0
def test_send_verification_email_without_optional_user_params(send_email, options):
    options.url_services_ui = 'https://example.com'

    user = User(
        verification_hash=USER.verification_hash,
        email=USER.email,
        password=USER.password,
        _id='test id',
        has_agreed_to_terms=USER.has_agreed_to_terms
    )
    subject = 'Please verify your email address'

    yield email.send_verification_email(user)

    assert (send_email.call_count==1)
    assert (send_email.call_args_list[0][0][0]=='*****@*****.**')
    assert (send_email.call_args_list[0][0][1]== subject)
    def test_update_reference_links_with_extra_keys(self):
        orgs = {'testorgid': {'state': 'approved', 'role': 'administrator'}}
        user = User(password='******', id='testuserid', organisations=orgs)
        reference_links = TEST_REFERENCE_LINKS['valid']
        updated_reference_links = TEST_REFERENCE_LINKS['extra_keys']
        with patch.object(Organisation,
                          '_save',
                          return_value=make_future(None)):
            org = yield Organisation.create(user,
                                            _id='testorgid',
                                            name='testorg',
                                            created_by='testuser',
                                            reference_links=reference_links)
            validate_schema(org)

            with pytest.raises(MultipleInvalid) as exc:
                yield org.update(user, reference_links=updated_reference_links)
                validate_schema(org)
            assert exc.value.error_message == 'Key extra1 is not allowed'
    def test_update_non_existent_redirect_id_type(self):
        orgs = {'testorgid': {'state': 'approved', 'role': 'administrator'}}
        user = User(password='******', id='testuserid', organisations=orgs)
        reference_links = TEST_REFERENCE_LINKS['valid']
        updated_reference_links = TEST_REFERENCE_LINKS[
            'missing_id_type_in_links']
        with patch.object(Organisation,
                          '_save',
                          return_value=make_future(None)):
            org = yield Organisation.create(user,
                                            _id='testorgid',
                                            name='testorg',
                                            created_by='testuser',
                                            reference_links=reference_links)
            validate_schema(org)

            with pytest.raises(MultipleInvalid) as exc:
                yield org.update(user, reference_links=updated_reference_links)
                validate_schema(org)
            msg = 'Redirect ID type must point to one of the links\' ID types'
            assert exc.value.error_message == msg