Skip to content

Commit

Permalink
Enable editing of labels with shortcut keys
Browse files Browse the repository at this point in the history
  • Loading branch information
c-w committed Oct 11, 2019
1 parent 55c6cc2 commit 1a466a3
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 8 deletions.
22 changes: 14 additions & 8 deletions app/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,8 @@ class Meta:
class LabelSerializer(serializers.ModelSerializer):

def validate(self, attrs):
if 'prefix_key' not in attrs and 'suffix_key' not in attrs:
return super().validate(attrs)

prefix_key = attrs['prefix_key']
suffix_key = attrs['suffix_key']
prefix_key = attrs.get('prefix_key')
suffix_key = attrs.get('suffix_key')

# In the case of user don't set any shortcut key.
if prefix_key is None and suffix_key is None:
Expand All @@ -37,13 +34,22 @@ def validate(self, attrs):
try:
context = self.context['request'].parser_context
project_id = context['kwargs']['project_id']
label_id = context['kwargs'].get('label_id')
except (AttributeError, KeyError):
pass # unit tests don't always have the correct context set up
else:
if Label.objects.filter(suffix_key=suffix_key,
prefix_key=prefix_key,
project=project_id).exists():
conflicting_labels = Label.objects.filter(
suffix_key=suffix_key,
prefix_key=prefix_key,
project=project_id,
)

if label_id is not None:
conflicting_labels = conflicting_labels.exclude(id=label_id)

if conflicting_labels.exists():
raise ValidationError('Duplicate key.')

return super().validate(attrs)

class Meta:
Expand Down
8 changes: 8 additions & 0 deletions app/api/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,9 @@ def setUpTestData(cls):
email='fizz@buzz.com')
project = mommy.make('Project', users=[project_member, super_user])
cls.label = mommy.make('Label', project=project)
cls.label_with_shortcut = mommy.make('Label', suffix_key='l', project=project)
cls.url = reverse(viewname='label_detail', args=[project.id, cls.label.id])
cls.url_with_shortcut = reverse(viewname='label_detail', args=[project.id, cls.label_with_shortcut.id])
cls.data = {'text': 'example'}

def test_returns_label_to_project_member(self):
Expand All @@ -277,6 +279,12 @@ def test_allows_superuser_to_update_label(self):
response = self.client.patch(self.url, format='json', data=self.data)
self.assertEqual(response.data['text'], self.data['text'])

def test_allows_superuser_to_update_label_with_shortcut(self):
self.client.login(username=self.super_user_name,
password=self.super_user_pass)
response = self.client.patch(self.url_with_shortcut, format='json', data={'suffix_key': 's'})
self.assertEqual(response.data['suffix_key'], 's')

def test_disallows_project_member_to_update_label(self):
self.client.login(username=self.project_member_name,
password=self.project_member_pass)
Expand Down

0 comments on commit 1a466a3

Please sign in to comment.