예제 #1
0
    def test_build_config(self):
        """
        Test building a report configuration from the DB.

        Here, we expect that an appropriate format should be selected for each
        of the columns configured *except* when that column is marked as
        ``filter_only```. For those columns, we expect format to be ``''``.
        """
        expected_config = ReportConfiguration(columns=[
            ColumnConfiguration(column='date',
                                alias='Date',
                                format='us_datetime',
                                filter_interface='date_range',
                                filter_display='Date'),
            ColumnConfiguration(column='',
                                alias='Contact Location',
                                format=None,
                                help=True,
                                filter_interface=u'city_state',
                                filter_display=u'Contact Location'),
            ColumnConfiguration(column='locations',
                                alias='Location',
                                format='city_state_list',
                                filter_interface='city_state',
                                filter_display='Location',
                                help=True),
            ColumnConfiguration(column='tags',
                                alias='Tags',
                                format='tags_list',
                                filter_interface='tags',
                                filter_display='Tags',
                                help=True),
            ColumnConfiguration(column='partner',
                                alias='Partners',
                                format='text',
                                filter_interface='search_multiselect',
                                filter_display='Partners',
                                help=True),
            ColumnConfiguration(column='name', alias='Name', format='text'),
            ColumnConfiguration(column='email', alias='Email', format='text'),
            ColumnConfiguration(column='phone', alias='Phone', format='text'),
            ColumnConfiguration(column='notes', alias='Notes', format='text'),
        ])
        config_model = self.dynamic_models['configuration']['contacts']
        # Add a filter_only column.
        ConfigurationColumnFactory.create(
            alias='Contact Location',
            filter_interface_type='city_state',
            filter_interface_display='Contact Location',
            filter_only=True,
            configuration=config_model,
            multi_value_expansion=False,
            has_help=True)
        self.maxDiff = 10000
        self.assertEqual(expected_config.columns,
                         config_model.build_configuration().columns)
    def test_encode_filter_interface(self):
        """Test that filter interface is serialized properly."""
        self.maxDiff = 10000
        report_config = ReportConfiguration([
            ColumnConfiguration(column='name', format='text'),
            ColumnConfiguration(column='date',
                                format='us_date',
                                filter_interface='date_range',
                                filter_display='Date'),
            ColumnConfiguration(column='locations',
                                format='city_state_list',
                                filter_interface='city_state',
                                filter_display='Locations',
                                help=True),
            ColumnConfiguration(column='tags',
                                format='comma_sep',
                                filter_interface='search_multiselect',
                                filter_display='Tags',
                                help=True),
            ColumnConfiguration(column='partner',
                                format='text',
                                filter_interface='search_multiselect',
                                filter_display='Partners',
                                help=True),
        ])

        self.assertEquals(
            {
                'filters': [
                    {
                        'display': 'Date',
                        'filter': 'date',
                        'interface_type': 'date_range',
                    },
                    {
                        'display': 'Locations',
                        'filter': 'locations',
                        'interface_type': 'city_state',
                    },
                    {
                        'display': 'Tags',
                        'filter': 'tags',
                        'interface_type': 'search_multiselect',
                    },
                    {
                        'display': 'Partners',
                        'filter': 'partner',
                        'interface_type': 'search_multiselect',
                    },
                ],
                'help': {
                    'partner': True,
                    'tags': True,
                    'locations': True,
                },
            }, self.driver.encode_filter_interface(report_config))
예제 #3
0
 def build_configuration(self):
     return ReportConfiguration([
         ColumnConfiguration(column=cm.column_name,
                             alias=cm.alias,
                             format=cm.output_format,
                             filter_interface=cm.filter_interface_type,
                             filter_display=cm.filter_interface_display,
                             help=cm.has_help)
         for cm in (self.configurationcolumn_set.filter(
             is_active=True).order_by('order'))
     ])
예제 #4
0
    def setUp(self):
        super(TestReportConfig, self).setUp()
        # Realistic contacts report configuration
        self.contacts_config = ReportConfiguration(columns=[
            ColumnConfiguration(column='name', format='text'),
            ColumnConfiguration(column='partner',
                                format='text',
                                filter_interface='search_multiselect',
                                filter_display='Partners'),
            ColumnConfiguration(column='email', format='text'),
            ColumnConfiguration(column='phone', format='text'),
            ColumnConfiguration(column='date',
                                format='us_date',
                                filter_interface='date_range',
                                filter_display='Date'),
            ColumnConfiguration(column='notes', format='text'),
            ColumnConfiguration(column='locations',
                                format='city_state_list',
                                filter_interface='city_state',
                                filter_display='Locations'),
            ColumnConfiguration(column='tags',
                                format='comma_sep',
                                filter_interface='search_multiselect',
                                filter_display='Tags'),
        ])

        # Realistic extracted contact records.
        self.test_data = [{
            'date':
            datetime(2015, 10, 3),
            'email':
            u'*****@*****.**',
            'locations': [{
                'city': u'Indianapolis',
                'state': u'IN'
            }, {
                'city': u'Chicago',
                'state': u'IL'
            }],
            'name':
            u'john adams',
            'notes':
            u'',
            'partner':
            u'aaa',
            'phone':
            u'84104391',
            'tags': [u'east']
        }, {
            'date':
            datetime(2015, 9, 30),
            'email':
            u'*****@*****.**',
            'locations': [
                {
                    'city': u'Los Angeles',
                    'state': u'CA'
                },
            ],
            'name':
            u'Sue Baxter',
            'notes':
            u'',
            'partner':
            u'bbb',
            'phone':
            u'84104391',
            'tags': [u'west']
        }]