def test_get_required_fields_with_defaults(self): test_org = Organisation(name='testorg', created_by='test') expected_org_defaults = { 'services': {}, 'type': 'organisation', 'state': 'pending', 'star_rating': 0, 'repositories': {} } returned_defaults = test_org.get_required_fields_with_defaults() assert expected_org_defaults == returned_defaults
def test_get_repository_no_service(self): organisation = Organisation(id="org1", type="organisation", name="organisation") with patch.object(Repository, "get_parent", return_value=make_future(organisation)): with patch.object(Service, "get", side_effect=couch.NotFound( HTTPError(404, 'Not Found'))) 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": "organisation" }, "name": "repository", "created_by": "user1", "state": "approved", "service": { "id": "serv1" }, "id": "repo1" }
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'
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': {}}
class TestOrganisation(): organisation = Organisation(id='org0') @pytest.mark.parametrize("role,expected", sys_role) 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
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_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_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_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
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_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_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)
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_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
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
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
def test_get_repository(self): organisation = Organisation(id="org1", type="organisation", name="organisation") service = Service(id="serv1", type="service", name="service", organisation_id="org2", location="https://example.com") with patch.object(Repository, "get_parent", return_value=make_future(organisation)): 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": "organisation" }, "name": "repository", "created_by": "user1", "state": "approved", "service": { "id": "serv1", "name": "service", "organisation_id": "org2", "location": "https://example.com" }, "id": "repo1" }
ADMINS = [ '*****@*****.**', '*****@*****.**', ] ADMIN = User(_id='admin1', name='admin user', email='*****@*****.**') USER = User( first_name='test first', last_name='test last', verification_hash='testhash', password=User.hash_password('password0'), has_agreed_to_terms=True, email='*****@*****.**', _id='test id' ) ORGANISATION = Organisation( _id='org1', name='test organisation' ) REPOSITORY = Repository( id='repo1', organisation_id=ORGANISATION.id, name='test repo' ) def setup_module(): admins_patch = patch('accounts.models.email.views.admin_emails.values', return_value=make_future(ADMINS)) admins_patch.start() def teardown_module():