def test_dates(self): # pylint: disable=too-many-statements """ Test handling of dates """ # default plot settings settings = PlotSettings('scatter') # no source layer, fixed values must be used settings.source_layer_id = '' settings.x = [QDate(2020, 1, 1), QDate(2020, 2, 1), QDate(2020, 3, 1)] settings.y = [4, 5, 6] factory = PlotFactory(settings) # Build the dictionary from teh figure plot_dict = factory.build_plot_dict() # get the x and y fields as list for items in plot_dict['data']: # converts the QDate into strings x = [str(i.toPyDate()) for i in items['x']] y = items['y'] self.assertEqual(x, ["2020-01-01", "2020-02-01", "2020-03-01"]) self.assertEqual(y, [4, 5, 6]) settings.x = [ QDateTime(2020, 1, 1, 11, 21), QDateTime(2020, 2, 1, 0, 15), QDateTime(2020, 3, 1, 17, 23, 11) ] settings.y = [4, 5, 6] factory = PlotFactory(settings) # Build the dictionary from teh figure plot_dict = factory.build_plot_dict() # get the x and y fields as list for items in plot_dict['data']: # converts the QDate into strings x = [str(i.toString(Qt.ISODate)) for i in items['x']] y = items['y'] self.assertEqual(x, [ "2020-01-01T11:21:00", "2020-02-01T00:15:00", "2020-03-01T17:23:11" ]) self.assertEqual(y, [4, 5, 6])
def test_dates(self): # pylint: disable=too-many-statements """ Test handling of dates """ # default plot settings settings = PlotSettings('scatter') # no source layer, fixed values must be used settings.source_layer_id = '' settings.x = [QDate(2020, 1, 1), QDate(2020, 2, 1), QDate(2020, 3, 1)] settings.y = [4, 5, 6] factory = PlotFactory(settings) # Build the HTML/JavaScript for the plot plot_html = factory.build_html({}) # Find the plot specification in the HTML match = re.search(r'\[.*\]', plot_html) plot_dictionary = json.loads(match.group(0))[0] self.assertEqual(plot_dictionary['x'], ["2020-01-01", "2020-02-01", "2020-03-01"]) self.assertEqual(plot_dictionary['y'], [4, 5, 6]) settings.x = [ QDateTime(2020, 1, 1, 11, 21), QDateTime(2020, 2, 1, 0, 15), QDateTime(2020, 3, 1, 17, 23, 11) ] settings.y = [4, 5, 6] factory = PlotFactory(settings) # Build the HTML/JavaScript for the plot plot_html = factory.build_html({}) # Find the plot specification in the HTML match = re.search(r'\[.*\]', plot_html) plot_dictionary = json.loads(match.group(0))[0] self.assertEqual(plot_dictionary['x'], [ "2020-01-01T11:21:00", "2020-02-01T00:15:00", "2020-03-01T17:23:11" ]) self.assertEqual(plot_dictionary['y'], [4, 5, 6])
def test_values(self): # pylint: disable=too-many-statements """ Test value collection """ layer_path = os.path.join(os.path.dirname(__file__), 'test_layer.shp') vl1 = QgsVectorLayer(layer_path, 'test_layer', 'ogr') vl1.setSubsetString('id < 10') self.assertTrue(vl1.isValid()) QgsProject.instance().addMapLayer(vl1) # default plot settings settings = PlotSettings('scatter') # no source layer, fixed values must be used settings.source_layer_id = '' settings.x = [1, 2, 3] settings.y = [4, 5, 6] settings.z = [7, 8, 9] factory = PlotFactory(settings) self.assertEqual(factory.settings.x, [1, 2, 3]) self.assertEqual(factory.settings.y, [4, 5, 6]) self.assertEqual(factory.settings.z, [7, 8, 9]) self.assertEqual(factory.settings.additional_hover_text, []) # use source layer settings.source_layer_id = vl1.id() # no source set => no values factory = PlotFactory(settings) self.assertEqual(factory.settings.x, []) self.assertEqual(factory.settings.y, []) self.assertEqual(factory.settings.z, []) self.assertEqual(factory.settings.additional_hover_text, []) settings.properties['x_name'] = 'so4' settings.properties['y_name'] = 'ca' factory = PlotFactory(settings) self.assertEqual(factory.settings.x, [98, 88, 267, 329, 319, 137, 350, 151, 203]) self.assertEqual(factory.settings.y, [ 81.87, 22.26, 74.16, 35.05, 46.64, 126.73, 116.44, 108.25, 110.45 ]) self.assertEqual(factory.settings.z, []) self.assertEqual(factory.settings.additional_hover_text, []) # with z settings.properties['z_name'] = 'mg' factory = PlotFactory(settings) self.assertEqual(factory.settings.x, [98, 88, 267, 329, 319, 137, 350, 151, 203]) self.assertEqual(factory.settings.y, [ 81.87, 22.26, 74.16, 35.05, 46.64, 126.73, 116.44, 108.25, 110.45 ]) self.assertEqual( factory.settings.z, [72.31, 86.03, 85.26, 81.11, 131.59, 95.36, 112.88, 80.55, 78.34]) self.assertEqual(factory.settings.additional_hover_text, []) # with expressions settings.properties['x_name'] = '"so4"/10' settings.properties[ 'y_name'] = 'case when "profm" >-16 then "ca" else "mg" end' settings.properties['z_name'] = 'case when $x < 10.5 then 1 else 0 end' factory = PlotFactory(settings) self.assertEqual(factory.settings.x, [9.8, 8.8, 26.7, 32.9, 31.9, 13.7, 35.0, 15.1, 20.3]) self.assertEqual( factory.settings.y, [81.87, 86.03, 85.26, 35.05, 131.59, 95.36, 112.88, 108.25, 78.34]) self.assertEqual(factory.settings.z, [0, 1, 0, 0, 0, 0, 0, 1, 1]) self.assertEqual(factory.settings.additional_hover_text, []) # with some nulls settings.properties['x_name'] = '"so4"/10' settings.properties[ 'y_name'] = 'case when "profm" >-16 then "ca" else "mg" end' settings.properties[ 'z_name'] = 'case when $x < 10.5 then NULL else 1 end' factory = PlotFactory(settings) self.assertEqual(factory.settings.x, [9.8, 26.7, 32.9, 31.9, 13.7, 35.0]) self.assertEqual(factory.settings.y, [81.87, 85.26, 35.05, 131.59, 95.36, 112.88]) self.assertEqual(factory.settings.z, [1, 1, 1, 1, 1, 1]) self.assertEqual(factory.settings.additional_hover_text, []) # with additional values settings.layout['additional_info_expression'] = 'id' factory = PlotFactory(settings) self.assertEqual(factory.settings.x, [9.8, 26.7, 32.9, 31.9, 13.7, 35.0]) self.assertEqual(factory.settings.y, [81.87, 85.26, 35.05, 131.59, 95.36, 112.88]) self.assertEqual(factory.settings.z, [1, 1, 1, 1, 1, 1]) self.assertEqual(factory.settings.additional_hover_text, [9, 7, 6, 5, 4, 3])