def test_empty(self): provider = MockDataSourceProvider() self.assertEqual([], provider.get_all_data_sources()) self.assertEqual([], provider.by_domain('foo')) self.assertEqual([], provider.get_data_sources_modified_since( datetime.datetime.utcnow()))
def test_with_data(self): ds_1 = object() ds_2 = object() ds_3 = object() provider = MockDataSourceProvider({ 'domain1': [ds_1, ds_2], 'domain2': [ds_3], }) self.assertEqual({ds_1, ds_2, ds_3}, set(provider.get_all_data_sources()))
def test_needs_bootstrap_window(self): before_now = datetime.utcnow() - timedelta(microseconds=1) table_manager = ConfigurableReportTableManagerMixin(MockDataSourceProvider()) table_manager.bootstrap([]) table_manager.last_bootstrapped = before_now - timedelta(seconds=REBUILD_CHECK_INTERVAL - 5) self.assertFalse(table_manager.needs_bootstrap()) table_manager.last_bootstrapped = before_now - timedelta(seconds=REBUILD_CHECK_INTERVAL) self.assertTrue(table_manager.needs_bootstrap())
def test_bootstrap_sets_time(self): before_now = datetime.utcnow() - timedelta(microseconds=1) table_manager = ConfigurableReportTableManagerMixin(MockDataSourceProvider()) table_manager.bootstrap([]) after_now = datetime.utcnow() + timedelta(microseconds=1) self.assertTrue(table_manager.bootstrapped) self.assertTrue(before_now < table_manager.last_bootstrapped) self.assertTrue(after_now > table_manager.last_bootstrapped) self.assertFalse(table_manager.needs_bootstrap())
def test_table_adapters(self): data_source_1 = get_sample_data_source() ds_1_domain = data_source_1.domain table_manager = ConfigurableReportTableManagerMixin([MockDataSourceProvider({ ds_1_domain: [data_source_1] })]) table_manager.bootstrap() self.assertEqual(1, len(table_manager.table_adapters_by_domain)) self.assertEqual(1, len(table_manager.table_adapters_by_domain[ds_1_domain])) self.assertEqual(data_source_1, table_manager.table_adapters_by_domain[ds_1_domain][0].config)
def test_merge_table_adapters(self): data_source_1 = get_sample_data_source() data_source_1.save() ds_1_domain = data_source_1.domain table_manager = ConfigurableReportTableManagerMixin( [MockDataSourceProvider({ds_1_domain: [data_source_1]})]) table_manager.bootstrap() # test in same domain data_source_2 = self._copy_data_source(data_source_1) data_source_2.save() table_manager._add_data_sources_to_table_adapters([data_source_2]) self.assertEqual(1, len(table_manager.table_adapters_by_domain)) self.assertEqual( 2, len(table_manager.table_adapters_by_domain[ds_1_domain])) self.assertEqual( {data_source_1, data_source_2}, set([ table_adapter.config for table_adapter in table_manager.table_adapters_by_domain[ds_1_domain] ])) # test in a new domain data_source_3 = self._copy_data_source(data_source_1) ds3_domain = 'new_domain' data_source_3.domain = ds3_domain data_source_3.save() table_manager._add_data_sources_to_table_adapters([data_source_3]) # should now be 2 domains in the map self.assertEqual(2, len(table_manager.table_adapters_by_domain)) # ensure domain 1 unchanged self.assertEqual( {data_source_1, data_source_2}, set([ table_adapter.config for table_adapter in table_manager.table_adapters_by_domain[ds_1_domain] ])) self.assertEqual( 1, len(table_manager.table_adapters_by_domain[ds3_domain])) self.assertEqual( data_source_3, table_manager.table_adapters_by_domain[ds3_domain][0].config) # finally pass in existing data sources and ensure they modify in place table_manager._add_data_sources_to_table_adapters( [data_source_1, data_source_3]) self.assertEqual(2, len(table_manager.table_adapters_by_domain)) self.assertEqual( {data_source_1, data_source_2}, set([ table_adapter.config for table_adapter in table_manager.table_adapters_by_domain[ds_1_domain] ])) self.assertEqual( data_source_3, table_manager.table_adapters_by_domain[ds3_domain][0].config)
def test_get_filtered_configs_es_error(self): table_manager = ConfigurableReportTableManagerMixin( MockDataSourceProvider(), filter_missing_domains=True) ds1 = get_sample_data_source() ds1.domain = 'domain1' ds2 = DataSourceConfiguration.wrap(ds1.to_json()) ds2.domain = 'domain2' with patch('corehq.apps.es.es_query.run_query') as run_query: run_query.side_effect = ESError filtered_configs = table_manager.get_filtered_configs([ds1, ds2]) self.assertEqual(filtered_configs, [ds1, ds2])
def test_get_filtered_configs(self): table_manager = ConfigurableReportTableManagerMixin( MockDataSourceProvider(), filter_missing_domains=True) ds1 = get_sample_data_source() ds1.domain = 'domain1' ds2 = DataSourceConfiguration.wrap(ds1.to_json()) ds2.domain = 'domain2' with patch('corehq.apps.es.es_query.run_query') as run_query: run_query.return_value = { 'hits': { 'hits': [{ '_id': 'd1', '_source': { 'name': 'domain1' } }] } } filtered_configs = table_manager.get_filtered_configs([ds1, ds2]) self.assertEqual(filtered_configs, [ds1])
def test_needs_bootstrap_on_initialization(self): table_manager = ConfigurableReportTableManagerMixin(MockDataSourceProvider()) self.assertTrue(table_manager.needs_bootstrap())