Chore: some test type fixes (#82889)

* some test type fixes

* ignore table-old since it's an angular panel that will be removed
pull/81206/head
Ashley Harrison 1 year ago committed by GitHub
parent 82e3e2e558
commit ffb9a4de4a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 163
      .betterer.results
  2. 3
      .betterer.ts
  3. 5
      public/app/core/specs/time_series.test.ts
  4. 3
      public/app/features/alerting/unified/AlertsFolderView.test.tsx
  5. 2
      public/app/features/dashboard-scene/panel-edit/VizPanelManager.test.tsx
  6. 2
      public/app/features/dashboard-scene/scene/DashboardScene.test.tsx
  7. 2
      public/app/features/dashboard-scene/scene/setDashboardPanelContext.test.ts
  8. 5
      public/app/features/dashboard-scene/serialization/angularMigration.test.ts
  9. 45
      public/app/features/dashboard/components/DashExportModal/DashboardExporter.test.ts
  10. 24
      public/app/features/dashboard/state/DashboardMigrator.test.ts
  11. 28
      public/app/features/dashboard/state/DashboardModel.repeat.test.ts
  12. 4
      public/app/features/dashboard/state/initDashboard.test.ts
  13. 5
      public/app/features/plugins/tests/datasource_srv.test.ts
  14. 2
      public/app/features/query/state/updateQueries.test.ts
  15. 20
      public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.test.ts
  16. 2
      public/app/features/variables/query/QueryVariableEditor.test.tsx
  17. 54
      public/app/features/variables/query/queryRunners.test.ts

@ -1334,9 +1334,6 @@ exports[`better eslint`] = {
"public/app/core/specs/backend_srv.test.ts:5381": [ "public/app/core/specs/backend_srv.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"] [0, 0, 0, "Unexpected any. Specify a different type.", "0"]
], ],
"public/app/core/specs/time_series.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
"public/app/core/time_series2.ts:5381": [ "public/app/core/time_series2.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
@ -1559,9 +1556,6 @@ exports[`better eslint`] = {
"public/app/features/alerting/unified/AlertWarning.tsx:5381": [ "public/app/features/alerting/unified/AlertWarning.tsx:5381": [
[0, 0, 0, "Styles should be written using objects.", "0"] [0, 0, 0, "Styles should be written using objects.", "0"]
], ],
"public/app/features/alerting/unified/AlertsFolderView.test.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
"public/app/features/alerting/unified/AlertsFolderView.tsx:5381": [ "public/app/features/alerting/unified/AlertsFolderView.tsx:5381": [
[0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "0"],
[0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "1"],
@ -2570,9 +2564,6 @@ exports[`better eslint`] = {
"public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx:5381": [ "public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"] [0, 0, 0, "Do not use any type assertions.", "0"]
], ],
"public/app/features/dashboard-scene/panel-edit/VizPanelManager.test.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
"public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx:5381": [ "public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx:5381": [
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"],
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"]
@ -2584,21 +2575,11 @@ exports[`better eslint`] = {
"public/app/features/dashboard-scene/saving/shared.tsx:5381": [ "public/app/features/dashboard-scene/saving/shared.tsx:5381": [
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
], ],
"public/app/features/dashboard-scene/scene/DashboardScene.test.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
"public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx:5381": [ "public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Do not use any type assertions.", "2"] [0, 0, 0, "Do not use any type assertions.", "2"]
], ],
"public/app/features/dashboard-scene/scene/setDashboardPanelContext.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
"public/app/features/dashboard-scene/serialization/angularMigration.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
],
"public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts:5381": [ "public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
@ -2664,22 +2645,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"]
[0, 0, 0, "Unexpected any. Specify a different type.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
[0, 0, 0, "Unexpected any. Specify a different type.", "13"],
[0, 0, 0, "Unexpected any. Specify a different type.", "14"],
[0, 0, 0, "Unexpected any. Specify a different type.", "15"],
[0, 0, 0, "Unexpected any. Specify a different type.", "16"],
[0, 0, 0, "Unexpected any. Specify a different type.", "17"],
[0, 0, 0, "Unexpected any. Specify a different type.", "18"],
[0, 0, 0, "Unexpected any. Specify a different type.", "19"],
[0, 0, 0, "Unexpected any. Specify a different type.", "20"]
], ],
"public/app/features/dashboard/components/DashExportModal/DashboardExporter.ts:5381": [ "public/app/features/dashboard/components/DashExportModal/DashboardExporter.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
@ -2967,14 +2933,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"], [0, 0, 0, "Unexpected any. Specify a different type.", "11"]
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
[0, 0, 0, "Unexpected any. Specify a different type.", "13"],
[0, 0, 0, "Unexpected any. Specify a different type.", "14"],
[0, 0, 0, "Unexpected any. Specify a different type.", "15"],
[0, 0, 0, "Unexpected any. Specify a different type.", "16"],
[0, 0, 0, "Unexpected any. Specify a different type.", "17"],
[0, 0, 0, "Unexpected any. Specify a different type.", "18"]
], ],
"public/app/features/dashboard/state/DashboardMigrator.ts:5381": [ "public/app/features/dashboard/state/DashboardMigrator.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
@ -3013,10 +2972,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"]
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"]
], ],
"public/app/features/dashboard/state/DashboardModel.test.ts:5381": [ "public/app/features/dashboard/state/DashboardModel.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"] [0, 0, 0, "Unexpected any. Specify a different type.", "0"]
@ -3085,8 +3041,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "0"] [0, 0, 0, "Unexpected any. Specify a different type.", "0"]
], ],
"public/app/features/dashboard/state/initDashboard.test.ts:5381": [ "public/app/features/dashboard/state/initDashboard.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"]
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
], ],
"public/app/features/dashboard/utils/getPanelMenu.test.ts:5381": [ "public/app/features/dashboard/utils/getPanelMenu.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"] [0, 0, 0, "Unexpected any. Specify a different type.", "0"]
@ -4076,8 +4031,7 @@ exports[`better eslint`] = {
"public/app/features/plugins/tests/datasource_srv.test.ts:5381": [ "public/app/features/plugins/tests/datasource_srv.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"]
[0, 0, 0, "Unexpected any. Specify a different type.", "3"]
], ],
"public/app/features/plugins/utils.ts:5381": [ "public/app/features/plugins/utils.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "0"],
@ -4158,8 +4112,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"]
[0, 0, 0, "Unexpected any. Specify a different type.", "11"]
], ],
"public/app/features/search/page/components/ActionRow.tsx:5381": [ "public/app/features/search/page/components/ActionRow.tsx:5381": [
[0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "0"],
@ -4405,8 +4358,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Styles should be written using objects.", "0"] [0, 0, 0, "Styles should be written using objects.", "0"]
], ],
"public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.test.ts:5381": [ "public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"]
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
], ],
"public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.ts:5381": [ "public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
@ -4527,9 +4479,6 @@ exports[`better eslint`] = {
"public/app/features/variables/pickers/shared/VariableOptions.tsx:5381": [ "public/app/features/variables/pickers/shared/VariableOptions.tsx:5381": [
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
], ],
"public/app/features/variables/query/QueryVariableEditor.test.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
"public/app/features/variables/query/QueryVariableEditor.tsx:5381": [ "public/app/features/variables/query/QueryVariableEditor.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"] [0, 0, 0, "Unexpected any. Specify a different type.", "1"]
@ -4553,13 +4502,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "1"] [0, 0, 0, "Unexpected any. Specify a different type.", "1"]
], ],
"public/app/features/variables/query/queryRunners.test.ts:5381": [ "public/app/features/variables/query/queryRunners.test.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"]
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"]
], ],
"public/app/features/variables/query/queryRunners.ts:5381": [ "public/app/features/variables/query/queryRunners.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
@ -6116,96 +6059,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"] [0, 0, 0, "Unexpected any. Specify a different type.", "1"]
], ],
"public/app/plugins/panel/table-old/column_options.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
[0, 0, 0, "Unexpected any. Specify a different type.", "13"],
[0, 0, 0, "Unexpected any. Specify a different type.", "14"],
[0, 0, 0, "Unexpected any. Specify a different type.", "15"],
[0, 0, 0, "Unexpected any. Specify a different type.", "16"],
[0, 0, 0, "Unexpected any. Specify a different type.", "17"],
[0, 0, 0, "Unexpected any. Specify a different type.", "18"],
[0, 0, 0, "Unexpected any. Specify a different type.", "19"],
[0, 0, 0, "Unexpected any. Specify a different type.", "20"],
[0, 0, 0, "Unexpected any. Specify a different type.", "21"]
],
"public/app/plugins/panel/table-old/editor.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"]
],
"public/app/plugins/panel/table-old/module.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"]
],
"public/app/plugins/panel/table-old/renderer.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Do not use any type assertions.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
[0, 0, 0, "Unexpected any. Specify a different type.", "12"]
],
"public/app/plugins/panel/table-old/transformers.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"]
],
"public/app/plugins/panel/table-old/types.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
[0, 0, 0, "Unexpected any. Specify a different type.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
[0, 0, 0, "Unexpected any. Specify a different type.", "12"]
],
"public/app/plugins/panel/table/TablePanel.tsx:5381": [ "public/app/plugins/panel/table/TablePanel.tsx:5381": [
[0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "0"],
[0, 0, 0, "Styles should be written using objects.", "1"] [0, 0, 0, "Styles should be written using objects.", "1"]

@ -5,11 +5,12 @@ import path from 'path';
import { glob } from 'glob'; import { glob } from 'glob';
// Why are we ignoring these? // Why are we ignoring these?
// They're all deprecated/being removed soon so doesn't make sense to fix types // They're all deprecated/being removed so doesn't make sense to fix types
const eslintPathsToIgnore = [ const eslintPathsToIgnore = [
'packages/grafana-e2e', // deprecated. 'packages/grafana-e2e', // deprecated.
'public/app/angular', // will be removed in Grafana 11 'public/app/angular', // will be removed in Grafana 11
'public/app/plugins/panel/graph', // will be removed alongside angular 'public/app/plugins/panel/graph', // will be removed alongside angular
'public/app/plugins/panel/table-old', // will be removed alongside angular
]; ];
// Avoid using functions that report the position of the issues, as this causes a lot of merge conflicts // Avoid using functions that report the position of the issues, as this causes a lot of merge conflicts

@ -406,7 +406,10 @@ describe('TimeSeries', () => {
describe('legend decimals', () => { describe('legend decimals', () => {
let series: TimeSeries; let series: TimeSeries;
let panel: any; let panel: {
decimals: number | null;
yaxes: Array<{ decimals: number | null }>;
};
const height = 200; const height = 200;
beforeEach(() => { beforeEach(() => {
testData = { testData = {

@ -8,6 +8,7 @@ import { FolderState } from 'app/types';
import { CombinedRuleNamespace } from 'app/types/unified-alerting'; import { CombinedRuleNamespace } from 'app/types/unified-alerting';
import { AlertsFolderView } from './AlertsFolderView'; import { AlertsFolderView } from './AlertsFolderView';
import { useCombinedRuleNamespaces } from './hooks/useCombinedRuleNamespaces';
import { mockCombinedRule } from './mocks'; import { mockCombinedRule } from './mocks';
import { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; import { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource';
@ -21,7 +22,7 @@ const ui = {
}, },
}; };
const combinedNamespaceMock = jest.fn<CombinedRuleNamespace[], any>(); const combinedNamespaceMock = jest.fn(useCombinedRuleNamespaces);
jest.mock('./hooks/useCombinedRuleNamespaces', () => ({ jest.mock('./hooks/useCombinedRuleNamespaces', () => ({
useCombinedRuleNamespaces: () => combinedNamespaceMock(), useCombinedRuleNamespaces: () => combinedNamespaceMock(),
})); }));

@ -621,7 +621,7 @@ describe('VizPanelManager', () => {
}); });
const setupTest = (panelId: string) => { const setupTest = (panelId: string) => {
const scene = transformSaveModelToScene({ dashboard: testDashboard as any, meta: {} }); const scene = transformSaveModelToScene({ dashboard: testDashboard, meta: {} });
const panel = findVizPanelByKey(scene, panelId)!; const panel = findVizPanelByKey(scene, panelId)!;
const vizPanelManager = new VizPanelManager(panel.clone()); const vizPanelManager = new VizPanelManager(panel.clone());

@ -71,7 +71,7 @@ describe('DashboardScene', () => {
${'links'} | ${[]} ${'links'} | ${[]}
`( `(
'A change to $prop should set isDirty true', 'A change to $prop should set isDirty true',
({ prop, value }: { prop: keyof DashboardSceneState; value: any }) => { ({ prop, value }: { prop: keyof DashboardSceneState; value: unknown }) => {
const prevState = scene.state[prop]; const prevState = scene.state[prop];
scene.setState({ [prop]: value }); scene.setState({ [prop]: value });

@ -15,7 +15,7 @@ setBackendSrv({
post: postFn, post: postFn,
put: putFn, put: putFn,
delete: deleteFn, delete: deleteFn,
} as any as BackendSrv); } as unknown as BackendSrv);
describe('setDashboardPanelContext', () => { describe('setDashboardPanelContext', () => {
describe('canAddAnnotations', () => { describe('canAddAnnotations', () => {

@ -1,3 +1,4 @@
import { PanelTypeChangedHandler } from '@grafana/data';
import { getPanelPlugin } from '@grafana/data/test/__mocks__/pluginMocks'; import { getPanelPlugin } from '@grafana/data/test/__mocks__/pluginMocks';
import { PanelModel } from 'app/features/dashboard/state'; import { PanelModel } from 'app/features/dashboard/state';
@ -6,12 +7,12 @@ import { getAngularPanelMigrationHandler } from './angularMigration';
describe('getAngularPanelMigrationHandler', () => { describe('getAngularPanelMigrationHandler', () => {
describe('Given an old angular panel', () => { describe('Given an old angular panel', () => {
it('Should call migration handler', () => { it('Should call migration handler', () => {
const onPanelTypeChanged = (panel: PanelModel, prevPluginId: string, prevOptions: Record<string, any>) => { const onPanelTypeChanged: PanelTypeChangedHandler = (panel, prevPluginId, prevOptions) => {
panel.fieldConfig = { defaults: { unit: 'bytes' }, overrides: [] }; panel.fieldConfig = { defaults: { unit: 'bytes' }, overrides: [] };
return { name: prevOptions.angular.oldOptionProp }; return { name: prevOptions.angular.oldOptionProp };
}; };
const reactPlugin = getPanelPlugin({ id: 'timeseries' }).setPanelChangeHandler(onPanelTypeChanged as any); const reactPlugin = getPanelPlugin({ id: 'timeseries' }).setPanelChangeHandler(onPanelTypeChanged);
const oldModel = new PanelModel({ const oldModel = new PanelModel({
autoMigrateFrom: 'graph', autoMigrateFrom: 'graph',

@ -25,9 +25,8 @@ jest.mock('@grafana/runtime', () => ({
...jest.requireActual('@grafana/runtime'), ...jest.requireActual('@grafana/runtime'),
getDataSourceSrv: () => { getDataSourceSrv: () => {
return { return {
get: (v: any) => { get: (v: string | DataSourceRef) => {
const s = getStubInstanceSettings(v); const s = getStubInstanceSettings(v);
// console.log('GET', v, s);
return Promise.resolve(s); return Promise.resolve(s);
}, },
getInstanceSettings: getStubInstanceSettings, getInstanceSettings: getStubInstanceSettings,
@ -169,7 +168,7 @@ it('replaces datasource ref in library panel', async () => {
}); });
it('If a panel queries has no datasource prop ignore it', async () => { it('If a panel queries has no datasource prop ignore it', async () => {
const dashboard: any = { const dashboard = {
panels: [ panels: [
{ {
id: 1, id: 1,
@ -181,7 +180,7 @@ it('If a panel queries has no datasource prop ignore it', async () => {
targets: [{ refId: 'A', a: 'A' }], targets: [{ refId: 'A', a: 'A' }],
}, },
], ],
}; } as unknown as Dashboard;
const dashboardModel = new DashboardModel(dashboard, undefined, { const dashboardModel = new DashboardModel(dashboard, undefined, {
getVariablesFromState: () => [], getVariablesFromState: () => [],
}); });
@ -348,9 +347,9 @@ describe('given dashboard with repeated panels', () => {
}); });
it('should not include default datasource in __inputs unnecessarily', async () => { it('should not include default datasource in __inputs unnecessarily', async () => {
const testJson: any = { const testJson = {
panels: [{ id: 1, datasource: { uid: 'other', type: 'other' }, type: 'graph' }], panels: [{ id: 1, datasource: { uid: 'other', type: 'other' }, type: 'graph' }],
}; } as unknown as Dashboard;
const testDash = new DashboardModel(testJson); const testDash = new DashboardModel(testJson);
const exporter = new DashboardExporter(); const exporter = new DashboardExporter();
const exportedJson: any = await exporter.makeExportable(testDash); const exportedJson: any = await exporter.makeExportable(testDash);
@ -380,7 +379,7 @@ describe('given dashboard with repeated panels', () => {
}); });
it('should add datasource to required', () => { it('should add datasource to required', () => {
const require: any = find(exported.__requires, { name: 'TestDB' }); const require = find(exported.__requires, { name: 'TestDB' });
expect(require.name).toBe('TestDB'); expect(require.name).toBe('TestDB');
expect(require.id).toBe('testdb'); expect(require.id).toBe('testdb');
expect(require.type).toBe('datasource'); expect(require.type).toBe('datasource');
@ -388,52 +387,52 @@ describe('given dashboard with repeated panels', () => {
}); });
it('should not add built in datasources to required', () => { it('should not add built in datasources to required', () => {
const require: any = find(exported.__requires, { name: 'Mixed' }); const require = find(exported.__requires, { name: 'Mixed' });
expect(require).toBe(undefined); expect(require).toBe(undefined);
}); });
it('should add datasources used in mixed mode', () => { it('should add datasources used in mixed mode', () => {
const require: any = find(exported.__requires, { name: 'OtherDB' }); const require = find(exported.__requires, { name: 'OtherDB' });
expect(require).not.toBe(undefined); expect(require).not.toBe(undefined);
}); });
it('should add graph panel to required', () => { it('should add graph panel to required', () => {
const require: any = find(exported.__requires, { name: 'Graph' }); const require = find(exported.__requires, { name: 'Graph' });
expect(require.name).toBe('Graph'); expect(require.name).toBe('Graph');
expect(require.id).toBe('graph'); expect(require.id).toBe('graph');
expect(require.version).toBe('1.1.0'); expect(require.version).toBe('1.1.0');
}); });
it('should add table panel to required', () => { it('should add table panel to required', () => {
const require: any = find(exported.__requires, { name: 'Table' }); const require = find(exported.__requires, { name: 'Table' });
expect(require.name).toBe('Table'); expect(require.name).toBe('Table');
expect(require.id).toBe('table'); expect(require.id).toBe('table');
expect(require.version).toBe('1.1.1'); expect(require.version).toBe('1.1.1');
}); });
it('should add heatmap panel to required', () => { it('should add heatmap panel to required', () => {
const require: any = find(exported.__requires, { name: 'Heatmap' }); const require = find(exported.__requires, { name: 'Heatmap' });
expect(require.name).toBe('Heatmap'); expect(require.name).toBe('Heatmap');
expect(require.id).toBe('heatmap'); expect(require.id).toBe('heatmap');
expect(require.version).toBe('1.1.2'); expect(require.version).toBe('1.1.2');
}); });
it('should add grafana version', () => { it('should add grafana version', () => {
const require: any = find(exported.__requires, { name: 'Grafana' }); const require = find(exported.__requires, { name: 'Grafana' });
expect(require.type).toBe('grafana'); expect(require.type).toBe('grafana');
expect(require.id).toBe('grafana'); expect(require.id).toBe('grafana');
expect(require.version).toBe('3.0.2'); expect(require.version).toBe('3.0.2');
}); });
it('should add constant template variables as inputs', () => { it('should add constant template variables as inputs', () => {
const input: any = find(exported.__inputs, { name: 'VAR_PREFIX' }); const input = find(exported.__inputs, { name: 'VAR_PREFIX' });
expect(input.type).toBe('constant'); expect(input.type).toBe('constant');
expect(input.label).toBe('prefix'); expect(input.label).toBe('prefix');
expect(input.value).toBe('collectd'); expect(input.value).toBe('collectd');
}); });
it('should templatize constant variables', () => { it('should templatize constant variables', () => {
const variable: any = find(exported.templating.list, { name: 'prefix' }); const variable = find(exported.templating.list, { name: 'prefix' });
expect(variable.query).toBe('${VAR_PREFIX}'); expect(variable.query).toBe('${VAR_PREFIX}');
expect(variable.current.text).toBe('${VAR_PREFIX}'); expect(variable.current.text).toBe('${VAR_PREFIX}');
expect(variable.current.value).toBe('${VAR_PREFIX}'); expect(variable.current.value).toBe('${VAR_PREFIX}');
@ -442,7 +441,7 @@ describe('given dashboard with repeated panels', () => {
}); });
it('should add datasources only use via datasource variable to requires', () => { it('should add datasources only use via datasource variable to requires', () => {
const require: any = find(exported.__requires, { name: 'OtherDB_2' }); const require = find(exported.__requires, { name: 'OtherDB_2' });
expect(require.id).toBe('other2'); expect(require.id).toBe('other2');
}); });
@ -472,25 +471,25 @@ describe('given dashboard with repeated panels', () => {
function getStubInstanceSettings(v: string | DataSourceRef): DataSourceInstanceSettings { function getStubInstanceSettings(v: string | DataSourceRef): DataSourceInstanceSettings {
let key = (v as DataSourceRef)?.type ?? v; let key = (v as DataSourceRef)?.type ?? v;
return (stubs[(key as any) ?? 'gfdb'] ?? stubs['gfdb']) as any; return stubs[(key as string) ?? 'gfdb'] ?? stubs['gfdb'];
} }
// Stub responses // Stub responses
const stubs: { [key: string]: {} } = {}; const stubs: { [key: string]: DataSourceInstanceSettings } = {};
stubs['gfdb'] = { stubs['gfdb'] = {
name: 'gfdb', name: 'gfdb',
meta: { id: 'testdb', info: { version: '1.2.1' }, name: 'TestDB' }, meta: { id: 'testdb', info: { version: '1.2.1' }, name: 'TestDB' },
}; } as DataSourceInstanceSettings;
stubs['other'] = { stubs['other'] = {
name: 'other', name: 'other',
meta: { id: 'other', info: { version: '1.2.1' }, name: 'OtherDB' }, meta: { id: 'other', info: { version: '1.2.1' }, name: 'OtherDB' },
}; } as DataSourceInstanceSettings;
stubs['other2'] = { stubs['other2'] = {
name: 'other2', name: 'other2',
meta: { id: 'other2', info: { version: '1.2.1' }, name: 'OtherDB_2' }, meta: { id: 'other2', info: { version: '1.2.1' }, name: 'OtherDB_2' },
}; } as DataSourceInstanceSettings;
stubs['mixed'] = { stubs['mixed'] = {
name: 'mixed', name: 'mixed',
@ -500,7 +499,7 @@ stubs['mixed'] = {
name: 'Mixed', name: 'Mixed',
builtIn: true, builtIn: true,
}, },
}; } as DataSourceInstanceSettings;
stubs['grafana'] = { stubs['grafana'] = {
name: '-- Grafana --', name: '-- Grafana --',
@ -510,4 +509,4 @@ stubs['grafana'] = {
name: 'grafana', name: 'grafana',
builtIn: true, builtIn: true,
}, },
}; } as DataSourceInstanceSettings;

@ -46,7 +46,7 @@ setDataSourceSrv(new MockDataSourceSrv(dataSources));
describe('DashboardModel', () => { describe('DashboardModel', () => {
describe('when creating dashboard with old schema', () => { describe('when creating dashboard with old schema', () => {
let model: any; let model: DashboardModel;
let graph: any; let graph: any;
let singlestat: any; let singlestat: any;
let table: any; let table: any;
@ -517,7 +517,7 @@ describe('DashboardModel', () => {
}); });
describe('when migrating panel links', () => { describe('when migrating panel links', () => {
let model: any; let model: DashboardModel;
beforeEach(() => { beforeEach(() => {
model = new DashboardModel({ model = new DashboardModel({
@ -564,24 +564,26 @@ describe('DashboardModel', () => {
}); });
it('should add keepTime as variable', () => { it('should add keepTime as variable', () => {
expect(model.panels[0].links[0].url).toBe(`http://mylink.com?$${DataLinkBuiltInVars.keepTime}`); expect(model.panels[0].links?.[0].url).toBe(`http://mylink.com?$${DataLinkBuiltInVars.keepTime}`);
}); });
it('should add params to url', () => { it('should add params to url', () => {
expect(model.panels[0].links[1].url).toBe('http://mylink.com?existingParam&customParam'); expect(model.panels[0].links?.[1].url).toBe('http://mylink.com?existingParam&customParam');
}); });
it('should add includeVars to url', () => { it('should add includeVars to url', () => {
expect(model.panels[0].links[2].url).toBe(`http://mylink.com?existingParam&$${DataLinkBuiltInVars.includeVars}`); expect(model.panels[0].links?.[2].url).toBe(
`http://mylink.com?existingParam&$${DataLinkBuiltInVars.includeVars}`
);
}); });
it('should slugify dashboard name', () => { it('should slugify dashboard name', () => {
expect(model.panels[0].links[3].url).toBe(`dashboard/db/my-other-dashboard`); expect(model.panels[0].links?.[3].url).toBe(`dashboard/db/my-other-dashboard`);
}); });
}); });
describe('when migrating variables', () => { describe('when migrating variables', () => {
let model: any; let model: DashboardModel;
beforeEach(() => { beforeEach(() => {
model = new DashboardModel({ model = new DashboardModel({
panels: [ panels: [
@ -648,7 +650,7 @@ describe('DashboardModel', () => {
}); });
describe('when migrating labels from DataFrame to Field', () => { describe('when migrating labels from DataFrame to Field', () => {
let model: any; let model: DashboardModel;
beforeEach(() => { beforeEach(() => {
model = new DashboardModel({ model = new DashboardModel({
panels: [ panels: [
@ -892,7 +894,7 @@ describe('DashboardModel', () => {
}); });
it('should migrate panels with new Text Panel id', () => { it('should migrate panels with new Text Panel id', () => {
const reactPanel: any = model.panels[1]; const reactPanel = model.panels[1];
expect(reactPanel.id).toEqual(3); expect(reactPanel.id).toEqual(3);
expect(reactPanel.type).toEqual('text'); expect(reactPanel.type).toEqual('text');
expect(reactPanel.title).toEqual('React Text Panel from scratch'); expect(reactPanel.title).toEqual('React Text Panel from scratch');
@ -903,7 +905,7 @@ describe('DashboardModel', () => {
}); });
it('should clean up old angular options for panels with new Text Panel id', () => { it('should clean up old angular options for panels with new Text Panel id', () => {
const reactPanel: any = model.panels[2]; const reactPanel = model.panels[2];
expect(reactPanel.id).toEqual(4); expect(reactPanel.id).toEqual(4);
expect(reactPanel.type).toEqual('text'); expect(reactPanel.type).toEqual('text');
expect(reactPanel.title).toEqual('React Text Panel from Angular Panel'); expect(reactPanel.title).toEqual('React Text Panel from Angular Panel');
@ -1564,7 +1566,7 @@ describe('DashboardModel', () => {
}); });
describe('migrating legacy CloudWatch queries', () => { describe('migrating legacy CloudWatch queries', () => {
let model: any; let model: DashboardModel;
let panelTargets: any; let panelTargets: any;
beforeEach(() => { beforeEach(() => {

@ -194,7 +194,7 @@ describe('given dashboard with panel repeat in horizontal direction', () => {
}); });
describe('given dashboard with panel repeat in vertical direction', () => { describe('given dashboard with panel repeat in vertical direction', () => {
let dashboard: any; let dashboard: DashboardModel;
beforeEach(() => { beforeEach(() => {
const dashboardJSON = { const dashboardJSON = {
@ -238,7 +238,7 @@ describe('given dashboard with panel repeat in vertical direction', () => {
}); });
describe('given dashboard with row repeat and panel repeat in horizontal direction', () => { describe('given dashboard with row repeat and panel repeat in horizontal direction', () => {
let dashboard: any, dashboardJSON: any; let dashboard: DashboardModel, dashboardJSON: any;
beforeEach(() => { beforeEach(() => {
dashboardJSON = { dashboardJSON = {
@ -280,7 +280,7 @@ describe('given dashboard with row repeat and panel repeat in horizontal directi
}, },
}; };
dashboard = getDashboardModel(dashboardJSON); dashboard = getDashboardModel(dashboardJSON);
dashboard.processRepeats(false); dashboard.processRepeats();
}); });
it('should panels in self row', () => { it('should panels in self row', () => {
@ -325,7 +325,7 @@ describe('given dashboard with row repeat and panel repeat in horizontal directi
}); });
describe('given dashboard with row repeat', () => { describe('given dashboard with row repeat', () => {
let dashboard: any, dashboardJSON: any; let dashboard: DashboardModel, dashboardJSON: any;
beforeEach(() => { beforeEach(() => {
dashboardJSON = { dashboardJSON = {
@ -382,7 +382,7 @@ describe('given dashboard with row repeat', () => {
const scopedVars = compact( const scopedVars = compact(
map(dashboard.panels, (panel) => { map(dashboard.panels, (panel) => {
return panel.scopedVars ? panel.scopedVars.apps.value : null; return panel.scopedVars ? panel.scopedVars.apps?.value : null;
}) })
); );
@ -474,14 +474,14 @@ describe('given dashboard with row repeat', () => {
'graph', 'graph',
]); ]);
expect(dashboard.panels[0].scopedVars['apps'].value).toBe('se1'); expect(dashboard.panels[0].scopedVars?.['apps']?.value).toBe('se1');
expect(dashboard.panels[1].scopedVars['apps'].value).toBe('se1'); expect(dashboard.panels[1].scopedVars?.['apps']?.value).toBe('se1');
expect(dashboard.panels[3].scopedVars['apps'].value).toBe('se2'); expect(dashboard.panels[3].scopedVars?.['apps']?.value).toBe('se2');
expect(dashboard.panels[4].scopedVars['apps'].value).toBe('se2'); expect(dashboard.panels[4].scopedVars?.['apps']?.value).toBe('se2');
expect(dashboard.panels[8].scopedVars['hosts'].value).toBe('backend01'); expect(dashboard.panels[8].scopedVars?.['hosts']?.value).toBe('backend01');
expect(dashboard.panels[9].scopedVars['hosts'].value).toBe('backend01'); expect(dashboard.panels[9].scopedVars?.['hosts']?.value).toBe('backend01');
expect(dashboard.panels[11].scopedVars['hosts'].value).toBe('backend02'); expect(dashboard.panels[11].scopedVars?.['hosts']?.value).toBe('backend02');
expect(dashboard.panels[12].scopedVars['hosts'].value).toBe('backend02'); expect(dashboard.panels[12].scopedVars?.['hosts']?.value).toBe('backend02');
}); });
it('should assign unique ids for repeated panels', () => { it('should assign unique ids for repeated panels', () => {
@ -505,7 +505,7 @@ describe('given dashboard with row repeat', () => {
const panelIds = flattenDeep( const panelIds = flattenDeep(
map(dashboard.panels, (panel) => { map(dashboard.panels, (panel) => {
let ids = []; let ids: number[] = [];
if (panel.panels && panel.panels.length) { if (panel.panels && panel.panels.length) {
ids = map(panel.panels, 'id'); ids = map(panel.panels, 'id');
} }

@ -1,4 +1,4 @@
import configureMockStore from 'redux-mock-store'; import configureMockStore, { MockStore } from 'redux-mock-store';
import thunk from 'redux-thunk'; import thunk from 'redux-thunk';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@ -71,7 +71,7 @@ interface ScenarioContext {
loaderSrv: DashboardLoaderSrv; loaderSrv: DashboardLoaderSrv;
backendSrv: jest.Mocked<BackendSrv>; backendSrv: jest.Mocked<BackendSrv>;
setup: (fn: () => void) => void; setup: (fn: () => void) => void;
actions: any[]; actions: ReturnType<MockStore['getActions']>;
storeState: any; storeState: any;
} }

@ -5,11 +5,12 @@ import {
DataSourcePluginMeta, DataSourcePluginMeta,
ScopedVars, ScopedVars,
} from '@grafana/data'; } from '@grafana/data';
import { TemplateSrv } from '@grafana/runtime';
import { ExpressionDatasourceRef } from '@grafana/runtime/src/utils/DataSourceWithBackend'; import { ExpressionDatasourceRef } from '@grafana/runtime/src/utils/DataSourceWithBackend';
import { DatasourceSrv, getNameOrUid } from 'app/features/plugins/datasource_srv'; import { DatasourceSrv, getNameOrUid } from 'app/features/plugins/datasource_srv';
// Datasource variable $datasource with current value 'BBB' // Datasource variable $datasource with current value 'BBB'
const templateSrv: any = { const templateSrv = {
getVariables: () => [ getVariables: () => [
{ {
type: 'datasource', type: 'datasource',
@ -43,7 +44,7 @@ const templateSrv: any = {
result = result.replace('${datasourceDefault}', 'default'); result = result.replace('${datasourceDefault}', 'default');
return result; return result;
}, },
}; } as TemplateSrv;
class TestDataSource { class TestDataSource {
constructor(public instanceSettings: DataSourceInstanceSettings) {} constructor(public instanceSettings: DataSourceInstanceSettings) {}

@ -577,7 +577,7 @@ describe('updateQueries with import', () => {
importQueries: (queries, origin) => { importQueries: (queries, origin) => {
return Promise.resolve([] as DataQuery[]); return Promise.resolve([] as DataQuery[]);
}, },
} as DataSourceApi<any>; } as DataSourceApi;
const oldUidDS = { const oldUidDS = {
uid: 'old-uid', uid: 'old-uid',

@ -39,7 +39,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [1, 2, 3, 4, 5, 6] }, { name: 'time', type: FieldType.time, values: [1, 2, 3, 4, 5, 6] },
{ name: 'count', type: FieldType.number, values: [10, 20, 30, 40, 50, 60] }, { name: 'count', type: FieldType.number, values: [10, 20, 30, 40, 50, 60] },
], ] as DataFrame['fields'],
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
}, },
@ -51,7 +51,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [1, 2, 3, 4, 5, 6] }, { name: 'time', type: FieldType.time, values: [1, 2, 3, 4, 5, 6] },
{ name: 'more', type: FieldType.number, values: [2, 3, 4, 5, 6, 7] }, { name: 'more', type: FieldType.number, values: [2, 3, 4, 5, 6, 7] },
], ] as DataFrame['fields'],
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
}, },
@ -181,7 +181,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [0, 1, 2, 3, 4, 5] }, { name: 'time', type: FieldType.time, values: [0, 1, 2, 3, 4, 5] },
{ name: 'another', type: FieldType.number, values: [2, 3, 4, 5, 6, 7] }, { name: 'another', type: FieldType.number, values: [2, 3, 4, 5, 6, 7] },
], ] as DataFrame['fields'],
length: 6, length: 6,
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
@ -193,7 +193,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [0, 1, 2, 3, 4, 5] }, { name: 'time', type: FieldType.time, values: [0, 1, 2, 3, 4, 5] },
{ name: 'count', type: FieldType.number, values: [10, 20, 30, 40, 50, 60] }, { name: 'count', type: FieldType.number, values: [10, 20, 30, 40, 50, 60] },
], ] as DataFrame['fields'],
length: 6, length: 6,
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
@ -205,7 +205,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [4, 5, 6, 7, 8, 9] }, { name: 'time', type: FieldType.time, values: [4, 5, 6, 7, 8, 9] },
{ name: 'value', type: FieldType.number, values: [2, 3, 4, 5, 6, 7] }, { name: 'value', type: FieldType.number, values: [2, 3, 4, 5, 6, 7] },
], ] as DataFrame['fields'],
length: 6, length: 6,
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
@ -304,7 +304,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [1, 2, 3] }, { name: 'time', type: FieldType.time, values: [1, 2, 3] },
{ name: 'value', labels: { region: 'a' }, type: FieldType.number, values: [10, 30, 50] }, { name: 'value', labels: { region: 'a' }, type: FieldType.number, values: [10, 30, 50] },
], ] as DataFrame['fields'],
length: 3, length: 3,
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
@ -316,7 +316,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [1, 2, 3] }, { name: 'time', type: FieldType.time, values: [1, 2, 3] },
{ name: 'value', labels: { region: 'b' }, type: FieldType.number, values: [20, 40, 60] }, { name: 'value', labels: { region: 'b' }, type: FieldType.number, values: [20, 40, 60] },
], ] as DataFrame['fields'],
length: 3, length: 3,
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
@ -351,7 +351,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [1, 2, 3] }, { name: 'time', type: FieldType.time, values: [1, 2, 3] },
{ name: 'value', labels: { region: 'a' }, type: FieldType.number, values: [10, 30, 50] }, { name: 'value', labels: { region: 'a' }, type: FieldType.number, values: [10, 30, 50] },
], ] as DataFrame['fields'],
length: 3, length: 3,
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
@ -363,7 +363,7 @@ describe('Prepare time series transformer', () => {
fields: [ fields: [
{ name: 'time', type: FieldType.time, values: [1, 2, 3] }, { name: 'time', type: FieldType.time, values: [1, 2, 3] },
{ name: 'value', labels: { region: 'b' }, type: FieldType.number, values: [20, 40, 60] }, { name: 'value', labels: { region: 'b' }, type: FieldType.number, values: [20, 40, 60] },
], ] as DataFrame['fields'],
length: 3, length: 3,
meta: { meta: {
type: DataFrameType.TimeSeriesMulti, type: DataFrameType.TimeSeriesMulti,
@ -415,7 +415,7 @@ describe('Prepare time series transformer', () => {
}); });
}); });
function toEquableDataFrame(source: any): DataFrame { function toEquableDataFrame(source: DataFrame): DataFrame {
return toDataFrame({ return toDataFrame({
meta: undefined, meta: undefined,
...source, ...source,

@ -32,7 +32,7 @@ const setupTestContext = (options: Partial<Props>) => {
onPropChange: jest.fn(), onPropChange: jest.fn(),
}; };
const props: Props & Record<string, any> = { ...defaults, ...options }; const props: Props & Record<string, unknown> = { ...defaults, ...options };
const { rerender } = render(<QueryVariableEditorUnConnected {...props} />); const { rerender } = render(<QueryVariableEditorUnConnected {...props} />);
return { rerender, props }; return { rerender, props };

@ -1,6 +1,12 @@
import { of } from 'rxjs'; import { of } from 'rxjs';
import { DataQueryRequest, getDefaultTimeRange, QueryVariableModel, VariableSupportType } from '@grafana/data'; import {
DataQueryRequest,
DataSourceApi,
getDefaultTimeRange,
QueryVariableModel,
VariableSupportType,
} from '@grafana/data';
import { VariableRefresh } from '../types'; import { VariableRefresh } from '../types';
@ -8,13 +14,15 @@ import { QueryRunners, RunnerArgs, variableDummyRefId } from './queryRunners';
describe('QueryRunners', () => { describe('QueryRunners', () => {
describe('when using a legacy data source', () => { describe('when using a legacy data source', () => {
const getLegacyTestContext = (variable?: any) => { const getLegacyTestContext = (variable?: QueryVariableModel) => {
const defaultTimeRange = getDefaultTimeRange(); const defaultTimeRange = getDefaultTimeRange();
variable = variable ?? { query: 'A query' }; variable = variable ?? ({ query: 'A query' } as QueryVariableModel);
const timeSrv = { const timeSrv = {
timeRange: jest.fn().mockReturnValue(defaultTimeRange), timeRange: jest.fn().mockReturnValue(defaultTimeRange),
}; };
const datasource: any = { metricFindQuery: jest.fn().mockResolvedValue([{ text: 'A', value: 'A' }]) }; const datasource = {
metricFindQuery: jest.fn().mockResolvedValue([{ text: 'A', value: 'A' }]),
} as unknown as DataSourceApi;
const runner = new QueryRunners().getRunnerForDatasource(datasource); const runner = new QueryRunners().getRunnerForDatasource(datasource);
const runRequest = jest.fn().mockReturnValue(of({})); const runRequest = jest.fn().mockReturnValue(of({}));
const runnerArgs = { const runnerArgs = {
@ -48,7 +56,7 @@ describe('QueryRunners', () => {
const { datasource, runner, runnerArgs, request, timeSrv, defaultTimeRange } = getLegacyTestContext({ const { datasource, runner, runnerArgs, request, timeSrv, defaultTimeRange } = getLegacyTestContext({
query: 'A query', query: 'A query',
refresh: VariableRefresh.onTimeRangeChanged, refresh: VariableRefresh.onTimeRangeChanged,
}); } as QueryVariableModel);
const observable = runner.runRequest(runnerArgs, request); const observable = runner.runRequest(runnerArgs, request);
it('then it should return correct observable', async () => { it('then it should return correct observable', async () => {
@ -83,7 +91,7 @@ describe('QueryRunners', () => {
const { datasource, runner, runnerArgs, request, timeSrv, defaultTimeRange } = getLegacyTestContext({ const { datasource, runner, runnerArgs, request, timeSrv, defaultTimeRange } = getLegacyTestContext({
query: 'A query', query: 'A query',
refresh: VariableRefresh.onDashboardLoad, refresh: VariableRefresh.onDashboardLoad,
}); } as QueryVariableModel);
const observable = runner.runRequest(runnerArgs, request); const observable = runner.runRequest(runnerArgs, request);
it('then it should return correct observable', async () => { it('then it should return correct observable', async () => {
@ -118,7 +126,7 @@ describe('QueryRunners', () => {
const { datasource, runner, runnerArgs, request, timeSrv } = getLegacyTestContext({ const { datasource, runner, runnerArgs, request, timeSrv } = getLegacyTestContext({
query: 'A query', query: 'A query',
refresh: VariableRefresh.never, refresh: VariableRefresh.never,
}); } as QueryVariableModel);
const observable = runner.runRequest(runnerArgs, request); const observable = runner.runRequest(runnerArgs, request);
it('then it should return correct observable', async () => { it('then it should return correct observable', async () => {
@ -151,15 +159,17 @@ describe('QueryRunners', () => {
}); });
describe('when using a data source with standard variable support', () => { describe('when using a data source with standard variable support', () => {
const getStandardTestContext = (datasource?: any) => { const getStandardTestContext = (datasource?: DataSourceApi) => {
const variable = { query: { refId: 'A', query: 'A query' } } as QueryVariableModel; const variable = { query: { refId: 'A', query: 'A query' } } as QueryVariableModel;
const timeSrv = {}; const timeSrv = {};
datasource = datasource ?? { datasource =
variables: { datasource ??
getType: () => VariableSupportType.Standard, ({
toDataQuery: (query: any) => ({ ...query, extra: 'extra' }), variables: {
}, getType: () => VariableSupportType.Standard,
}; toDataQuery: (query: any) => ({ ...query, extra: 'extra' }),
},
} as DataSourceApi);
const runner = new QueryRunners().getRunnerForDatasource(datasource); const runner = new QueryRunners().getRunnerForDatasource(datasource);
const runRequest = jest.fn().mockReturnValue(of({})); const runRequest = jest.fn().mockReturnValue(of({}));
const runnerArgs = { const runnerArgs = {
@ -196,7 +206,7 @@ describe('QueryRunners', () => {
toDataQuery: () => undefined, toDataQuery: () => undefined,
query: () => undefined, query: () => undefined,
}, },
}); } as unknown as DataSourceApi);
const observable = runner.runRequest(runnerArgs, request); const observable = runner.runRequest(runnerArgs, request);
it('then it should return correct observable', async () => { it('then it should return correct observable', async () => {
@ -215,7 +225,7 @@ describe('QueryRunners', () => {
describe('and calling runRequest with a datasource that has no custom query', () => { describe('and calling runRequest with a datasource that has no custom query', () => {
const { runner, request, runnerArgs, runRequest, datasource } = getStandardTestContext({ const { runner, request, runnerArgs, runRequest, datasource } = getStandardTestContext({
variables: { getType: () => VariableSupportType.Standard, toDataQuery: () => undefined }, variables: { getType: () => VariableSupportType.Standard, toDataQuery: () => undefined },
}); } as unknown as DataSourceApi);
const observable = runner.runRequest(runnerArgs, request); const observable = runner.runRequest(runnerArgs, request);
it('then it should return correct observable', async () => { it('then it should return correct observable', async () => {
@ -236,9 +246,9 @@ describe('QueryRunners', () => {
const getCustomTestContext = () => { const getCustomTestContext = () => {
const variable = { query: { refId: 'A', query: 'A query' } } as QueryVariableModel; const variable = { query: { refId: 'A', query: 'A query' } } as QueryVariableModel;
const timeSrv = {}; const timeSrv = {};
const datasource: any = { const datasource = {
variables: { getType: () => VariableSupportType.Custom, query: () => undefined, editor: {} }, variables: { getType: () => VariableSupportType.Custom, query: () => undefined, editor: {} },
}; } as unknown as DataSourceApi;
const runner = new QueryRunners().getRunnerForDatasource(datasource); const runner = new QueryRunners().getRunnerForDatasource(datasource);
const runRequest = jest.fn().mockReturnValue(of({})); const runRequest = jest.fn().mockReturnValue(of({}));
const runnerArgs = { const runnerArgs = {
@ -290,9 +300,9 @@ describe('QueryRunners', () => {
const getDatasourceTestContext = () => { const getDatasourceTestContext = () => {
const variable = { query: { refId: 'A', query: 'A query' } } as QueryVariableModel; const variable = { query: { refId: 'A', query: 'A query' } } as QueryVariableModel;
const timeSrv = {}; const timeSrv = {};
const datasource: any = { const datasource = {
variables: { getType: () => VariableSupportType.Datasource }, variables: { getType: () => VariableSupportType.Datasource },
}; } as unknown as DataSourceApi;
const runner = new QueryRunners().getRunnerForDatasource(datasource); const runner = new QueryRunners().getRunnerForDatasource(datasource);
const runRequest = jest.fn().mockReturnValue(of({})); const runRequest = jest.fn().mockReturnValue(of({}));
const runnerArgs = { const runnerArgs = {
@ -352,9 +362,9 @@ describe('QueryRunners', () => {
describe('when using a data source with unknown variable support', () => { describe('when using a data source with unknown variable support', () => {
describe('and calling getRunnerForDatasource', () => { describe('and calling getRunnerForDatasource', () => {
it('then it should throw', () => { it('then it should throw', () => {
const datasource: any = { const datasource = {
variables: {}, variables: {},
}; } as unknown as DataSourceApi;
expect(() => new QueryRunners().getRunnerForDatasource(datasource)).toThrow(); expect(() => new QueryRunners().getRunnerForDatasource(datasource)).toThrow();
}); });

Loading…
Cancel
Save