def test_close_discussion(self): owner = self.login() user = UserFactory() dataset = Dataset.objects.create(title='Test dataset', owner=owner) message = Message(content='bla bla', posted_by=user) discussion = DatasetDiscussion.objects.create(subject=dataset.id, user=user, title='test discussion', discussion=[message]) on_new_discussion.send(discussion) # Updating metrics. with self.assert_emit(on_discussion_closed): response = self.post(url_for('api.discussion', id=discussion.id), { 'comment': 'close bla bla', 'close': True }) self.assert200(response) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 0) data = response.json self.assertEqual(data['subject'], str(dataset.id)) self.assertEqual(data['user']['id'], str(user.id)) self.assertEqual(data['title'], 'test discussion') self.assertIsNotNone(data['created']) self.assertIsNotNone(data['closed']) self.assertEqual(data['closed_by'], str(owner.id)) self.assertEqual(len(data['discussion']), 2) self.assertEqual(data['discussion'][1]['content'], 'close bla bla') self.assertEqual(data['discussion'][1]['posted_by']['id'], str(owner.id)) self.assertIsNotNone(data['discussion'][1]['posted_on'])
def test_add_comment_to_discussion(self): self.app.config['USE_METRICS'] = True dataset = Dataset.objects.create(title='Test dataset') user = UserFactory() 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. poster = self.login() with assert_emit(on_new_discussion_comment): response = self.post(url_for('api.discussion', id=discussion.id), {'comment': 'new bla bla'}) self.assert200(response) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 1) data = response.json self.assertEqual(data['subject']['class'], 'Dataset') self.assertEqual(data['subject']['id'], str(dataset.id)) self.assertEqual(data['user']['id'], str(user.id)) self.assertEqual(data['title'], 'test discussion') self.assertIsNotNone(data['created']) self.assertIsNone(data['closed']) self.assertIsNone(data['closed_by']) self.assertEqual(len(data['discussion']), 2) self.assertEqual(data['discussion'][1]['content'], 'new bla bla') self.assertEqual(data['discussion'][1]['posted_by']['id'], str(poster.id)) self.assertIsNotNone(data['discussion'][1]['posted_on'])
def test_add_comment_to_discussion(self): dataset = Dataset.objects.create(title='Test dataset') user = UserFactory() message = Message(content='bla bla', posted_by=user) discussion = DatasetDiscussion.objects.create( subject=dataset.id, user=user, title='test discussion', discussion=[message] ) on_new_discussion.send(discussion) # Updating metrics. poster = self.login() with self.assert_emit(on_new_discussion_comment): response = self.post(url_for('api.discussion', id=discussion.id), { 'comment': 'new bla bla' }) self.assert200(response) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 1) data = response.json self.assertEqual(data['subject'], str(dataset.id)) self.assertEqual(data['user']['id'], str(user.id)) self.assertEqual(data['title'], 'test discussion') self.assertIsNotNone(data['created']) self.assertIsNone(data['closed']) self.assertIsNone(data['closed_by']) self.assertEqual(len(data['discussion']), 2) self.assertEqual(data['discussion'][1]['content'], 'new bla bla') self.assertEqual( data['discussion'][1]['posted_by']['id'], str(poster.id)) self.assertIsNotNone(data['discussion'][1]['posted_on'])
def test_delete_discussion_permissions(self): dataset = Dataset.objects.create(title='Test dataset') user = UserFactory() 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.login() response = self.delete(url_for('api.discussion', id=discussion.id)) self.assert403(response) dataset.reload() # Metrics unchanged after attempt to delete the discussion. self.assertEqual(dataset.metrics['discussions'], 1)
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_permissions(self): owner = self.login() dataset = Dataset.objects.create(title='Test dataset', owner=owner) user = UserFactory() message = Message(content='bla bla', posted_by=user) discussion = DatasetDiscussion.objects.create( subject=dataset.id, user=user, title='test discussion', discussion=[message] ) on_new_discussion.send(discussion) # Updating metrics. self.login() response = self.delete(url_for('api.discussion', id=discussion.id)) self.assert403(response) dataset.reload() # Metrics unchanged after attempt to delete the discussion. self.assertEqual(dataset.metrics['discussions'], 1)
def test_close_discussion_permissions(self): self.app.config['USE_METRICS'] = True dataset = Dataset.objects.create(title='Test dataset') user = UserFactory() 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.login() response = self.post(url_for('api.discussion', id=discussion.id), { 'comment': 'close bla bla', 'close': True }) self.assert403(response) dataset.reload() # Metrics unchanged after attempt to close the discussion. self.assertEqual(dataset.metrics['discussions'], 1)
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 = DatasetDiscussion.objects.create( subject=dataset.id, user=user, title='test discussion', discussion=[message] ) on_new_discussion.send(discussion) # Updating metrics. self.assertEqual(DatasetDiscussion.objects(subject=dataset.id).count(), 1) response = self.delete(url_for('api.discussion', id=discussion.id)) self.assertStatus(response, 204) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 0) self.assertEqual(DatasetDiscussion.objects(subject=dataset.id).count(), 0)
def test_close_discussion(self): self.app.config['USE_METRICS'] = True owner = self.login() 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. with assert_emit(on_discussion_closed): response = self.post(url_for('api.discussion', id=discussion.id), { 'comment': 'close bla bla', 'close': True }) self.assert200(response) dataset.reload() self.assertEqual(dataset.metrics['discussions'], 0) data = response.json self.assertEqual(data['subject']['class'], 'Dataset') self.assertEqual(data['subject']['id'], str(dataset.id)) self.assertEqual(data['user']['id'], str(user.id)) self.assertEqual(data['title'], 'test discussion') self.assertIsNotNone(data['created']) self.assertIsNotNone(data['closed']) self.assertEqual(data['closed_by']['id'], str(owner.id)) self.assertEqual(len(data['discussion']), 2) self.assertEqual(data['discussion'][1]['content'], 'close bla bla') self.assertEqual( data['discussion'][1]['posted_by']['id'], str(owner.id)) self.assertIsNotNone(data['discussion'][1]['posted_on'])
def test_close_discussion_permissions(self): self.app.config['USE_METRICS'] = True dataset = Dataset.objects.create(title='Test dataset') user = UserFactory() 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.login() response = self.post(url_for('api.discussion', id=discussion.id), { 'comment': 'close bla bla', 'close': True }) self.assert403(response) dataset.reload() # Metrics unchanged after attempt to close the discussion. self.assertEqual(dataset.metrics['discussions'], 1)