Skip to content

Commit

Permalink
Add extras fields to discussion (#1360)
Browse files Browse the repository at this point in the history
Only accessible through API for now.
  • Loading branch information
l-vincent-l authored and abulte committed Jan 13, 2018
1 parent 3126639 commit 3699162
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 2 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.8 (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
31 changes: 31 additions & 0 deletions udata/tests/test_discussions.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,37 @@ def test_new_discussion_missing_subject(self):
})
self.assertStatus(response, 400)

def test_new_discussion_with_extras(self):
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)

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

0 comments on commit 3699162

Please sign in to comment.