/*
 * Copyright 2018 Palantir Technologies, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import sinon from "sinon";

import { describe, expect, it } from "@blueprintjs/test-commons/vitest";

import { type ItemListRendererProps, renderFilteredItems } from "./itemListRenderer";

describe("renderFilteredItems()", () => {
    const PROPS: ItemListRendererProps<string> = {
        activeItem: "one",
        filteredItems: ["one"],
        items: ["one", "two", "three"],
        itemsParentRef: sinon.stub(),
        query: "x",
        renderCreateItem: () => undefined,
        renderItem: () => <div />,
    };
    const noResults = <strong />;
    const initialContent = <article />;

    it("returns noResults if filtered items is empty", () => {
        const element = renderFilteredItems({ ...PROPS, filteredItems: [] }, noResults);
        expect(element).toBe(noResults);
    });

    it("returns initialContent if query is empty", () => {
        const element = renderFilteredItems({ ...PROPS, query: "" }, noResults, initialContent);
        expect(element).toBe(initialContent);
    });

    it("returns filteredItems mapped through renderItem", () => {
        const elements = renderFilteredItems(PROPS) as React.JSX.Element[];
        expect(elements).toHaveLength(PROPS.filteredItems.length);
    });
});
