Exemple #1
0
    def setUpClass(cls):
        super(TestExportInstanceDBAccessors, cls).setUpClass()
        cls.form_instance_deid = FormExportInstance(domain=cls.domain,
                                                    name='Forms',
                                                    is_deidentified=True)
        cls.form_instance_wrong = FormExportInstance(
            domain='wrong-domain',
            name='Forms',
        )
        cls.form_instance_daily_saved = FormExportInstance(
            domain='wrong-domain',
            is_daily_saved_export=True,
        )
        cls.case_instance_deid = CaseExportInstance(domain=cls.domain,
                                                    name='Cases',
                                                    is_deidentified=True)
        cls.case_instance = CaseExportInstance(domain=cls.domain,
                                               name='Cases',
                                               is_deidentified=False)
        cls.case_instance_daily_saved = CaseExportInstance(
            domain='wrong-domain',
            is_daily_saved_export=True,
        )

        cls.instances = [
            cls.form_instance_deid,
            cls.form_instance_wrong,
            cls.form_instance_daily_saved,
            cls.case_instance,
            cls.case_instance_deid,
            cls.case_instance_daily_saved,
        ]
        for instance in cls.instances:
            instance.save()
 def setUpClass(cls):
     cls.exports = [
         FormExportInstance(is_daily_saved_export=True),
         FormExportInstance(is_daily_saved_export=False),
         CaseExportInstance(is_daily_saved_export=True),
     ]
     for export in cls.exports:
         export.save()
 def setUpClass(cls):
     super(TestDailySavedExports, cls).setUpClass()
     cls.exports = [
         FormExportInstance(is_daily_saved_export=True),
         FormExportInstance(is_daily_saved_export=False),
         CaseExportInstance(is_daily_saved_export=True),
     ]
     for export in cls.exports:
         export.save()
    def setUpClass(cls):
        super(TestExportInstanceDBAccessors, cls).setUpClass()
        cls.form_instance = FormExportInstance(
            domain=cls.domain,
            name='Forms',
            is_deidentified=False
        )
        cls.form_instance_deid = FormExportInstance(
            domain=cls.domain,
            name='Forms',
            is_deidentified=True
        )
        cls.form_instance_wrong = FormExportInstance(
            domain='wrong-domain',
            name='Forms',
        )
        cls.form_instance_daily_saved = FormExportInstance(
            domain='wrong-domain',
            is_daily_saved_export=True,
            auto_rebuild_enabled=True,
            last_accessed=datetime.utcnow()
        )
        cls.case_instance_deid = CaseExportInstance(
            domain=cls.domain,
            name='Cases',
            is_deidentified=True
        )
        cls.case_instance = CaseExportInstance(
            domain=cls.domain,
            name='Cases',
            is_deidentified=False
        )
        cls.case_instance_daily_saved = CaseExportInstance(
            domain='wrong-domain',
            is_daily_saved_export=True,
            auto_rebuild_enabled=True,
            last_accessed=(datetime.utcnow() - timedelta(days=4))
        )

        cls.instances = [
            cls.form_instance,
            cls.form_instance_deid,
            cls.form_instance_wrong,
            cls.form_instance_daily_saved,
            cls.case_instance,
            cls.case_instance_deid,
            cls.case_instance_daily_saved,
        ]
        for instance in cls.instances:
            instance.save()
Exemple #5
0
 def setUp(cls):
     cls.new_exports = [
         FormExportInstance(),
         CaseExportInstance(),
     ]
     for export in cls.new_exports:
         export.save()
Exemple #6
0
    def test_populated_metadata_document(self):
        odata_config = FormExportInstance(
            _id='my_config_id',
            domain=self.domain.name,
            is_odata_config=True,
            tables=[
                TableConfiguration(
                    columns=[
                        ExportColumn(label='selected_property_1', selected=True),
                        ExportColumn(label='selected_property_2', selected=True),
                        ExportColumn(label='unselected_property'),
                    ],
                ),
            ]
        )
        odata_config.save()
        self.addCleanup(odata_config.delete)

        correct_credentials = self._get_correct_credentials()
        with flag_enabled('ODATA'):
            response = self._execute_query(correct_credentials)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response['Content-Type'], 'application/xml')
        self.assertEqual(response['OData-Version'], '4.0')
        self.assertXmlEqual(
            self.get_xml(
                'populated_form_odata_metadata_document_from_config',
                override_path=PATH_TO_TEST_DATA
            ),
            response.content
        )
    def test_multi_table_order(self):
        tables = [
            TableConfiguration(label="My table {}".format(i),
                               selected=True,
                               path=[],
                               columns=[
                                   ExportColumn(
                                       label="Q{}".format(i),
                                       item=ScalarItem(path=[
                                           PathNode(name='form'),
                                           PathNode(name='q{}'.format(i))
                                       ], ),
                                       selected=True,
                                   ),
                               ]) for i in range(10)
        ]
        export_instance = FormExportInstance(export_format=Format.HTML,
                                             tables=tables)
        writer = _get_writer([export_instance])
        docs = [{
            'domain': 'my-domain',
            '_id': '1234',
            "form": {'q{}'.format(i): 'value {}'.format(i)
                     for i in range(10)}
        }]
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, docs)
        with ExportFile(writer.path, writer.format) as export:
            exported_tables = [
                table for table in re.findall('<h2>(.*)</h2>', export.read())
            ]

        expected_tables = [t.label for t in tables]
        self.assertEqual(expected_tables, exported_tables)
Exemple #8
0
 def test_ignore_form_link_label(self):
     export_with_form_link = FormExportInstance(
         is_odata_config=True,
         tables=[
             TableConfiguration(
                 selected=True,
                 columns=[
                     ExportColumn(
                         label='my_form_link',
                         item=ExportItem(
                             path=[
                                 PathNode(name='form'),
                                 PathNode(name='meta'),
                                 PathNode(name='instanceID')
                             ],
                             transform=FORM_ID_TO_LINK,
                         ),
                         selected=True,
                     )
                 ]
             )
         ]
     )
     export_with_form_link.save()
     self.addCleanup(export_with_form_link.delete)
     cleaned_export = FormExportInstance.get(export_with_form_link.get_id)
     self.assertEqual(cleaned_export.tables[0].columns[0].label, 'my_form_link')
    def test_empty_table_label(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            case_type=DEFAULT_CASE_TYPE,
            split_multiselects=True,
            tables=[
                TableConfiguration(label="",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])
        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, self.docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(json.loads(export.read()), {
                u'Sheet1': {
                    u'headers': [u'Q1'],
                    u'rows': [[u'foo'], [u'bip']],
                }
            })
Exemple #10
0
 def get_instance(cls, domain_name):
     return FormExportInstance(
         domain=domain_name,
         is_odata_config=True,
         transform_dates=False,
         tables=[
             TableConfiguration(
                 selected=True,
                 columns=[
                     ExportColumn(label='received_on',
                                  selected=True,
                                  item=ExportItem(
                                      path=[PathNode(name='received_on')])),
                     ExportColumn(label='started_time',
                                  selected=True,
                                  item=ExportItem(path=[
                                      PathNode(name='form'),
                                      PathNode(name='meta'),
                                      PathNode(name='timeStart'),
                                  ])),
                     ExportColumn(label='selected_property_1',
                                  selected=True),
                     ExportColumn(label='selected_property_2',
                                  selected=True),
                     ExportColumn(label='unselected_property'),
                 ],
             ),
         ])
    def test_split_questions_false(self):
        """Ensure multiselects are not split when `split_multiselects` is set to False"""
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            case_type=DEFAULT_CASE_TYPE,
            split_multiselects=False,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       SplitExportColumn(
                                           label="MC",
                                           item=MultipleChoiceItem(
                                               path=[
                                                   PathNode(name='form'),
                                                   PathNode(name='mc')
                                               ],
                                               options=[
                                                   Option(value='one'),
                                                   Option(value='two'),
                                               ]),
                                           selected=True,
                                       )
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance, {
                'My table': {
                    'headers': ['MC'],
                    'rows': [['two extra'], ['one two']],
                }
            })
    def test_simple_table(self, export_save):
        """
        Confirm that some simple documents and a simple FormExportInstance
        are writtern with _write_export_file() correctly
        """

        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   columns=[
                                       ExportColumn(label="Q3",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q3')
                                                    ], ),
                                                    selected=True),
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance, {
                'My table': {
                    'headers': ['Q3', 'Q1'],
                    'rows': [['baz', 'foo'], ['bop', 'bip']],
                }
            })
        self.assertTrue(export_save.called)
    def test_empty_table_label(self, export_save):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            case_type=DEFAULT_CASE_TYPE,
            split_multiselects=True,
            tables=[
                TableConfiguration(label="",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance,
            {'Sheet1': {
                'headers': ['Q1'],
                'rows': [['foo'], ['bip']],
            }})
        self.assertTrue(export_save.called)
    def test_transform_dates(self, export_save):
        """Ensure dates are transformed for excel when `transform_dates` is set to True"""
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            case_type=DEFAULT_CASE_TYPE,
            transform_dates=True,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(
                                           label="Date",
                                           item=MultipleChoiceItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='date')
                                           ], ),
                                           selected=True,
                                       )
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance, {
                'My table': {
                    'headers': ['Date'],
                    'rows': [[MISSING_VALUE],
                             [
                                 couch_to_excel_datetime(
                                     '2015-07-22T14:16:49.584880Z', None)
                             ]],
                }
            })
        self.assertTrue(export_save.called)
Exemple #15
0
 def test_formid_column_label(self):
     export_with_modified_formid_column = FormExportInstance(
         is_odata_config=True,
         tables=[
             TableConfiguration(
                 selected=True,
                 columns=[
                     ExportColumn(
                         label='modified_form_id_column',
                         item=ExportItem(
                             path=[
                                 PathNode(name='form'),
                                 PathNode(name='meta'),
                                 PathNode(name='instanceID')
                             ]
                         ),
                         selected=True,
                     )
                 ]
             )
         ]
     )
     export_with_modified_formid_column.save()
     self.addCleanup(export_with_modified_formid_column.delete)
     cleaned_export = FormExportInstance.get(export_with_modified_formid_column.get_id)
     self.assertEqual(cleaned_export.tables[0].columns[0].label, 'formid')
    def test_paginated_table(self, export_save):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   columns=[
                                       ExportColumn(label="Q3",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q3')
                                                    ], ),
                                                    selected=True),
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs + self.docs, export_instance, {
                'My table_000': {
                    'headers': ['Q3', 'Q1'],
                    'rows': [['baz', 'foo'], ['bop', 'bip']],
                },
                'My table_001': {
                    'headers': ['Q3', 'Q1'],
                    'rows': [['baz', 'foo'], ['bop', 'bip']],
                }
            })
        self.assertTrue(export_save.called)
Exemple #17
0
    def test_populated_metadata_document(self):
        odata_config_1 = FormExportInstance(
            _id='odata_config_1',
            domain=self.domain.name,
            is_odata_config=True,
            tables=[TableConfiguration(columns=[])])
        odata_config_1.save()
        self.addCleanup(odata_config_1.delete)

        odata_config_2 = FormExportInstance(
            _id='odata_config_2',
            domain=self.domain.name,
            is_odata_config=True,
            tables=[
                TableConfiguration(columns=[
                    ExportColumn(label='selected_property_1', selected=True),
                    ExportColumn(label='selected_property_2', selected=True),
                    ExportColumn(label='unselected_property'),
                ], ),
            ])
        odata_config_2.save()
        self.addCleanup(odata_config_2.delete)

        non_odata_config = FormExportInstance(domain=self.domain.name)
        non_odata_config.save()
        self.addCleanup(non_odata_config.delete)

        config_in_other_domain = FormExportInstance(domain='other_domain',
                                                    is_odata_config=True)
        config_in_other_domain.save()
        self.addCleanup(config_in_other_domain.delete)

        correct_credentials = self._get_correct_credentials()
        with flag_enabled('ODATA'):
            with patch(
                    'corehq.apps.api.odata.views.get_odata_form_configs_by_domain',
                    return_value=sorted(get_odata_form_configs_by_domain(
                        self.domain.name),
                                        key=lambda _config: _config.get_id)):
                response = self._execute_query(correct_credentials)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response['Content-Type'], 'application/xml')
        self.assertEqual(response['OData-Version'], '4.0')
        self.assertXmlEqual(
            self.get_xml('populated_form_odata_metadata_document_from_config',
                         override_path=PATH_TO_TEST_DATA), response.content)
Exemple #18
0
 def setUp(self):
     self.instance = FormExportInstance(tables=[
         TableConfiguration(path=MAIN_TABLE),
         TableConfiguration(path=[
             PathNode(name='data', is_repeat=False),
             PathNode(name='repeat', is_repeat=True)
         ],
                            columns=[MultiMediaExportColumn(selected=True)])
     ])
    def test_populated_service_document(self):
        odata_config_1 = FormExportInstance(domain=self.domain.name, is_odata_config=True)
        odata_config_1.save()
        self.addCleanup(odata_config_1.delete)

        odata_config_2 = FormExportInstance(domain=self.domain.name, is_odata_config=True)
        odata_config_2.save()
        self.addCleanup(odata_config_2.delete)

        non_odata_config = FormExportInstance(domain=self.domain.name)
        non_odata_config.save()
        self.addCleanup(non_odata_config.delete)

        config_in_other_domain = FormExportInstance(domain='other_domain', is_odata_config=True)
        config_in_other_domain.save()
        self.addCleanup(config_in_other_domain.delete)

        correct_credentials = self._get_correct_credentials()
        with flag_enabled('ODATA'):
            response = self._execute_query(correct_credentials)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response['OData-Version'], '4.0')
        response_content = json.loads(response.content.decode('utf-8'))
        self.assertCountEqual(response_content, ['@odata.context', 'value'])
        self.assertEqual(
            response_content['@odata.context'],
            'http://localhost:8000/a/test_domain/api/v0.5/odata/forms/$metadata'
        )
        self.assertCountEqual(response_content['value'], [
            {
                'url': odata_config_1.get_id,
                'kind': 'EntitySet',
                'name': odata_config_1.get_id,
            },
            {
                'url': odata_config_2.get_id,
                'kind': 'EntitySet',
                'name': odata_config_2.get_id,
            },
        ])
Exemple #20
0
    def test_multi_table(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    path=[],
                    columns=[
                        ExportColumn(
                            label="Q3",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q3')],
                            ),
                            selected=True,
                        ),
                    ]
                ),
                TableConfiguration(
                    label="My other table",
                    selected=True,
                    path=[PathNode(name='form', is_repeat=False), PathNode(name="q2", is_repeat=False)],
                    columns=[
                        ExportColumn(
                            label="Q4",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q2'), PathNode(name='q4')],
                            ),
                            selected=True,
                        ),
                    ]
                )
            ]
        )
        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, self.docs)
        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    u'My table': {
                        u'headers': [u'Q3'],
                        u'rows': [[u'baz'], [u'bop']],

                    },
                    u'My other table': {
                        u'headers': [u'Q4'],
                        u'rows': [[u'bar'], [u'boop']],
                    }
                }
            )
Exemple #21
0
    def test_case_name_transform(self):
        docs = [
            {
                'domain': 'my-domain',
                '_id': '1234',
                "form": {
                    "caseid": "robin",
                },
            },
            {
                'domain': 'my-domain',
                '_id': '1234',
                "form": {
                    "caseid": "i-do-not-exist",
                },
            }
        ]
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="case_name",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='caseid')],
                                transform=CASE_NAME_TRANSFORM,
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )
        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    u'My table': {
                        u'headers': [u'case_name'],
                        u'rows': [[u'batman'], [MISSING_VALUE]],

                    }
                }
            )
 def test_unselected_column_excluded(self):
     self.assertEqual(
         ODataFormSerializer.serialize_forms_using_config(
             [{
                 'user_id': 'the-user-id'
             }],
             FormExportInstance(tables=[
                 TableConfiguration(columns=[
                     ExportColumn(
                         label='user-id',
                         item=ExportItem(path=[PathNode(name='user_id')]),
                         selected=False,
                     )
                 ])
             ])), [{}])
 def test_missing_value_is_null(self):
     self.assertEqual(
         ODataFormSerializer.serialize_forms_using_config(
             [{}],
             FormExportInstance(tables=[
                 TableConfiguration(columns=[
                     ExportColumn(
                         label='user-id',
                         item=ExportItem(path=[PathNode(name='user_id')]),
                         selected=True,
                     )
                 ])
             ])), [{
                 'user-id': '---'
             }])
    def test_config_in_different_domain(self):
        export_config_in_other_domain = FormExportInstance(
            _id='config_id',
            tables=[TableConfiguration(columns=[])],
            domain='different_domain')
        export_config_in_other_domain.save()
        self.addCleanup(export_config_in_other_domain.delete)

        correct_credentials = self._get_correct_credentials()
        response = self.client.get(
            self._odata_feed_url_by_domain_and_config_id(
                self.domain.name, export_config_in_other_domain.get_id),
            HTTP_AUTHORIZATION='Basic ' + correct_credentials,
        )
        self.assertEqual(response.status_code, 404)
    def test_multi_table(self, export_save):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(
                                           label="Q3",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='q3')
                                           ], ),
                                           selected=True,
                                       ),
                                   ]),
                TableConfiguration(label="My other table",
                                   selected=True,
                                   path=[
                                       PathNode(name='form', is_repeat=False),
                                       PathNode(name="q2", is_repeat=False)
                                   ],
                                   columns=[
                                       ExportColumn(
                                           label="Q4",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='q2'),
                                               PathNode(name='q4')
                                           ], ),
                                           selected=True,
                                       ),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance, {
                'My table': {
                    'headers': ['Q3'],
                    'rows': [['baz'], ['bop']],
                },
                'My other table': {
                    'headers': ['Q4'],
                    'rows': [['bar'], ['boop']],
                }
            })
        self.assertTrue(export_save.called)
Exemple #26
0
    def test_simple_table(self):
        """
        Confirm that some simple documents and a simple FormExportInstance
        are writtern with _write_export_file() correctly
        """

        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="Q3",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q3')],
                            ),
                            selected=True
                        ),
                        ExportColumn(
                            label="Q1",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q1')],
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )

        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, self.docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    u'My table': {
                        u'headers': [u'Q3', u'Q1'],
                        u'rows': [[u'baz', u'foo'], [u'bop', u'bip']],

                    }
                }
            )
    def test_empty_location(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="location",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='meta'), PathNode(name='location')],
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )

        docs = [
            {
                'domain': 'my-domain',
                '_id': '1234',
                'form': {
                    'meta': {
                        'location': {'xmlns': 'abc'},
                    }
                }
            }
        ]

        writer = get_export_writer([export_instance])
        with writer.open([export_instance]):
            write_export_instance(writer, export_instance, docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    'My table': {
                        'headers': ['location'],
                        'rows': [[EMPTY_VALUE]],

                    }
                }
            )
    def test_array_data_in_scalar_question(self):
        '''
        This test ensures that when a question id has array data
        that we return still return a string for scalar data.
        This happens rarely
        '''
        doc = {
            'domain': 'my-domain',
            '_id': '12345',
            "form": {
                "array": ["one", "two"],
            }
        }

        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            xmlns='xmlns',
            tables=[TableConfiguration(
                label="My table",
                selected=True,
                path=[],
                columns=[
                    ExportColumn(
                        label="Scalar Array",
                        item=ScalarItem(path=[PathNode(name='form'), PathNode(name='array')]),
                        selected=True,
                    )
                ]
            )]
        )
        writer = get_export_writer([export_instance])
        with writer.open([export_instance]):
            write_export_instance(writer, export_instance, [doc])

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    'My table': {
                        'headers': ['Scalar Array'],
                        'rows': [['one two']],

                    }
                }
            )
Exemple #29
0
 def test_get_export_properties(self):
     export_instance = FormExportInstance(tables=[
         TableConfiguration(label="My table",
                            selected=True,
                            path=[],
                            columns=[
                                ExportColumn(
                                    label="Q3",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='q3')
                                    ], ),
                                    selected=True,
                                ),
                                ExportColumn(
                                    label="dontshow",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='dontshow')
                                    ], ),
                                    selected=False,
                                ),
                            ]),
         TableConfiguration(label="My other table",
                            selected=True,
                            path=[
                                PathNode(name='form', is_repeat=False),
                                PathNode(name="q2", is_repeat=False)
                            ],
                            columns=[
                                ExportColumn(
                                    label="Q4",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='q2'),
                                        PathNode(name='q4')
                                    ], ),
                                    selected=True,
                                ),
                            ])
     ])
     with mock.patch('corehq.apps.export.models.new.FormExportInstance.get',
                     return_value=export_instance):
         props = _get_export_properties("fake id for my export instance",
                                        False)
         self.assertEqual(props, set(['q2-q4', 'q3']))
Exemple #30
0
    def test_user_permissions(self):
        self.web_user.set_role(self.domain.name, 'none')
        self.web_user.save()
        self.addCleanup(self._setup_user_permissions)

        export_config = FormExportInstance(
            _id='config_id',
            tables=[TableConfiguration(columns=[])],
            domain=self.domain.name,
        )
        export_config.save()
        self.addCleanup(export_config.delete)

        correct_credentials = self._get_correct_credentials()
        with flag_enabled('ODATA'):
            response = self._execute_query(correct_credentials)
        self.assertEqual(response.status_code, 403)