Skip to content

Commit

Permalink
Less verbose testing of user validation for username
Browse files Browse the repository at this point in the history
  • Loading branch information
cl8n committed Aug 11, 2023
1 parent ed46496 commit bf216fc
Showing 1 changed file with 50 additions and 81 deletions.
131 changes: 50 additions & 81 deletions tests/Libraries/UsernameValidationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,85 +66,84 @@ public function testValidateUsername(string $username, bool $expectValid): void
}

/**
* @dataProvider usersOfUsernameDataProvider
* @dataProvider usersOfUsernameLookupDataProvider
*/
public function testValidateUsersOfUsername(): void
{
[, $username] = $this->createUsersOfUsernameDataProviderModels(...func_get_args());

$this->assertTrue(UsernameValidation::validateUsersOfUsername($username)->isEmpty());
}

/**
* @dataProvider usersOfUsernameDataProvider
*/
public function testValidateUsersOfUsernameFormerlyAlmostTopRanked(): void
{
[$user, $username] = $this->createUsersOfUsernameDataProviderModels(...func_get_args());

RankHighest::factory()->create([
'rank' => 101,
'user_id' => $user,
public function testValidateUsersOfUsername(
bool $throughUsernameHistory,
bool $underscoresReplaced,
bool $expectLookupSuccess,
): void {
$username = 'username_1';
$user = User::factory()->create([
'username' => $username,
'username_clean' => $username,
]);

$this->assertTrue(UsernameValidation::validateUsersOfUsername($username)->isEmpty());
}
if ($throughUsernameHistory) {
$username = "Old_{$username}";
$user->usernameChangeHistory()->create([
'username' => $user->username,
'username_last' => $username,
]);
}

/**
* @dataProvider usersOfUsernameDataProvider
*/
public function testValidateUsersOfUsernameFormerlyTopRanked(): void
{
[$user, $username, $expectLookupSuccess]
= $this->createUsersOfUsernameDataProviderModels(...func_get_args());
if ($underscoresReplaced) {
$username = str_replace('_', ' ', $username);
}

// Make the user fail at least one of the checks
RankHighest::factory()->create([
'rank' => 100,
'user_id' => $user,
]);

// The validation should succeed only if the lookup does not
$this->assertNotSame(
$expectLookupSuccess,
UsernameValidation::validateUsersOfUsername($username)->isEmpty(),
);
}

/**
* @dataProvider usersOfUsernameDataProvider
*/
public function testValidateUsersOfUsernameFormerlyAlmostTopRanked(): void
{
$user = User
::factory()
->has(RankHighest::factory()->state(['rank' => 101]))
->create();

$this->assertTrue(UsernameValidation::validateUsersOfUsername($user->username)->isEmpty());
}

public function testValidateUsersOfUsernameFormerlyTopRanked(): void
{
$user = User
::factory()
->has(RankHighest::factory()->state(['rank' => 100]))
->create();

$this->assertFalse(UsernameValidation::validateUsersOfUsername($user->username)->isEmpty());
}

public function testValidateUsersOfUsernameHasBadges(): void
{
[$user, $username, $expectLookupSuccess]
= $this->createUsersOfUsernameDataProviderModels(...func_get_args());
$user = User::factory()->create();

$user->badges()->create([
'description' => '',
'image' => '',
]);

$this->assertNotSame(
$expectLookupSuccess,
UsernameValidation::validateUsersOfUsername($username)->isEmpty(),
);
$this->assertFalse(UsernameValidation::validateUsersOfUsername($user->username)->isEmpty());
}

/**
* @dataProvider usersOfUsernameDataProvider
*/
public function testValidateUsersOfUsernameHasRankedBeatmapsets(): void
{
[$user, $username, $expectLookupSuccess]
= $this->createUsersOfUsernameDataProviderModels(...func_get_args());

Beatmapset::factory()->create([
'approved' => Beatmapset::STATES['ranked'],
'user_id' => $user,
]);
$user = User
::factory()
->has(Beatmapset::factory()->state(['approved' => Beatmapset::STATES['ranked']]))
->create();

$this->assertNotSame(
$expectLookupSuccess,
UsernameValidation::validateUsersOfUsername($username)->isEmpty(),
);
$this->assertFalse(UsernameValidation::validateUsersOfUsername($user->username)->isEmpty());
}

/**
Expand Down Expand Up @@ -178,7 +177,7 @@ public function usernameValidationDataProvider(): array
* - Whether the user lookup should have its underscores replaced with spaces
* - Whether the user lookup should return the user
*/
public function usersOfUsernameDataProvider(): array
public function usersOfUsernameLookupDataProvider(): array
{
return [
[true, true, false],
Expand All @@ -187,34 +186,4 @@ public function usersOfUsernameDataProvider(): array
[false, false, true],
];
}

/**
* Create a user and username for lookup based on input from
* `usersOfUsernameDataProvider()`.
*/
private function createUsersOfUsernameDataProviderModels(
bool $throughUsernameHistory,
bool $underscoresReplaced,
bool $lookupShouldSucceed,
): array {
$username = 'username_1';
$user = User::factory()->create([
'username' => $username,
'username_clean' => $username,
]);

if ($throughUsernameHistory) {
$username = "Old_{$username}";
$user->usernameChangeHistory()->create([
'username' => $user->username,
'username_last' => $username,
]);
}

if ($underscoresReplaced) {
$username = str_replace('_', ' ', $username);
}

return [$user, $username, $lookupShouldSucceed];
}
}

0 comments on commit bf216fc

Please sign in to comment.