Browse Source

feat(sampling): Check for source in sdk updates prompt [TET-244] (#37336)

Co-authored-by: Andrii Soldatenko <andrii.soldatenko@sentry.io>
Matej Minar 2 years ago
parent
commit
60a6428d16

+ 1 - 0
static/app/types/sampling.tsx

@@ -123,6 +123,7 @@ export type SamplingDistribution = {
 
 export type SamplingSdkVersion = {
   isSendingSampleRate: boolean;
+  isSendingSource: boolean;
   latestSDKName: string;
   latestSDKVersion: string;
   project: string;

+ 9 - 8
static/app/views/settings/project/server-side-sampling/utils/useRecommendedSdkUpgrades.tsx

@@ -11,20 +11,21 @@ type Props = {
 export function useRecommendedSdkUpgrades({orgSlug}: Props) {
   const {samplingSdkVersions, fetching} = useLegacyStore(ServerSideSamplingStore);
 
-  const notSendingSampleRateSdkUpgrades = samplingSdkVersions.filter(
-    samplingSdkVersion => !samplingSdkVersion.isSendingSampleRate
+  const sdksToUpdate = samplingSdkVersions.filter(
+    ({isSendingSource, isSendingSampleRate}) => {
+      return !isSendingSource || !isSendingSampleRate;
+    }
   );
 
   const {projects} = useProjects({
-    slugs: notSendingSampleRateSdkUpgrades.map(sdkUpgrade => sdkUpgrade.project),
+    slugs: sdksToUpdate.map(({project}) => project),
     orgId: orgSlug,
   });
 
   const recommendedSdkUpgrades = projects
-    .map(upgradeSDKfromProject => {
-      const sdkInfo = notSendingSampleRateSdkUpgrades.find(
-        notSendingSampleRateSdkUpgrade =>
-          notSendingSampleRateSdkUpgrade.project === upgradeSDKfromProject.slug
+    .map(project => {
+      const sdkInfo = sdksToUpdate.find(
+        sdkToUpdate => sdkToUpdate.project === project.slug
       );
 
       if (!sdkInfo) {
@@ -32,7 +33,7 @@ export function useRecommendedSdkUpgrades({orgSlug}: Props) {
       }
 
       return {
-        project: upgradeSDKfromProject,
+        project,
         latestSDKName: sdkInfo.latestSDKName,
         latestSDKVersion: sdkInfo.latestSDKVersion,
       };

+ 9 - 0
tests/js/spec/views/settings/project/server-side-sampling/utils.tsx

@@ -93,12 +93,21 @@ export const mockedSamplingSdkVersions: SamplingSdkVersion[] = [
     latestSDKVersion: '1.0.3',
     latestSDKName: 'sentry.javascript.react',
     isSendingSampleRate: true,
+    isSendingSource: true,
   },
   {
     project: mockedProjects[1].slug,
     latestSDKVersion: '1.0.2',
     latestSDKName: 'sentry.python',
     isSendingSampleRate: false,
+    isSendingSource: false,
+  },
+  {
+    project: 'java',
+    latestSDKVersion: '1.0.2',
+    latestSDKName: 'sentry.java',
+    isSendingSampleRate: true,
+    isSendingSource: false,
   },
 ];
 

+ 41 - 0
tests/js/spec/views/settings/project/server-side-sampling/utils/useRecommendedSdkUpgrades.spec.tsx

@@ -0,0 +1,41 @@
+import {reactHooks} from 'sentry-test/reactTestingLibrary';
+
+import ProjectsStore from 'sentry/stores/projectsStore';
+import {ServerSideSamplingStore} from 'sentry/stores/serverSideSamplingStore';
+import {useRecommendedSdkUpgrades} from 'sentry/views/settings/project/server-side-sampling/utils/useRecommendedSdkUpgrades';
+
+import {mockedSamplingSdkVersions} from '../utils';
+
+describe('useRecommendedSdkUpgrades', function () {
+  it('works', function () {
+    ProjectsStore.loadInitialData([
+      TestStubs.Project({id: 1, slug: 'sentry'}),
+      TestStubs.Project({id: 2, slug: 'java'}),
+    ]);
+    ServerSideSamplingStore.loadSamplingSdkVersionsSuccess(mockedSamplingSdkVersions);
+
+    const {result} = reactHooks.renderHook(() =>
+      useRecommendedSdkUpgrades({orgSlug: 'org-slug'})
+    );
+
+    expect(result.current.recommendedSdkUpgrades.length).toBe(2);
+    expect(result.current.recommendedSdkUpgrades).toEqual([
+      {
+        latestSDKName: 'sentry.java',
+        latestSDKVersion: '1.0.2',
+        project: expect.objectContaining({
+          features: [],
+          slug: 'java',
+        }),
+      },
+      {
+        latestSDKName: 'sentry.python',
+        latestSDKVersion: '1.0.2',
+        project: expect.objectContaining({
+          features: [],
+          slug: 'sentry',
+        }),
+      },
+    ]);
+  });
+});