Ctrl K
ComunidadGuías…

e2e/specs/laboratory-collections.spec.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { expect, test } from '../fixtures';
import type { SeedProject } from '../fixtures';
import type { LaboratoryHelper } from '../helpers/laboratory';

let slug: string;
let project: SeedProject;

const ok = <T>(result: { ok?: T | null }): T => {
  if (!result.ok) {
    throw new Error('seeding failed');
  }
  return result.ok;
};

const openWithOperation = async (laboratory: LaboratoryHelper, query = 'query op1 { test }') => {
  await laboratory.openSeededTarget(slug);
  await laboratory.addOperationTab();
  await laboratory.setEditorValue('operation', query);
};

test.describe('Laboratory > Collections', () => {
  test.beforeEach(async ({ seed, auth }) => {
    const seeded = await seed.seedTarget();
    slug = seeded.slug;
    project = seeded.project;
    await auth.useSession({ refreshToken: seeded.refreshToken, accessToken: seeded.accessToken });
  });

  test('creates a collection, saves an operation into it and keeps it across a reload', async ({
    page,
    laboratory,
  }) => {
    await openWithOperation(laboratory);
    await laboratory.addCollection('collection-1');
    const saved = page.waitForResponse(response =>
      (response.request().postData() ?? '').includes('LaboratoryCreateOperation'),
    );
    await laboratory.saveOperationToCollection('collection-1');
    await saved;
    await laboratory.openCollection('collection-1');
    await expect(laboratory.operationRow('op1')).toBeVisible();

    await page.reload({ waitUntil: 'domcontentloaded' });
    await expect(page.locator('.hive-laboratory-host')).toBeVisible({ timeout: 30_000 });
    await laboratory.openCollectionsPanel();
    await laboratory.openCollection('collection-1');

    await expect(laboratory.operationRow('op1')).toBeVisible();
  });

  test('renames a collection in place', async ({ laboratory }) => {
    await openWithOperation(laboratory);
    await laboratory.addCollection('collection-1');
    await laboratory.saveOperationToCollection('collection-1');

    await laboratory.renameCollection('collection-1', 'collection-1-updated');

    await laboratory.openCollection('collection-1-updated');
    await expect(laboratory.operationRow('op1')).toBeVisible();
  });

  test('deletes a collection with its operations', async ({ page, laboratory }) => {
    await openWithOperation(laboratory);
    await laboratory.addCollection('collection-1');
    await laboratory.saveOperationToCollection('collection-1');
    await laboratory.openCollection('collection-1');
    await expect(laboratory.operationRow('op1')).toBeVisible();

    await laboratory.deleteCollection('collection-1');

    await expect(
      page.locator('.hive-laboratory').getByRole('button', { name: 'collection-1', exact: true }),
    ).toBeHidden();
    await expect(laboratory.operationRow('op1')).toBeHidden();
  });

  test('deletes one operation and keeps its sibling', async ({ laboratory }) => {
    await openWithOperation(laboratory, 'query op1 { test }');
    await laboratory.addCollection('collection-1');
    await laboratory.saveOperationToCollection('collection-1');
    await laboratory.addOperationTab();
    await laboratory.setEditorValue('operation', 'query op2 { test }');
    await laboratory.saveOperationToCollection('collection-1');
    await laboratory.openCollection('collection-1');
    await expect(laboratory.operationRow('op2')).toBeVisible();

    await laboratory.deleteOperation('op1');

    await expect(laboratory.operationRow('op1')).toBeHidden();
    await expect(laboratory.operationRow('op2')).toBeVisible();
  });

  test('opens a linked operation once and activates its tab', async ({ page, laboratory }) => {
    const { collection } = ok(
      await project.createDocumentCollection({ name: 'collection-1', description: '' }),
    );
    const { operation } = ok(
      await project.createOperationInCollection({
        collectionId: collection.id,
        name: 'operation-1',
        query: 'query op1 { test }',
      }),
    );

    await laboratory.openSeededTarget(slug, `?operation=${operation.id}`);
    await expect(laboratory.tabs()).toHaveCount(1);
    await expect(laboratory.activeTab()).toContainText('operation-1');
    await expect.poll(() => laboratory.getEditorValue('operation')).toContain('op1');

    await page.goto(`/${slug}/laboratory?operation=${operation.id}`, {
      waitUntil: 'domcontentloaded',
    });
    await expect(page.locator('.hive-laboratory-host')).toBeVisible({ timeout: 30_000 });

    await expect(laboratory.tabs()).toHaveCount(1);
    await expect(laboratory.activeTab()).toContainText('operation-1');
  });
});