Skip to content

Commit

Permalink
Add extras fields to discussion
Browse files Browse the repository at this point in the history
We need it for transport.data.gouv.fr
It'll be only accessible through API for now
  • Loading branch information
l-vincent-l committed Jan 11, 2018
1 parent 42ca18d commit 75ff993
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 7 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Current (in progress)

- Nothing yet
- Add extras field in discussions [#1360](https://github.com/opendatateam/udata/pull/1360)

## 1.2.7 (2018-01-10)

Expand Down
2 changes: 2 additions & 0 deletions udata/core/discussions/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
'discussion': fields.Nested(message_fields),
'url': fields.UrlFor('api.discussion',
description='The discussion API URI'),
'extras': fields.Raw(description='Extra attributes as key-value pairs'),
})

start_discussion_fields = api.model('DiscussionStart', {
Expand All @@ -54,6 +55,7 @@
'subject': fields.Nested(api.model_reference,
description='The discussion target object',
required=True),
'extras': fields.Raw(description='Extras attributes as key-value pairs'),
})

comment_discussion_fields = api.model('DiscussionResponse', {
Expand Down
3 changes: 2 additions & 1 deletion udata/core/discussions/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@

class DiscussionCreateForm(ModelForm):
model_class = Discussion

title = fields.StringField(_('Title'), [validators.required()])
comment = fields.StringField(_('Comment'), [validators.required()])
subject = fields.ModelField(_('Subject'), [validators.required()])
extras = fields.ExtrasField(extras=Discussion.extras)


class DiscussionCommentForm(Form):
Expand Down
1 change: 1 addition & 0 deletions udata/core/discussions/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class Discussion(db.Document):
created = db.DateTimeField(default=datetime.now, required=True)
closed = db.DateTimeField()
closed_by = db.ReferenceField('User')
extras = db.ExtrasField()

meta = {
'indexes': [
Expand Down
44 changes: 39 additions & 5 deletions udata/tests/test_discussions.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@
class DiscussionsTest(APITestCase):
modules = ['core.user']

def test_new_discussion(self):
self.app.config['USE_METRICS'] = True
def test_new_discussion_with_extras(self):
user = self.login()
dataset = Dataset.objects.create(title='Test dataset')

Expand All @@ -47,9 +46,6 @@ def test_new_discussion(self):
})
self.assert201(response)

dataset.reload()
self.assertEqual(dataset.metrics['discussions'], 1)

discussions = Discussion.objects(subject=dataset)
self.assertEqual(len(discussions), 1)

Expand Down Expand Up @@ -100,6 +96,44 @@ def test_new_discussion_missing_subject(self):
})
self.assertStatus(response, 400)

def test_new_discussion(self):
self.app.config['USE_METRICS'] = True
user = self.login()
dataset = Dataset.objects.create(title='Test dataset',
extras={'key': 'value'})

with self.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)

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')
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_list_discussions(self):
dataset = Dataset.objects.create(title='Test dataset')
open_discussions = []
Expand Down

0 comments on commit 75ff993

Please sign in to comment.