browser()->timeout(60_000); it('Spec419 smokes active M365 registry rows on the Coverage v2 operator surface', function (): void { [$user, $environment] = spec419M365RegistryBrowserFixture(); spec419AuthenticateM365RegistryBrowser($this, $user, $environment); visit(CoverageV2Readiness::getUrl(tenant: $environment, panel: 'admin')) ->resize(1440, 1100) ->waitForText('Coverage v2 Readiness') ->assertSee('Spec419 Browser Environment') ->assertSee('Resource type registry') ->assertSee('Resource instances') ->assertSee('Conditional Access policy') ->assertSee('Application registration') ->assertSee('Security defaults') ->assertSee('Accepted domain') ->assertSee('TCM') ->assertSee('Out of scope') ->assertSee('Detected') ->assertSee('Not included') ->assertSee('Internal only') ->assertDontSee('100% Microsoft 365 coverage') ->assertDontSee('100% M365 coverage') ->assertDontSee('Full M365 coverage') ->assertDontSee('Certified M365 coverage') ->assertDontSee('Restore-ready M365 coverage') ->assertDontSee('M365 TCM registry detected') ->assertDontSee('m365_tcm_registry_detected') ->assertScript('typeof window.Livewire !== "undefined"', true) ->assertScript('(() => document.querySelectorAll("table tbody tr").length >= 8)()', true) ->assertScript("(() => Array.from(document.querySelectorAll('table button, table a')).filter((element) => /^(Capture|Start capture|Restore|Restore ready|Certify|Certified|Publish|Export|Download|Report)$/i.test(element.textContent.trim())).length)()", 0) ->assertScript("(() => ! /M365 full coverage|Microsoft 365 full coverage|M365 certified coverage|Microsoft 365 certified coverage|M365 restore-ready coverage|Microsoft 365 restore-ready coverage/i.test(document.body.textContent))()", true) ->assertScript("(() => ! /m365_tcm_registry_detected|entra_tcm_registry_detected|exchange_tcm_registry_detected|teams_tcm_registry_detected|security_compliance_tcm_registry_detected|m365_tcm_generic_future|m365_tcm_certified_none/i.test(document.body.textContent))()", true) ->assertScript("(() => performance.getEntriesByType('resource').filter((entry) => /graph\\.microsoft\\.com|\\/tcm\\b|provider-remote/i.test(entry.name)).length)()", 0) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs() ->screenshot(true, 'spec419-m365-registry-operator-surface'); }); /** * @return array{0: User, 1: ManagedEnvironment} */ function spec419M365RegistryBrowserFixture(): array { $environment = ManagedEnvironment::factory()->active()->create([ 'name' => 'Spec419 Browser Environment', 'external_id' => 'spec419-browser-environment', ]); [$user, $environment] = createUserWithTenant( tenant: $environment, role: 'owner', workspaceRole: 'owner', clearCapabilityCaches: true, ); (new ResourceTypeRegistry)->syncDefaults(); (new SupportedScopeResolver)->syncDefaults(); return [$user, $environment->refresh()]; } function spec419AuthenticateM365RegistryBrowser( mixed $test, User $user, ManagedEnvironment $environment, ): void { $workspaceId = (int) $environment->workspace_id; $test->actingAs($user)->withSession([ WorkspaceContext::SESSION_KEY => $workspaceId, WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY => [ (string) $workspaceId => (int) $environment->getKey(), ], ]); session()->put(WorkspaceContext::SESSION_KEY, $workspaceId); session()->put(WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY, [ (string) $workspaceId => (int) $environment->getKey(), ]); }