import { test, expect } from '@playwright/test'; import { waitForMap } from '../support/app.js'; // El mapa de /fires es la página principal del sitio y se quedaba EN GRIS en // staging: ni teselas, ni fuegos, ni suscripción por viewport, con el // "Actualizando…" eterno. Se había dado por un artefacto del navegador sin // pantalla; no lo era. El control de capas se montaba con dos capas base y, al // resolverse la clave de Google, se le añadían tres más — y en esa segunda // pasada react-leaflet se dejaba por el camino la capa base marcada. // // Solo se veía en despliegues CON clave de Google. Por eso settings-ci.json // lleva una clave falsa: para que esta suite recorra el mismo camino que // staging y producción. test.describe('mapa de fuegos activos', () => { test('paints its tiles', async ({ page }) => { await page.goto('/fires'); await waitForMap(page); await expect(page.locator('.leaflet-tile-loaded').first()).toBeVisible({ timeout: 60000 }); expect(await page.locator('.leaflet-tile').count()).toBeGreaterThan(0); }); test('offers every base layer and keeps the checked one', async ({ page }) => { await page.goto('/fires'); await waitForMap(page); const layers = page.locator('.leaflet-control-layers-base input'); expect(await layers.count()).toBeGreaterThanOrEqual(2); // Exactamente una marcada, y el mapa con teselas: si la marcada se hubiera // perdido, seguiría marcada en el control pero no habría teselas. const checked = await page.locator('.leaflet-control-layers-base input:checked').count(); expect(checked).toEqual(1); expect(await page.locator('.leaflet-tile').count()).toBeGreaterThan(0); }); test('subscribes to the fires of the current viewport', async ({ page }) => { await page.goto('/fires'); await waitForMap(page); const names = await page.evaluate(() => Object.values(window.Meteor.connection._subscriptions).map(s => s.name)); expect(names).toContain('activefiresmyloc'); expect(names).toContain('activefiresunionmyloc'); }); test('does not get stuck on "Actualizando…"', async ({ page }) => { await page.goto('/fires'); await waitForMap(page); await page.waitForTimeout(5000); // El texto aparece mientras la suscripción no está lista; quedarse ahí es // justo el síntoma del mapa gris. await expect(page.getByText('Actualizando...', { exact: false })).toHaveCount(0); }); });