def test_new_discussion_with_extras(self): user = self.login() dataset = Dataset.objects.create(title='Test dataset', extras={'key': 'value'}) with assert_emit(on_new_discussion): response = self.post( url_for('api.discussions'), { 'title': 'test title', 'comment': 'bla bla', 'subject': { 'class': 'Dataset', 'id': dataset.id, }, 'extras': { 'key': 'value' } }) self.assert201(response) discussions = Discussion.objects(subject=dataset) self.assertEqual(len(discussions), 1) discussion = discussions[0] self.assertEqual(discussion.user, user) self.assertEqual(len(discussion.discussion), 1) self.assertEqual(discussion.title, 'test title') self.assertEqual(discussion.extras, {u'key': u'value'}) message = discussion.discussion[0] self.assertEqual(message.content, 'bla bla') self.assertEqual(message.posted_by, user) self.assertIsNotNone(message.posted_on)
def test_new_discussion(self): self.app.config['USE_METRICS'] = True user = self.login() dataset = Dataset.objects.create(title='Test dataset') with assert_emit(on_new_discussion): response = self.post( url_for('api.discussions'), { 'title': 'test title', 'comment': 'bla bla', 'subject': { 'class': 'Dataset', 'id': dataset.id, } }) self.assert201(response) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 1) discussions = Discussion.objects(subject=dataset) self.assertEqual(len(discussions), 1) discussion = discussions[0] self.assertEqual(discussion.user, user) self.assertEqual(len(discussion.discussion), 1) self.assertIsNotNone(discussion.created) self.assertIsNone(discussion.closed) self.assertIsNone(discussion.closed_by) self.assertEqual(discussion.title, 'test title') message = discussion.discussion[0] self.assertEqual(message.content, 'bla bla') self.assertEqual(message.posted_by, user) self.assertIsNotNone(message.posted_on)
def mark_as_deleted(self): copied_user = copy(self) self.email = '{}@deleted'.format(self.id) self.password = None self.active = False self.first_name = 'DELETED' self.last_name = 'DELETED' self.avatar = None self.avatar_url = None self.website = None self.about = None self.deleted = datetime.now() self.save() for organization in self.organizations: organization.members = [ member for member in organization.members if member.user != self ] organization.save() for discussion in Discussion.objects(discussion__posted_by=self): for message in discussion.discussion: if message.posted_by == self: message.content = 'DELETED' discussion.save() Follow.objects(follower=self).delete() Follow.objects(following=self).delete() mail.send(_('Account deletion'), copied_user, 'account_deleted')
def get(self, org): '''List organization discussions''' reuses = Reuse.objects(organization=org).only('id') datasets = Dataset.objects(organization=org).only('id') subjects = list(reuses) + list(datasets) qs = Discussion.objects(subject__in=subjects).order_by('-created') return list(qs)
def test_new_discussion(self): user = self.login() dataset = Dataset.objects.create(title='Test dataset') with self.assert_emit(on_new_discussion): response = self.post(url_for('api.discussions'), { 'title': 'test title', 'comment': 'bla bla', 'subject': dataset.id }) self.assertStatus(response, 201) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 1) discussions = Discussion.objects(subject=dataset) self.assertEqual(len(discussions), 1) discussion = discussions[0] self.assertEqual(discussion.user, user) self.assertEqual(len(discussion.discussion), 1) self.assertIsNotNone(discussion.created) self.assertIsNone(discussion.closed) self.assertIsNone(discussion.closed_by) self.assertEqual(discussion.title, 'test title') message = discussion.discussion[0] self.assertEqual(message.content, 'bla bla') self.assertEqual(message.posted_by, user) self.assertIsNotNone(message.posted_on)
def mark_as_deleted(self): copied_user = copy(self) self.email = '{}@deleted'.format(self.id) self.password = None self.active = False self.first_name = 'DELETED' self.last_name = 'DELETED' self.avatar = None self.avatar_url = None self.website = None self.about = None self.extras = None self.deleted = datetime.now() self.save() for organization in self.organizations: organization.members = [member for member in organization.members if member.user != self] organization.save() for discussion in Discussion.objects(discussion__posted_by=self): for message in discussion.discussion: if message.posted_by == self: message.content = 'DELETED' discussion.save() Follow.objects(follower=self).delete() Follow.objects(following=self).delete() mail.send(_('Account deletion'), copied_user, 'account_deleted')
def test_new_discussion(self): user = self.login() dataset = Dataset.objects.create(title='Test dataset') response = self.post(url_for('api.discussions'), { 'title': 'test title', 'comment': 'bla bla', 'subject': dataset.id }) self.assertStatus(response, 201) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 1) discussions = Discussion.objects(subject=dataset) self.assertEqual(len(discussions), 1) discussion = discussions[0] self.assertEqual(discussion.user, user) self.assertEqual(len(discussion.discussion), 1) self.assertIsNotNone(discussion.created) self.assertIsNone(discussion.closed) self.assertIsNone(discussion.closed_by) self.assertEqual(discussion.title, 'test title') message = discussion.discussion[0] self.assertEqual(message.content, 'bla bla') self.assertEqual(message.posted_by, user) self.assertIsNotNone(message.posted_on)
def get(self, org): """List organization discussions""" reuses_ids = [r.id for r in Reuse.objects(organization=org).only("id")] datasets_ids = [d.id for d in Dataset.objects(organization=org).only("id")] ids = reuses_ids + datasets_ids qs = Discussion.objects(subject__in=ids).order_by("-created") return list(qs)
def test_new_discussion_with_extras(self): user = self.login() dataset = Dataset.objects.create(title='Test dataset', extras={'key': 'value'}) with assert_emit(on_new_discussion): response = self.post(url_for('api.discussions'), { 'title': 'test title', 'comment': 'bla bla', 'subject': { 'class': 'Dataset', 'id': dataset.id, }, 'extras': {'key': 'value'} }) self.assert201(response) discussions = Discussion.objects(subject=dataset) self.assertEqual(len(discussions), 1) discussion = discussions[0] self.assertEqual(discussion.user, user) self.assertEqual(len(discussion.discussion), 1) self.assertEqual(discussion.title, 'test title') self.assertEqual(discussion.extras, {u'key': u'value'}) message = discussion.discussion[0] self.assertEqual(message.content, 'bla bla') self.assertEqual(message.posted_by, user) self.assertIsNotNone(message.posted_on)
def get(self, org): '''List organization discussions''' reuses_ids = [r.id for r in Reuse.objects(organization=org).only('id')] datasets_ids = [d.id for d in Dataset.objects(organization=org).only('id')] ids = reuses_ids + datasets_ids qs = Discussion.objects(subject__in=ids).order_by('-created') return list(qs)
def test_delete_discussion(self): owner = self.login(AdminFactory()) user = UserFactory() dataset = Dataset.objects.create(title='Test dataset', owner=owner) message = Message(content='bla bla', posted_by=user) discussion = Discussion.objects.create(subject=dataset, user=user, title='test discussion', discussion=[message]) on_new_discussion.send(discussion) # Updating metrics. self.assertEqual(Discussion.objects(subject=dataset).count(), 1) with self.assert_emit(on_discussion_deleted): response = self.delete(url_for('api.discussion', id=discussion.id)) self.assertStatus(response, 204) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 0) self.assertEqual(Discussion.objects(subject=dataset).count(), 0)
def test_delete_discussion(self): self.app.config['USE_METRICS'] = True owner = self.login(AdminFactory()) user = UserFactory() dataset = Dataset.objects.create(title='Test dataset', owner=owner) message = Message(content='bla bla', posted_by=user) discussion = Discussion.objects.create( subject=dataset, user=user, title='test discussion', discussion=[message] ) on_new_discussion.send(discussion) # Updating metrics. self.assertEqual(Discussion.objects(subject=dataset).count(), 1) with assert_emit(on_discussion_deleted): response = self.delete(url_for('api.discussion', id=discussion.id)) self.assertStatus(response, 204) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 0) self.assertEqual(Discussion.objects(subject=dataset).count(), 0)