From 02d86394cd7982f8709c08d5fd78e73ae10c777c Mon Sep 17 00:00:00 2001 From: Jeremy Thurgood Date: Mon, 24 Feb 2014 14:19:32 +0200 Subject: [PATCH] Add API URL config option for Wikipedia app. --- go/apps/wikipedia/tests/test_views.py | 26 +++++++++++++++++++- go/apps/wikipedia/tests/test_vumi_app.py | 7 ++++++ go/apps/wikipedia/view_definition.py | 31 ++++++++++++++++++++++-- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/go/apps/wikipedia/tests/test_views.py b/go/apps/wikipedia/tests/test_views.py index 14675d529..19daa2417 100644 --- a/go/apps/wikipedia/tests/test_views.py +++ b/go/apps/wikipedia/tests/test_views.py @@ -32,7 +32,7 @@ def test_new_conversation(self): self.assertEqual(conversation.description, '') self.assertEqual(conversation.config, {}) self.assertEqual(list(conversation.extra_endpoints), [u'sms_content']) - self.assertRedirects(response, conv_helper.get_view_url('show')) + self.assertRedirects(response, conv_helper.get_view_url('edit')) def test_show_stopped(self): conv_helper = self.app_helper.create_conversation_helper( @@ -45,3 +45,27 @@ def test_show_running(self): name=u"myconv", started=True) response = self.client.get(conv_helper.get_view_url('show')) self.assertContains(response, u"

myconv

") + + def test_edit_set_api_url(self): + conv_helper = self.app_helper.create_conversation_helper() + conversation = conv_helper.get_conversation() + self.assertEqual(conversation.config, {}) + response = self.client.post(conv_helper.get_view_url('edit'), { + 'api_url': 'http://wikipedia/api.php', + }, follow=True) + self.assertRedirects(response, conv_helper.get_view_url('show')) + reloaded_conv = conv_helper.get_conversation() + self.assertEqual(reloaded_conv.config, { + 'api_url': 'http://wikipedia/api.php', + }) + + def test_edit_no_api_url(self): + conv_helper = self.app_helper.create_conversation_helper() + conversation = conv_helper.get_conversation() + self.assertEqual(conversation.config, {}) + response = self.client.post(conv_helper.get_view_url('edit'), { + 'wikipedia-api_url': '', + }, follow=True) + self.assertRedirects(response, conv_helper.get_view_url('show')) + reloaded_conv = conv_helper.get_conversation() + self.assertEqual(reloaded_conv.config, {}) diff --git a/go/apps/wikipedia/tests/test_vumi_app.py b/go/apps/wikipedia/tests/test_vumi_app.py index 9d3b553c7..a501a4f0c 100644 --- a/go/apps/wikipedia/tests/test_vumi_app.py +++ b/go/apps/wikipedia/tests/test_vumi_app.py @@ -63,3 +63,10 @@ def test_happy_flow(self): ConversationMetric.make_name(self.conv, name) for name in [ 'wikipedia_search_call', 'wikipedia_extract_call', 'wikipedia_extract_call']]) + + @inlineCallbacks + def test_api_url_config(self): + yield self.setup_conv({'api_url': 'http://wikipedia/api.php'}) + msg = self.app_helper.make_inbound(None, conv=self.conv) + config = yield self.app.get_config(msg) + self.assertEqual(config.api_url.geturl(), 'http://wikipedia/api.php') diff --git a/go/apps/wikipedia/view_definition.py b/go/apps/wikipedia/view_definition.py index c2a19fdd4..c9ba7791d 100644 --- a/go/apps/wikipedia/view_definition.py +++ b/go/apps/wikipedia/view_definition.py @@ -1,5 +1,32 @@ -from go.conversation.view_definition import ConversationViewDefinitionBase +from django import forms + +from go.conversation.view_definition import ( + ConversationViewDefinitionBase, EditConversationView) + + +class ConfigForm(forms.Form): + api_url = forms.CharField( + help_text='The mediawiki API URL to use.', required=False) + + @staticmethod + def initial_from_config(data): + return { + 'api_url': data.get('api_url', None), + } + + def to_config(self): + data = self.cleaned_data + config_dict = {} + if data['api_url']: + config_dict['api_url'] = data['api_url'] + return config_dict + + +class EditWikipediaView(EditConversationView): + edit_forms = ( + (None, ConfigForm), + ) class ConversationViewDefinition(ConversationViewDefinitionBase): - pass + edit_view = EditWikipediaView