import { roleManager } from '@/core/api/classes';
import { annotateTest } from '@/core/utils';
import { kbEntityManager } from '@/test-data/KB';
import { users } from '@/tests/KB/const';
import { test } from '@core/fixtures';

const user = users.authorized;

test.afterAll(async () => await kbEntityManager.flush());

test(
  'Nezobrazovat aplikace ve stavu "retired"',
  {
    annotation: annotateTest({
      description:
        'Ověřit, že v seznamu aplikací nenajdeme žádnou aplikaci ve stavu "retired"',
      requirements:
        'Uživatel má roli `app_admin` nebo obdobnou správcovskou roli. Existuje aplikace ve stavu "retired".',
      steps:
        '\n1. Přihlásit se do Qwazaru s admin právy.\n2. Navigovat na seznam aplikací.\n3. Vyhledat testovací aplikaci ve stavu "retired".\n4. Ověřit, že seznam aplikací je prázdný',
      expectedResult: 'Uživatel nenajde žádnou aplikaci.',
    }),
  },
  async ({
    page,
    widgetHelper: w,
    actions: { loginAsUser },
    api: { login },
  }) => {
    await test.step('Vytvoř testovací data', async () => {
      await login();
      await roleManager.makeUserSuperuser(user.username);
      const folder = await kbEntityManager.create('ApplicationFolder');
      await kbEntityManager.create('Application', { appPackage: folder.gid });
      await kbEntityManager.create('Application', {
        appPackage: folder.gid,
        stavAplikace: 'retired',
      });
      await kbEntityManager.create('Application', {
        appPackage: folder.gid,
        stavAplikace: 'retired',
      });
    });

    await page.goto('/');
    await loginAsUser(user.username, user.password);

    await test.step('Navigovat na seznam aplikací', async () => {
      await w.tile({ label: 'Aplikace' }).click();
      await w.header({ text: 'Aplikační model KB/KB Group' }).isVisible();
      await w.tile({ label: 'Aplikace', exact: true }).click();
    });

    await test.step('Vyhledat testovací aplikaci ve stavu "retired" a ověřit, že seznam aplikací je prázdný', async () => {
      const dataTable = w.dataTable();
      await dataTable.openFilterRow();

      await dataTable
        .multiselectFilter({ columnLabel: 'Stav aplikace' })
        .clear(true);
      await dataTable
        .multiselectFilter({ columnLabel: 'Stav aplikace' })
        .select('retired');
      await dataTable.isEmpty();
    });
  }
);
