def test_with_valid_organization(self): Ownable, OwnableForm = self.factory() user = UserFactory() member = Member(user=user, role='editor') org = OrganizationFactory(members=[member]) login_user(user) form = OwnableForm(MultiDict({ 'organization': str(org.id) })) self.assertEqual(form.owner.data, user) self.assertEqual(form.organization.data, org) form.validate() self.assertEqual(form.errors, {}) self.assertIsNone(form.owner.data) self.assertEqual(form.organization.data, org) ownable = Ownable() form.populate_obj(ownable) self.assertIsNone(ownable.owner) self.assertEqual(ownable.organization, org)
def test_org_admin_can_accept_transfer(self): owner = UserFactory() admin = UserFactory() org = OrganizationFactory(members=[Member(user=admin, role='admin')]) subject = VisibleDatasetFactory(owner=owner) transfer = TransferFactory(owner=owner, recipient=org, subject=subject) owner.reload() # Needs updated metrics self.assertEqual(owner.metrics['datasets'], 1) org.reload() # Needs updated metrics self.assertEqual(org.metrics['datasets'], 0) admin.reload() # Needs updated metrics self.assertEqual(admin.metrics['datasets'], 0) login_user(admin) transfer = accept_transfer(transfer) self.assertEqual(transfer.status, 'accepted') subject.reload() self.assertEqual(subject.organization, org) self.assertIsNone(subject.owner) org.reload() self.assertEqual(org.metrics['datasets'], 1) admin.reload() self.assertEqual(admin.metrics['datasets'], 0) owner.reload() self.assertEqual(owner.metrics['datasets'], 0)
def test_recipient_user_can_accept_transfer(self): owner = UserFactory() recipient = UserFactory() subject = VisibleDatasetFactory(owner=owner) transfer = TransferFactory(owner=owner, recipient=recipient, subject=subject) owner.reload() # Needs updated metrics assert owner.metrics['datasets'] == 1 recipient.reload() # Needs updated metrics assert recipient.metrics['datasets'] == 0 login_user(recipient) transfer = accept_transfer(transfer) assert transfer.status == 'accepted' subject.reload() assert subject.owner == recipient recipient.reload() assert recipient.metrics['datasets'] == 1 owner.reload() assert owner.metrics['datasets'] == 0
def check_credentials(): try: with require_oauth.acquire() as token: login_user(token.user) return True except (Unauthorized, AuthlibFlaskException): return False
def test_recipient_user_can_accept_transfer(self): owner = UserFactory() recipient = UserFactory() subject = VisibleDatasetFactory(owner=owner) transfer = TransferFactory(owner=owner, recipient=recipient, subject=subject) owner.reload() # Needs updated metrics self.assertEqual(owner.metrics['datasets'], 1) recipient.reload() # Needs updated metrics self.assertEqual(recipient.metrics['datasets'], 0) login_user(recipient) transfer = accept_transfer(transfer) self.assertEqual(transfer.status, 'accepted') subject.reload() self.assertEqual(subject.owner, recipient) recipient.reload() self.assertEqual(recipient.metrics['datasets'], 1) owner.reload() self.assertEqual(owner.metrics['datasets'], 0)
def test_org_admin_can_accept_transfer(self): owner = UserFactory() admin = UserFactory() org = OrganizationFactory(members=[Member(user=admin, role='admin')]) subject = VisibleDatasetFactory(owner=owner) transfer = TransferFactory(owner=owner, recipient=org, subject=subject) owner.reload() # Needs updated metrics assert owner.metrics['datasets'] == 1 org.reload() # Needs updated metrics assert org.metrics['datasets'] == 0 admin.reload() # Needs updated metrics assert admin.metrics['datasets'] == 0 login_user(admin) transfer = accept_transfer(transfer) assert transfer.status == 'accepted' subject.reload() assert subject.organization == org assert subject.owner is None org.reload() assert org.metrics['datasets'] == 1 admin.reload() assert admin.metrics['datasets'] == 0 owner.reload() assert owner.metrics['datasets'] == 0
def test_request_transfer_owner_to_user(self): user = UserFactory() dataset = VisibleDatasetFactory(owner=user) recipient = UserFactory() comment = faker.sentence() login_user(user) self.assert_transfer_started(dataset, user, recipient, comment)
def test_request_transfer_user_to_organization(self): user = UserFactory() dataset = DatasetFactory(owner=user) recipient = OrganizationFactory() comment = faker.sentence() login_user(user) self.assert_transfer_started(dataset, user, recipient, comment)
def test_request_transfer_to_self(self): user = UserFactory() dataset = DatasetFactory(owner=user) comment = faker.sentence() login_user(user) with self.assertRaises(ValueError): self.assert_transfer_started(dataset, user, user, comment)
def test_request_transfer_not_authorized_not_owner(self): user = UserFactory() dataset = DatasetFactory(owner=UserFactory()) recipient = UserFactory() comment = faker.sentence() login_user(user) with self.assertRaises(PermissionDenied): request_transfer(dataset, recipient, comment)
def test_initial_value(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) ownable = Ownable(owner=user) form = OwnableForm(None, obj=ownable) self.assertEqual(form.owner.data, user)
def test_org_editor_cant_accept_transfer(self): owner = UserFactory() editor = UserFactory() org = OrganizationFactory(members=[Member(user=editor, role='editor')]) subject = VisibleDatasetFactory(organization=org) transfer = TransferFactory(owner=owner, recipient=org, subject=subject) login_user(editor) with pytest.raises(PermissionDenied): accept_transfer(transfer)
def test_request_transfer_organization_to_user(self): user = UserFactory() member = Member(user=user, role='admin') org = OrganizationFactory(members=[member]) dataset = DatasetFactory(owner=user, organization=org) recipient = UserFactory() comment = faker.sentence() login_user(user) self.assert_transfer_started(dataset, org, recipient, comment)
def test_request_transfer_to_same_organization(self): user = UserFactory() member = Member(user=user, role='admin') org = OrganizationFactory(members=[member]) dataset = DatasetFactory(owner=user, organization=org) comment = faker.sentence() login_user(user) with self.assertRaises(ValueError): self.assert_transfer_started(dataset, org, org, comment)
def test_request_transfer_not_authorized_not_admin(self): user = UserFactory() member = Member(user=user, role='editor') org = OrganizationFactory(members=[member]) dataset = DatasetFactory(owner=user, organization=org) recipient = UserFactory() comment = faker.sentence() login_user(user) with self.assertRaises(PermissionDenied): request_transfer(dataset, recipient, comment)
def test_with_initial_organization_and_user_logged(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory() ownable = Ownable(organization=org) login_user(user) form = OwnableForm(None, obj=ownable) self.assertIsNone(form.owner.data) self.assertEqual(form.organization.data, org)
def test_with_user_not_found(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm(MultiDict({'owner': str(ObjectId())})) form.validate() self.assertIn('owner', form.errors) self.assertEqual(len(form.errors['owner']), 1)
def test_with_invalid_data(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm(MultiDict({'owner': str('wrongwith12c')})) form.validate() self.assertIn('owner', form.errors) self.assertEqual(len(form.errors['owner']), 1)
def test_with_initial_organization_and_user_logged(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory() ownable = Ownable(organization=org) login_user(user) form = OwnableForm(None, ownable) self.assertIsNone(form.owner.data) self.assertEqual(form.organization.data, org)
def test_empty_values(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm() self.assertEqual(form.owner.data, user) ownable = Ownable() form.populate_obj(ownable) self.assertEqual(ownable.owner, user)
def test_with_invalid_data(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm(MultiDict({ 'owner': str('wrongwith12c') })) form.validate() self.assertIn('owner', form.errors) self.assertEqual(len(form.errors['owner']), 1)
def test_class_shortcut(self): '''It should emit a signal on new activity''' self.emitted = False self.login() with self.app.app_context(): login_user(self.user) with FakeActivity.on_new.connected_to(self.check_emitted): FakeActivity.emit(self.fake) self.assertTrue(self.emitted) self.assertEqual(Activity.objects(related_to=self.fake).count(), 1) self.assertEqual(Activity.objects(actor=self.user).count(), 1)
def test_with_user_not_found(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm(MultiDict({ 'owner': str(ObjectId()) })) form.validate() self.assertIn('owner', form.errors) self.assertEqual(len(form.errors['owner']), 1)
def test_add_badge_with_logged_user(self): '''It should track the user that add a badge''' user = UserFactory() fake = Fake.objects.create() login_user(user) result = fake.add_badge(TEST) self.assertEqual(len(fake.badges), 1) badge = fake.badges[0] self.assertEqual(result, badge) self.assertEqual(badge.kind, TEST) self.assertIsNotNone(badge.created) self.assertEqual(badge.created_by, user)
def test_with_other_user(self): Ownable, OwnableForm = self.factory() user = UserFactory() other = UserFactory() login_user(user) form = OwnableForm(MultiDict({'owner': str(other.id)})) self.assertEqual(form.owner.data, other) form.validate() self.assertIn('owner', form.errors) self.assertEqual(len(form.errors['owner']), 1)
def test_not_member(self): Ownable, OwnableForm = self.factory() member = Member(user=UserFactory(), role='editor') org = OrganizationFactory(members=[member]) login_user(UserFactory()) form = OwnableForm(MultiDict({'organization': str(org.id)})) self.assertEqual(form.organization.data, org) self.assertFalse(form.validate()) self.assertIn('organization', form.errors) self.assertEqual(len(form.errors['organization']), 1)
def test_empty_values_logged(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm() self.assertEqual(form.owner.data, user) self.assertIsNone(form.organization.data) ownable = Ownable() form.populate_obj(ownable) self.assertEqual(ownable.owner, user) self.assertIsNone(ownable.organization)
def test_with_valid_user_self_json(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm.from_json({'owner': str(user.id)}) self.assertEqual(form.owner.data, user) form.validate() self.assertEqual(form.errors, {}) ownable = Ownable() form.populate_obj(ownable) self.assertEqual(ownable.owner, user)
def test_with_initial_owner_and_no_data_provided(self): Ownable, OwnableForm = self.factory() user = UserFactory() ownable = Ownable(owner=user) form = OwnableForm(MultiDict({}), obj=ownable) self.assertEqual(form.owner.data, user) login_user(user) form.validate() self.assertEqual(form.errors, {}) form.populate_obj(ownable) self.assertEqual(ownable.owner, user) self.assertIsNone(ownable.organization)
def test_with_other_user(self): Ownable, OwnableForm = self.factory() user = UserFactory() other = UserFactory() login_user(user) form = OwnableForm(MultiDict({ 'owner': str(other.id) })) self.assertEqual(form.owner.data, other) form.validate() self.assertIn('owner', form.errors) self.assertEqual(len(form.errors['owner']), 1)
def test_not_member(self): Ownable, OwnableForm = self.factory() member = Member(user=UserFactory(), role='editor') org = OrganizationFactory(members=[member]) login_user(UserFactory()) form = OwnableForm(MultiDict({ 'organization': str(org.id) })) self.assertEqual(form.organization.data, org) self.assertFalse(form.validate()) self.assertIn('organization', form.errors) self.assertEqual(len(form.errors['organization']), 1)
def test_with_initial_owner_and_no_data_provided(self): Ownable, OwnableForm = self.factory() user = UserFactory() ownable = Ownable(owner=user) form = OwnableForm(MultiDict({}), ownable) self.assertEqual(form.owner.data, user) login_user(user) form.validate() self.assertEqual(form.errors, {}) form.populate_obj(ownable) self.assertEqual(ownable.owner, user) self.assertIsNone(ownable.organization)
def test_with_initial_and_not_member(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory(members=[Member(user=user, role='editor')]) neworg = OrganizationFactory() ownable = Ownable(organization=org) form = OwnableForm(MultiDict({'organization': str(neworg.id)}), obj=ownable) self.assertEqual(form.organization.data, neworg) login_user(user) form.validate() self.assertIn('organization', form.errors) self.assertEqual(len(form.errors['organization']), 1)
def test_set_organization_if_permissions(self): Ownable, OwnableForm = self.factory() user = UserFactory() member = Member(user=user, role='editor') org = OrganizationFactory(members=[member]) ownable = Ownable(owner=user) login_user(user) form = OwnableForm(MultiDict({'organization': str(org.id)}), ownable) self.assertTrue(form.validate()) self.assertEqual(form.errors, {}) form.populate_obj(ownable) self.assertIsNone(ownable.owner) self.assertEqual(ownable.organization, org)
def test_with_other_user_admin(self): Ownable, OwnableForm = self.factory() user = UserFactory() admin = AdminFactory() login_user(admin) form = OwnableForm(MultiDict({'owner': str(user.id)})) self.assertEqual(form.owner.data, user) form.validate() self.assertEqual(form.errors, {}) ownable = Ownable() form.populate_obj(ownable) self.assertEqual(ownable.owner, user)
def test_with_initial_org_and_no_data_provided(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory(members=[Member(user=user, role='editor')]) ownable = Ownable(organization=org) form = OwnableForm(MultiDict({}), ownable) self.assertEqual(form.organization.data, org) login_user(user) form.validate() self.assertEqual(form.errors, {}) form.populate_obj(ownable) self.assertIsNone(ownable.owner) self.assertEqual(ownable.organization, org)
def test_with_initial_and_not_member(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory(members=[Member(user=user, role='editor')]) neworg = OrganizationFactory() ownable = Ownable(organization=org) form = OwnableForm(MultiDict({ 'organization': str(neworg.id) }), ownable) self.assertEqual(form.organization.data, neworg) login_user(user) form.validate() self.assertIn('organization', form.errors) self.assertEqual(len(form.errors['organization']), 1)
def test_with_user_object_self_from_json(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm.from_json({ 'owner': {'id': str(user.id)} }) self.assertEqual(form.owner.data, user) form.validate() self.assertEqual(form.errors, {}) ownable = Ownable() form.populate_obj(ownable) self.assertEqual(ownable.owner, user)
def test_with_initial_org_and_no_data_provided(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory(members=[Member(user=user, role='editor')]) ownable = Ownable(organization=org) form = OwnableForm(MultiDict({}), obj=ownable) self.assertEqual(form.organization.data, org) login_user(user) form.validate() self.assertEqual(form.errors, {}) form.populate_obj(ownable) self.assertIsNone(ownable.owner) self.assertEqual(ownable.organization, org)
def test_check_resource_creates_no_activity(activity_app, mocker): resource = ResourceFactory() dataset = DatasetFactory(resources=[resource]) user = UserFactory() login_user(user) check_res = {'check:status': 200, 'check:available': True, 'check:date': datetime.now()} class DummyLinkchecker: def check(self, _): return check_res mocker.patch('udata.linkchecker.checker.get_linkchecker', return_value=DummyLinkchecker) check_resource(resource) activities = Activity.objects.filter(related_to=dataset) assert len(activities) == 0
def test_with_valid_user_self(self): Ownable, OwnableForm = self.factory() user = UserFactory() login_user(user) form = OwnableForm(MultiDict({ 'owner': str(user.id) })) self.assertEqual(form.owner.data, user) form.validate() self.assertEqual(form.errors, {}) ownable = Ownable() form.populate_obj(ownable) self.assertEqual(ownable.owner, user)
def test_set_organization_if_permissions(self): Ownable, OwnableForm = self.factory() user = UserFactory() member = Member(user=user, role='editor') org = OrganizationFactory(members=[member]) ownable = Ownable(owner=user) login_user(user) form = OwnableForm(MultiDict({ 'organization': str(org.id) }), ownable) self.assertTrue(form.validate()) self.assertEqual(form.errors, {}) form.populate_obj(ownable) self.assertIsNone(ownable.owner) self.assertEqual(ownable.organization, org)
def test_pending_transfer_request_for_user(self): user = UserFactory() datasets = DatasetFactory.create_batch(2, owner=user) recipient = UserFactory() comment = faker.sentence() transfers = {} login_user(user) for dataset in datasets: transfer = request_transfer(dataset, recipient, comment) transfers[transfer.id] = transfer self.assertEqual(len(transfer_request_notifications(user)), 0) notifications = transfer_request_notifications(recipient) self.assertEqual(len(notifications), len(datasets)) for dt, details in notifications: transfer = transfers[details['id']] self.assertEqual(details['subject']['class'], 'dataset') self.assertEqual(details['subject']['id'], transfer.subject.id)