Address review findings

This commit is contained in:
Lukas Brübach 2026-11-08 14:54:36 +01:00
parent 6cecb5160c
commit ce821a3356
3 changed files with 52 additions and 60 deletions

View file

@ -23,9 +23,11 @@ DlgCreateGame::DlgCreateGame(TabRoom *_room, const QMap<int, QString> &_gameType
const bool judge = room && (room->getUserInfo()->user_level() & ServerInfo_User::IsJudge); const bool judge = room && (room->getUserInfo()->user_level() & ServerInfo_User::IsJudge);
form = new CreateGameFormWidget(_gameTypes, registered, judge, this); form = new CreateGameFormWidget(_gameTypes, registered, judge, this);
form->setRememberSettingsChecked(SettingsCache::instance().game().getRememberGameSettings()); const bool rememberSettings = SettingsCache::instance().game().getRememberGameSettings();
form->setOptions(GameCreationOptions::fromSettings(SettingsCache::instance().game(), _gameTypes, registered)); form->setRememberSettingsChecked(rememberSettings);
if (!form->isRememberSettingsChecked()) { if (rememberSettings) {
form->setOptions(GameCreationOptions::fromSettings(SettingsCache::instance().game(), _gameTypes, registered));
} else {
form->resetToDefaults(); form->resetToDefaults();
} }
form->focusDescription(); form->focusDescription();

View file

@ -200,26 +200,13 @@ QString CreateGameFormWidget::selectedGameTypesSettingString() const
void CreateGameFormWidget::resetToDefaults() void CreateGameFormWidget::resetToDefaults()
{ {
descriptionEdit->setText(""); GameCreationOptions defaults;
maxPlayersEdit->setValue(2); defaults.onlyRegistered = registeredUser;
setOptions(defaults);
passwordEdit->setText("");
onlyBuddiesCheckBox->setChecked(false);
onlyRegisteredCheckBox->setChecked(registeredUser);
spectatorsAllowedCheckBox->setChecked(true);
spectatorsNeedPasswordCheckBox->setChecked(false);
spectatorsCanTalkCheckBox->setChecked(false);
spectatorsSeeEverythingCheckBox->setChecked(false);
createGameAsSpectatorCheckBox->setChecked(false);
startingLifeTotalEdit->setValue(20);
shareDecklistsOnLoadCheckBox->setChecked(false);
shufflePlayersCheckBox->setChecked(false);
createGameAsJudgeCheckBox->setChecked(false);
// An exclusive button group refuses to uncheck its selected button, which setOptions
// cannot do, so clear the exclusive flag while resetting the game type selection.
for (auto *gameTypeCheckBox : gameTypeCheckBoxes) { for (auto *gameTypeCheckBox : gameTypeCheckBoxes) {
// must set auto exclusive to false to be able to set the check to false
gameTypeCheckBox->setAutoExclusive(false); gameTypeCheckBox->setAutoExclusive(false);
gameTypeCheckBox->setChecked(false); gameTypeCheckBox->setChecked(false);
gameTypeCheckBox->setAutoExclusive(true); gameTypeCheckBox->setAutoExclusive(true);

View file

@ -7,16 +7,27 @@
namespace namespace
{ {
/**
* @brief The remembered settings a test hands to fromSettings.
*
* The fake cannot itself be an aggregate (it derives from a polymorphic interface), so the
* remembered values live in a GameCreationOptions member and the getters read them from
* there. That keeps the test data in one designated initializer.
*/
class FakeGameSettings : public IGameSettingsProvider class FakeGameSettings : public IGameSettingsProvider
{ {
public: public:
explicit FakeGameSettings(const GameCreationOptions &_options = {}) : options(_options)
{
}
[[nodiscard]] QString getGameDescription() const override [[nodiscard]] QString getGameDescription() const override
{ {
return description; return options.description;
} }
[[nodiscard]] int getMaxPlayers() const override [[nodiscard]] int getMaxPlayers() const override
{ {
return maxPlayers; return options.maxPlayers;
} }
[[nodiscard]] QString getGameTypes() const override [[nodiscard]] QString getGameTypes() const override
{ {
@ -24,43 +35,43 @@ public:
} }
[[nodiscard]] bool getOnlyBuddies() const override [[nodiscard]] bool getOnlyBuddies() const override
{ {
return onlyBuddies; return options.onlyBuddies;
} }
[[nodiscard]] bool getOnlyRegistered() const override [[nodiscard]] bool getOnlyRegistered() const override
{ {
return onlyRegistered; return options.onlyRegistered;
} }
[[nodiscard]] bool getSpectatorsAllowed() const override [[nodiscard]] bool getSpectatorsAllowed() const override
{ {
return spectatorsAllowed; return options.spectatorsAllowed;
} }
[[nodiscard]] bool getSpectatorsNeedPassword() const override [[nodiscard]] bool getSpectatorsNeedPassword() const override
{ {
return spectatorsNeedPassword; return options.spectatorsNeedPassword;
} }
[[nodiscard]] bool getSpectatorsCanTalk() const override [[nodiscard]] bool getSpectatorsCanTalk() const override
{ {
return spectatorsCanTalk; return options.spectatorsCanTalk;
} }
[[nodiscard]] bool getSpectatorsCanSeeEverything() const override [[nodiscard]] bool getSpectatorsCanSeeEverything() const override
{ {
return spectatorsCanSeeEverything; return options.spectatorsSeeEverything;
} }
[[nodiscard]] bool getCreateGameAsSpectator() const override [[nodiscard]] bool getCreateGameAsSpectator() const override
{ {
return createGameAsSpectator; return options.joinAsSpectator;
} }
[[nodiscard]] int getDefaultStartingLifeTotal() const override [[nodiscard]] int getDefaultStartingLifeTotal() const override
{ {
return defaultStartingLifeTotal; return options.startingLifeTotal;
} }
[[nodiscard]] bool getShareDecklistsOnLoad() const override [[nodiscard]] bool getShareDecklistsOnLoad() const override
{ {
return shareDecklistsOnLoad; return options.shareDecklistsOnLoad;
} }
[[nodiscard]] bool getShufflePlayers() const override [[nodiscard]] bool getShufflePlayers() const override
{ {
return shufflePlayers; return options.shufflePlayers;
} }
[[nodiscard]] bool getRememberGameSettings() const override [[nodiscard]] bool getRememberGameSettings() const override
{ {
@ -79,19 +90,9 @@ public:
return 0; return 0;
} }
QString description; GameCreationOptions options;
int maxPlayers = 2; /// The legacy "Name, " list; it has no GameCreationOptions counterpart.
QString gameTypes; QString gameTypes;
bool onlyBuddies = false;
bool onlyRegistered = false;
bool spectatorsAllowed = true;
bool spectatorsNeedPassword = false;
bool spectatorsCanTalk = false;
bool spectatorsCanSeeEverything = false;
bool createGameAsSpectator = false;
int defaultStartingLifeTotal = 20;
bool shareDecklistsOnLoad = false;
bool shufflePlayers = false;
}; };
} // namespace } // namespace
@ -186,19 +187,21 @@ TEST(GameCreationOptions, DescriptionWhitespaceIsSimplified)
TEST(GameCreationOptions, FromSettingsCopiesEveryRememberedField) TEST(GameCreationOptions, FromSettingsCopiesEveryRememberedField)
{ {
FakeGameSettings settings; const FakeGameSettings settings{GameCreationOptions{.description = "Remembered game",
settings.description = "Remembered game"; .password = {},
settings.maxPlayers = 6; .maxPlayers = 6,
settings.onlyBuddies = true; .onlyBuddies = true,
settings.onlyRegistered = true; .onlyRegistered = true,
settings.spectatorsAllowed = false; .spectatorsAllowed = false,
settings.spectatorsNeedPassword = true; .spectatorsNeedPassword = true,
settings.spectatorsCanTalk = true; .spectatorsCanTalk = true,
settings.spectatorsCanSeeEverything = true; .spectatorsSeeEverything = true,
settings.createGameAsSpectator = true; .joinAsJudge = false,
settings.defaultStartingLifeTotal = 40; .joinAsSpectator = true,
settings.shareDecklistsOnLoad = true; .startingLifeTotal = 40,
settings.shufflePlayers = true; .shareDecklistsOnLoad = true,
.shufflePlayers = true,
.gameTypeIds = {}}};
const GameCreationOptions options = GameCreationOptions::fromSettings(settings, {}, true); const GameCreationOptions options = GameCreationOptions::fromSettings(settings, {}, true);
@ -219,8 +222,8 @@ TEST(GameCreationOptions, FromSettingsCopiesEveryRememberedField)
TEST(GameCreationOptions, FromSettingsDropsJoinRestrictionsForUnregisteredHosts) TEST(GameCreationOptions, FromSettingsDropsJoinRestrictionsForUnregisteredHosts)
{ {
FakeGameSettings settings; FakeGameSettings settings;
settings.onlyBuddies = true; settings.options.onlyBuddies = true;
settings.onlyRegistered = true; settings.options.onlyRegistered = true;
const GameCreationOptions options = GameCreationOptions::fromSettings(settings, {}, false); const GameCreationOptions options = GameCreationOptions::fromSettings(settings, {}, false);