Beispiel #1
0
 def test_wrong_field_type(self):
     # can't put a percent in another percent
     field_spec = {"aggregation": "simple", "field": "is_pregnant", "type": "percent"}
     with self.assertRaises(BadValueError):
         ReportColumnFactory.from_spec(
             {"type": "percent", "column_id": "pct", "numerator": field_spec, "denominator": field_spec}
         )
Beispiel #2
0
 def testBadAggregation(self):
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec({
             "aggregation": "simple_",
             "field": "doc_id",
             "type": "field",
         })
Beispiel #3
0
 def testBadFormat(self):
     with self.assertRaises(BadValueError):
         ReportColumnFactory.from_spec({
             "aggregation": "simple",
             "field": "doc_id",
             "format": "default_",
             "type": "field",
         })
Beispiel #4
0
 def test_wrong_field_type(self):
     # can't put a percent in another percent
     field_spec = {
         "aggregation": "simple",
         "field": "is_pregnant",
         "type": "percent",
     }
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec({
             'type': 'percent',
             'column_id': 'pct',
             'numerator': field_spec,
             'denominator': field_spec,
         })
Beispiel #5
0
    def validate(self, required=True):
        def _check_for_duplicates(supposedly_unique_list, error_msg):
            # http://stackoverflow.com/questions/9835762/find-and-list-duplicates-in-python-list
            duplicate_items = set(
                [item for item in supposedly_unique_list if supposedly_unique_list.count(item) > 1]
            )
            if len(duplicate_items) > 0:
                raise BadSpecError(
                    _(error_msg).format(', '.join(sorted(duplicate_items)))
                )

        super(ReportConfiguration, self).validate(required)

        # check duplicates before passing to factory since it chokes on them
        _check_for_duplicates(
            [FilterSpec.wrap(f).slug for f in self.filters],
            'Filters cannot contain duplicate slugs: {}',
        )
        _check_for_duplicates(
            [ReportColumnFactory.from_spec(c).column_id for c in self.columns],
            'Columns cannot contain duplicate column_ids: {}',
        )

        # these calls all implicitly do validation
        ReportFactory.from_spec(self)
        self.ui_filters
        self.charts
Beispiel #6
0
 def testColumnDefaultsToField(self):
     field = ReportColumnFactory.from_spec({
         "aggregation": "simple",
         "field": "doc_id",
         "type": "field",
     })
     self.assertEqual('doc_id', field.column_id)
Beispiel #7
0
 def test_format_pct_non_numeric(self):
     spec = self._test_spec()
     spec['format'] = 'percent'
     wrapped = ReportColumnFactory.from_spec(spec)
     for unexpected_value in ['hello', object()]:
         self.assertEqual('?', wrapped.get_format_fn()({'num': 1, 'denom': unexpected_value}),
                          'non-numeric value failed for denominator {}'. format(unexpected_value))
         self.assertEqual('?', wrapped.get_format_fn()({'num': unexpected_value, 'denom': 1}))
 def test_format_both(self):
     spec = self._test_spec()
     spec['format'] = 'both'
     wrapped = ReportColumnFactory.from_spec(spec, is_static=False)
     self.assertEqual('33% (1/3)',
                      wrapped.get_format_fn()({
                          'num': 1,
                          'denom': 3
                      }))
Beispiel #9
0
 def testColumnSetFromAlias(self):
     field = ReportColumnFactory.from_spec({
         "aggregation": "simple",
         "field": "doc_id",
         "alias": "the_right_answer",
         "type": "field",
     })
     self.assertTrue(isinstance(field, FieldColumn))
     self.assertEqual('the_right_answer', field.column_id)
 def testColumnDefaultsToField(self):
     field = ReportColumnFactory.from_spec(
         {
             "aggregation": "simple",
             "field": "doc_id",
             "type": "field",
         },
         is_static=False)
     self.assertEqual('doc_id', field.column_id)
Beispiel #11
0
    def test_expansion(self):
        column = ReportColumnFactory.from_spec(
            dict(type="expanded", field="lab_result", display="Lab Result", format="default", description="foo")
        )
        cols = _expand_column(column, ["positive", "negative"], "en")

        self.assertEqual(len(cols), 2)
        self.assertEqual(type(cols[0].view), SumWhen)
        self.assertEqual(cols[1].view.whens, {"negative": 1})
Beispiel #12
0
 def test_format_pct(self):
     spec = self._test_spec()
     spec['format'] = 'percent'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual('33%',
                      wrapped.get_format_fn()({
                          'num': 1,
                          'denom': 3
                      }))
Beispiel #13
0
 def test_format_fraction(self):
     spec = self._test_spec()
     spec['format'] = 'fraction'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual('1/3',
                      wrapped.get_format_fn()({
                          'num': 1,
                          'denom': 3
                      }))
Beispiel #14
0
 def testColumnSetFromAlias(self):
     field = ReportColumnFactory.from_spec({
         "aggregation": "simple",
         "field": "doc_id",
         "alias": "the_right_answer",
         "type": "field",
     })
     self.assertTrue(isinstance(field, FieldColumn))
     self.assertEqual('the_right_answer', field.column_id)
Beispiel #15
0
 def testGoodFormat(self):
     for format in ["default", "percent_of_total"]:
         self.assertEquals(
             FieldColumn,
             type(
                 ReportColumnFactory.from_spec(
                     {"aggregation": "simple", "field": "doc_id", "format": format, "type": "field"}
                 )
             ),
         )
Beispiel #16
0
 def test_format_pct_denom_0(self):
     spec = self._test_spec()
     spec['format'] = 'percent'
     wrapped = ReportColumnFactory.from_spec(spec)
     for empty_value in [0, 0.0, None, '']:
         self.assertEqual(
             '--',
             wrapped.get_format_fn()({
                 'num': 1,
                 'denom': empty_value
             }))
Beispiel #17
0
 def test_format_pct_non_numeric(self):
     spec = self._test_spec()
     spec["format"] = "percent"
     wrapped = ReportColumnFactory.from_spec(spec)
     for unexpected_value in ["hello", object()]:
         self.assertEqual(
             "?",
             wrapped.get_format_fn()({"num": 1, "denom": unexpected_value}),
             "non-numeric value failed for denominator {}".format(unexpected_value),
         )
         self.assertEqual("?", wrapped.get_format_fn()({"num": unexpected_value, "denom": 1}))
Beispiel #18
0
    def test_expansion(self):
        column = ReportColumnFactory.from_spec(
            dict(type="expanded",
                 field="lab_result",
                 display="Lab Result",
                 format="default",
                 description="foo"))
        cols = expand_column(column, ["positive", "negative"], "en")

        self.assertEqual(len(cols), 2)
        self.assertEqual(type(cols[0].view), SumWhen)
        self.assertEqual(cols[1].view.whens, {'negative': 1})
 def test_missing_fields(self):
     field_spec = {
         "aggregation": "simple",
         "field": "is_pregnant",
         "type": "field",
     }
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec(
             {
                 'type': 'percent',
                 'column_id': 'pct',
             }, is_static=False)
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec(
             {
                 'type': 'percent',
                 'column_id': 'pct',
                 'numerator': field_spec,
             },
             is_static=False)
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec(
             {
                 'type': 'percent',
                 'column_id': 'pct',
                 'denominator': field_spec,
             },
             is_static=False)
Beispiel #20
0
 def testGoodFormat(self):
     for format in [
         'default',
         'percent_of_total',
     ]:
         self.assertEquals(FieldColumn, type(
             ReportColumnFactory.from_spec({
                 "aggregation": "simple",
                 "field": "doc_id",
                 "format": format,
                 "type": "field",
             })
         ))
Beispiel #21
0
 def testGoodFormat(self):
     for format in [
         'default',
         'percent_of_total',
     ]:
         self.assertEquals(FieldColumn, type(
             ReportColumnFactory.from_spec({
                 "aggregation": "simple",
                 "field": "doc_id",
                 "format": format,
                 "type": "field",
             }, is_static=False)
         ))
Beispiel #22
0
 def test_missing_fields(self):
     field_spec = {"aggregation": "simple", "field": "is_pregnant", "type": "field"}
     with self.assertRaises(BadValueError):
         ReportColumnFactory.from_spec({"type": "percent", "column_id": "pct"})
     with self.assertRaises(BadValueError):
         ReportColumnFactory.from_spec({"type": "percent", "column_id": "pct", "numerator": field_spec})
     with self.assertRaises(BadValueError):
         ReportColumnFactory.from_spec({"type": "percent", "column_id": "pct", "denominator": field_spec})
Beispiel #23
0
 def test_wrap(self):
     wrapped = ReportColumnFactory.from_spec(
         {
             "type": "percent",
             "column_id": "pct",
             "numerator": {"aggregation": "sum", "field": "has_danger_signs", "type": "field"},
             "denominator": {"aggregation": "sum", "field": "is_pregnant", "type": "field"},
         }
     )
     self.assertTrue(isinstance(wrapped, PercentageColumn))
     self.assertEqual("pct", wrapped.column_id)
     self.assertEqual("has_danger_signs", wrapped.numerator.field)
     self.assertEqual("is_pregnant", wrapped.denominator.field)
     self.assertEqual("percent", wrapped.format)
Beispiel #24
0
 def test_format_pct_non_numeric(self):
     spec = self._test_spec()
     spec['format'] = 'percent'
     wrapped = ReportColumnFactory.from_spec(spec)
     for unexpected_value in ['hello', object()]:
         self.assertEqual(
             '?',
             wrapped.get_format_fn()({
                 'num': 1,
                 'denom': unexpected_value
             }), 'non-numeric value failed for denominator {}'.format(
                 unexpected_value))
         self.assertEqual(
             '?',
             wrapped.get_format_fn()({
                 'num': unexpected_value,
                 'denom': 1
             }))
Beispiel #25
0
 def test_wrap(self):
     wrapped = ReportColumnFactory.from_spec({
         'type': 'percent',
         'column_id': 'pct',
         'numerator': {
             "aggregation": "sum",
             "field": "has_danger_signs",
             "type": "field",
         },
         'denominator': {
             "aggregation": "sum",
             "field": "is_pregnant",
             "type": "field",
         },
     })
     self.assertTrue(isinstance(wrapped, PercentageColumn))
     self.assertEqual('pct', wrapped.column_id)
     self.assertEqual('has_danger_signs', wrapped.numerator.field)
     self.assertEqual('is_pregnant', wrapped.denominator.field)
     self.assertEqual('percent', wrapped.format)
Beispiel #26
0
 def test_wrap(self):
     wrapped = ReportColumnFactory.from_spec({
         'type': 'percent',
         'column_id': 'pct',
         'numerator': {
             "aggregation": "sum",
             "field": "has_danger_signs",
             "type": "field",
         },
         'denominator': {
             "aggregation": "sum",
             "field": "is_pregnant",
             "type": "field",
         },
     })
     self.assertTrue(isinstance(wrapped, PercentageColumn))
     self.assertEqual('pct', wrapped.column_id)
     self.assertEqual('has_danger_signs', wrapped.numerator.field)
     self.assertEqual('is_pregnant', wrapped.denominator.field)
     self.assertEqual('percent', wrapped.format)
Beispiel #27
0
 def test_missing_fields(self):
     field_spec = {
         "aggregation": "simple",
         "field": "is_pregnant",
         "type": "field",
     }
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec({
             'type': 'percent',
             'column_id': 'pct',
         })
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec({
             'type': 'percent',
             'column_id': 'pct',
             'numerator': field_spec,
         })
     with self.assertRaises(BadSpecError):
         ReportColumnFactory.from_spec({
             'type': 'percent',
             'column_id': 'pct',
             'denominator': field_spec,
         })
Beispiel #28
0
 def report_columns(self):
     return [ReportColumnFactory.from_spec(c) for c in self.columns]
Beispiel #29
0
 def test_format_missing(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual('Unknown Date', wrapped.get_format_fn()({'year': None, 'month': None}))
Beispiel #30
0
 def test_format_float(self):
     spec = self._test_spec()
     spec['format'] = 'decimal'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual(.333, wrapped.get_format_fn()({'num': 1, 'denom': 3}))
     self.assertEqual(.25, wrapped.get_format_fn()({'num': 1, 'denom': 4}))
Beispiel #31
0
 def test_format_float(self):
     spec = self._test_spec()
     spec['format'] = 'decimal'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual(.333, wrapped.get_format_fn()({'num': 1, 'denom': 3}))
     self.assertEqual(.25, wrapped.get_format_fn()({'num': 1, 'denom': 4}))
Beispiel #32
0
 def test_format_numeric_pct(self):
     spec = self._test_spec()
     spec['format'] = 'numeric_percent'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual(33, wrapped.get_format_fn()({'num': 1, 'denom': 3}))
Beispiel #33
0
 def test_format(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual('2015-03', wrapped.get_format_fn()({'year': 2015, 'month': 3}))
Beispiel #34
0
 def test_group_by(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual(['a_date_year', 'a_date_month'],
                      wrapped.get_query_column_ids())
Beispiel #35
0
 def test_format(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual('2015-03', wrapped.get_format_fn()({'year': 2015, 'month': 3}))
Beispiel #36
0
 def test_format_pct_denom_0(self):
     spec = self._test_spec()
     spec['format'] = 'percent'
     wrapped = ReportColumnFactory.from_spec(spec)
     for empty_value in [0, 0.0, None, '']:
         self.assertEqual('--', wrapped.get_format_fn()({'num': 1, 'denom': empty_value}))
Beispiel #37
0
 def test_format_numeric_pct(self):
     spec = self._test_spec()
     spec["format"] = "numeric_percent"
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual(33, wrapped.get_format_fn()({"num": 1, "denom": 3}))
Beispiel #38
0
 def test_format_float(self):
     spec = self._test_spec()
     spec["format"] = "decimal"
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual(0.333, wrapped.get_format_fn()({"num": 1, "denom": 3}))
     self.assertEqual(0.25, wrapped.get_format_fn()({"num": 1, "denom": 4}))
Beispiel #39
0
 def test_format_missing(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual('Unknown Date', wrapped.get_format_fn()({'year': None, 'month': None}))
Beispiel #40
0
 def test_custom_format(self):
     self._spec.update({'format': '%b %Y'})
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual('Mar 2015', wrapped.get_format_fn()({'year': 2015, 'month': 3}))
 def test_format_numeric_pct(self):
     spec = self._test_spec()
     spec['format'] = 'numeric_percent'
     wrapped = ReportColumnFactory.from_spec(spec, is_static=False)
     self.assertEqual(33, wrapped.get_format_fn()({'num': 1, 'denom': 3}))
Beispiel #42
0
 def test_wrap(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertTrue(isinstance(wrapped, AggregateDateColumn))
     self.assertEqual('a_date', wrapped.column_id)
 def test_format_pct_denom_0(self):
     spec = self._test_spec()
     spec['format'] = 'percent'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual('--', wrapped.get_format_fn()({'num': 1, 'denom': 0}))
Beispiel #44
0
 def test_format_fraction(self):
     spec = self._test_spec()
     spec['format'] = 'fraction'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual('1/3', wrapped.get_format_fn()({'num': 1, 'denom': 3}))
Beispiel #45
0
 def test_group_by(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual(['a_date_year', 'a_date_month'], wrapped.get_group_by_columns())
Beispiel #46
0
 def test_format_both(self):
     spec = self._test_spec()
     spec['format'] = 'both'
     wrapped = ReportColumnFactory.from_spec(spec)
     self.assertEqual('33% (1/3)', wrapped.get_format_fn()({'num': 1, 'denom': 3}))
Beispiel #47
0
 def test_custom_format(self):
     self._spec.update({'format': '%b %Y'})
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertEqual('Mar 2015', wrapped.get_format_fn()({'year': 2015, 'month': 3}))
Beispiel #48
0
 def report_columns(self):
     return [
         ReportColumnFactory.from_spec(c, self.is_static)
         for c in self.columns
     ]
Beispiel #49
0
 def test_wrap(self):
     wrapped = ReportColumnFactory.from_spec(self._spec)
     self.assertTrue(isinstance(wrapped, AggregateDateColumn))
     self.assertEqual('a_date', wrapped.column_id)