- Add softwareReferenceHref helper function for generating resource links. - Create useGlobalResourceEditor hook for managing global application resources. - Implement useGlobalResourceForm hook for handling global resource forms. - Introduce GlobalSoftwareCatalogProvider for context management of global applications. - Develop GlobalOperatingSystemsPage to render global operating systems using the existing GlobalApplicationsPage. - Add operating system form identity helpers for managing OS-specific fields. - Create operating system specification labels for better localization. - Implement OperatingSystemIdentityReview component for reviewing OS identities. - Add OperatingSystemProductFields component for displaying OS product details. - Write tests for resource characteristic control to ensure proper translation and value handling. - Create a Python script for auditing global operating systems UI interactions. - Add tests for expanded workstation profiles to ensure proper functionality and responsiveness.
69 lines
5.1 KiB
Python
69 lines
5.1 KiB
Python
#!/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'])
|