Esempio n. 1
0
 def _publish_transportation_id_string_starts_with_number_form(self):
     xls_path = os.path.join(self.this_directory, "fixtures",
         "transportation", "transportation.id_starts_with_num.xls")
     count = XForm.objects.count()
     response = MainTestCase._publish_xls_file(self, xls_path)
     self.assertEqual(XForm.objects.count(), count + 1)
     self.xform = XForm.objects.all().reverse()[0]
Esempio n. 2
0
 def _publish_transportation_id_string_starts_with_number_form(self):
     xls_path = os.path.join(
         self.this_directory, "fixtures", "transportation", "transportation.id_starts_with_num.xls"
     )
     count = XForm.objects.count()
     response = MainTestCase._publish_xls_file(self, xls_path)
     self.assertEqual(XForm.objects.count(), count + 1)
     self.xform = XForm.objects.all().reverse()[0]
Esempio n. 3
0
    def _publish_xls_file(self):
        xls_path = os.path.join(self.this_directory, "fixtures", "transportation", "transportation.xls")
        pre_count = XForm.objects.count()
        response = MainTestCase._publish_xls_file(self, xls_path)

        # make sure publishing the survey worked
        self.assertEqual(response.status_code, 200)
        self.assertEqual(XForm.objects.count(), pre_count+1)
        self.xform = list(XForm.objects.all())[-1]
        self.assertEqual(self.xform.id_string, "transportation_2011_07_25")
Esempio n. 4
0
 def test_publish_bad_xls_with_unicode_in_error(self):
     """
     Check that publishing a bad xls where the error has a unicode character
     returns a 200, thus showing a readable error to the user
     """
     self._create_user_and_login()
     path = os.path.join(self.this_directory, "fixtures", "form_with_unicode_in_relevant_column.xlsx")
     response = MainTestCase._publish_xls_file(self, path)
     # make sure we get a 200 response
     self.assertEqual(response.status_code, 200)
Esempio n. 5
0
 def test_publish_bad_xls_with_unicode_in_error(self):
     """
     Check that publishing a bad xls where the error has a unicode character
     returns a 200, thus showing a readable error to the user
     """
     self._create_user_and_login()
     path = os.path.join(self.this_directory, 'fixtures',
                         'form_with_unicode_in_relevant_column.xlsx')
     response = MainTestCase._publish_xls_file(self, path)
     # make sure we get a 200 response
     self.assertEqual(response.status_code, 200)
Esempio n. 6
0
    def test_uuid_injection_in_cascading_select(self):
        """Test that the uuid is injected in the right instance node for
        forms with a cascading select"""
        pre_count = XForm.objects.count()
        xls_path = os.path.join(self.this_directory, "fixtures",
                                "cascading_selects",
                                "new_cascading_select.xls")
        file_name, file_ext = os.path.splitext(os.path.split(xls_path)[1])
        self.response = MainTestCase._publish_xls_file(self, xls_path)
        post_count = XForm.objects.count()
        self.assertEqual(post_count, pre_count + 1)
        xform = XForm.objects.latest('date_created')

        # check that the uuid is within the main instance/ the one without an id attribute
        xml = clean_and_parse_xml(xform.xml)

        # check for instance nodes that are direct children of the model node
        model_node = xml.getElementsByTagName("model")[0]
        instance_nodes = [
            node for node in model_node.childNodes
            if node.nodeType == Node.ELEMENT_NODE and node.tagName.lower() ==
            "instance" and not node.hasAttribute("id")
        ]
        self.assertEqual(len(instance_nodes), 1)
        instance_node = instance_nodes[0]

        # get the first element whose id attribute is equal to our form's id_string
        form_nodes = [
            node for node in instance_node.childNodes
            if node.nodeType == Node.ELEMENT_NODE
            and node.getAttribute("id") == xform.id_string
        ]
        form_node = form_nodes[0]

        # find the formhub node that has a uuid child node
        formhub_nodes = form_node.getElementsByTagName("formhub")
        self.assertEqual(len(formhub_nodes), 1)
        uuid_nodes = formhub_nodes[0].getElementsByTagName("uuid")
        self.assertEqual(len(uuid_nodes), 1)

        # check for the calculate bind
        calculate_bind_nodes = [
            node for node in model_node.childNodes
            if node.nodeType == Node.ELEMENT_NODE and node.tagName == "bind"
            and node.getAttribute("nodeset") == "/%s/formhub/uuid" % file_name
        ]
        self.assertEqual(len(calculate_bind_nodes), 1)
        calculate_bind_node = calculate_bind_nodes[0]
        self.assertEqual(calculate_bind_node.getAttribute("calculate"),
                         "'%s'" % xform.uuid)
Esempio n. 7
0
    def test_uuid_injection_in_cascading_select(self):
        """Test that the uuid is injected in the right instance node for
        forms with a cascading select"""
        pre_count = XForm.objects.count()
        xls_path = os.path.join(self.this_directory, "fixtures", "cascading_selects", "new_cascading_select.xls")
        file_name, file_ext = os.path.splitext(os.path.split(xls_path)[1])
        self.response = MainTestCase._publish_xls_file(self, xls_path)
        post_count = XForm.objects.count()
        self.assertEqual(post_count, pre_count + 1)
        xform = XForm.objects.latest("date_created")

        # check that the uuid is within the main instance/ the one without an id attribute
        xml = clean_and_parse_xml(xform.xml)

        # check for instance nodes that are direct children of the model node
        model_node = xml.getElementsByTagName("model")[0]
        instance_nodes = [
            node
            for node in model_node.childNodes
            if node.nodeType == Node.ELEMENT_NODE and node.tagName.lower() == "instance" and not node.hasAttribute("id")
        ]
        self.assertEqual(len(instance_nodes), 1)
        instance_node = instance_nodes[0]

        # get the first element whose id attribute is equal to our form's id_string
        form_nodes = [
            node
            for node in instance_node.childNodes
            if node.nodeType == Node.ELEMENT_NODE and node.getAttribute("id") == xform.id_string
        ]
        form_node = form_nodes[0]

        # find the formhub node that has a uuid child node
        formhub_nodes = form_node.getElementsByTagName("formhub")
        self.assertEqual(len(formhub_nodes), 1)
        uuid_nodes = formhub_nodes[0].getElementsByTagName("uuid")
        self.assertEqual(len(uuid_nodes), 1)

        # check for the calculate bind
        calculate_bind_nodes = [
            node
            for node in model_node.childNodes
            if node.nodeType == Node.ELEMENT_NODE
            and node.tagName == "bind"
            and node.getAttribute("nodeset") == "/%s/formhub/uuid" % file_name
        ]
        self.assertEqual(len(calculate_bind_nodes), 1)
        calculate_bind_node = calculate_bind_nodes[0]
        self.assertEqual(calculate_bind_node.getAttribute("calculate"), "'%s'" % xform.uuid)
Esempio n. 8
0
 def _publish_file(self, xls_path, strict=True):
     """
     Returns False if not strict and publish fails
     """
     pre_count = XForm.objects.count()
     self.response = MainTestCase._publish_xls_file(self, xls_path)
     # make sure publishing the survey worked
     self.assertEqual(self.response.status_code, 200)
     if XForm.objects.count() != pre_count + 1:
         # print file location
         print '\nPublish Failure for file: %s' % xls_path
         if strict:
             self.assertEqual(XForm.objects.count(), pre_count + 1)
         else:
             return False
     self.xform = list(XForm.objects.all().order_by('date_created'))[-1]
     return True
Esempio n. 9
0
 def _publish_file(self, xls_path, strict=True):
     """
     Returns False if not strict and publish fails
     """
     pre_count = XForm.objects.count()
     self.response = MainTestCase._publish_xls_file(self, xls_path)
     # make sure publishing the survey worked
     self.assertEqual(self.response.status_code, 200)
     if XForm.objects.count() != pre_count + 1:
         # print file location
         print '\nPublish Failure for file: %s' % xls_path
         if strict:
             self.assertEqual(XForm.objects.count(), pre_count + 1)
         else:
             return False
     self.xform = list(XForm.objects.all())[-1]
     return True
Esempio n. 10
0
 def _publish_survey(self):
     self.this_directory = os.path.dirname(__file__)
     xls_path = os.path.join(self.this_directory, "fixtures", "gps",
                             "gps.xls")
     MainTestCase._publish_xls_file(self, xls_path)
Esempio n. 11
0
 def _publish_survey(self):
     self.this_directory = os.path.dirname(__file__)
     xls_path = os.path.join(
         self.this_directory, "fixtures", "gps", "gps.xls")
     MainTestCase._publish_xls_file(self, xls_path)