metis-desk/scripts/workstation-profiles-expanded.test.py

69 lines
5.1 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Comprueba perfiles abiertos e independientes en la instalación desechable mediante MCP."""
import json
import os
from urllib.parse import urlparse
from pathlib import Path
import runpy
import unittest
ROOT = Path(__file__).resolve().parent.parent
BASE = runpy.run_path(str(ROOT / 'scripts/workplace-visual-map.test.py'))
class ExpandedWorkstationProfilesTests(BASE['WorkplaceVisualMapTests']):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.output = cls.output.parents[1] / 'profiles-expanded'
cls.output.mkdir(parents=True, exist_ok=True)
evidence = cls.output / 'measurements.json'
cls.evidence = json.loads(evidence.read_text()) if evidence.exists() else []
preview = os.environ.get('METIS_PROFILES_PREVIEW_ORIGIN')
if preview:
if urlparse(preview).hostname != 'localhost':
raise RuntimeError('La preview debe pertenecer al entorno local desechable.')
cls.origin = preview
def test_all_profiles_and_independent_controls(self):
self.tool('browser_resize', {'width':1440,'height':900})
self.map_ready(pending=True)
self.code("await page.locator('[data-workstation-configurations]').nth(1).waitFor();return true;")
values=self.code("const region=page.getByRole('region',{name:/^Personas y perfiles/});return {details:await region.locator('[data-workstation-configurations]').count(),open:await region.getByRole('button',{name:/Ocultar configuraciones de/}).count(),uniqueIds:await page.evaluate(()=>{const ids=[...document.querySelectorAll('[id]')].map(e=>e.id);return new Set(ids).size===ids.length}),targets:await region.getByRole('button',{name:/Ocultar configuraciones de/}).evaluateAll(buttons=>buttons.every(b=>document.getElementById(b.getAttribute('aria-controls'))))};")
self.assertEqual(values['details'],2)
self.assertEqual(values['open'],2)
self.assertTrue(values['uniqueIds'])
self.assertTrue(values['targets'])
self.code("await page.getByRole('heading',{name:/^Personas y perfiles/}).scrollIntoViewIfNeeded();return true;")
self.capture('all-profiles-open-1440')
self.code("await page.getByRole('button',{name:'Ocultar configuraciones de Ángela · administración',exact:true}).click();return true;")
self.assertEqual(self.code("return await page.locator('[data-workstation-configurations]').count();"),1)
self.assertEqual(self.code("return await page.getByRole('button',{name:'Ocultar configuraciones de Íñigo · consultas de documentación',exact:true}).getAttribute('aria-expanded');"),'true')
self.code("await page.getByRole('button',{name:'Mostrar configuraciones de Ángela · administración',exact:true}).press('Space');return true;")
self.assertEqual(self.code("return await page.locator('[data-workstation-configurations]').count();"),2)
first='[data-workstation-configurations='+json.dumps(self.fixture['primaryProfile'])+']'
second='[data-workstation-configurations='+json.dumps(self.fixture['secondaryProfile'])+']'
self.code("await page.locator("+json.dumps(first)+").getByRole('checkbox',{name:'Solo pendientes',exact:true}).check();return true;")
self.assertFalse(self.code("return await page.locator("+json.dumps(second)+").getByRole('checkbox',{name:'Solo pendientes',exact:true}).isChecked();"))
self.code("await page.getByRole('button',{name:'Ocultar configuraciones de Ángela · administración',exact:true}).click();await page.getByRole('button',{name:'Ver configuraciones pendientes',exact:true}).click();return true;")
self.assertTrue(self.code("return await page.locator("+json.dumps(first)+").evaluate(e=>e===document.activeElement);"))
self.assertTrue(self.code("return await page.locator("+json.dumps(second)+").isVisible();"))
self.record('independent-controls',values)
def test_complete_list_responsive(self):
self.map_ready('dense',software=False)
self.code("await page.locator('[data-workstation-configurations]').nth(49).waitFor();return true;")
for width,height in [(1600,1000),(1440,900),(1280,900),(1024,768),(768,1024),(390,844)]:
self.tool('browser_resize', {'width':width,'height':height})
self.code("await page.getByRole('heading',{name:/^Personas y perfiles/}).scrollIntoViewIfNeeded();return true;")
values=self.code("return {width:await page.evaluate(()=>innerWidth),scrollWidth:await page.evaluate(()=>document.documentElement.scrollWidth),details:await page.locator('[data-workstation-configurations]').count(),open:await page.getByRole('button',{name:/Ocultar configuraciones de DASH-PROFILE/}).count()};")
self.assertEqual(values['details'],50)
self.assertEqual(values['open'],50)
self.assertLessEqual(values['scrollWidth'],width)
self.record('dense-'+str(width),values)
self.capture('dense-profiles-'+str(width))
if __name__ == '__main__':
unittest.main(defaultTest=['ExpandedWorkstationProfilesTests.test_all_profiles_and_independent_controls','ExpandedWorkstationProfilesTests.test_complete_list_responsive'])