From e792485eddba35fd3c661b4d51d3f5edc7db9f72 Mon Sep 17 00:00:00 2001 From: Len Woodward Date: Mon, 6 Nov 2023 10:55:32 -0800 Subject: [PATCH 1/3] wip --- app/Http/Controllers/Auth/GithubController.php | 6 ++++++ app/Social/GithubUser.php | 5 +++++ lang/en/errors.php | 1 + tests/Unit/Social/GithubUserTest.php | 11 +++++++++++ 4 files changed, 23 insertions(+) diff --git a/app/Http/Controllers/Auth/GithubController.php b/app/Http/Controllers/Auth/GithubController.php index c170f17ee..c4abc1ea3 100644 --- a/app/Http/Controllers/Auth/GithubController.php +++ b/app/Http/Controllers/Auth/GithubController.php @@ -67,6 +67,12 @@ private function userNotFound(GithubUser $user): RedirectResponse return redirect()->route('home'); } + if (! $user->hasPublicRepositories()) { + $this->error('errors.github_account_no_repositories'); + + return redirect()->route('home'); + } + return $this->redirectUserToRegistrationPage($user); } diff --git a/app/Social/GithubUser.php b/app/Social/GithubUser.php index 63e8203ed..15ac9d15c 100644 --- a/app/Social/GithubUser.php +++ b/app/Social/GithubUser.php @@ -13,6 +13,11 @@ public function __construct( ) { } + public function hasPublicRepositories(): bool + { + return $this->get('public_repos') > 0; + } + public function isTooYoung(): bool { return $this->createdAt() > $this->twoWeeksAgo(); diff --git a/lang/en/errors.php b/lang/en/errors.php index 55c8844e8..8f3f31cc0 100644 --- a/lang/en/errors.php +++ b/lang/en/errors.php @@ -5,5 +5,6 @@ 'fields' => 'Something went wrong. Please review the fields below.', 'github_invalid_state' => 'The request timed out. Please try again.', 'github_account_too_young' => 'Your Github account needs to be older than 2 weeks in order to register.', + 'github_account_no_repositories' => 'Your Github account needs to have at least 1 public repository in order to register.', 'github_account_exists' => 'We already found a user with the given GitHub account (:username). Would you like to login instead?', ]; diff --git a/tests/Unit/Social/GithubUserTest.php b/tests/Unit/Social/GithubUserTest.php index 939175927..f65ec8ac5 100644 --- a/tests/Unit/Social/GithubUserTest.php +++ b/tests/Unit/Social/GithubUserTest.php @@ -14,3 +14,14 @@ expect($user->isTooYoung())->toBeTrue(); }); + +it('can determine if the user has public repositories', function (int $num_repos, bool $expected) { + $user = new GithubUser(['public_repos' => $num_repos]); + + expect($user->hasPublicRepositories())->toBe($expected); +})->with([ + [0, false], + [1, true], + [2, true], + [3, true], +]); From a454732cb6c5dc6593644f8516296f0bd9d8a0b7 Mon Sep 17 00:00:00 2001 From: Dries Vints Date: Mon, 6 Nov 2023 21:31:12 +0100 Subject: [PATCH 2/3] Update GithubUserTest.php --- tests/Unit/Social/GithubUserTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Unit/Social/GithubUserTest.php b/tests/Unit/Social/GithubUserTest.php index f65ec8ac5..4ca668680 100644 --- a/tests/Unit/Social/GithubUserTest.php +++ b/tests/Unit/Social/GithubUserTest.php @@ -15,7 +15,7 @@ expect($user->isTooYoung())->toBeTrue(); }); -it('can determine if the user has public repositories', function (int $num_repos, bool $expected) { +it('can determine if the user has public repositories', function (int $numberOfRepos, bool $expected) { $user = new GithubUser(['public_repos' => $num_repos]); expect($user->hasPublicRepositories())->toBe($expected); From f69a379f1c2492013fe29d534e47b39a317088ee Mon Sep 17 00:00:00 2001 From: Dries Vints Date: Mon, 6 Nov 2023 21:31:30 +0100 Subject: [PATCH 3/3] Update GithubUserTest.php --- tests/Unit/Social/GithubUserTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Unit/Social/GithubUserTest.php b/tests/Unit/Social/GithubUserTest.php index 4ca668680..191423297 100644 --- a/tests/Unit/Social/GithubUserTest.php +++ b/tests/Unit/Social/GithubUserTest.php @@ -16,7 +16,7 @@ }); it('can determine if the user has public repositories', function (int $numberOfRepos, bool $expected) { - $user = new GithubUser(['public_repos' => $num_repos]); + $user = new GithubUser(['public_repos' => $numberOfRepos]); expect($user->hasPublicRepositories())->toBe($expected); })->with([