Ctrl K
ComunidadGuías…

lib/collection-filters.test.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { feedbackNormalFiltersForDestination, feedbackQueryOptions } from "./feedback-query";
import { describe, expect, it } from "vitest";
import { collectionFilterParams, matchesCollectionFilters, matchesFeedbackFilters, readCollectionFilters } from "./collection-filters";

const feedback = { objective_id: "goal-a", category_ids: ["bug"], author_id: "visitor-a", is_public: false, source: "api", review_state: "published" };

describe("feedback property filters", () => {
  it("combines existing feedback properties without reading linked issue properties", () => {
    expect(matchesFeedbackFilters(feedback, { objective: ["goal-a"], category: ["feature", "bug"], author: ["visitor-a"], visibility: ["private"], source: ["api"], review: ["published"] })).toBe(true);
    for (const filters of [{ objective: ["other"] }, { category: ["feature"] }, { author: [null] }, { visibility: ["public"] }, { source: ["internal"] }, { review: ["pending"] }]) {
      expect(matchesFeedbackFilters(feedback, filters)).toBe(false);
    }
    expect(matchesFeedbackFilters({ ...feedback, objective_id: null, author_id: null }, { objective: [null], author: [null] })).toBe(true);
  });
  it("round-trips a filtered objective destination and preserves unrelated selections", () => {
    const filters = { objective: ["goal-a", null], author: ["visitor-a", null], source: ["api"], category: ["bug"] };
    const params = collectionFilterParams(filters, new URLSearchParams("post=request-a&objective=old"));
    expect(params.get("post")).toBe("request-a");
    expect(readCollectionFilters(params)).toEqual(filters);
    expect(collectionFilterParams({}, params).toString()).toBe("post=request-a");
  });
});

describe("triage property filters", () => {
  const issue = { priority: "high", effort: "s", assignee_id: "member", category_ids: ["bug"], objective_id: "goal-a", integration_id: "api-a" };
  it("round-trips the not-set effort through the URL", () => {
    const params = collectionFilterParams({ effort: [null, "s"] }, new URLSearchParams());
    expect(params.getAll("effort")).toEqual(["none", "s"]);
    expect(readCollectionFilters(params)).toEqual({ effort: [null, "s"] });
  });
  it("matches board semantics for multiple values and the current assignee", () => {
    expect(matchesCollectionFilters(issue, { priority: ["low", "high"], effort: ["s"], assignee: ["@me"], objective: ["goal-a"], category: ["bug"], integration: ["api-a"] }, "member")).toBe(true);
    expect(matchesCollectionFilters(issue, { assignee: ["@me"] }, "other")).toBe(false);
    expect(matchesCollectionFilters({ ...issue, effort: null }, { effort: ["s"] }, "member")).toBe(false);
    expect(matchesCollectionFilters({ ...issue, effort: null }, { effort: [null] }, "member")).toBe(true);
    expect(matchesCollectionFilters(issue, { effort: [null] }, "member")).toBe(false);
    expect(matchesCollectionFilters({ category_ids: [] }, { assignee: [null], objective: [null], integration: [null] }, null)).toBe(true);
  });
});

it("prepares objective feedback with all statuses and ordinary feedback with unresolved statuses", () => {
  const goal = "11111111-1111-4111-8111-111111111111";
  expect(feedbackNormalFiltersForDestination(`/projects/p/feedback?objective=${goal}`)).toEqual({ objective: [goal] });
  expect(feedbackNormalFiltersForDestination("/projects/p/feedback")).toEqual({ statuses: ["open", "planned", "in_progress"] });
  expect(feedbackNormalFiltersForDestination("/projects/p/feedback?post=selected")).toEqual({ statuses: ["open", "planned", "in_progress"] });
  expect(feedbackQueryOptions("p").queryKey).toEqual(["feedback", "p", { statuses: ["open", "planned", "in_progress"] }]);
});