Ejemplo n.º 1
0
 def test_default_language_required_for_update(self, mock_sync):
     """Form should require a default language when updating an org."""
     self.data.pop('language')
     form = self.form_class(data=self.data, instance=factories.Org())
     self.assertFalse(form.is_valid())
     self.assertEqual(form.errors.keys(), ['language'])
     self.assertEqual(form.errors['language'], ['This field is required.'])
Ejemplo n.º 2
0
    def setUp(self):
        super(TestRegion, self).setUp()

        self.org = factories.Org()

        self.temba_groups = {
            '1': TembaGroup.create(uuid="1", name="Uganda"),
            '2': TembaGroup.create(uuid="2", name="Kampala"),
            '3': TembaGroup.create(uuid="3", name="Entebbe"),
            '4': TembaGroup.create(uuid="4", name="Makerere"),
        }

        self.uganda = factories.Region(org=self.org, uuid='1', name="Uganda")
        self.kampala = factories.Region(org=self.org,
                                        uuid='2',
                                        name="Kampala",
                                        parent=self.uganda)
        self.entebbe = factories.Region(org=self.org,
                                        uuid='3',
                                        name="Entebbe",
                                        parent=self.uganda)
        self.makerere = factories.Region(org=self.org,
                                         uuid='4',
                                         name="makerere",
                                         parent=self.kampala)
        self.inactive = factories.Region(org=self.org,
                                         uuid='5',
                                         name="inactive",
                                         parent=self.kampala,
                                         is_active=False)

        self.mock_temba_client.get_contacts.return_value = []
Ejemplo n.º 3
0
 def test_available_languages_required_for_update(self, mock_sync):
     """Form should require available languages for new orgs."""
     self.data.pop('available_languages')
     form = self.form_class(data=self.data, instance=factories.Org())
     self.assertFalse(form.is_valid())
     self.assertEqual(form.errors.keys(), ['available_languages'])
     self.assertEqual(form.errors['available_languages'],
                      ['This field is required.'])
Ejemplo n.º 4
0
    def setUp(self):
        """Set up common resources."""
        super(BaseMapsTest, self).setUp()

        self.org = factories.Org()
        self.poll = factories.Poll()
        self.pollrun = factories.PollRun(poll=self.poll)

        self.boundary_a = factories.Boundary(org=self.org)
        self.boundary_b = factories.Boundary(org=self.org)
Ejemplo n.º 5
0
 def test_available_languages_no_change(self, mock_sync):
     """Form should allow available languages to remain unchanged."""
     org = factories.Org(
         available_languages=['en', 'es'],
         language='en',
     )
     form = self.form_class(data=self.data, instance=org)
     self.assertTrue(form.is_valid(), form.errors)
     form.save()
     org.refresh_from_db()
     self.assertEqual(org.available_languages, ['en', 'es'])
     self.assertEqual(org.language, 'en')
Ejemplo n.º 6
0
 def test_add_available_languages(self, mock_sync):
     """Form should allow addition of available language(s)."""
     org = factories.Org(
         available_languages=['en', 'es'],
         language='en',
     )
     self.data['available_languages'] = ['en', 'es', 'fr']
     form = self.form_class(data=self.data, instance=org)
     self.assertTrue(form.is_valid(), form.errors)
     form.save()
     org.refresh_from_db()
     self.assertEqual(org.available_languages, ['en', 'es', 'fr'])
     self.assertEqual(org.language, 'en')
Ejemplo n.º 7
0
 def test_remove_default_from_available(self, mock_sync):
     """Form should error if default language is removed from available languages."""
     org = factories.Org(
         available_languages=['en', 'es'],
         language='en',
     )
     self.data['available_languages'] = ['es']
     form = self.form_class(data=self.data, instance=org)
     self.assertFalse(form.is_valid())
     self.assertTrue(form.errors.keys(), [NON_FIELD_ERRORS])
     self.assertEqual(form.errors[NON_FIELD_ERRORS], [
         'Default language must be one of the languages '
         'available for this organization.'
     ])
Ejemplo n.º 8
0
    def test_sync_questions_categories(self, mock_logger, mock_poll_get_flow):
        self.org = factories.Org()
        self.poll_1 = factories.Poll(org=self.org, name='Poll 1')
        self.poll_2 = factories.Poll(org=self.org, name='Poll 2')
        # Create 2 questions locally:
        # one that is on RapidPro
        # and one that should be removed because it won't be on RapidPro
        self.question_1 = factories.Question(
            poll=self.poll_1,
            ruleset_uuid='goodquestion',
            question_type=models.Question.TYPE_MULTIPLE_CHOICE)
        self.question_2 = factories.Question(
            poll=self.poll_1,
            ruleset_uuid='oldquestion',
            question_type=models.Question.TYPE_MULTIPLE_CHOICE)

        # Data to pass to form for testing. Only select one poll
        self.data = [self.poll_1]
        # Patch the call to the API
        flow_1 = mock.Mock()
        flow_1.uuid = 'abcdefg123'
        flow_1.name = self.poll_1.name
        ruleset_existing = mock.Mock()
        ruleset_existing.uuid = 'goodquestion'
        ruleset_existing.label = 'good question'
        ruleset_new = mock.Mock()
        ruleset_new.uuid = 'newquestion'
        ruleset_new.label = 'new question'
        flow_1.rulesets = [ruleset_existing, ruleset_new]

        # Mock the call to the API to send back a single flow matching our first poll
        self.mock_temba_client.get_flows.return_value = [flow_1]
        # Mock this call to return an empty rule set so that RapidPro API is not called
        mock_poll_get_flow.return_value.rulesets = []

        # Assert that the 2 questions exist before we sync when one should be deleted
        self.assertEqual(models.Question.objects.count(), 2)

        # Call the task to sync questions...
        sync_questions_categories(self.org, self.data)
        # Two questions exist locally, one is new from the RapidPro API mock (flow_1.rulesets)
        self.assertEqual(models.Question.objects.count(), 2)
        self.assertEqual(models.Question.objects.first().ruleset_uuid,
                         'goodquestion')
        self.assertEqual(models.Question.objects.last().ruleset_uuid,
                         'newquestion')
        # Only 1 poll was reflected in the log message as only 1 poll was sent into the form data
        self.assertEqual(mock_logger.call_count, 2)
        self.assertIn("1 Poll(s)", mock_logger.call_args[0][0])
Ejemplo n.º 9
0
 def test_available_languages_initial_for_update(self, mock_sync):
     """Available languages should be set from the instance to update."""
     org = factories.Org(available_languages=['en', 'es'])
     form = self.form_class(instance=org)
     self.assertEqual(form.fields['available_languages'].initial,
                      ['en', 'es'])