Ejemplo n.º 1
0
    def test_get_merged_xform_survey(self):
        """
        Test get_merged_xform_survey()
        """
        with self.assertRaises(AssertionError):
            get_merged_xform_survey([])

        self.project = get_user_default_project(self.user)
        xform1 = self._publish_markdown(A_MD, self.user, id_string='a')
        xform2 = self._publish_markdown(B_MD, self.user, id_string='b')
        xform3 = self._publish_markdown(MD, self.user, id_string='c')
        expected = {
            u'name': u'data',
            u'title': u'pyxform_autotesttitle',
            u'sms_keyword': u'a',
            u'default_language': u'default',
            u'id_string': u'a',
            u'type': u'survey',
            u'children': [{
                u'name': u'name',
                u'label': u'Name',
                u'type': u'text'
            }, {
                u'children': [{
                    u'name': u'female',
                    u'label': u'Female'
                }, {
                    u'name': u'male',
                    u'label': u'Male'
                }],
                u'name': u'gender',
                u'label': u'Sex',
                u'type': u'select one'
            }, {
                u'control': {
                    u'bodyless': True
                },
                u'children': [{
                    u'name': u'instanceID',
                    u'bind': {
                        u'readonly': u'true()',
                        u'calculate': u"concat('uuid:', uuid())"
                    },
                    u'type': u'calculate'
                }],
                u'name': u'meta',
                u'type': u'group'
            }]
        }  # yapf: disable

        with self.assertRaises(AssertionError):
            get_merged_xform_survey([xform1])

        survey = get_merged_xform_survey([xform1, xform2])
        self.assertEqual(survey.to_json_dict(), expected)

        # no matching fields
        with self.assertRaises(serializers.ValidationError):
            survey = get_merged_xform_survey([xform1, xform3])
Ejemplo n.º 2
0
    def test_merged_dataset_dict_contains_no_bind_attributes(self):
        """
        Test get_merged_xform_survey(): should not contain bind elements.
        """
        self.project = get_user_default_project(self.user)
        xform1 = self._publish_markdown(GROUP_A_MD, self.user, id_string='a')
        xform2 = self._publish_markdown(GROUP_B_MD, self.user, id_string='b')
        xform3 = self._publish_markdown(GROUP_C_MD, self.user, id_string='c')
        survey = get_merged_xform_survey([xform1, xform2, xform3])

        result = survey.to_json_dict()
        count = len([child for child in result["children"] if 'bind' in child])

        # check that no elements within the newly created
        # merged_dataset_dict contains bind attributes
        self.assertEqual(count, 0)
Ejemplo n.º 3
0
    def test_matching_fields_by_type(self):
        """
        Test get_merged_xform_survey(): should only match when question type
        matches.
        """
        self.project = get_user_default_project(self.user)
        xform1 = self._publish_markdown(GROUP_A_MD.replace('group', 'repeat'),
                                        self.user,
                                        id_string='a')
        xform2 = self._publish_markdown(GROUP_B_MD, self.user, id_string='b')
        survey = get_merged_xform_survey([xform1, xform2])
        expected = {
            u'default_language': u'default',
            u'id_string': u'a',
            u'children': [{
                u'name': u'name',
                u'label': u'Name',
                u'type': u'text'
            }, {
                u'control': {
                    u'bodyless': True
                },
                u'children': [{
                    u'name': u'instanceID',
                    u'bind': {
                        u'readonly': u'true()',
                        u'calculate': u"concat('uuid:', uuid())"
                    },
                    u'type': u'calculate'
                }],
                u'name': u'meta',
                u'type': u'group'
            }],
            u'type': u'survey',
            u'name': u'data',
            u'sms_keyword': u'a',
            u'title': u'pyxform_autotesttitle'
        }  # yapf: disable

        self.assertEqual(survey.to_json_dict(), expected)
Ejemplo n.º 4
0
    def test_repeat_merged_xform_survey(self):
        """
        Test get_merged_xform_survey() with repeats in xforms.
        """
        self.project = get_user_default_project(self.user)
        xform1 = self._publish_markdown(GROUP_A_MD.replace('group', 'repeat'),
                                        self.user,
                                        id_string='a')
        xform2 = self._publish_markdown(GROUP_B_MD.replace('group', 'repeat'),
                                        self.user,
                                        id_string='b')
        survey = get_merged_xform_survey([xform1, xform2])
        expected = {
            u'default_language': u'default',
            u'id_string': u'a',
            u'children': [{
                u'name': u'name',
                u'label': u'Name',
                u'type': u'text'
            }, {
                u'children': [{
                    u'children': [{
                        u'name': u'female',
                        u'label': u'Female'
                    }, {
                        u'name': u'male',
                        u'label': u'Male'
                    }],
                    u'name': u'gender',
                    u'label': u'Sex',
                    u'type': u'select one'
                }],
                u'name': u'info',
                u'label': u'Info',
                u'type': u'repeat'
            }, {
                u'children': [{
                    u'children': [{
                        u'children': [{
                            u'name': u'female',
                            u'label': u'Female'
                        }, {
                            u'name': u'male',
                            u'label': u'Male'
                        }],
                        u'name': u'gender',
                        u'label': u'Sex',
                        u'type': u'select one'
                    }],
                    u'name': u'person',
                    u'label': u'Person',
                    u'type': u'repeat'
                }],
                u'name': u'other',
                u'label': u'Other',
                u'type': u'repeat',
            }, {
                u'control': {
                    u'bodyless': True
                },
                u'children': [{
                    u'name': u'instanceID',
                    u'bind': {
                        u'readonly': u'true()',
                        u'calculate': u"concat('uuid:', uuid())"
                    },
                    u'type': u'calculate'
                }],
                u'name': u'meta',
                u'type': u'group'
            }],
            u'type': u'survey',
            u'name': u'data',
            u'sms_keyword': u'a',
            u'title': u'pyxform_autotesttitle'
        }  # yapf: disable

        self.assertEqual(survey.to_json_dict(), expected)
Ejemplo n.º 5
0
    def test_get_merged_xform_survey(self):
        """
        Test get_merged_xform_survey()
        """
        with self.assertRaises(serializers.ValidationError):
            get_merged_xform_survey([])

        self.project = get_user_default_project(self.user)
        xform1 = self._publish_markdown(A_MD, self.user, id_string='a')
        xform2 = self._publish_markdown(B_MD, self.user, id_string='b')
        xform3 = self._publish_markdown(MD, self.user, id_string='c')
        expected = {
            u'name': u'data',
            u'title': u'pyxform_autotesttitle',
            u'sms_keyword': u'a',
            u'default_language': u'default',
            u'id_string': u'a',
            u'type': u'survey',
            u'children': [{
                u'name': u'name',
                u'label': u'Name',
                u'type': u'text'
            }, {
                u'children': [{
                    u'name': u'male',
                    u'label': u'Male'
                }, {
                    u'name': u'female',
                    u'label': u'Female'
                }],
                u'name': u'gender',
                u'label': u'Sex',
                u'list_name': u'gender',
                u'type': u'select one'
            }, {
                u'control': {
                    u'bodyless': True
                },
                u'children': [{
                    u'name': u'instanceID',
                    u'bind': {
                        u'readonly': u'true()',
                        u'jr:preload': u"uid"
                    },
                    u'type': u'calculate'
                }],
                u'name': u'meta',
                u'type': u'group'
            }]
        }  # yapf: disable

        with self.assertRaises(serializers.ValidationError):
            get_merged_xform_survey([xform1])

        survey = get_merged_xform_survey([xform1, xform2])
        survey_dict = survey.to_json_dict()

        # this field seems to change 50% of the time
        expected2 = copy.deepcopy(expected)
        expected2['children'][1]['children'] = \
            [{'name': 'female', 'label': 'Female'},
             {'name': 'male', 'label': 'Male'}]
        self.assertTrue(survey_dict == expected or survey_dict == expected2)

        # no matching fields
        with self.assertRaises(serializers.ValidationError):
            survey = get_merged_xform_survey([xform1, xform3])