alias(static fn (string $name, $default) => $default); $settings = new StudioSettings(); self::assertSame(StudioSettings::MODE_INVITE, $settings->registrationMode()); self::assertFalse($settings->openRegistrationEnabled()); } public function testOpenRegistrationEnabledWhenStored(): void { Functions\when('get_option')->alias(static fn (string $name) => $name === StudioSettings::OPT_REGISTRATION_MODE ? StudioSettings::MODE_SELF_APPROVAL : ''); self::assertTrue((new StudioSettings())->openRegistrationEnabled()); } public function testEnablingMirrorsCoreOptionsAndSnapshots(): void { Functions\when('get_option')->alias(static function (string $name, $default = false) { return match ($name) { StudioSettings::OPT_REGISTRATION_MODE => StudioSettings::MODE_INVITE, // currently closed 'users_can_register' => false, // snapshot as '0' 'default_role' => 'contributor', default => $default, }; }); Functions\expect('update_option')->once()->with(StudioSettings::OPT_PREV_USERS_CAN_REGISTER, '0'); Functions\expect('update_option')->once()->with(StudioSettings::OPT_PREV_DEFAULT_ROLE, 'contributor'); Functions\expect('update_option')->once()->with('users_can_register', '1'); Functions\expect('update_option')->once()->with('default_role', RoleManager::STUDENT); Functions\expect('update_option')->once()->with(StudioSettings::OPT_REGISTRATION_MODE, StudioSettings::MODE_SELF_APPROVAL); $this->applyMode(true); } public function testDisablingRestoresSnapshot(): void { Functions\when('get_option')->alias(static function (string $name, $default = false) { return match ($name) { StudioSettings::OPT_REGISTRATION_MODE => StudioSettings::MODE_SELF_APPROVAL, // currently open StudioSettings::OPT_PREV_USERS_CAN_REGISTER => '1', StudioSettings::OPT_PREV_DEFAULT_ROLE => 'contributor', default => $default, }; }); Functions\expect('update_option')->once()->with('users_can_register', '1'); Functions\expect('update_option')->once()->with('default_role', 'contributor'); Functions\expect('delete_option')->once()->with(StudioSettings::OPT_PREV_USERS_CAN_REGISTER); Functions\expect('delete_option')->once()->with(StudioSettings::OPT_PREV_DEFAULT_ROLE); Functions\expect('update_option')->once()->with(StudioSettings::OPT_REGISTRATION_MODE, StudioSettings::MODE_INVITE); $this->applyMode(false); } public function testNoTransitionLeavesCoreOptionsUntouched(): void { // Already open, asked to enable again: nothing should be written. Functions\when('get_option')->alias(static fn (string $name, $default = false) => $name === StudioSettings::OPT_REGISTRATION_MODE ? StudioSettings::MODE_SELF_APPROVAL : $default); Functions\expect('update_option')->never(); Functions\expect('delete_option')->never(); $this->applyMode(true); } private function applyMode(bool $enable): void { $method = new \ReflectionMethod(StudioSettings::class, 'applyRegistrationMode'); $method->invoke(new StudioSettings(), $enable); } }