def setUp(self):
     super(TestDataSourceJsonDriver, self).setUp()
     self.ds = MockDataSource()
     self.driver = DataSourceJsonDriver(self.ds)
class TestDataSourceJsonDriver(TestCase):
    def setUp(self):
        super(TestDataSourceJsonDriver, self).setUp()
        self.ds = MockDataSource()
        self.driver = DataSourceJsonDriver(self.ds)

    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))

    def test_order(self):
        """Test that order is built properly."""
        self.assertEqual(['name'], self.driver.build_order('["name"]'))

    def test_help(self):
        """Test that city help gets plumbed to datasource correctly."""
        result = self.driver.help('company', '{}', 'city', 'zzz')
        self.assertEqual('aaa', result)
        self.assertEqual([
            ['help', 'company', ContactsFilter(), 'city', 'zzz']
            ], self.ds.calls)

    def test_run(self):
        """Test that json run calls are plumbed to datasource correctly."""
        result = self.driver.run('unaggregated', 'company', '{}', '["zzz"]')
        self.assertEqual('aaa', result)
        self.assertEqual([
            ['run', 'unaggregated', 'company', ContactsFilter(), ['zzz']]
            ], self.ds.calls)

    def test_empty_filter(self):
        """Test that ContactsFilter has all proper defaults."""
        result = self.driver.build_filter("{}")
        self.assertEquals(ContactsFilter(), result)

    def test_tag_filter(self):
        """Test that tag filter is built properly."""
        result = self.driver.build_filter(
                '{"tags": [[1, 2], [3, 4]]}')
        self.assertEquals(ContactsFilter(
            tags=AndGroupFilter([
                OrGroupFilter([MatchFilter(1), MatchFilter(2)]),
                OrGroupFilter([MatchFilter(3), MatchFilter(4)]),
            ])), result)

    def test_city_filter(self):
        """Test that city filter is built properly."""
        result = self.driver.build_filter(
                '{"locations": {"city": "Indy"}}')
        self.assertEquals(
            ContactsFilter(
                locations=CompositeAndFilter({
                    'city': MatchFilter('Indy')})), result)

    def test_partner_filter(self):
        """Test that partner filter is built properly."""
        result = self.driver.build_filter(
                '{"partner": [1, 2]}')
        self.assertEquals(
            ContactsFilter(
                partner=OrGroupFilter([
                    MatchFilter(1),
                    MatchFilter(2)])), result)

    def test_date_filters(self):
        """Test that date filters are built properly."""
        spec = '{"date": ["09/01/2015", "09/30/2015"]}'
        result = self.driver.build_filter(spec)
        expected = ContactsFilter(
            date=DateRangeFilter([
                datetime(2015, 9, 1),
                datetime(2015, 9, 30)]))
        self.assertEquals(expected, result)

    def test_empty_list_filters(self):
        """
        Test that an empty list is interpreted as no filter.
        """
        spec = '{"partner": [], "partner_tags": []}'
        result = self.driver.build_filter(spec)
        expected = ContactsFilter()
        self.assertEquals(expected, result)

    def test_unlinked_filters(self):
        """
        Test that we can build an unlinked filter
        """
        spec = '{"partner": {"nolink": true}}'
        result = self.driver.build_filter(spec)
        expected = ContactsFilter(partner=UnlinkedFilter())
        self.assertEquals(expected, result)

    def test_filterlike_serialize(self):
        result = self.driver.serialize_filterlike(
            [{'a': 'b'}, {'c': datetime(2016, 1, 2)}])
        expected = '[{"a": "b"}, {"c": "01/02/2016"}]'
        self.assertEquals(expected, result)
class TestDataSourceJsonDriver(TestCase):
    def setUp(self):
        super(TestDataSourceJsonDriver, self).setUp()
        self.ds = MockDataSource()
        self.driver = DataSourceJsonDriver(self.ds)

    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))

    def test_order(self):
        """Test that order is built properly."""
        self.assertEqual(['name'], self.driver.build_order('["name"]'))

    def test_help(self):
        """Test that city help gets plumbed to datasource correctly."""
        result = self.driver.help('company', '{}', 'city', 'zzz')
        self.assertEqual('aaa', result)
        self.assertEqual([['help', 'company',
                           ContactsFilter(), 'city', 'zzz']], self.ds.calls)

    def test_run(self):
        """Test that json run calls are plumbed to datasource correctly."""
        result = self.driver.run('unaggregated', 'company', '{}', '["zzz"]')
        self.assertEqual('aaa', result)
        self.assertEqual(
            [['run', 'unaggregated', 'company',
              ContactsFilter(), ['zzz']]], self.ds.calls)

    def test_empty_filter(self):
        """Test that ContactsFilter has all proper defaults."""
        result = self.driver.build_filter("{}")
        self.assertEquals(ContactsFilter(), result)

    def test_tag_filter(self):
        """Test that tag filter is built properly."""
        result = self.driver.build_filter('{"tags": [[1, 2], [3, 4]]}')
        self.assertEquals(
            ContactsFilter(tags=AndGroupFilter([
                OrGroupFilter([MatchFilter(1), MatchFilter(2)]),
                OrGroupFilter([MatchFilter(3), MatchFilter(4)]),
            ])), result)

    def test_city_filter(self):
        """Test that city filter is built properly."""
        result = self.driver.build_filter('{"locations": {"city": "Indy"}}')
        self.assertEquals(
            ContactsFilter(
                locations=CompositeAndFilter({'city': MatchFilter('Indy')})),
            result)

    def test_partner_filter(self):
        """Test that partner filter is built properly."""
        result = self.driver.build_filter('{"partner": [1, 2]}')
        self.assertEquals(
            ContactsFilter(partner=OrGroupFilter(
                [MatchFilter(1), MatchFilter(2)])), result)

    def test_date_filters(self):
        """Test that date filters are built properly."""
        spec = '{"date": ["09/01/2015", "09/30/2015"]}'
        result = self.driver.build_filter(spec)
        expected = ContactsFilter(date=DateRangeFilter(
            [datetime(2015, 9, 1), datetime(2015, 9, 30)]))
        self.assertEquals(expected, result)

    def test_empty_list_filters(self):
        """
        Test that an empty list is interpreted as no filter.
        """
        spec = '{"partner": [], "partner_tags": []}'
        result = self.driver.build_filter(spec)
        expected = ContactsFilter()
        self.assertEquals(expected, result)

    def test_unlinked_filters(self):
        """
        Test that we can build an unlinked filter
        """
        spec = '{"partner": {"nolink": true}}'
        result = self.driver.build_filter(spec)
        expected = ContactsFilter(partner=UnlinkedFilter())
        self.assertEquals(expected, result)

    def test_filterlike_serialize(self):
        result = self.driver.serialize_filterlike([{
            'a': 'b'
        }, {
            'c': datetime(2016, 1, 2)
        }])
        expected = '[{"a": "b"}, {"c": "01/02/2016"}]'
        self.assertEquals(expected, result)
 def setUp(self):
     super(TestDataSourceJsonDriver, self).setUp()
     self.ds = MockDataSource()
     self.driver = DataSourceJsonDriver(self.ds)
Exemplo n.º 5
0
from myreports.datasources.contacts import ContactsDataSource
from myreports.datasources.partners import PartnersDataSource
from myreports.datasources.comm_records import CommRecordsDataSource
from myreports.datasources.jsondriver import DataSourceJsonDriver


ds_json_drivers = {
    'contacts': DataSourceJsonDriver(ContactsDataSource()),
    'partners': DataSourceJsonDriver(PartnersDataSource()),
    'comm_records':  DataSourceJsonDriver(CommRecordsDataSource()),
}