Skip to content

Commit

Permalink
Mergin together 665 and 610
Browse files Browse the repository at this point in the history
  • Loading branch information
Felipe Álvarez committed Apr 1, 2015
1 parent 79b8e2e commit 245c250
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 9 deletions.
2 changes: 2 additions & 0 deletions nuntium/subdomain_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
WriteitPopitRelatingView,
MessageTogglePublic,
ReSyncFromPopit,
WriteItPopitUpdateView,
)
from nuntium.user_section.stats import StatsView

Expand All @@ -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<popit_api_pk>[-\d]+)/$', ReSyncFromPopit.as_view(), name='resync-from-popit'),
url(r'^settings/sources/update/(?P<pk>[-\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'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
{% block extrascripts %}
<link rel="stylesheet" href="{% static 'css/chosen.css' %}">
<script src="{% static 'js/chosen.jquery.min.js' %}"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
{% endblock extrascripts %}
{% block extrajs %}
$(".chosen-person-select").chosen();
Expand Down Expand Up @@ -48,14 +49,14 @@ <h3 class="data-source__title"><a href="{{ record.popitapiinstance.url }}">{{ re
<div class="collapse data-source__edit" id="collapseExample">
<div class="well">
<h3>{% trans 'Polling interval' %}</h3>
<form class="form-inline">
<form class="form-inline update-popit-form" action="{% url 'update-popit-writeit-relation' subdomain=record.writeitinstance.slug pk=record.pk %}" method='POST'>
<div class="form-group">
<label for="polling-interval-select">{% trans 'Fetch new data from this source' %}</label>
<select class="form-control" id="polling-interval-select">
<option>{% trans 'Never' %}</option>
<option>{% trans 'Twice a day' %}</option>
<option>{% trans 'Daily' %}</option>
<option>{% trans 'Weekly' %}</option>
<select class="form-control" id="polling-interval-select" name="periodicity">
<option value="--" {% if record.periodicity == "--" %}selected{% endif %}>{% trans 'Never' %}</option>
<option value="2D" {% if record.periodicity == "2D" %}selected{% endif %}>{% trans 'Twice a day' %}</option>
<option value="1D" {% if record.periodicity == "1D" %}selected{% endif %}>{% trans 'Daily' %}</option>
<option value="1W" {% if record.periodicity == "1W" %}selected{% endif %}>{% trans 'Weekly' %}</option>
</select>

</div>
Expand Down Expand Up @@ -95,7 +96,14 @@ <h3>{% trans "Add a new data source" %}</h3>
})

})
$(document).ready(function() {
// bind 'myForm' and provide a simple callback function
$('.update-popit-form').ajaxForm({
success: function(data){
location.reload();
}
});
});
})
</script>

{% endblock content %}
58 changes: 57 additions & 1 deletion nuntium/tests/popit_writeit_relation_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -244,6 +245,7 @@ def setUp(self):
writeitinstance=self.writeitinstance,
popitapiinstance=self.popit_api_instance
)
self.request_factory = RequestFactory()


class UpdateStatusOfPopitWriteItRelation(WriteItPopitTestCase):
Expand All @@ -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'''
Expand Down Expand Up @@ -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):
'''
Expand All @@ -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)
36 changes: 35 additions & 1 deletion nuntium/user_section/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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, \
Expand All @@ -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):
Expand Down Expand Up @@ -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

Expand Down

0 comments on commit 245c250

Please sign in to comment.