コード例 #1
0
 def test_prepare_xlsform_metadata_uses_default_language_var_labels(self):
     """Should emit metadata for the form's specified default language."""
     xlsform = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=self.fixtures.files["xlsform_multi_language"])
     observed = to_stata_xml.prepare_xlsform_metadata(
         form_def=xlsform["xlsform"], form_id="xlsform")
     var_labels = {x["#text"] for x in observed["var_labels"]}
     expected = "Do you like writing tests?"
     self.assertIn(expected, var_labels)
コード例 #2
0
 def test_prepare_xlsform_metadata_uses_default_language_value_labels(self):
     """Should emit metadata for the form's specified default language."""
     xlsform = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=self.fixtures.files["xlsform_multi_language"])
     observed = to_stata_xml.prepare_xlsform_metadata(
         form_def=xlsform["xlsform"], form_id="xlsform")
     vallabel_yes = [x["label"] for x in observed["value_labels"]][0][0]
     expected = {"@value": '1', "#text": "Yes"}
     self.assertDictEqual(expected, vallabel_yes)
コード例 #3
0
 def test_collate_xlsforms_by_form_id_most_recent_def_version_str(self):
     """Should return most recent definitions when version id is a str."""
     forms = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=self.fixtures.files["xlsform_version_ids_str"])
     expected = "Do you like writing tests?"
     observed = [
         v["label"] for k, v in forms["xlsform"].items() if eq(k, "var_c2")
     ][0]
     self.assertEqual(expected, observed)
コード例 #4
0
 def test_prepare_xlsform_metadata_returns_unique_vallab_defs(self):
     """Should emit unique value label definitions only once."""
     xlsform = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=self.fixtures.files["xlsform_unique_vallab"])
     observed = to_stata_xml.prepare_xlsform_metadata(
         form_def=xlsform["xlsform"], form_id="xlsform")
     all_names = [x["@name"] for x in observed["value_labels"]]
     unique_names = list(set(all_names))
     self.assertListEqual(all_names, unique_names)
コード例 #5
0
 def test_prepare_xlsform_metadata_uses_text_for_nonint_choice_list(self):
     """Should include non-int choice list variables as text."""
     xlsform = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=self.fixtures.files["xlsform_with_nonint_choices"])
     logger_name = "odk_aggregation_tool.aggregation"
     with self.assertLogs(logger=logger_name, level="WARNING"):
         observed = to_stata_xml.prepare_xlsform_metadata(
             form_def=xlsform["xlsform"], form_id="xlsform")
     self.assertTrue(len(observed["value_labels"]) == 1)
     variable_names = [x["@varname"] for x in observed["var_names"]]
     self.assertTrue("var_c2" in variable_names)
コード例 #6
0
 def test_prepare_xlsform_metadata_simple_populates_metadata(self):
     """Should populate all required metadata fields."""
     xlsform = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=self.fixtures.files["xlsform_simplest"])
     observed = to_stata_xml.prepare_xlsform_metadata(
         form_def=xlsform["xlsform"], form_id="xlsform")
     self.assertEqual(
         {
             "var_types", "var_names", "var_formats", "var_labels",
             "var_vallabel_map", "value_labels"
         }, set(observed))
     for k, v in observed.items():
         self.assertTrue(len(v) > 0)
コード例 #7
0
 def test_prepare_xform_data_handles_date_conversion(self):
     """Should convert ISO date to Stata elapsed date."""
     xlsform_path = self.fixtures.files["xlsform_date_variable"]
     instances_path = xlsform_path
     form_def = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=xlsform_path)["xlsform"]
     raw_data = to_stata_xml.collate_xform_instances(
         instances_path=instances_path)
     xform_data, unknown_vars = to_stata_xml.prepare_xform_data(
         xform_instances=raw_data, form_def=form_def)
     var_ds = [x.get("var_d") for x in xform_data]
     self.assertEqual("-5392", var_ds[0])
     self.assertEqual("18494", var_ds[1])
コード例 #8
0
 def test_tidy_form_def_cleans_invalid_names_in_unknown_variables(self):
     """Should remove invalid Stata identifier characters from varnames."""
     xlsform_path = self.fixtures.files["xlsform_unknown_variable"]
     instances_path = xlsform_path
     form_def = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=xlsform_path)["xlsform"]
     raw_data = to_stata_xml.collate_xform_instances(
         instances_path=instances_path)
     xform_data, unknown_vars = to_stata_xml.prepare_xform_data(
         xform_instances=raw_data, form_def=form_def)
     form_def = to_stata_xml.tidy_form_def(form_id="xlsform",
                                           form_def=form_def,
                                           unknown_vars=unknown_vars)
     self.assertIn("id", form_def)
コード例 #9
0
 def test_tidy_form_def_includes_unknown_variables(self):
     """Should include unknown variables with data that aren't in XLSForm."""
     xlsform_path = self.fixtures.files["xlsform_unknown_variable"]
     instances_path = xlsform_path
     form_def = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=xlsform_path)["xlsform"]
     raw_data = to_stata_xml.collate_xform_instances(
         instances_path=instances_path)
     xform_data, unknown_vars = to_stata_xml.prepare_xform_data(
         xform_instances=raw_data, form_def=form_def)
     form_def = to_stata_xml.tidy_form_def(form_id="xlsform",
                                           form_def=form_def,
                                           unknown_vars=unknown_vars)
     self.assertIn("var_e", form_def)
     self.assertIn("version", form_def)
     self.assertNotIn("extra", form_def)
     self.assertNotIn("settings", form_def)
コード例 #10
0
 def test_prepare_observations_includes_id_and_version_values(self):
     """Should include form_id and form_version in observation data."""
     xlsform_path = self.fixtures.files["xlsform_unknown_variable"]
     instances_path = xlsform_path
     form_def = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=xlsform_path)["xlsform"]
     raw_data = to_stata_xml.collate_xform_instances(
         instances_path=instances_path)
     xform_data, unknown_vars = to_stata_xml.prepare_xform_data(
         xform_instances=raw_data, form_def=form_def)
     form_def = to_stata_xml.tidy_form_def(form_id="xlsform",
                                           form_def=form_def,
                                           unknown_vars=unknown_vars)
     observations = to_stata_xml.prepare_observations(xform_data=xform_data,
                                                      form_def=form_def)
     output_keys = [x["@varname"] for x in observations[0]["v"]]
     self.assertIn("id", output_keys)
     self.assertIn("version", output_keys)
コード例 #11
0
 def test_collate_xlsforms_by_form_id_produces_2_form_defs(self):
     """Should discover the two form defs and return separate metadata."""
     forms = to_stata_xml.collate_xlsforms_by_form_id(
         xlsform_path=self.xlsform_root)
     self.assertEqual({"Q1302_BEHAVE", "R1302_BEHAVE"}, set(forms))