Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -4,7 +4,7 @@ import reactRouterDom from 'react-router-dom'
import { instance, mock } from 'ts-mockito'
import {
cleanup,
userEvent,
act,
fireEvent,
initialStateDefault,
mockedStore,
Expand Down Expand Up @@ -195,7 +195,9 @@ describe('InstanceHeader', () => {
store: mockStore(initialStoreState),
})

await userEvent.click(screen.getByTestId('user-profile-btn'))
await act(async () => {
fireEvent.click(screen.getByTestId('user-profile-btn'))
})
await waitFor(() => {
expect(
screen.queryByTestId('user-profile-popover-content'),
Expand Down Expand Up @@ -232,7 +234,9 @@ describe('InstanceHeader', () => {
store: mockStore(initialStoreState),
})

await userEvent.click(screen.getByTestId('user-profile-btn'))
await act(async () => {
fireEvent.click(screen.getByTestId('user-profile-btn'))
})
await waitFor(() => {
expect(
screen.queryByTestId('user-profile-popover-content'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,7 @@ const UserProfile = () => {
[FeatureFlags.cloudAds]: cloudAds,
[FeatureFlags.cloudSso]: cloudSso,
} = useSelector(appFeatureFlagsFeaturesSelector)
return (
<FlexItem style={{ marginLeft: 16 }}>
<CloudUserProfile />
</FlexItem>
)

if (!envDependentFeature?.flag) {
return (
<FlexItem style={{ marginLeft: 16 }}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import { DownloadIcon, SignoutIcon } from '@redis-ui/icons'
import { Menu } from 'uiSrc/components/base/layout/menu'
import { ProfileIcon } from 'uiSrc/components/base/layout/profile-icon/ProfileIcon'
import Loader from 'uiSrc/components/base/display/loader/Loader'
import { OutsideClickDetector } from 'uiSrc/components/base/utils'

export interface UserProfileBadgeProps {
'data-testid'?: string
Expand Down Expand Up @@ -106,115 +108,142 @@
const { accounts, currentAccountId, name } = data

return (
<Menu>
<Menu.Trigger withButton onClick={handleToggleProfile}>
<ProfileIcon
size="L"
fullName={name}
role="presentation"
data-testid="user-profile-btn"
style={{ cursor: 'pointer' }}
/>
</Menu.Trigger>
<Menu.Content
data-testid="user-profile-popover-content"
style={{ minWidth: 330 }}
>
<FeatureFlagComponent
name={FeatureFlags.envDependent}
otherwise={
<Menu.Content.Label text="Account" data-testid="profile-title" />
}
>
<Menu.Content.Label
text="Redis Cloud account"
data-testid="profile-title"
/>
</FeatureFlagComponent>
<Menu.Content.Separator />
<div data-testid="user-profile-popover-accounts">
{accounts?.map(({ name, id }) => (
<Menu.Content.Item
<OutsideClickDetector onOutsideClick={() => setIsProfileOpen(false)}>

Check warning on line 111 in redisinsight/ui/src/components/instance-header/components/user-profile/UserProfileBadge.tsx

View workflow job for this annotation

GitHub Actions / Coverage annotations (🧪 jest-coverage-report-action)

🧾 Statement is not covered

Warning! Not covered statement

Check warning on line 111 in redisinsight/ui/src/components/instance-header/components/user-profile/UserProfileBadge.tsx

View workflow job for this annotation

GitHub Actions / Coverage annotations (🧪 jest-coverage-report-action)

🕹️ Function is not covered

Warning! Not covered function
<div data-testid={dataTestId}>
<Menu open={isProfileOpen}>
<Menu.Trigger
withButton
onClick={handleToggleProfile}
data-testid="user-profile-btn"
>
<ProfileIcon
size="L"
fullName={name}
role="presentation"
key={id}
text={`${name} #${id}`}
selected={id === currentAccountId}
onClick={() => handleClickSelectAccount?.(id)}
data-testid={`profile-account-${id}${id === currentAccountId ? '-selected' : ''}`}
style={{ cursor: 'pointer' }}
/>
))}
</div>
<Menu.Content.Separator />
<FeatureFlagComponent
name={FeatureFlags.envDependent}
otherwise={
<>
<Menu.Content.Item.Compose>
<Menu.Content.Item.Text>
<Link
external
color="text"
href={riDesktopLink}
data-testid="open-ri-desktop-link"
variant="inline"
>
Open in Redis Insight Desktop version
</Link>
</Menu.Content.Item.Text>
</Menu.Content.Item.Compose>
</Menu.Trigger>
<Menu.Content
data-testid="user-profile-popover-content"
style={{ minWidth: 330 }}
>
<FeatureFlagComponent
name={FeatureFlags.envDependent}
otherwise={
<Menu.Content.Label
text="Account"
data-testid="profile-title"
/>
}
>
<Menu.Content.Label
text="Redis Cloud account"
data-testid="profile-title"
/>
</FeatureFlagComponent>
<Menu.Content.Separator />
<div data-testid="user-profile-popover-accounts">
{accounts?.map(({ name, id }) => (
<Menu.Content.Item.Compose
role="presentation"
key={id}
selected={id === selectingAccountId}
onClick={() => handleClickSelectAccount?.(id)}
data-testid={`profile-account-${id}${id === currentAccountId ? '-selected' : ''}`}
>
<Menu.Content.Item.Text>
{`${name} #${id}`}
</Menu.Content.Item.Text>
{id === selectingAccountId && (
<Loader
size="m"
data-testid={`user-profile-selecting-account-${id}`}
/>
)}
{id === currentAccountId && (
<Menu.Content.Item.Check
data-testid={`user-profile-selected-account-${id}`}
/>
)}
</Menu.Content.Item.Compose>
))}
</div>
<Menu.Content.Separator />
<FeatureFlagComponent
name={FeatureFlags.envDependent}
otherwise={
<>
<Menu.Content.Item.Compose>
<Menu.Content.Item.Text>
<Link
external
color="text"
href={riDesktopLink}
data-testid="open-ri-desktop-link"
variant="inline"
>
Open in Redis Insight Desktop version
</Link>
</Menu.Content.Item.Text>
</Menu.Content.Item.Compose>
<Menu.Content.Item.Compose>
<Menu.Content.Item.Text>
<Link
external
color="text"
variant="inline"
target="_blank"
href={riConfig.app.smConsoleRedirect}
data-testid="cloud-admin-console-link"
>
Back to Redis Cloud Admin console
</Link>
</Menu.Content.Item.Text>
</Menu.Content.Item.Compose>
</>
}
>
<Menu.Content.Item
role="presentation"
subHead="Import Cloud Databases"
text=""
icon={DownloadIcon}
onSelect={handleClickImport}
data-testid="profile-import-cloud-databases"
/>
<Menu.Content.Item.Compose>
<Menu.Content.Item.Text>
<Link
external
color="text"
variant="inline"
target="_blank"
href={riConfig.app.smConsoleRedirect}
data-testid="cloud-admin-console-link"
href={getUtmExternalLink(EXTERNAL_LINKS.cloudConsole, {
campaign: 'cloud_account',
})}
onClick={handleClickCloudAccount}
data-testid="cloud-console-link"
>
Back to Redis Cloud Admin console
Cloud Console:
<span data-testid="account-full-name"> {name}</span>
</Link>
</Menu.Content.Item.Text>
</Menu.Content.Item.Compose>
</>
}
>
<Menu.Content.Item
role="presentation"
subHead="Import Cloud Databases"
icon={DownloadIcon}
onSelect={handleClickImport}
data-testid="profile-import-cloud-databases"
/>
<Menu.Content.Item.Compose>
<Menu.Content.Item.Text>
<Link
external
color="text"
variant="inline"
target="_blank"
href={getUtmExternalLink(EXTERNAL_LINKS.cloudConsole, {
campaign: 'cloud_account',
})}
onClick={handleClickCloudAccount}
data-testid="cloud-console-link"
>
Cloud Console: {name}
</Link>
</Menu.Content.Item.Text>
</Menu.Content.Item.Compose>
<Menu.Content.Separator />
<Menu.Content.Item
role="presentation"
subHead="Logout"
icon={SignoutIcon}
onClick={handleClickLogout}
data-testid="profile-logout"
/>
</FeatureFlagComponent>
<Menu.Content.DropdownArrow />
</Menu.Content>
</Menu>
<Menu.Content.Separator />
<Menu.Content.Item
role="presentation"
subHead="Logout"
text=""
icon={SignoutIcon}
onClick={handleClickLogout}
data-testid="profile-logout"
/>
</FeatureFlagComponent>
<Menu.Content.DropdownArrow />
</Menu.Content>
</Menu>
</div>
</OutsideClickDetector>
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ const OAuthUserProfile = (props: Props) => {
handleClickCloudAccount={handleClickCloudAccount}
handleClickSelectAccount={handleClickSelectAccount}
data-testid="oauth-user-profile-badge"
selectingAccountId={selectingAccountId}
/>
)
}
Expand Down
Loading