From 314bea935f2d5668e369841170d2eb4c30fda4d3 Mon Sep 17 00:00:00 2001
From: Andres Martinez Gotor <andres.martinez@grafana.com>
Date: Thu, 26 Oct 2023 09:30:24 +0200
Subject: [PATCH] Bug: Fix DatasourceSrv getList with aliases (#77027)

---
 public/app/features/plugins/datasource_srv.ts |  7 +++++-
 .../plugins/tests/datasource_srv.test.ts      | 25 ++++++++++++++++++-
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/public/app/features/plugins/datasource_srv.ts b/public/app/features/plugins/datasource_srv.ts
index 78c23d8e92b..e9b3b858662 100644
--- a/public/app/features/plugins/datasource_srv.ts
+++ b/public/app/features/plugins/datasource_srv.ts
@@ -1,3 +1,5 @@
+import { some } from 'lodash';
+
 import {
   AppEvents,
   DataSourceApi,
@@ -222,7 +224,10 @@ export class DatasourceSrv implements DataSourceService {
       if (filters.alerting && !x.meta.alerting) {
         return false;
       }
-      if (filters.pluginId && x.meta.id !== filters.pluginId) {
+      if (
+        filters.pluginId &&
+        !(x.meta.id === filters.pluginId || some(x.meta.aliasIDs, (id) => id === filters.pluginId))
+      ) {
         return false;
       }
       if (filters.filter && !filters.filter(x)) {
diff --git a/public/app/features/plugins/tests/datasource_srv.test.ts b/public/app/features/plugins/tests/datasource_srv.test.ts
index a6ff1cc3b2c..0acd249100b 100644
--- a/public/app/features/plugins/tests/datasource_srv.test.ts
+++ b/public/app/features/plugins/tests/datasource_srv.test.ts
@@ -129,6 +129,11 @@ describe('datasource_srv', () => {
       uid: 'no-query',
       meta: { id: 'no-query' },
     },
+    TestData: {
+      type: 'grafana-testdata-datasource',
+      name: 'TestData',
+      meta: { metrics: true, id: 'grafana-testdata-datasource', aliasIDs: ['testdata'] },
+    },
   };
 
   describe('Given a list of data sources', () => {
@@ -273,7 +278,7 @@ describe('datasource_srv', () => {
     describe('when getting external metric sources', () => {
       it('should return list of explore sources', () => {
         const externalSources = dataSourceSrv.getExternal();
-        expect(externalSources.length).toBe(7);
+        expect(externalSources.length).toBe(8);
       });
     });
 
@@ -307,6 +312,12 @@ describe('datasource_srv', () => {
       expect(list.length).toBe(1);
     });
 
+    it('Can get get list and filter by an alias', () => {
+      const list = dataSourceSrv.getList({ pluginId: 'testdata' });
+      expect(list[0].name).toBe('TestData');
+      expect(list.length).toBe(1);
+    });
+
     it('Can get list  of data sources with metrics: true, builtIn: true, mixed: true', () => {
       expect(dataSourceSrv.getList({ metrics: true, dashboard: true, mixed: true })).toMatchInlineSnapshot(`
         [
@@ -344,6 +355,18 @@ describe('datasource_srv', () => {
             "type": "test-db",
             "uid": "uid-code-mmm",
           },
+          {
+            "meta": {
+              "aliasIDs": [
+                "testdata",
+              ],
+              "id": "grafana-testdata-datasource",
+              "metrics": true,
+            },
+            "name": "TestData",
+            "type": "grafana-testdata-datasource",
+            "uid": "TestData",
+          },
           {
             "meta": {
               "metrics": true,