/** @odoo-module alias=@bus/../tests/assets_watchdog_tests default=false */

import { getPyEnv, startServer } from "@bus/../tests/helpers/mock_python_environment";
import { addBusServicesToRegistry } from "@bus/../tests/helpers/test_utils";
import { assetsWatchdogService } from "@bus/services/assets_watchdog_service";

import { patchWithCleanup } from "@web/../tests/helpers/utils";
import { click, contains } from "@web/../tests/utils";
import { createWebClient } from "@web/../tests/webclient/helpers";
import { browser } from "@web/core/browser/browser";
import { registry } from "@web/core/registry";

QUnit.module("Bus Assets WatchDog");

QUnit.test("can listen on bus and displays notifications in DOM", async (assert) => {
    await startServer();
    addBusServicesToRegistry();
    registry.category("services").add("assetsWatchdog", assetsWatchdogService);
    patchWithCleanup(browser, {
        setTimeout(fn) {
            return super.setTimeout(fn, 0);
        },
    });
    patchWithCleanup(browser.location, {
        reload: () => assert.step("reloadPage"),
    });
    await createWebClient({});
    const pyEnv = await getPyEnv();
    pyEnv["bus.bus"]._sendone("broadcast", "bundle_changed", {
        server_version: "NEW_MAJOR_VERSION",
    });
    await contains(".o_notification", { text: "The page appears to be out of date." });
    await click(".o_notification_buttons .btn-primary", { text: "Refresh" });
    assert.verifySteps(["reloadPage"]);
});
