import {shallow} from "enzyme";
import React from "react";
import HomePage from "./HomePage";
import VideoContainer from "../../elements/VideoContainer/VideoContainer";
function prepareFetchApi(response) {
    const mockJsonPromise = Promise.resolve(response);
    const mockFetchPromise = Promise.resolve({
        json: () => mockJsonPromise,
    });
    return (jest.fn().mockImplementation(() => mockFetchPromise));
}
describe('', function () {
    it('renders without crashing ', function () {
        const wrapper = shallow();
        wrapper.unmount();
    });
    it('ckeck default tag click events', function () {
        const wrapper = shallow();
        global.fetch = prepareFetchApi({});
        expect(global.fetch).toBeCalledTimes(0);
        // click every tag button
        wrapper.find("Tag").map((i) => {
            i.simulate("click");
        });
        expect(global.fetch).toBeCalledTimes(4);
    });
    it('test data insertion', function () {
        const wrapper = shallow();
        expect(wrapper.find("VideoContainer")).toHaveLength(0);
        wrapper.setState({
            data: [
                {}, {}
            ]
        });
        // there shoud be loaded the Videocontainer element into dom after fetching videos correctly
        expect(wrapper.find("VideoContainer")).toHaveLength(1);
    });
    it('test title and nr insertions', function () {
        const wrapper = shallow();
        expect(wrapper.find(".pageheadersubtitle").text()).toBe("All Videos - 0");
        wrapper.setState({
            tag: "testtag",
            selectionnr: 42
        });
        expect(wrapper.find(".pageheadersubtitle").text()).toBe("testtag Videos - 42");
    });
    it('test search field', done => {
        global.fetch = prepareFetchApi([{},{}]);
        const wrapper = shallow();
        wrapper.find('[data-testid="searchtextfield"]').simulate('change', { target: { value: 'testvalue' } });
        wrapper.find('[data-testid="searchbtnsubmit"]').simulate("click");
        process.nextTick(() => {
            // state to be set correctly with response
            expect(wrapper.state().selectionnr).toBe(2);
            global.fetch.mockClear();
            done();
        });
    });
});