class TestLocationDataSource(TestCase): domain = "delos_corp" def setUp(self): self.domain_obj = create_domain(self.domain) self.region = LocationType.objects.create(domain=self.domain, name="region") self.town = LocationType.objects.create(domain=self.domain, name="town", parent_type=self.region) self.data_source_config = DataSourceConfiguration( domain=self.domain, display_name='Locations in Westworld', referenced_doc_type='Location', table_id=clean_table_name(self.domain, str(uuid.uuid4().hex)), configured_filter={}, configured_indicators=[{ "type": "expression", "expression": { "type": "property_name", "property_name": "name" }, "column_id": "location_name", "display_name": "location_name", "datatype": "string" }], ) self.data_source_config.validate() self.data_source_config.save() self.pillow = get_kafka_ucr_pillow() self.pillow.bootstrap(configs=[self.data_source_config]) with trap_extra_setup(KafkaUnavailableError): self.pillow.get_change_feed().get_latest_offsets() def tearDown(self): self.domain_obj.delete() self.data_source_config.delete() def _make_loc(self, name, location_type): return SQLLocation.objects.create(domain=self.domain, name=name, site_code=name, location_type=location_type) def assertDataSourceAccurate(self, expected_locations): adapter = get_indicator_adapter(self.data_source_config) query = adapter.get_query_object() data_source = query.all() self.assertItemsEqual(expected_locations, [row[-1] for row in data_source]) def test_location_data_source(self): self._make_loc("Westworld", self.region) sweetwater = self._make_loc("Sweetwater", self.town) las_mudas = self._make_loc("Las Mudas", self.town) rebuild_indicators(self.data_source_config._id) self.assertDataSourceAccurate(["Westworld", "Sweetwater", "Las Mudas"]) # Insert new location since = self.pillow.get_change_feed().get_latest_offsets() self._make_loc("Blood Arroyo", self.town) # Change an existing location sweetwater.name = "Pariah" sweetwater.save() # Process both changes together and verify that they went through self.pillow.process_changes(since=since, forever=False) self.assertDataSourceAccurate( ["Westworld", "Pariah", "Las Mudas", "Blood Arroyo"]) # Delete a location since = self.pillow.get_change_feed().get_latest_offsets() las_mudas.delete() self.pillow.process_changes(since=since, forever=False) self.assertDataSourceAccurate(["Westworld", "Pariah", "Blood Arroyo"])
def test_report_builder_datasource_deactivation(self): def _get_data_source(id_): return get_datasource_config(id_, self.project.name)[0] # Upgrade the domain # (for the upgrade to work, there has to be an existing subscription, # which is why we subscribe to advanced first) self._subscribe_to_advanced() pro_with_rb_sub = self._subscribe_to_pro_with_rb() # Create reports and data sources builder_report_data_source = DataSourceConfiguration( domain=self.project.name, is_deactivated=False, referenced_doc_type="XFormInstance", table_id="foo", ) other_data_source = DataSourceConfiguration( domain=self.project.name, is_deactivated=False, referenced_doc_type="XFormInstance", table_id="bar", ) builder_report_data_source.save() other_data_source.save() report_builder_report = ReportConfiguration( domain=self.project.name, config_id=builder_report_data_source._id, report_meta=ReportMeta(created_by_builder=True), ) report_builder_report.save() # downgrade the domain community_sub = pro_with_rb_sub.change_plan( DefaultProductPlan.get_default_plan_version()) # Check that the builder data source is deactivated builder_report_data_source = _get_data_source( builder_report_data_source._id) self.assertTrue(builder_report_data_source.is_deactivated) # Check that the other data source has not been deactivated other_data_source = _get_data_source(other_data_source._id) self.assertFalse(other_data_source.is_deactivated) # upgrade the domain # (for the upgrade to work, there has to be an existing subscription, # which is why we subscribe to advanced first) community_sub.change_plan( DefaultProductPlan.get_default_plan_version( edition=SoftwarePlanEdition.ADVANCED)) pro_with_rb_sub = self._subscribe_to_pro_with_rb() # check that the data source is activated builder_report_data_source = _get_data_source( builder_report_data_source._id) self.assertFalse(builder_report_data_source.is_deactivated) # delete the data sources builder_report_data_source.delete() other_data_source.delete() # Delete the report report_builder_report.delete() # reset the subscription pro_with_rb_sub.change_plan( DefaultProductPlan.get_default_plan_version())
def test_report_builder_datasource_deactivation(self): def _get_data_source(id_): return get_datasource_config(id_, self.project.name)[0] # Upgrade the domain # (for the upgrade to work, there has to be an existing subscription, # which is why we subscribe to advanced first) self._subscribe_to_advanced() pro_with_rb_sub = self._subscribe_to_pro_with_rb() # Create reports and data sources builder_report_data_source = DataSourceConfiguration( domain=self.project.name, is_deactivated=False, referenced_doc_type="XFormInstance", table_id="foo", ) other_data_source = DataSourceConfiguration( domain=self.project.name, is_deactivated=False, referenced_doc_type="XFormInstance", table_id="bar", ) builder_report_data_source.save() other_data_source.save() report_builder_report = ReportConfiguration( domain=self.project.name, config_id=builder_report_data_source._id, report_meta=ReportMeta(created_by_builder=True), ) report_builder_report.save() # downgrade the domain pro_with_rb_sub.cancel_subscription(web_user=self.admin_user.username) # Check that the builder data source is deactivated builder_report_data_source = _get_data_source(builder_report_data_source._id) self.assertTrue(builder_report_data_source.is_deactivated) # Check that the other data source has not been deactivated other_data_source = _get_data_source(other_data_source._id) self.assertFalse(other_data_source.is_deactivated) # upgrade the domain # (for the upgrade to work, there has to be an existing subscription, # which is why we subscribe to advanced first) self._subscribe_to_advanced() pro_with_rb_sub = self._subscribe_to_pro_with_rb() # check that the data source is activated builder_report_data_source = _get_data_source(builder_report_data_source._id) self.assertFalse(builder_report_data_source.is_deactivated) # delete the data sources builder_report_data_source.delete() other_data_source.delete() # Delete the report report_builder_report.delete() # reset the subscription pro_with_rb_sub.cancel_subscription(web_user=self.admin_user.username)
class TestLocationDataSource(TestCase): domain = "delos_corp" def setUp(self): delete_all_locations() self.domain_obj = create_domain(self.domain) self.region = LocationType.objects.create(domain=self.domain, name="region") self.town = LocationType.objects.create(domain=self.domain, name="town", parent_type=self.region) self.data_source_config = DataSourceConfiguration( domain=self.domain, display_name='Locations in Westworld', referenced_doc_type='Location', table_id=_clean_table_name(self.domain, str(uuid.uuid4().hex)), configured_filter={}, configured_indicators=[{ "type": "expression", "expression": { "type": "property_name", "property_name": "name" }, "column_id": "location_name", "display_name": "location_name", "datatype": "string" }], ) self.data_source_config.validate() self.data_source_config.save() self.pillow = get_kafka_ucr_pillow() self.pillow.bootstrap(configs=[self.data_source_config]) with trap_extra_setup(KafkaUnavailableError): self.pillow.get_change_feed().get_current_offsets() def tearDown(self): self.domain_obj.delete() delete_all_locations() self.data_source_config.delete() def _make_loc(self, name, location_type): return SQLLocation.objects.create( domain=self.domain, name=name, site_code=name, location_type=location_type) def assertDataSourceAccurate(self, expected_locations): adapter = get_indicator_adapter(self.data_source_config) query = adapter.get_query_object() adapter.refresh_table() data_source = query.all() self.assertItemsEqual( expected_locations, [row[-1] for row in data_source] ) def test_location_data_source(self): self._make_loc("Westworld", self.region) sweetwater = self._make_loc("Sweetwater", self.town) las_mudas = self._make_loc("Las Mudas", self.town) rebuild_indicators(self.data_source_config._id) self.assertDataSourceAccurate(["Westworld", "Sweetwater", "Las Mudas"]) # Insert new location since = self.pillow.get_change_feed().get_current_offsets() self._make_loc("Blood Arroyo", self.town) # Change an existing location sweetwater.name = "Pariah" sweetwater.save() # Process both changes together and verify that they went through self.pillow.process_changes(since=since, forever=False) self.assertDataSourceAccurate(["Westworld", "Pariah", "Las Mudas", "Blood Arroyo"]) # Delete a location since = self.pillow.get_change_feed().get_current_offsets() las_mudas.delete() self.pillow.process_changes(since=since, forever=False) # No actual change - deletions are not yet processed self.assertDataSourceAccurate(["Westworld", "Pariah", "Las Mudas", "Blood Arroyo"])