import { render, screen } from "@testing-library/react";
import { OverviewCard } from "@/components/Exercises/screens/Detail/OverviewCard";
import { Category } from "@/components/Exercises/models/category";
import { Equipment } from "@/components/Exercises/models/equipment";
import { Exercise } from "@/components/Exercises/models/exercise";
import { Language } from "@/components/Exercises/models/language";
import { Translation } from "@/components/Exercises/models/translation";
import React from "react";
import { BrowserRouter } from "react-router-dom";
describe("Test the exercise overview card component", () => {
// Arrange
const exerciseTranslation1 = new Translation({
id: 111,
uuid: "583281c7-2362-48e7-95d5-8fd6c455e0fb",
name: "Squats",
description: "Do a squat",
descriptionSource: "Do a squat",
language: 2,
});
const exerciseTranslation2 = new Translation({
id: 9,
uuid: "dae6f6ed-9408-4e62-a59a-1a33f4e8ab36",
name: "Kniebeuge",
description: "Kniebeuge machen",
descriptionSource: "Kniebeuge machen",
language: 1,
});
const category = new Category(10, "Abs");
const equipment1 = new Equipment(10, "Kettlebell");
const equipment2 = new Equipment(1, "Test 123");
const exercise = new Exercise({
id: 345,
uuid: "c788d643-150a-4ac7-97ef-84643c6419bf",
category: category,
equipment: [equipment1, equipment2],
translations: [exerciseTranslation1, exerciseTranslation2]
});
test("Render the overview card, no language selected -> use english", () => {
// Act
// since OverviewCard renders a Link, we need to wrap in a BrowserRouter
render(
);
// Assert
expect(screen.getByText("Squats")).toBeInTheDocument();
expect(screen.getByText("Abs")).toBeInTheDocument();
expect(screen.getByText("Kettlebell")).toBeInTheDocument();
expect(screen.getByText("Test 123")).toBeInTheDocument();
});
test("Render the overview card with an existing translation", async () => {
// Arrange
const language = new Language(1, "de", "Deutsch");
// Act
// since OverviewCard renders a Link, we need to wrap in a BrowserRouter
render(
);
// Assert
expect(screen.queryByText("Squats")).not.toBeInTheDocument();
expect(screen.getByText("Kniebeuge")).toBeInTheDocument();
expect(screen.getByText("Abs")).toBeInTheDocument();
expect(screen.getByText("Kettlebell")).toBeInTheDocument();
expect(screen.getByText("Test 123")).toBeInTheDocument();
});
test("Render the overview card with a non existing translation -> fallback to english", async () => {
// Arrange
const language = new Language(3, "fr", "Français");
// Act
// since OverviewCard renders a Link, we need to wrap in a BrowserRouter
render(
);
// Assert
expect(screen.queryByText("Kniebeuge")).not.toBeInTheDocument();
expect(screen.getByText("Squats")).toBeInTheDocument();
expect(screen.getByText("Abs")).toBeInTheDocument();
expect(screen.getByText("Kettlebell")).toBeInTheDocument();
expect(screen.getByText("Test 123")).toBeInTheDocument();
});
});