/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 puppeteer from "puppeteer";

describe("Login", () => {
  let browser;
  let page;

  beforeAll(async () => {
    browser = await puppeteer.launch({ args: ["--no-sandbox"] });
  });

  beforeEach(async () => {
    page = await browser.newPage();
    await page.goto("http://localhost:8000/#/user/login", {
      waitUntil: "networkidle2",
    });
    await page.evaluate(() =>
      window.localStorage.setItem("antd-pro-authority", "guest"),
    );
  });

  afterEach(() => page.close());

  it("should login with failure", async () => {
    await page.waitForSelector("#userName", {
      timeout: 2000,
    });
    await page.type("#userName", "mockuser");
    await page.type("#password", "wrong_password");
    await page.click('button[type="submit"]');
    await page.waitForSelector(".ant-alert-error"); // should display error
  });

  it("should login successfully", async () => {
    await page.waitForSelector("#userName", {
      timeout: 2000,
    });
    await page.type("#userName", "admin");
    await page.type("#password", "888888");
    await page.click('button[type="submit"]');
    await page.waitForSelector(".ant-layout-sider h1"); // should display error
    const text = await page.evaluate(() => document.body.innerHTML);
    expect(text).toContain("<h1>Ant Design Pro</h1>");
  });

  afterAll(() => browser.close());
});
