From 245c250bd8745717d4d3bc942acec370977d7e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20=C3=81lvarez?= Date: Tue, 31 Mar 2015 17:29:38 -0300 Subject: [PATCH] Mergin together 665 and 610 --- nuntium/subdomain_urls.py | 2 + .../writeitinstance_and_popit_relations.html | 22 ++++--- nuntium/tests/popit_writeit_relation_tests.py | 58 ++++++++++++++++++- nuntium/user_section/views.py | 36 +++++++++++- 4 files changed, 109 insertions(+), 9 deletions(-) diff --git a/nuntium/subdomain_urls.py b/nuntium/subdomain_urls.py index cb3c4a66..5c0962a1 100644 --- a/nuntium/subdomain_urls.py +++ b/nuntium/subdomain_urls.py @@ -33,6 +33,7 @@ WriteitPopitRelatingView, MessageTogglePublic, ReSyncFromPopit, + WriteItPopitUpdateView, ) from nuntium.user_section.stats import StatsView @@ -46,6 +47,7 @@ url(r'^settings/api/$', WriteItInstanceApiDocsView.as_view(), name='writeitinstance_api_docs'), url(r'^settings/sources/$', WriteitPopitRelatingView.as_view(), name='relate-writeit-popit'), url(r'^settings/sources/resync/(?P[-\d]+)/$', ReSyncFromPopit.as_view(), name='resync-from-popit'), + url(r'^settings/sources/update/(?P[-\d]+)/$', WriteItPopitUpdateView.as_view(), name='update-popit-writeit-relation'), url(r'^settings/templates/$', WriteItInstanceTemplateUpdateView.as_view(), name='writeitinstance_template_update'), url(r'^settings/templates/new_answer_notification/$', NewAnswerNotificationTemplateUpdateView.as_view(), name='edit_new_answer_notification_template'), url(r'^settings/templates/confirmation_template/$', ConfirmationTemplateUpdateView.as_view(), name='edit_confirmation_template'), diff --git a/nuntium/templates/nuntium/profiles/writeitinstance_and_popit_relations.html b/nuntium/templates/nuntium/profiles/writeitinstance_and_popit_relations.html index 5a9b184a..b4c5f5cc 100644 --- a/nuntium/templates/nuntium/profiles/writeitinstance_and_popit_relations.html +++ b/nuntium/templates/nuntium/profiles/writeitinstance_and_popit_relations.html @@ -8,6 +8,7 @@ {% block extrascripts %} + {% endblock extrascripts %} {% block extrajs %} $(".chosen-person-select").chosen(); @@ -48,14 +49,14 @@

{{ re

{% trans 'Polling interval' %}

-
+
- + + + +
@@ -95,7 +96,14 @@

{% trans "Add a new data source" %}

}) }) + $(document).ready(function() { + // bind 'myForm' and provide a simple callback function + $('.update-popit-form').ajaxForm({ + success: function(data){ + location.reload(); + } + }); + }); }) - {% endblock content %} diff --git a/nuntium/tests/popit_writeit_relation_tests.py b/nuntium/tests/popit_writeit_relation_tests.py index ab1a03d9..f8b470c2 100644 --- a/nuntium/tests/popit_writeit_relation_tests.py +++ b/nuntium/tests/popit_writeit_relation_tests.py @@ -17,6 +17,7 @@ from nuntium.user_section.views import ReSyncFromPopit from django.contrib.auth.models import AnonymousUser from django.http import Http404 +import json class PopitWriteitRelationRecord(TestCase): @@ -244,6 +245,7 @@ def setUp(self): writeitinstance=self.writeitinstance, popitapiinstance=self.popit_api_instance ) + self.request_factory = RequestFactory() class UpdateStatusOfPopitWriteItRelation(WriteItPopitTestCase): @@ -255,7 +257,6 @@ class UpdateStatusOfPopitWriteItRelation(WriteItPopitTestCase): ''' def setUp(self): super(UpdateStatusOfPopitWriteItRelation, self).setUp() - self.request_factory = RequestFactory() def test_post_to_the_url_for_manual_resync(self): '''Resyncing can be done by posting to a url''' @@ -307,6 +308,8 @@ def test_post_has_to_be_the_owner_of_the_instance(self): with self.assertRaises(Http404): ReSyncFromPopit.as_view()(request, popit_api_pk=self.popit_api_instance.pk) +from nuntium.user_section.views import WriteItPopitUpdateView + class UpdateRecordFormTestCase(WriteItPopitTestCase): ''' @@ -320,3 +323,56 @@ def test_validate_the_form(self): form = WriteItPopitUpdateForm(data, instance=self.popit_writeit_record) self.assertIn('periodicity', form.fields) self.assertTrue(form.is_valid()) + + def test_posting_a_new_value_to_the_url_updates_the_value(self): + url = reverse('update-popit-writeit-relation', + subdomain=self.writeitinstance.slug, + kwargs={ + 'pk': self.popit_writeit_record.pk + } + ) + request = self.request_factory.post(url) + request.subdomain = self.writeitinstance.slug + request.user = self.owner + request.POST = {'periodicity': '1D'} + # This is the result of posting + response = WriteItPopitUpdateView.as_view()(request, pk=self.popit_writeit_record.pk) + # I'm hoping this to be an ajax call + self.assertEquals(response.status_code, 200) + response_object = json.loads(response.content) + self.assertEquals(response_object['id'], self.popit_writeit_record.pk) + self.assertEquals(response_object['periodicity'], '1D') + # This is the expected result + record = WriteitInstancePopitInstanceRecord.objects.get(id=self.popit_writeit_record.pk) + self.assertEquals(record.periodicity, '1D') + + def test_form_invalid(self): + url = reverse('update-popit-writeit-relation', + subdomain=self.writeitinstance.slug, + kwargs={ + 'pk': self.popit_writeit_record.pk + } + ) + request = self.request_factory.post(url) + request.subdomain = self.writeitinstance.slug + request.user = self.owner + request.POST = {'periodicity': 'invalid'} + response = WriteItPopitUpdateView.as_view()(request, pk=self.popit_writeit_record.pk) + # I'm hoping this to be an ajax call + self.assertEquals(response.status_code, 200) + response_object = json.loads(response.content) + self.assertTrue(response_object['errors']) + + def test_cannot_get_it_should_return_405(self): + url = reverse('update-popit-writeit-relation', + subdomain=self.writeitinstance.slug, + kwargs={ + 'pk': self.popit_writeit_record.pk + } + ) + request = self.request_factory.get(url) + request.subdomain = self.writeitinstance.slug + request.user = self.owner + request.GET = {'periodicity': 'invalid'} + response = WriteItPopitUpdateView.as_view()(request, pk=self.popit_writeit_record.pk) + self.assertEquals(response.status_code, 405) diff --git a/nuntium/user_section/views.py b/nuntium/user_section/views.py index ca40f719..7f4f67d1 100644 --- a/nuntium/user_section/views.py +++ b/nuntium/user_section/views.py @@ -10,7 +10,7 @@ from ..models import WriteItInstance, Message,\ NewAnswerNotificationTemplate, ConfirmationTemplate, \ - Answer, WriteItInstanceConfig + Answer, WriteItInstanceConfig, WriteitInstancePopitInstanceRecord from .forms import WriteItInstanceBasicForm, WriteItInstanceAdvancedUpdateForm, \ NewAnswerNotificationTemplateForm, ConfirmationTemplateForm, \ WriteItInstanceCreateForm, AnswerForm, \ @@ -20,6 +20,7 @@ import json from nuntium.popit_api_instance import PopitApiInstance from nuntium.tasks import pull_from_popit +from nuntium.user_section.forms import WriteItPopitUpdateForm class UserAccountView(TemplateView): @@ -386,6 +387,39 @@ def post(self, request, *args, **kwargs): return HttpResponse() +class WriteItPopitUpdateView(UpdateView): + form_class = WriteItPopitUpdateForm + model = WriteitInstancePopitInstanceRecord + + def get_writeitinstance(self): + self.writeitinstance = get_object_or_404(WriteItInstance, slug=self.request.subdomain, owner=self.request.user) + + def dispatch(self, *args, **kwargs): + self.get_writeitinstance() + if self.request.method != 'POST': + return self.http_method_not_allowed(*args, **kwargs) + return super(WriteItPopitUpdateView, self).dispatch(*args, **kwargs) + + def form_valid(self, form): + form.save() + return HttpResponse( + json.dumps({ + 'id': form.instance.id, + 'periodicity': form.instance.periodicity + }), + content_type='application/json' + ) + + def form_invalid(self, form): + super(WriteItPopitUpdateView, self).form_invalid(form) + return HttpResponse( + json.dumps({ + 'errors': form.errors + }), + content_type='application/json' + ) + + class WriteItDeleteView(DeleteView): model = WriteItInstance