Skip to content

Commit eda194e

Browse files
committed
WIP
1 parent d8a0d16 commit eda194e

File tree

3 files changed

+49
-141
lines changed

3 files changed

+49
-141
lines changed

packages/compass-collection/src/components/collection-header-actions/collection-header-actions.spec.tsx

Lines changed: 15 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,16 @@ import {
1313
import type { PreferencesAccess } from 'compass-preferences-model';
1414
import { createSandboxFromDefaultPreferences } from 'compass-preferences-model';
1515
import { PreferencesProvider } from 'compass-preferences-model/provider';
16-
import { ExperimentTestName } from '@mongodb-js/compass-telemetry/provider';
17-
import { CompassExperimentationProvider } from '@mongodb-js/compass-telemetry';
16+
1817
import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider';
1918

2019
import CollectionHeaderActions from '../collection-header-actions';
2120

2221
describe('CollectionHeaderActions [Component]', function () {
2322
let preferences: PreferencesAccess;
24-
let mockUseAssignment: sinon.SinonStub;
2523

2624
beforeEach(async function () {
2725
preferences = await createSandboxFromDefaultPreferences();
28-
mockUseAssignment = sinon.stub();
29-
mockUseAssignment.returns({
30-
assignment: {
31-
assignmentData: {
32-
variant: 'mockDataGeneratorControl',
33-
},
34-
},
35-
});
3626
});
3727

3828
afterEach(function () {
@@ -45,27 +35,19 @@ describe('CollectionHeaderActions [Component]', function () {
4535
connectionInfo?: ConnectionInfo
4636
) => {
4737
return renderWithActiveConnection(
48-
<CompassExperimentationProvider
49-
useAssignment={mockUseAssignment}
50-
assignExperiment={sinon.stub()}
51-
getAssignment={sinon.stub().resolves(null)}
52-
>
53-
<WorkspacesServiceProvider
54-
value={workspaceService as WorkspacesService}
55-
>
56-
<PreferencesProvider value={preferences}>
57-
<CollectionHeaderActions
58-
namespace="test.test"
59-
isReadonly={false}
60-
onOpenMockDataModal={sinon.stub()}
61-
hasSchemaAnalysisData={true}
62-
analyzedSchemaDepth={2}
63-
schemaAnalysisStatus="complete"
64-
{...props}
65-
/>
66-
</PreferencesProvider>
67-
</WorkspacesServiceProvider>
68-
</CompassExperimentationProvider>,
38+
<WorkspacesServiceProvider value={workspaceService as WorkspacesService}>
39+
<PreferencesProvider value={preferences}>
40+
<CollectionHeaderActions
41+
namespace="test.test"
42+
isReadonly={false}
43+
onOpenMockDataModal={sinon.stub()}
44+
hasSchemaAnalysisData={true}
45+
analyzedSchemaDepth={2}
46+
schemaAnalysisStatus="complete"
47+
{...props}
48+
/>
49+
</PreferencesProvider>
50+
</WorkspacesServiceProvider>,
6951
connectionInfo
7052
);
7153
};
@@ -225,34 +207,15 @@ describe('CollectionHeaderActions [Component]', function () {
225207
},
226208
};
227209

228-
it('should call useAssignment with correct parameters', async function () {
229-
await renderCollectionHeaderActions({
230-
namespace: 'test.collection',
231-
isReadonly: false,
232-
});
233-
234-
expect(mockUseAssignment).to.have.been.calledWith(
235-
ExperimentTestName.mockDataGenerator,
236-
true // trackIsInSample - Experiment viewed analytics event
237-
);
238-
});
239-
240210
it('should call onOpenMockDataModal when CTA button is clicked', async function () {
241211
const onOpenMockDataModal = sinon.stub();
242212

243-
mockUseAssignment.returns({
244-
assignment: {
245-
assignmentData: {
246-
variant: 'mockDataGeneratorVariant',
247-
},
248-
},
249-
});
250-
251213
await renderCollectionHeaderActions(
252214
{
253215
namespace: 'test.collection',
254216
isReadonly: false,
255217
onOpenMockDataModal,
218+
schemaAnalysisStatus: 'complete',
256219
},
257220
{},
258221
atlasConnectionInfo
@@ -267,14 +230,6 @@ describe('CollectionHeaderActions [Component]', function () {
267230
});
268231

269232
it('should disable button for deeply nested collections', async function () {
270-
mockUseAssignment.returns({
271-
assignment: {
272-
assignmentData: {
273-
variant: 'mockDataGeneratorVariant', // Treatment variant
274-
},
275-
},
276-
});
277-
278233
await renderCollectionHeaderActions(
279234
{
280235
namespace: 'test.collection',

packages/compass-collection/src/components/collection-header-actions/collection-header-actions.tsx

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,10 @@ import React from 'react';
1212
import { usePreferences } from 'compass-preferences-model/provider';
1313
import toNS from 'mongodb-ns';
1414
import { wrapField } from '@mongodb-js/mongodb-constants';
15-
import {
16-
useTelemetry,
17-
useAssignment,
18-
ExperimentTestName,
19-
ExperimentTestGroup,
20-
} from '@mongodb-js/compass-telemetry/provider';
15+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
2116
import {
2217
SCHEMA_ANALYSIS_STATE_ANALYZING,
18+
SCHEMA_ANALYSIS_STATE_COMPLETE,
2319
type SchemaAnalysisStatus,
2420
} from '../../schema-analysis-types';
2521

@@ -82,21 +78,13 @@ const CollectionHeaderActions: React.FunctionComponent<
8278
usePreferences(['readOnly', 'enableShell']);
8379
const track = useTelemetry();
8480

85-
// Get experiment assignment for Mock Data Generator
86-
const mockDataGeneratorAssignment = useAssignment(
87-
ExperimentTestName.mockDataGenerator,
88-
true // trackIsInSample - this will fire the "Experiment Viewed" event
89-
);
90-
9181
const { database, collection } = toNS(namespace);
9282

93-
// Check if user is in treatment group for Mock Data Generator experiment
94-
const isInMockDataTreatmentVariant =
95-
mockDataGeneratorAssignment?.assignment?.assignmentData?.variant ===
96-
ExperimentTestGroup.mockDataGeneratorVariant;
97-
83+
// Show Mock Data Generator button if schema analysis has bee initiated (indicating user is in treatment variant)
84+
// Schema analysis only runs for users in the treatment variant
9885
const shouldShowMockDataButton =
99-
isInMockDataTreatmentVariant &&
86+
(schemaAnalysisStatus === SCHEMA_ANALYSIS_STATE_ANALYZING ||
87+
schemaAnalysisStatus === SCHEMA_ANALYSIS_STATE_COMPLETE) &&
10088
atlasMetadata && // Only show in Atlas
10189
!isReadonly && // Don't show for readonly collections (views)
10290
!sourceName; // sourceName indicates it's a view

packages/compass-collection/src/components/collection-header/collection-header.spec.tsx

Lines changed: 28 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ import {
1717
type WorkspacesService,
1818
} from '@mongodb-js/compass-workspaces/provider';
1919
import { MockDataGeneratorStep } from '../mock-data-generator-modal/types';
20-
import { SCHEMA_ANALYSIS_STATE_COMPLETE } from '../../schema-analysis-types';
21-
import { CompassExperimentationProvider } from '@mongodb-js/compass-telemetry';
20+
import {
21+
SCHEMA_ANALYSIS_STATE_COMPLETE,
22+
SCHEMA_ANALYSIS_STATE_INITIAL,
23+
} from '../../schema-analysis-types';
2224
import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider';
2325

2426
import Sinon from 'sinon';
@@ -335,23 +337,6 @@ describe('CollectionHeader [Component]', function () {
335337
});
336338

337339
describe('Mock Data Generator integration', function () {
338-
let mockUseAssignment: Sinon.SinonStub;
339-
340-
beforeEach(function () {
341-
// Mock the useAssignment hook from compass-experimentation
342-
mockUseAssignment = Sinon.stub().returns({
343-
assignment: {
344-
assignmentData: {
345-
variant: 'mockDataGeneratorVariant',
346-
},
347-
},
348-
});
349-
});
350-
351-
afterEach(function () {
352-
Sinon.restore();
353-
});
354-
355340
const atlasConnectionInfo: ConnectionInfo = {
356341
id: 'test-atlas-connection',
357342
connectionOptions: {
@@ -375,7 +360,7 @@ describe('CollectionHeader [Component]', function () {
375360
},
376361
};
377362

378-
function renderCollectionHeaderWithExperimentation(
363+
function renderCollectionHeaderWithSchemaAnalysis(
379364
props: Partial<ComponentProps<typeof CollectionHeader>> = {},
380365
workspaceService: Partial<WorkspacesService> = {},
381366
stateOverrides: any = {},
@@ -392,33 +377,27 @@ describe('CollectionHeader [Component]', function () {
392377
const mockStore = createStore(() => defaultState);
393378

394379
return renderWithActiveConnection(
395-
<CompassExperimentationProvider
396-
useAssignment={mockUseAssignment}
397-
assignExperiment={Sinon.stub()}
398-
getAssignment={Sinon.stub().resolves(null)}
399-
>
400-
<Provider store={mockStore}>
401-
<WorkspacesServiceProvider
402-
value={workspaceService as WorkspacesService}
403-
>
404-
<CollectionHeader
405-
isAtlas={false}
406-
isReadonly={false}
407-
isTimeSeries={false}
408-
isClustered={false}
409-
isFLE={false}
410-
namespace="test.test"
411-
{...props}
412-
/>
413-
</WorkspacesServiceProvider>
414-
</Provider>
415-
</CompassExperimentationProvider>,
380+
<Provider store={mockStore}>
381+
<WorkspacesServiceProvider
382+
value={workspaceService as WorkspacesService}
383+
>
384+
<CollectionHeader
385+
isAtlas={false}
386+
isReadonly={false}
387+
isTimeSeries={false}
388+
isClustered={false}
389+
isFLE={false}
390+
namespace="test.test"
391+
{...props}
392+
/>
393+
</WorkspacesServiceProvider>
394+
</Provider>,
416395
connectionInfo
417396
);
418397
}
419398

420399
it('should show Mock Data Generator button when all conditions are met', async function () {
421-
await renderCollectionHeaderWithExperimentation(
400+
await renderCollectionHeaderWithSchemaAnalysis(
422401
{
423402
isAtlas: true, // Atlas environment
424403
isReadonly: false, // Not readonly
@@ -447,7 +426,7 @@ describe('CollectionHeader [Component]', function () {
447426
});
448427

449428
it('should disable Mock Data Generator button when collection has no schema analysis data', async function () {
450-
await renderCollectionHeaderWithExperimentation(
429+
await renderCollectionHeaderWithSchemaAnalysis(
451430
{
452431
isAtlas: true,
453432
isReadonly: false,
@@ -474,7 +453,7 @@ describe('CollectionHeader [Component]', function () {
474453
});
475454

476455
it('should disable Mock Data Generator button for collections with excessive nesting depth', async function () {
477-
await renderCollectionHeaderWithExperimentation(
456+
await renderCollectionHeaderWithSchemaAnalysis(
478457
{
479458
isAtlas: true,
480459
isReadonly: false,
@@ -503,7 +482,7 @@ describe('CollectionHeader [Component]', function () {
503482
});
504483

505484
it('should not show Mock Data Generator button for readonly collections (views)', async function () {
506-
await renderCollectionHeaderWithExperimentation(
485+
await renderCollectionHeaderWithSchemaAnalysis(
507486
{
508487
isAtlas: true,
509488
isReadonly: true, // Readonly (view)
@@ -530,7 +509,7 @@ describe('CollectionHeader [Component]', function () {
530509
});
531510

532511
it('should not show Mock Data Generator button in non-Atlas environments', async function () {
533-
await renderCollectionHeaderWithExperimentation(
512+
await renderCollectionHeaderWithSchemaAnalysis(
534513
{
535514
isAtlas: false, // Not Atlas
536515
isReadonly: false,
@@ -556,16 +535,8 @@ describe('CollectionHeader [Component]', function () {
556535
).to.not.exist;
557536
});
558537

559-
it('should not show Mock Data Generator button when not in treatment variant', async function () {
560-
mockUseAssignment.returns({
561-
assignment: {
562-
assignmentData: {
563-
variant: 'control',
564-
},
565-
},
566-
});
567-
568-
await renderCollectionHeaderWithExperimentation(
538+
it('should not show Mock Data Generator button when schema analysis has not run', async function () {
539+
await renderCollectionHeaderWithSchemaAnalysis(
569540
{
570541
isAtlas: true,
571542
isReadonly: false,
@@ -574,13 +545,7 @@ describe('CollectionHeader [Component]', function () {
574545
{},
575546
{
576547
schemaAnalysis: {
577-
status: SCHEMA_ANALYSIS_STATE_COMPLETE,
578-
processedSchema: {
579-
field1: { type: 'String', sample_values: ['value1'] },
580-
},
581-
schemaMetadata: {
582-
maxNestingDepth: 2,
583-
},
548+
status: SCHEMA_ANALYSIS_STATE_INITIAL, // No schema analysis has run
584549
},
585550
},
586551
atlasConnectionInfo

0 commit comments

Comments
 (0)