diff --git a/docker/clickhouse/users.xml b/docker/clickhouse/users.xml
index 9832e3774..0fad4ca69 100644
--- a/docker/clickhouse/users.xml
+++ b/docker/clickhouse/users.xml
@@ -7,5 +7,6 @@
DNS:clickhouse
+ 0.0.0.0/0
diff --git a/docker/grafana/dashboards/repeat_by_variable_issue_712.json b/docker/grafana/dashboards/repeat_by_variable_issue_712.json
new file mode 100644
index 000000000..276330936
--- /dev/null
+++ b/docker/grafana/dashboards/repeat_by_variable_issue_712.json
@@ -0,0 +1,463 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": 3785,
+ "links": [],
+ "panels": [
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 3,
+ "panels": [],
+ "title": "No repeat, no single quotes",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 1
+ },
+ "id": 2,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true
+ },
+ "pluginVersion": "11.4.0",
+ "targets": [
+ {
+ "adHocFilters": [],
+ "adHocValuesQuery": "",
+ "add_metadata": true,
+ "contextWindowSize": "10",
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "editorMode": "builder",
+ "extrapolate": true,
+ "format": "table",
+ "interval": "",
+ "intervalFactor": 1,
+ "query": "SELECT (${type})",
+ "rawQuery": "/* grafana dashboard=Variable test 11.4, user=4 */\nSELECT ('foo','bar','baz')",
+ "refId": "A",
+ "round": "0s",
+ "showFormattedSQL": true,
+ "skip_comments": true,
+ "useWindowFuncForMacros": true
+ }
+ ],
+ "title": "No single quotes",
+ "type": "table"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 7
+ },
+ "id": 10,
+ "panels": [],
+ "title": "No repeat, single quotes",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 8
+ },
+ "id": 9,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true
+ },
+ "pluginVersion": "11.4.0",
+ "targets": [
+ {
+ "adHocFilters": [],
+ "adHocValuesQuery": "",
+ "add_metadata": true,
+ "contextWindowSize": "10",
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "editorMode": "builder",
+ "extrapolate": true,
+ "format": "table",
+ "interval": "",
+ "intervalFactor": 1,
+ "query": "SELECT ('${type}')",
+ "rawQuery": "/* grafana dashboard=Variable test 11.4, user=4 */\nSELECT (''foo','bar','baz'')",
+ "refId": "A",
+ "round": "0s",
+ "showFormattedSQL": true,
+ "skip_comments": true,
+ "useWindowFuncForMacros": true
+ }
+ ],
+ "title": "No single quotes",
+ "type": "table"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 7,
+ "panels": [],
+ "title": "Repeat, single quotes",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 15
+ },
+ "id": 8,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true
+ },
+ "pluginVersion": "11.4.0",
+ "repeat": "type",
+ "repeatDirection": "h",
+ "targets": [
+ {
+ "adHocFilters": [],
+ "adHocValuesQuery": "",
+ "add_metadata": true,
+ "contextWindowSize": "10",
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "editorMode": "builder",
+ "extrapolate": true,
+ "format": "table",
+ "interval": "",
+ "intervalFactor": 1,
+ "query": "SELECT ('${type}')",
+ "rawQuery": "/* grafana dashboard=Variable test 11.4, user=4 */\nSELECT (''foo','bar','baz'')",
+ "refId": "A",
+ "round": "0s",
+ "showFormattedSQL": true,
+ "skip_comments": true,
+ "useWindowFuncForMacros": true
+ }
+ ],
+ "title": "$type",
+ "type": "table"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 21
+ },
+ "id": 4,
+ "panels": [],
+ "title": "Repeat, no single quotes",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 24,
+ "x": 0,
+ "y": 22
+ },
+ "id": 5,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
+ },
+ "showHeader": true
+ },
+ "pluginVersion": "11.4.0",
+ "repeat": "type",
+ "repeatDirection": "h",
+ "targets": [
+ {
+ "adHocFilters": [],
+ "adHocValuesQuery": "",
+ "add_metadata": true,
+ "contextWindowSize": "10",
+ "datasource": {
+ "type": "vertamedia-clickhouse-datasource",
+ "uid": "${datasource}"
+ },
+ "editorMode": "builder",
+ "extrapolate": true,
+ "format": "table",
+ "interval": "",
+ "intervalFactor": 1,
+ "query": "SELECT (${type})",
+ "rawQuery": "/* grafana dashboard=Variable test 11.4, user=4 */\nSELECT (baz)",
+ "refId": "A",
+ "round": "0s",
+ "showFormattedSQL": true,
+ "skip_comments": true,
+ "useWindowFuncForMacros": true
+ }
+ ],
+ "title": "$type",
+ "type": "table"
+ }
+ ],
+ "preload": false,
+ "refresh": "",
+ "schemaVersion": 40,
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "text": [
+ "$__all"
+ ],
+ "value": [
+ "$__all"
+ ]
+ },
+ "includeAll": true,
+ "multi": true,
+ "name": "type",
+ "options": [
+ {
+ "selected": false,
+ "text": "foo",
+ "value": "foo"
+ },
+ {
+ "selected": false,
+ "text": "bar",
+ "value": "bar"
+ },
+ {
+ "selected": false,
+ "text": "baz",
+ "value": "baz"
+ }
+ ],
+ "query": "foo, bar, baz",
+ "type": "custom"
+ },
+ {
+ "current": {
+ "text": "Archer Sink",
+ "value": "a5617c9a-2798-477c-a708-a264b48dc43e"
+ },
+ "name": "datasource",
+ "options": [],
+ "query": "vertamedia-clickhouse-datasource",
+ "refresh": 1,
+ "regex": "",
+ "type": "datasource"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-6h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "browser",
+ "title": "Variable test 11.4",
+ "uid": "ceak279mxrim8d",
+ "version": 5,
+ "weekStart": ""
+}
diff --git a/src/datasource/sql-query/sql-query-helper.ts b/src/datasource/sql-query/sql-query-helper.ts
index 8465a3bbc..5bc88e9a5 100644
--- a/src/datasource/sql-query/sql-query-helper.ts
+++ b/src/datasource/sql-query/sql-query-helper.ts
@@ -158,7 +158,7 @@ export class SqlQueryHelper {
static interpolateQueryExpr(value: any, variable: any, defaultFormatFn: any) {
// if no (`multiselect` or `include all`) and variable is not Array - do not escape
if (!variable.multi && !variable.includeAll && !Array.isArray(value)) {
- return value;
+ return `'${value}'`
}
if (!Array.isArray(value)) {
return SqlQueryHelper.clickhouseEscape(value, variable);
@@ -166,6 +166,7 @@ export class SqlQueryHelper {
let escapedValues = value.map(function (v) {
return SqlQueryHelper.clickhouseEscape(v, variable);
});
+
return escapedValues.join(',');
}
diff --git a/tests/testflows/steps/alerting/alert_rules/new/locators.py b/tests/testflows/steps/alerting/alert_rules/new/locators.py
index a2f71a87b..27b69b335 100644
--- a/tests/testflows/steps/alerting/alert_rules/new/locators.py
+++ b/tests/testflows/steps/alerting/alert_rules/new/locators.py
@@ -135,13 +135,13 @@ def new_folder_button(self):
def new_folder_name_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
- f"/html/body/div[6]//*[@data-testid='data-testid alert-rule name-folder-name-field']")
+ f"//*[@data-testid='data-testid alert-rule name-folder-name-field']")
@property
def new_folder_create_button(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
- f"/html/body/div[6]//*[@data-testid='data-testid alert-rule name-folder-name-create-button']")
+ f"//*[@data-testid='data-testid alert-rule name-folder-name-create-button']")
@property
def new_evaluation_group_button(self):
diff --git a/tests/testflows/steps/dashboards/locators.py b/tests/testflows/steps/dashboards/locators.py
index 477696e59..cd942e49a 100644
--- a/tests/testflows/steps/dashboards/locators.py
+++ b/tests/testflows/steps/dashboards/locators.py
@@ -34,8 +34,8 @@ def check_mark(self, dashboard_name):
def delete_button(self):
driver: WebDriver = current().context.driver
return driver.find_element(
- SelectBy.CSS_SELECTOR,
- f"[class='css-ttl745-button']"
+ SelectBy.XPATH,
+ f"//*[@data-testid='manage-actions']/button[span/text()='Delete']"
)
@property
diff --git a/tests/testflows/steps/panel/locators.py b/tests/testflows/steps/panel/locators.py
index c2f0a36a4..22590da0d 100644
--- a/tests/testflows/steps/panel/locators.py
+++ b/tests/testflows/steps/panel/locators.py
@@ -316,22 +316,22 @@ def query_inspector_close_button(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.CSS_SELECTOR, f'[data-testid="data-testid Drawer close"]')
- def adhoc_dropdown(self, label, variable_number):
+ def adhoc_dropdown(self, label):
driver: WebDriver = current().context.driver
- return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {label}"]/../div/div[1]/div[{variable_number}]//input')
+ return driver.find_element(SelectBy.XPATH, f'//*[@data-testid="data-testid Dashboard template variables submenu Label {label}"]/..//input')
- def adhoc_grafana_single_value(self, label, variable_number):
+ def adhoc(self, adhoc_name):
driver: WebDriver = current().context.driver
- return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {label}"]/../div/div[1]/div[{variable_number}]//*[contains(@class, "singleValue")]')
+ return driver.find_element(SelectBy.XPATH, f'//*[@aria-label="Edit filter with key {adhoc_name}"]')
@property
def add_adhoc_filter_button(self):
driver: WebDriver = current().context.driver
- return driver.find_element(SelectBy.CSS_SELECTOR, f'[data-testid="AdHocFilter-add"]')
+ return driver.find_element(SelectBy.CSS_SELECTOR, f'[placeholder="Filter by label values"]')
def remove_adhoc_button(self, adhoc_name):
driver: WebDriver = current().context.driver
- return driver.find_element(SelectBy.CSS_SELECTOR, f'[data-testid="AdHocFilter-remove-{adhoc_name}"]')
+ return driver.find_element(SelectBy.CSS_SELECTOR, f'[aria-label="Remove filter with key {adhoc_name}"]')
@property
def refresh_button(self):
@@ -340,7 +340,7 @@ def refresh_button(self):
def annotation_toggle(self, annotation_name):
driver: WebDriver = current().context.driver
- return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {annotation_name}"]/..//label[@aria-label="Toggle switch"]')
+ return driver.find_element(SelectBy.XPATH, f'//label[@data-testid="data-testid Dashboard template variables submenu Label {annotation_name}"]/..//div/label')
def label_textfield(self, label):
driver: WebDriver = current().context.driver
diff --git a/tests/testflows/steps/panel/query_options/locators.py b/tests/testflows/steps/panel/query_options/locators.py
index 7a1fb0862..00d97c052 100644
--- a/tests/testflows/steps/panel/query_options/locators.py
+++ b/tests/testflows/steps/panel/query_options/locators.py
@@ -15,36 +15,36 @@ def query_options_dropdown(self):
def max_data_points_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
- f'//*[@class="gf-form" and .//text()="Max data points"]//input')
+ f'//input[@id="max-data-points-input"]')
@property
def interval_field(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
- f'//*[@class="gf-form" and .//text()="Interval"]/label[@class="gf-form-label width-6"]')
+ f'//*[@class="css-1t8vb7c"]')
@property
def min_interval_textfield(self):
driver: WebDriver = current().context.driver
- return driver.find_element(SelectBy.XPATH, f'//*[@class="gf-form" and .//text()="Min interval"]//input')
+ return driver.find_element(SelectBy.XPATH, f'//input[@id="min-interval-input"]')
@property
def relative_time_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
- f'//*[@class="gf-form" and .//text()="Relative time"]//input')
+ f'//input[@id="relative-time-input"]')
@property
def time_shift_textfield(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
- f'//*[@class="gf-form" and .//text()="Time shift"]//input')
+ f'//input[@id="time-shift-input"]')
@property
def hide_time_info_toggle(self):
driver: WebDriver = current().context.driver
return driver.find_element(SelectBy.XPATH,
- f'//*[contains(@class,"InlineFieldRow") and .//text()="Hide time info"]//label[@aria-label="Toggle switch"]')
+ f'//div[@class="css-1n85obj"]//label[@for="hide-time-info-switch"]')
@property
def relative_time_info(self):
diff --git a/tests/testflows/steps/panel/view.py b/tests/testflows/steps/panel/view.py
index 0a50c76e7..c38c73c98 100644
--- a/tests/testflows/steps/panel/view.py
+++ b/tests/testflows/steps/panel/view.py
@@ -135,9 +135,9 @@ def wait_sql_editor_input(self):
def select_input_query(self, query_name):
"""Select input query using triple click on textarea."""
- ActionChains(self.context.driver).double_click(locators.sql_editor_input(query_name=query_name, grafana_version=self.context.grafana_version)).click(locators.sql_editor_input(query_name=query_name, grafana_version=self.context.grafana_version)).perform()
-
+ locators.input_in_sql_editor(query_name=query_name, grafana_version=self.context.grafana_version).send_keys(Keys.CONTROL, 'a')
+
@TestStep(When)
def clear_panel_title(self):
"""Clear panel title."""
@@ -172,13 +172,17 @@ def enter_sql_editor_input(self, query, query_name='A'):
"""Enter SQL request into sql editor input field."""
with By("waiting SQL editor"):
- wait_sql_editor_input()
+ with delay():
+ wait_sql_editor_input()
with By("selecting input string"):
- select_input_query(query_name=query_name)
+ with delay():
+ select_input_query(query_name=query_name)
with By("entering request"):
- locators.input_in_sql_editor(query_name=query_name, grafana_version=self.context.grafana_version).send_keys(query)
+ with delay():
+ locators.input_in_sql_editor(query_name=query_name, grafana_version=self.context.grafana_version).send_keys(query + ' ')
+ locators.input_in_sql_editor(query_name=query_name, grafana_version=self.context.grafana_version).send_keys(Keys.ENTER)
@TestStep(When)
@@ -574,80 +578,80 @@ def click_save_button(self):
@TestStep(When)
-def click_adhoc_dropdown(self, label, variable_number):
+def click_adhoc_dropdown(self, adhoc_name):
"""Click adhoc dropdown."""
- locators.adhoc_dropdown(label=label, variable_number=variable_number).click()
+ locators.adhoc(adhoc_name=adhoc_name).click()
@TestStep(When)
-def get_adhoc_dropdown_value(self, label, variable_number):
+def get_adhoc_dropdown_value(self, adhoc_name):
"""Get adhoc dropdown html."""
- return locators.adhoc_grafana_single_value(label=label, variable_number=variable_number).text
+ return locators.adhoc(adhoc_name=adhoc_name).text.split(' ')[2]
@TestStep(When)
-def change_adhoc_value_order(self, label, variable_number, value_order):
+def change_adhoc_value_order(self, adhoc_name, adhoc_label, value_order=0):
"""Change adhoc value."""
with By("clicking on adhoc dropdown"):
with delay():
- click_adhoc_dropdown(label=label, variable_number=variable_number)
+ click_adhoc_dropdown(adhoc_name=adhoc_name)
with By("choosing value from adhoc dropdown"):
with delay():
- choose_value_from_adhoc_dropdown(label=label, variable_number=variable_number, value_order=value_order)
+ choose_value_from_adhoc_dropdown(adhoc_label=adhoc_label, value_order=value_order)
@TestStep(When)
-def change_adhoc_value(self, label, variable_number, variable_value):
+def change_adhoc_value(self,adhoc_name, adhoc_label, variable_value):
"""Change adhoc value."""
with By("clicking on adhoc dropdown"):
with delay():
- click_adhoc_dropdown(label=label, variable_number=variable_number)
+ click_adhoc_dropdown(adhoc_name=adhoc_name)
with By("entering value into adhoc dropdown"):
with delay():
- enter_value_adhoc_dropdown(label=label, variable_number=variable_number, variable_value=variable_value)
+ enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value=variable_value)
@TestStep(When)
-def get_dropdown_values_set(self, label, variable_number):
+def get_dropdown_values_set(self, adhoc_name, adhoc_label):
"""Get dropdown values set."""
values_set = set()
with When(f"I get 0 dropdown value"):
- change_adhoc_value_order(label=label, variable_number=variable_number, value_order=0)
- value = get_adhoc_dropdown_value(label=label, variable_number=variable_number)
+ change_adhoc_value_order(adhoc_name=adhoc_name, adhoc_label=adhoc_label, value_order=0)
+ value = get_adhoc_dropdown_value(adhoc_name=adhoc_name)
order = 1
while not (value in values_set):
values_set.add(value)
with When(f"I get {order} dropdown value"):
- change_adhoc_value_order(label=label, variable_number=variable_number, value_order=order)
- value = get_adhoc_dropdown_value(label=label, variable_number=variable_number)
+ change_adhoc_value_order(adhoc_name=adhoc_name, adhoc_label=adhoc_label, value_order=order)
+ value = get_adhoc_dropdown_value(adhoc_name=adhoc_name)
order+=1
return values_set
@TestStep(When)
-def choose_value_from_adhoc_dropdown(self, label, variable_number, value_order):
+def choose_value_from_adhoc_dropdown(self, adhoc_label, value_order):
"""Choose value from adhoc dropdown value."""
for i in range(value_order):
- locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(Keys.ARROW_DOWN)
+ locators.adhoc_dropdown(label=adhoc_label).send_keys(Keys.ARROW_DOWN)
- locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(Keys.ENTER)
+ locators.adhoc_dropdown(label=adhoc_label).send_keys(Keys.ENTER)
@TestStep(When)
-def enter_value_adhoc_dropdown(self, label, variable_number, variable_value):
+def enter_value_adhoc_dropdown(self, adhoc_label, variable_value):
"""Enter value adhoc dropdown value."""
- locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(variable_value)
- locators.adhoc_dropdown(label=label, variable_number=variable_number).send_keys(Keys.ENTER)
+ locators.adhoc_dropdown(label=adhoc_label).send_keys(variable_value)
+ locators.adhoc_dropdown(label=adhoc_label).send_keys(Keys.ENTER)
@TestStep(When)
diff --git a/tests/testflows/tests/automated/adhoc_macro.py b/tests/testflows/tests/automated/adhoc_macro.py
index b918c7a79..d9b1f63bb 100644
--- a/tests/testflows/tests/automated/adhoc_macro.py
+++ b/tests/testflows/tests/automated/adhoc_macro.py
@@ -37,11 +37,11 @@ def adhoc_macro_outline(self, dashboard_name, expected_adhoc_values, adhoc_label
with And("I get default adhoc value"):
with delay():
- default_adhoc_value = panel.get_adhoc_dropdown_value(label=adhoc_label, variable_number=3)
+ default_adhoc_value = panel.get_adhoc_dropdown_value(adhoc_name=adhoc_name)
with When("I get every adhoc value"):
with delay():
- adhoc_values = panel.get_dropdown_values_set(label=adhoc_label, variable_number=3)
+ adhoc_values = panel.get_dropdown_values_set(adhoc_name=adhoc_name, adhoc_label=adhoc_label)
note(adhoc_values)
assert adhoc_values == expected_adhoc_values, error()
@@ -55,15 +55,19 @@ def adhoc_macro_outline(self, dashboard_name, expected_adhoc_values, adhoc_label
with And("I enter adhoc name"):
with delay():
- panel.enter_value_adhoc_dropdown(label=adhoc_label, variable_number=1, variable_value=adhoc_name)
+ panel.enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value=adhoc_name)
+
+ with And("I enter adhoc operator '='"):
+ with delay():
+ panel.enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value='=')
with And("I enter default adhoc value"):
with delay():
- panel.change_adhoc_value(label=adhoc_label, variable_number=3, variable_value=default_adhoc_value)
+ panel.enter_value_adhoc_dropdown(adhoc_label=adhoc_label, variable_value=default_adhoc_value)
with And("I get every adhoc value after deleting and adding adhoc"):
with delay():
- adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(label=adhoc_label, variable_number=3)
+ adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(adhoc_name=adhoc_name, adhoc_label=adhoc_label)
with Then("I check adhoc correctly displays values after recreating adhoc"):
assert adhoc_values_after_deleting_and_adding_adhoc == adhoc_values, error()
@@ -86,7 +90,7 @@ def adhoc_macro_outline(self, dashboard_name, expected_adhoc_values, adhoc_label
for adhoc_value in adhoc_values:
with When(f"I define adhoc value as {adhoc_value}"):
with delay():
- panel.change_adhoc_value(label=adhoc_label, variable_number=3, variable_value=adhoc_value)
+ panel.change_adhoc_value(adhoc_name=adhoc_name, adhoc_label=adhoc_label, variable_value=adhoc_value)
with Then(f"I check reformatted query contains adhoc {adhoc_value}"):
with delay():
@@ -131,17 +135,21 @@ def default_adhoc(self):
with And("I enter adhoc name"):
with delay():
- panel.enter_value_adhoc_dropdown(label="query0", variable_number=1, variable_value="default.test_grafana.country")
+ panel.enter_value_adhoc_dropdown(adhoc_label="query0", variable_value="default.test_grafana.country")
+
+ with And("I enter adhoc operator '='"):
+ with delay():
+ panel.enter_value_adhoc_dropdown(adhoc_label="query0", variable_value='=')
with And("I enter default adhoc value"):
with delay():
- panel.change_adhoc_value(label="query0", variable_number=3, variable_value="US")
+ panel.enter_value_adhoc_dropdown(adhoc_label="query0", variable_value="US")
with And("I get every adhoc value after deleting and adding adhoc"):
with delay():
- adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(label="query0", variable_number=3)
+ adhoc_values_after_deleting_and_adding_adhoc = panel.get_dropdown_values_set(adhoc_label="query0", adhoc_name="default.test_grafana.country")
- with Then("I check adhoc correctly displays values after recreating adhoc"):
+ with Then("I check adhoc correctly displays values"):
assert adhoc_values_after_deleting_and_adding_adhoc == {'US', 'RU', 'EU', 'UK'}, error()
diff --git a/tests/testflows/tests/automated/e2e.py b/tests/testflows/tests/automated/e2e.py
index c0f01d988..3af90a03e 100644
--- a/tests/testflows/tests/automated/e2e.py
+++ b/tests/testflows/tests/automated/e2e.py
@@ -188,6 +188,14 @@ def annotations_without_time_reformatting(self):
with delay():
panel.take_screenshot_for_visualization(screenshot_name="event_tme_panel")
+ with Finally("I discard changes for panel"):
+ with delay(after=0.5):
+ panel.click_discard_button()
+
+ with And("I discard changes for dashboard"):
+ with delay(after=0.5):
+ dashboard.discard_changes_for_dashboard()
+
with When("I go to Annotation event_time"):
with delay():
dashboards.open_dashboard(dashboard_name="Annotation event_time")
@@ -205,6 +213,14 @@ def annotations_without_time_reformatting(self):
with delay():
panel.take_screenshot_for_visualization(screenshot_name="toUInt64_panel")
+ with Finally("I discard changes for panel"):
+ with delay(after=0.5):
+ panel.click_discard_button()
+
+ with And("I discard changes for dashboard"):
+ with delay(after=0.5):
+ dashboard.discard_changes_for_dashboard()
+
with Then("I compare screenshots"):
with delay():
assert actions.compare_screenshots_percent(screenshot_name_1="event_tme_panel", screenshot_name_2="toUInt64_panel") > 0.9, error()
@@ -232,11 +248,11 @@ def many_categories(self):
assert panel.check_no_labels_on_visualization(labels=["normalized_query_hash", "Too many points"]), error()
finally:
with Finally("I discard changes for panel"):
- with delay():
+ with delay(after=0.5):
panel.click_discard_button()
with And("I discard changes for dashboard"):
- with delay():
+ with delay(after=0.5):
dashboard.discard_changes_for_dashboard()
@TestFeature
diff --git a/tests/testflows/tests/automated/sql_editor.py b/tests/testflows/tests/automated/sql_editor.py
index f66a44ff0..c7575987a 100644
--- a/tests/testflows/tests/automated/sql_editor.py
+++ b/tests/testflows/tests/automated/sql_editor.py
@@ -57,7 +57,8 @@ def add_metadata_toggle(self):
panel.click_on_the_visualization()
with Then("I check reformatted query"):
- assert "/* grafana dashboard=test_sql_editor, user=1 */" in sql_editor.get_reformatted_query(query_name='A'), error()
+ assert "/* grafana dashboard" in sql_editor.get_reformatted_query(query_name='A'), error()
+ assert "test_sql_editor" in sql_editor.get_reformatted_query(query_name='A'), error()
try:
with Then("I click Add metadata toggle"):
@@ -66,7 +67,8 @@ def add_metadata_toggle(self):
with Then("I check reformatted query after clicking toggle"):
with delay():
- assert not ("/* grafana dashboard=test_sql_editor, user=1 */" in sql_editor.get_reformatted_query(query_name='A')), error()
+ assert not ("/* grafana dashboard" in sql_editor.get_reformatted_query(query_name='A')), error()
+ assert not ("test_sql_editor" in sql_editor.get_reformatted_query(query_name='A')), error()
finally:
with Finally("I return Add metadata toggle status back"):
diff --git a/tests/testflows/tests/automated/window_functions.py b/tests/testflows/tests/automated/window_functions.py
index 092608b2b..ca23ad419 100644
--- a/tests/testflows/tests/automated/window_functions.py
+++ b/tests/testflows/tests/automated/window_functions.py
@@ -166,3 +166,7 @@ def feature(self):
else:
with Scenario(f"{panel_name} function"):
window_functions_outline(panel_name=panel_name, panel_names=panel_names)
+
+ with Finally("I discard changes for dashboard"):
+ with delay():
+ dashboard.discard_changes_for_dashboard()
\ No newline at end of file