assertSame('user_42', $username); } public function testResolveJupyterHubUsernameUsesCustomTemplate(): void { putenv('JUPYTERHUB_USERNAME_TEMPLATE=hub-{username}-{person_id}'); $username = dsp_resolve_jupyterhub_username(7, 'bob', 'bob@example.com'); $this->assertSame('hub-bob-7', $username); } public function testResolveJupyterHubUsernameSanitisesOutput(): void { putenv('JUPYTERHUB_USERNAME_TEMPLATE={email}'); $username = dsp_resolve_jupyterhub_username(99, 'carol', 'carol+demo@example.com'); $this->assertSame('carol-demo-example.com', $username); } public function testResolveJupyterHubUsernameRejectsMissingPersonId(): void { $this->assertNull(dsp_resolve_jupyterhub_username(null, 'dave', 'dave@example.com')); } }