mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-06 01:15:28 +02:00
tests: flexible strategy component stickiness and groupId (#7735)
Follow-up for #7713
This commit is contained in:
parent
3325b2d09e
commit
ebd9c5111e
@ -1,5 +1,6 @@
|
|||||||
|
import { vi } from 'vitest';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { screen, fireEvent } from '@testing-library/react';
|
import { screen, fireEvent, waitFor } from '@testing-library/react';
|
||||||
import FlexibleStrategy from './FlexibleStrategy';
|
import FlexibleStrategy from './FlexibleStrategy';
|
||||||
import { render } from 'utils/testRenderer';
|
import { render } from 'utils/testRenderer';
|
||||||
import { Route, Routes } from 'react-router-dom';
|
import { Route, Routes } from 'react-router-dom';
|
||||||
@ -9,6 +10,7 @@ const server = testServerSetup();
|
|||||||
|
|
||||||
const setupApi = () => {
|
const setupApi = () => {
|
||||||
testServerRoute(server, '/api/admin/projects/default', {});
|
testServerRoute(server, '/api/admin/projects/default', {});
|
||||||
|
testServerRoute(server, '/api/admin/projects/default/overview', {});
|
||||||
};
|
};
|
||||||
|
|
||||||
test('manipulates the rollout slider', async () => {
|
test('manipulates the rollout slider', async () => {
|
||||||
@ -61,3 +63,75 @@ test('manipulates the rollout slider', async () => {
|
|||||||
expect(slider).toHaveValue('50');
|
expect(slider).toHaveValue('50');
|
||||||
expect(groupIdInput).toHaveValue('newGroupId');
|
expect(groupIdInput).toHaveValue('newGroupId');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('if stickiness or groupId not present, fill it with defaults', async () => {
|
||||||
|
const updateParameter = vi.fn();
|
||||||
|
const Wrapper = () => (
|
||||||
|
<Routes>
|
||||||
|
<Route
|
||||||
|
path='/projects/:projectId/features/:featureId'
|
||||||
|
element={
|
||||||
|
<FlexibleStrategy
|
||||||
|
parameters={{
|
||||||
|
rollout: '50',
|
||||||
|
}}
|
||||||
|
updateParameter={updateParameter}
|
||||||
|
context={{}}
|
||||||
|
editable={true}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Routes>
|
||||||
|
);
|
||||||
|
|
||||||
|
setupApi();
|
||||||
|
|
||||||
|
render(<Wrapper />, {
|
||||||
|
route: '/projects/default/features/test',
|
||||||
|
});
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(updateParameter).toHaveBeenCalledWith('stickiness', 'default');
|
||||||
|
expect(updateParameter).toHaveBeenCalledWith('groupId', 'test');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('displays groupId error', async () => {
|
||||||
|
const Wrapper = () => (
|
||||||
|
<Routes>
|
||||||
|
<Route
|
||||||
|
path='/projects/:projectId/features/:featureId'
|
||||||
|
element={
|
||||||
|
<FlexibleStrategy
|
||||||
|
parameters={{
|
||||||
|
rollout: '50',
|
||||||
|
stickiness: 'default',
|
||||||
|
}}
|
||||||
|
updateParameter={(
|
||||||
|
parameter: string,
|
||||||
|
value: string,
|
||||||
|
) => {}}
|
||||||
|
context={{}}
|
||||||
|
editable={true}
|
||||||
|
errors={
|
||||||
|
{
|
||||||
|
getFormError: () => 'Field required test',
|
||||||
|
} as any
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Routes>
|
||||||
|
);
|
||||||
|
|
||||||
|
setupApi();
|
||||||
|
|
||||||
|
render(<Wrapper />, {
|
||||||
|
route: '/projects/default/features/test',
|
||||||
|
});
|
||||||
|
|
||||||
|
await waitFor(async () => {
|
||||||
|
const errorText = await screen.queryByText('Field required test');
|
||||||
|
expect(errorText).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { useMemo } from 'react';
|
||||||
import { Box, styled } from '@mui/material';
|
import { Box, styled } from '@mui/material';
|
||||||
import type { IFeatureStrategyParameters } from 'interfaces/strategy';
|
import type { IFeatureStrategyParameters } from 'interfaces/strategy';
|
||||||
import RolloutSlider from '../RolloutSlider/RolloutSlider';
|
import RolloutSlider from '../RolloutSlider/RolloutSlider';
|
||||||
@ -13,7 +14,6 @@ import {
|
|||||||
import { StickinessSelect } from './StickinessSelect/StickinessSelect';
|
import { StickinessSelect } from './StickinessSelect/StickinessSelect';
|
||||||
import { useDefaultProjectSettings } from 'hooks/useDefaultProjectSettings';
|
import { useDefaultProjectSettings } from 'hooks/useDefaultProjectSettings';
|
||||||
import Loader from '../../../common/Loader/Loader';
|
import Loader from '../../../common/Loader/Loader';
|
||||||
import { useEffect, useMemo } from 'react';
|
|
||||||
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
||||||
import { useLocation } from 'react-router';
|
import { useLocation } from 'react-router';
|
||||||
import type { IFormErrors } from 'hooks/useFormErrors';
|
import type { IFormErrors } from 'hooks/useFormErrors';
|
||||||
@ -63,9 +63,6 @@ const FlexibleStrategy = ({
|
|||||||
const { pathname } = useLocation();
|
const { pathname } = useLocation();
|
||||||
|
|
||||||
const isDefaultStrategyEdit = pathname.includes('default-strategy');
|
const isDefaultStrategyEdit = pathname.includes('default-strategy');
|
||||||
const onUpdate = (field: string) => (newValue: string) => {
|
|
||||||
updateParameter(field, newValue);
|
|
||||||
};
|
|
||||||
|
|
||||||
const updateRollout = (e: Event, value: number | number[]) => {
|
const updateRollout = (e: Event, value: number | number[]) => {
|
||||||
updateParameter('rollout', value.toString());
|
updateParameter('rollout', value.toString());
|
||||||
@ -77,22 +74,20 @@ const FlexibleStrategy = ({
|
|||||||
: 100;
|
: 100;
|
||||||
|
|
||||||
const stickiness = useMemo(() => {
|
const stickiness = useMemo(() => {
|
||||||
if (parameters.stickiness === '' && !loading) {
|
if (!parameters.stickiness && !loading) {
|
||||||
return defaultStickiness;
|
updateParameter('stickiness', defaultStickiness);
|
||||||
}
|
}
|
||||||
|
|
||||||
return parseParameterString(parameters.stickiness || defaultStickiness);
|
return parseParameterString(parameters.stickiness);
|
||||||
}, [loading, parameters.stickiness]);
|
}, [loading, defaultStickiness, parameters.stickiness]);
|
||||||
|
|
||||||
if (parameters.stickiness === '') {
|
const groupId = useMemo(() => {
|
||||||
onUpdate('stickiness')(stickiness);
|
if (!parameters.groupId && !loading) {
|
||||||
|
updateParameter('groupId', isDefaultStrategyEdit ? '' : featureId);
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
return parseParameterString(parameters.groupId);
|
||||||
if (!parameters.groupId) {
|
}, [parameters.groupId, isDefaultStrategyEdit, featureId, loading]);
|
||||||
onUpdate('groupId')(isDefaultStrategyEdit ? '' : featureId);
|
|
||||||
}
|
|
||||||
}, [isDefaultStrategyEdit, featureId]);
|
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return <Loader />;
|
return <Loader />;
|
||||||
@ -113,7 +108,9 @@ const FlexibleStrategy = ({
|
|||||||
value={stickiness}
|
value={stickiness}
|
||||||
editable={editable}
|
editable={editable}
|
||||||
dataTestId={FLEXIBLE_STRATEGY_STICKINESS_ID}
|
dataTestId={FLEXIBLE_STRATEGY_STICKINESS_ID}
|
||||||
onChange={(e) => onUpdate('stickiness')(e.target.value)}
|
onChange={(e) =>
|
||||||
|
updateParameter('stickiness', e.target.value)
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</StyledInnerBox1>
|
</StyledInnerBox1>
|
||||||
<StyledInnerBox2>
|
<StyledInnerBox2>
|
||||||
@ -121,9 +118,11 @@ const FlexibleStrategy = ({
|
|||||||
label='groupId'
|
label='groupId'
|
||||||
sx={{ width: '100%' }}
|
sx={{ width: '100%' }}
|
||||||
id='groupId-input'
|
id='groupId-input'
|
||||||
value={parseParameterString(parameters.groupId)}
|
value={groupId}
|
||||||
disabled={!editable}
|
disabled={!editable}
|
||||||
onChange={(e) => onUpdate('groupId')(e.target.value)}
|
onChange={(e) =>
|
||||||
|
updateParameter('groupId', e.target.value)
|
||||||
|
}
|
||||||
data-testid={FLEXIBLE_STRATEGY_GROUP_ID}
|
data-testid={FLEXIBLE_STRATEGY_GROUP_ID}
|
||||||
error={Boolean(errors?.getFormError('groupId'))}
|
error={Boolean(errors?.getFormError('groupId'))}
|
||||||
helperText={errors?.getFormError('groupId')}
|
helperText={errors?.getFormError('groupId')}
|
||||||
|
Loading…
Reference in New Issue
Block a user