Newer
Older
smart-home-server / webclient-vue / src / features / areas / pages / __tests__ / AreaFavoritesPage.spec.js
import { describe, it, expect, beforeEach } from "vitest";
import { mount } from "@vue/test-utils";
import { setActivePinia, createPinia } from "pinia";
import { useAreasStore } from "../../../../stores/areas.js";
import { useFavoritesStore } from "../../../../stores/favorites.js";
import AreaFavoritesPage from "../AreaFavoritesPage.vue";

describe("AreaFavoritesPage", () => {
  beforeEach(() => {
    setActivePinia(createPinia());
  });

  it("renders loading state", () => {
    const store = useAreasStore();
    store.isLoading = true;
    const wrapper = mount(AreaFavoritesPage);
    expect(wrapper.text()).toContain("Loading areas");
  });

  it("renders empty state when no favorites", async () => {
    const wrapper = mount(AreaFavoritesPage);
    await new Promise((resolve) => setTimeout(resolve, 50));
    expect(wrapper.text()).toContain("No favorite areas");
  });

  it("renders favorite areas after loading", async () => {
    const favoritesStore = useFavoritesStore();
    favoritesStore.add(1); // Kitchen from MSW mock

    const wrapper = mount(AreaFavoritesPage);
    await new Promise((resolve) => setTimeout(resolve, 50));

    expect(wrapper.text()).toContain("Kitchen");
    expect(wrapper.text()).toContain("room");
  });
});