1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-07-12 13:48:35 +02:00

fix: remove pushed files

This commit is contained in:
sjaanus 2025-04-28 15:02:59 +03:00
parent 19cb225623
commit 5c894c78be
No known key found for this signature in database
GPG Key ID: 20E007C0248BA7FF
2 changed files with 0 additions and 225 deletions

View File

@ -1,172 +0,0 @@
import {
useRecentlyUsedConstraints,
areConstraintsEqual,
} from './useRecentlyUsedConstraints';
import { renderHook, act } from '@testing-library/react';
import type { IConstraint } from '../../../../interfaces/strategy';
import { IN, STR_CONTAINS } from '../../../../constants/operators';
import type { Operator } from '../../../../constants/operators';
const createTestConstraint = (
contextName: string,
operator: Operator = IN,
values = [contextName],
): IConstraint => ({
contextName,
operator,
values,
});
describe('areConstraintsEqual', () => {
it('should return true for constraints with identical content', () => {
const constraint1: IConstraint = {
contextName: 'userId',
operator: IN,
values: ['user1', 'user2'],
inverted: false,
};
const constraint2: IConstraint = {
contextName: 'userId',
operator: IN,
values: ['user1', 'user2'],
inverted: false,
};
expect(areConstraintsEqual(constraint1, constraint2)).toBe(true);
});
it('should return false for constraints with different content', () => {
const constraint1: IConstraint = {
contextName: 'userId',
operator: IN,
values: ['user1', 'user2'],
};
const constraint2: IConstraint = {
contextName: 'userId',
operator: IN,
values: ['user1', 'user3'],
};
expect(areConstraintsEqual(constraint1, constraint2)).toBe(false);
});
it('should return false for constraints with different operators', () => {
const constraint1: IConstraint = {
contextName: 'userId',
operator: IN,
values: ['user1'],
};
const constraint2: IConstraint = {
contextName: 'userId',
operator: STR_CONTAINS,
values: ['user1'],
};
expect(areConstraintsEqual(constraint1, constraint2)).toBe(false);
});
});
describe('useRecentlyUsedConstraints', () => {
beforeEach(() => {
window.localStorage.clear();
});
it('should initialize with empty array when no items in localStorage', () => {
const { result } = renderHook(() =>
useRecentlyUsedConstraints('test-key'),
);
expect(result.current.items).toEqual([]);
});
it('should initialize with initial items if provided', () => {
const initialItems = [createTestConstraint('userId')];
const { result } = renderHook(() =>
useRecentlyUsedConstraints('test-key', initialItems),
);
expect(result.current.items).toEqual(initialItems);
});
it('should add new items to the beginning of the list', () => {
const { result } = renderHook(() =>
useRecentlyUsedConstraints('test-key'),
);
act(() => {
result.current.addItem(createTestConstraint('userId'));
});
expect(result.current.items[0].contextName).toBe('userId');
act(() => {
result.current.addItem(createTestConstraint('email'));
});
expect(result.current.items[0].contextName).toBe('email');
expect(result.current.items[1].contextName).toBe('userId');
});
it('should limit stored items to maximum of 3', () => {
const { result } = renderHook(() =>
useRecentlyUsedConstraints('test-key'),
);
act(() => {
result.current.addItem(createTestConstraint('userId'));
result.current.addItem(createTestConstraint('email'));
result.current.addItem(createTestConstraint('countryId'));
result.current.addItem(createTestConstraint('appName'));
});
expect(result.current.items.length).toBe(3);
expect(result.current.items[0].contextName).toBe('appName');
expect(result.current.items[1].contextName).toBe('countryId');
expect(result.current.items[2].contextName).toBe('email');
});
it('should not add duplicate constraints', () => {
const { result } = renderHook(() =>
useRecentlyUsedConstraints('test-key'),
);
const constraint1 = createTestConstraint('userId', IN, [
'user1',
'user2',
]);
const constraint2 = createTestConstraint('email');
act(() => {
result.current.addItem(constraint1);
result.current.addItem(constraint2);
});
expect(result.current.items.length).toBe(2);
const duplicateConstraint = createTestConstraint('userId', IN, [
'user1',
'user2',
]);
act(() => {
result.current.addItem(duplicateConstraint);
});
expect(result.current.items.length).toBe(2);
expect(result.current.items[0].contextName).toBe('userId');
expect(result.current.items[1].contextName).toBe('email');
});
it('should persist items to localStorage', () => {
const { result } = renderHook(() =>
useRecentlyUsedConstraints('test-key'),
);
act(() => {});
const { result: newResult } = renderHook(() =>
useRecentlyUsedConstraints('test-key'),
);
expect(newResult.current.items[0].contextName).toBe('userId');
});
});

View File

@ -1,53 +0,0 @@
import { useLocalStorageState } from '../../../../hooks/useLocalStorageState';
import type { IConstraint } from '../../../../interfaces/strategy';
export const areConstraintsEqual = (
a: IConstraint,
b: IConstraint,
): boolean => {
const aJson = JSON.stringify({
contextName: a.contextName,
operator: a.operator,
values: a.values,
value: a.value,
inverted: a.inverted,
caseInsensitive: a.caseInsensitive,
});
const bJson = JSON.stringify({
contextName: b.contextName,
operator: b.operator,
values: b.values,
value: b.value,
inverted: b.inverted,
caseInsensitive: b.caseInsensitive,
});
return aJson === bJson;
};
export const useRecentlyUsedConstraints = (
key: string,
initialItems: IConstraint[] = [],
) => {
const [items, setItems] = useLocalStorageState<IConstraint[]>(
`recently-used-constraints-${key}`,
initialItems,
);
const addItem = (newItem: IConstraint) => {
setItems((prevItems) => {
const filteredItems = prevItems.filter(
(item) => !areConstraintsEqual(item, newItem),
);
const updatedItems = [newItem, ...filteredItems];
return updatedItems.slice(0, 3);
});
};
return {
items,
addItem,
};
};