Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c2025de
moving prefs up nit from prev ticket
ruchitharajaghatta Nov 8, 2024
c8ae0da
new modal and plugin
ruchitharajaghatta Nov 13, 2024
ae6fa98
removing console log
ruchitharajaghatta Nov 13, 2024
ab8a8eb
review comments and checking for userPref
ruchitharajaghatta Nov 13, 2024
842007a
review comments and checking for userPref
ruchitharajaghatta Nov 13, 2024
be9d03d
PR comments
ruchitharajaghatta Nov 14, 2024
f116d9e
PR comments
ruchitharajaghatta Nov 14, 2024
ee684c7
reducer name change bug
ruchitharajaghatta Nov 14, 2024
cdbfa92
fixing post request
ruchitharajaghatta Nov 14, 2024
c09dd67
fixing test setup failures
ruchitharajaghatta Nov 14, 2024
8cda9e9
new test and sign in test fixes
ruchitharajaghatta Nov 14, 2024
102306b
Merge branch 'main' of github.com:mongodb-js/compass into COMPASS-8378
ruchitharajaghatta Nov 14, 2024
514816c
test fixes and package.json fix
ruchitharajaghatta Nov 15, 2024
59bdf04
state name update
ruchitharajaghatta Nov 15, 2024
d2c0290
test and reducer bug fixes
ruchitharajaghatta Nov 15, 2024
3803589
commenting out errors for evg patch
ruchitharajaghatta Nov 15, 2024
ce2cccd
fixing reducer type and entrypoint
ruchitharajaghatta Nov 18, 2024
b41dbda
npm check fix
ruchitharajaghatta Nov 18, 2024
618d1de
removing ts-expect-errors
ruchitharajaghatta Nov 18, 2024
222487e
Merge branch 'main' of github.com:mongodb-js/compass into COMPASS-8378
ruchitharajaghatta Nov 18, 2024
5feb8fd
prettier fix
ruchitharajaghatta Nov 18, 2024
ce93dd2
taking out duplicated function
ruchitharajaghatta Nov 18, 2024
587e4ec
addressing changes to modal
ruchitharajaghatta Nov 19, 2024
e0c897d
fixing flag for disabling opt in
ruchitharajaghatta Nov 19, 2024
5fbf83f
nit:
ruchitharajaghatta Nov 19, 2024
0f554dc
nits and fixing optin modal/refctoring for projid
ruchitharajaghatta Nov 20, 2024
712aefb
merge main
ruchitharajaghatta Nov 20, 2024
072e8d6
fixing projectID prop
ruchitharajaghatta Nov 20, 2024
b69f37f
optin modal test
ruchitharajaghatta Nov 21, 2024
f93424a
test tweak
ruchitharajaghatta Nov 21, 2024
baedb84
nit comment
ruchitharajaghatta Nov 21, 2024
2860198
Merge branch 'main' of github.com:mongodb-js/compass into COMPASS-8378
ruchitharajaghatta Nov 22, 2024
70d3566
fixing projectId
ruchitharajaghatta Nov 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import React from 'react';
import { render, screen, cleanup } from '@mongodb-js/testing-library-compass';
import { expect } from 'chai';
import { AIOptInModal } from './ai-optin-modal';
import type { PreferencesAccess } from 'compass-preferences-model';
import { createSandboxFromDefaultPreferences } from 'compass-preferences-model';
import { PreferencesProvider } from 'compass-preferences-model/provider';

let mockPreferences: PreferencesAccess;

describe('AIOptInModal Component', function () {
beforeEach(async function () {
mockPreferences = await createSandboxFromDefaultPreferences();
});

afterEach(function () {
cleanup();
});

it('should show the modal title', function () {
render(
<PreferencesProvider value={mockPreferences}>
<AIOptInModal
projectId="ab123"
isOptInModalVisible={true}
isOptInInProgress={false}
onOptInModalClose={() => {}}
onOptInClick={() => {}}
></AIOptInModal>
</PreferencesProvider>
);
expect(
screen.getByRole('heading', {
name: 'Use natural language to generate queries and pipelines',
})
).to.exist;
});
it('should show the cancel button', function () {
void mockPreferences.savePreferences({
enableGenAIFeaturesAtlasProject: true,
});
render(
<PreferencesProvider value={mockPreferences}>
<AIOptInModal
projectId="ab123"
isOptInModalVisible={true}
isOptInInProgress={false}
onOptInModalClose={() => {}}
onOptInClick={() => {}}
>
{' '}
</AIOptInModal>
</PreferencesProvider>
);
const button = screen.getByText('Cancel').closest('button');
expect(button).to.not.match('disabled');
});

it('should show the opt in button enabled when project AI setting is enabled', function () {
void mockPreferences.savePreferences({
enableGenAIFeaturesAtlasProject: true,
});
render(
<PreferencesProvider value={mockPreferences}>
<AIOptInModal
projectId="ab123"
isOptInModalVisible={true}
isOptInInProgress={false}
onOptInModalClose={() => {}}
onOptInClick={() => {}}
>
{' '}
</AIOptInModal>
</PreferencesProvider>
);
const button = screen.getByText('Use Natural Language').closest('button');
expect(button?.getAttribute('aria-disabled')).to.equal('false');
});

it('should disable the opt in button if project AI setting is disabled ', function () {
void mockPreferences.savePreferences({
enableGenAIFeaturesAtlasProject: false,
});
render(
<PreferencesProvider value={mockPreferences}>
<AIOptInModal
projectId="ab123"
isOptInModalVisible={true}
isOptInInProgress={false}
onOptInModalClose={() => {}}
onOptInClick={() => {}}
>
{' '}
</AIOptInModal>
</PreferencesProvider>
);
const button = screen.getByText('Use Natural Language').closest('button');
expect(button?.getAttribute('aria-disabled')).to.equal('true');
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ type OptInModalProps = {
isOptInInProgress: boolean;
onOptInModalClose: () => void;
onOptInClick: () => void;
projectId: string;
projectId: string | undefined;
};

const titleStyles = css({
Expand Down Expand Up @@ -71,16 +71,17 @@ const getButtonText = (isOptInInProgress: boolean) => {
);
};

const AIOptInModal: React.FunctionComponent<OptInModalProps> = ({
export const AIOptInModal: React.FunctionComponent<OptInModalProps> = ({
isOptInModalVisible,
isOptInInProgress,
onOptInModalClose,
onOptInClick,
projectId,
}) => {
const isProjectAIEnabled = usePreference('enableGenAIFeaturesAtlasProject');
const PROJECT_SETTINGS_LINK =
window.location.origin + '/v2/' + projectId + '#/settings/groupSettings';
const PROJECT_SETTINGS_LINK = projectId
? window.location.origin + '/v2/' + projectId + '#/settings/groupSettings'
: null;

const onConfirmClick = () => {
if (isOptInInProgress) {
Expand Down Expand Up @@ -116,9 +117,13 @@ const AIOptInModal: React.FunctionComponent<OptInModalProps> = ({
? 'AI features are enabled for project users with data access.'
: 'AI features are disabled for project users.'}{' '}
Project Owners can change this setting in the{' '}
<Link href={PROJECT_SETTINGS_LINK} target="_blank">
AI features
</Link>
{PROJECT_SETTINGS_LINK !== null ? (
<Link href={PROJECT_SETTINGS_LINK} target="_blank">
AI features
</Link>
) : (
'AI features '
)}
section.
</Banner>
<div className={disclaimerStyles}>
Expand Down
2 changes: 1 addition & 1 deletion packages/compass-generative-ai/src/components/plugin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import AIOptInModal from './ai-optin-modal';
import { ConfirmationModalArea } from '@mongodb-js/compass-components';

export interface AtlasAiPluginProps {
projectId: string;
projectId: string | undefined;
}

export const AtlasAiPlugin: React.FunctionComponent<AtlasAiPluginProps> = ({
Expand Down
6 changes: 1 addition & 5 deletions packages/compass/src/app/components/home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -215,11 +215,7 @@ function Home({
<CompassFindInPagePlugin></CompassFindInPagePlugin>
<AtlasAuthPlugin></AtlasAuthPlugin>
<CompassGenerativeAIPlugin
projectId={
connectionInfo && connectionInfo.atlasMetadata
? connectionInfo?.atlasMetadata?.projectId
: ''
}
projectId={connectionInfo?.atlasMetadata?.projectId}
></CompassGenerativeAIPlugin>
<LegacyConnectionsModal />
</FieldStorePlugin>
Expand Down
Loading