Skip to content
Open
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
15 changes: 15 additions & 0 deletions src/components/Exercises/forms/VariationSelect.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,21 @@ describe("VariationSelect", () => {
expect(screen.queryByText("Skull crusher")).not.toBeInTheDocument();
});

test("filters exercises by alias (case-insensitive)", async () => {
const user = userEvent.setup();
renderSelect();
const input = screen.getByRole("textbox", { name: /name/i });

// 'Beinverdicker' is an alias of the German translation of testExerciseSquats
await user.type(input, "beinverd");

expect(screen.getByText("Squats")).toBeInTheDocument();
expect(screen.queryByText("Crunches")).not.toBeInTheDocument();
expect(screen.queryByText("Benchpress")).not.toBeInTheDocument();
expect(screen.queryByText("Curls")).not.toBeInTheDocument();
expect(screen.queryByText("Skull crusher")).not.toBeInTheDocument();
});

test("hides the current exercise (exerciseId prop) from the standalone list", () => {
// Squats has id 345 and no variation group, so passing its id should hide it
renderSelect({ exerciseId: SQUATS_ID });
Expand Down
6 changes: 5 additions & 1 deletion src/components/Exercises/forms/VariationSelect.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,11 @@ export function VariationSelect({
let allExercises: Exercise[] = exercisesQuery.data;

if (searchTerm !== '') {
allExercises = allExercises.filter((base) => base.getTranslation().name.toLowerCase().includes(searchTerm.toLowerCase()));
allExercises = allExercises.filter((base) =>
base.getTranslation().name.toLowerCase().includes(searchTerm.toLowerCase())
|| base.translations.some((translation) =>
translation.aliases.some((alias) =>
alias.alias.toLowerCase().includes(searchTerm.toLowerCase()))));
}

// Group first (including current exercise, so groups show all members)
Expand Down
30 changes: 29 additions & 1 deletion src/components/Exercises/screens/Add/Step2Variations.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Step2Variations } from "@/components/Exercises/screens/Add/Step2Variati
import { useExercisesQuery } from "@/components/Exercises/queries";
import React from "react";
import { ExerciseSubmissionStateProvider } from "@/components/Exercises/screens/Add/state";
import { testExerciseBenchPress, testExerciseCrunches, testExerciseCurls } from "@/tests/exerciseTestdata";
import { testExerciseBenchPress, testExerciseCrunches, testExerciseCurls, testExerciseSquats } from "@/tests/exerciseTestdata";
import type { Mock } from 'vitest';

vi.mock('@/components/Exercises/queries');
Expand Down Expand Up @@ -161,4 +161,32 @@ describe("Test the add exercise step 2 component", () => {
expect(screen.queryByText("Curls")).not.toBeInTheDocument();
expect(screen.queryByText("Crunches")).not.toBeInTheDocument();
});

test("can filter the exercises by alias", async () => {
// Arrange
const user = userEvent.setup();
mockedUseExercisesQuery.mockImplementation(() => ({
isLoading: false,
isSuccess: true,
data: [
testExerciseBenchPress,
testExerciseCurls,
testExerciseCrunches,
testExerciseSquats,
]
}));

// Act
renderStep();
const input = screen.getByRole('textbox', { name: /name/i });

// 'Beinverdicker' is an alias of the German translation of testExerciseSquats
await user.type(input, "beinverd");

// Assert
expect(screen.getByText("Squats")).toBeInTheDocument();
expect(screen.queryByText("Benchpress")).not.toBeInTheDocument();
expect(screen.queryByText("Curls")).not.toBeInTheDocument();
expect(screen.queryByText("Crunches")).not.toBeInTheDocument();
});
});
6 changes: 5 additions & 1 deletion src/components/Exercises/screens/Add/Step2Variations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,11 @@ export const Step2Variations = ({ onContinue, onBack }: StepProps) => {
if (exercisesQuery.isSuccess) {
exercises = exercisesQuery.data;
if (searchTerm !== '') {
exercises = exercises.filter((base) => base.getTranslation().name.toLowerCase().includes(searchTerm.toLowerCase()));
exercises = exercises.filter((base) =>
base.getTranslation().name.toLowerCase().includes(searchTerm.toLowerCase())
|| base.translations.some((translation) =>
translation.aliases.some((alias) =>
alias.alias.toLowerCase().includes(searchTerm.toLowerCase()))));
}
}
groupedExercises = groupBy(exercises.filter(b => b.variationGroup !== null), (b: Exercise) => b.variationGroup!);
Expand Down