Please confirm access to your account by entering the authentication code provided by your authenticator application.
@@ -85,7 +85,7 @@ const submit = () => {
-
+
Use a recovery code
@@ -95,7 +95,7 @@ const submit = () => {
-
+
Log in
Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.
-
+
A new verification link has been sent to the email address you provided in your profile settings.
- {{ __('Taylor Otwell is an American software engineer and entrepreneur, best known as the creator of the Laravel PHP framework. He has been involved in web development since the early 2000s and has been a significant contributor to the PHP community. In addition to Laravel, he has also created a number of other popular open-source projects and tools, including Forge, Envoyer, and Spark. Otwell is widely regarded as one of the leading figures in the PHP community, and he continues to be active in the development of Laravel and other projects.') }}
+ {{ trans('Taylor Otwell is an American software engineer and entrepreneur, best known as the creator of the Laravel PHP framework. He has been involved in web development since the early 2000s and has been a significant contributor to the PHP community. In addition to Laravel, he has also created a number of other popular open-source projects and tools, including Forge, Envoyer, and Spark. Otwell is widely regarded as one of the leading figures in the PHP community, and he continues to be active in the development of Laravel and other projects.') }}
@@ -49,4 +50,4 @@ button {
@apply bg-gray-900/10;
}
}
-
\ No newline at end of file
+
diff --git a/resources/js/Pages/EmptyStates/ViewException.vue b/resources/js/Pages/EmptyStates/ViewException.vue
index 3ffdecb..9d71e33 100644
--- a/resources/js/Pages/EmptyStates/ViewException.vue
+++ b/resources/js/Pages/EmptyStates/ViewException.vue
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Pages/PrivacyPolicy.vue b/resources/js/Pages/Legal/PrivacyPolicy.vue
similarity index 100%
rename from resources/js/Pages/PrivacyPolicy.vue
rename to resources/js/Pages/Legal/PrivacyPolicy.vue
diff --git a/resources/js/Pages/TermsOfService.vue b/resources/js/Pages/Legal/TermsOfService.vue
similarity index 100%
rename from resources/js/Pages/TermsOfService.vue
rename to resources/js/Pages/Legal/TermsOfService.vue
diff --git a/resources/js/Pages/Profile/Partials/DeleteUserForm.vue b/resources/js/Pages/Profile/Partials/DeleteUserForm.vue
index 16d5a2f..6554670 100644
--- a/resources/js/Pages/Profile/Partials/DeleteUserForm.vue
+++ b/resources/js/Pages/Profile/Partials/DeleteUserForm.vue
@@ -48,7 +48,7 @@ const closeModal = () => {
-
+
Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.
@@ -88,7 +88,7 @@ const closeModal = () => {
{
-
+
If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.
When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone's Google Authenticator application.
To finish enabling two factor authentication, scan the following QR code using your phone's authenticator application or enter the setup key and provide the generated OTP code.
Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.
Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.
- Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end.
+
+
- Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
+
- Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.
+
+
- Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more.
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more.
+
+
+
-
+
-
+
+
diff --git a/resources/js/app.js b/resources/js/app.js
index fe359b9..6a2a2a9 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -3,10 +3,10 @@ import './bootstrap';
import {createApp, h} from 'vue';
import {createInertiaApp, Link} from '@inertiajs/vue3';
import {resolvePageComponent} from 'laravel-vite-plugin/inertia-helpers';
-import {ZiggyVue} from '../../vendor/tightenco/ziggy/dist/vue.m';
+import {ZiggyVue} from '../../vendor/tightenco/ziggy/dist/index.js';
// Mixins
-import base from './base';
+// import base from './base';
// Plugins
import {i18nVue} from "laravel-vue-i18n";
@@ -30,7 +30,7 @@ createInertiaApp({
}
})
/* Mixins */
- .mixin(base)
+ // .mixin(base)
/* Components */
.component('inertia-link', Link)
/* Mountpoint */
@@ -40,4 +40,4 @@ createInertiaApp({
progress: {
color: '#4B5563',
},
-});
\ No newline at end of file
+});
diff --git a/resources/js/base.js b/resources/js/base.js
index bdf28d0..a9b85a8 100644
--- a/resources/js/base.js
+++ b/resources/js/base.js
@@ -1,3 +1,4 @@
+/** @deprecated - Migrated to Composables */
export default {
methods: {
@@ -182,73 +183,5 @@ export default {
}
},
- readableCronExpression(expression) {
- return cronstrue.toString(expression);
- },
-
- price(number, suffix = '€') {
- number = parseFloat(number);
- number = number.toFixed(2) + '';
- x = number.split('.');
- x1 = x[0];
- x2 = x.length > 1 ? '.' + x[1] : '';
- var rgx = /(\d+)(\d{3})/;
- while (rgx.test(x1)) {
- x1 = x1.replace(rgx, '$1' + ',' + '$2');
- }
- return x1 + x2 + ' ' + suffix;
- },
-
- getTrendByValues(now, previous) {
- if (now === previous) {
- return '0%';
- }
- if (previous == 0) {
- return '';
- }
- let trend;
- let diff = (now - previous) / previous * 100;
- if (diff > 0) {
- trend = `+${parseFloat(diff).toFixed(0)}%`;
- } else if (diff < 0) {
- trend = `${parseFloat(diff).toFixed(0)}%`;
- } else {
- trend = `0%`;
- }
- return trend;
- },
-
- getTimeDifference(start, end) {
- var diff = Math.abs(new Date(start) - new Date(end));
- var diffInSeconds = diff / 1000;
- var diffInMinutes = diffInSeconds / 60;
- var diffInHours = diffInMinutes / 60;
- var diffInDays = diffInHours / 24;
- var diffInWeeks = diffInDays / 7;
-
- if (diffInWeeks >= 1) {
- return Math.floor(diffInWeeks) + " weeks";
- } else if (diffInDays >= 1) {
- return Math.floor(diffInDays) + " days";
- } else if (diffInHours >= 1) {
- return Math.floor(diffInHours) + " hours";
- } else if (diffInMinutes >= 1) {
- return Math.floor(diffInMinutes) + " minutes";
- } else {
- return Math.floor(diffInSeconds) + " seconds";
- }
- },
-
- getDates(startDate, endDate) {
- var dateArray = [];
- var currentDate = moment(startDate);
- var endDate = moment(endDate);
- while (currentDate <= endDate) {
- dateArray.push( moment(currentDate).format('YYYY-MM-DD') )
- currentDate = moment(currentDate).add(1, 'days');
- }
- return dateArray;
- }
-
},
}
diff --git a/resources/markdown/imprint.md b/resources/markdown/imprint.md
new file mode 100644
index 0000000..f58d0ce
--- /dev/null
+++ b/resources/markdown/imprint.md
@@ -0,0 +1,3 @@
+# Imprint
+
+Edit this file to define the imprint of your website.
diff --git a/routes/jetstream.php b/routes/jetstream.php
index 806ce88..3b928c1 100644
--- a/routes/jetstream.php
+++ b/routes/jetstream.php
@@ -1,5 +1,6 @@
config('jetstream.middleware', ['web'])], function () {
if (Jetstream::hasTermsAndPrivacyPolicyFeature()) {
- Route::get('/terms-of-service', [TermsOfServiceController::class, 'show'])->name('terms.show');
- Route::get('/privacy-policy', [PrivacyPolicyController::class, 'show'])->name('policy.show');
+ Route::get('/terms-of-service', [LegalController::class, 'showTerms'])->name('terms.show');
+ Route::get('/privacy-policy', [LegalController::class, 'showPolicy'])->name('policy.show');
+ Route::get('/imprint', [LegalController::class, 'showImprint'])->name('imprint.show');
}
Route::group(['middleware' => ['auth', 'verified']], function () {
diff --git a/routes/web.php b/routes/web.php
index cfb9527..9ae302a 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -37,4 +37,4 @@
Route::get('debug', function () {
return throw new \App\Exceptions\ViewException('This is a test exception', 'Test Exception');
-})->name('debug');
\ No newline at end of file
+})->name('debug');
diff --git a/tailwind.config.js b/tailwind.config.js
deleted file mode 100644
index d8ece07..0000000
--- a/tailwind.config.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const defaultTheme = require('tailwindcss/defaultTheme');
-
-module.exports = {
- mode: 'jit',
- content: [
- './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
- './vendor/laravel/jetstream/**/*.blade.php',
- './storage/framework/views/*.php',
- './resources/views/**/*.blade.php',
- './resources/js/**/*.vue',
- './resources/js/**/**/*.vue',
- './resources/js/**/**/**/*.vue',
- './resources/js/**/**/**/**/*.vue',
- ],
-
- theme: {
- extend: {
- fontFamily: {
- sans: ['Inter var', ...defaultTheme.fontFamily.sans],
- },
- },
- },
-
- plugins: [require('@tailwindcss/forms'), require('@tailwindcss/typography'), require('@tailwindcss/line-clamp'), require('@tailwindcss/aspect-ratio')],
-};
diff --git a/tailwind.config.mjs b/tailwind.config.mjs
new file mode 100644
index 0000000..777aacc
--- /dev/null
+++ b/tailwind.config.mjs
@@ -0,0 +1,48 @@
+const defaultTheme = require('tailwindcss/defaultTheme');
+
+module.exports = {
+ mode: 'jit',
+ darkMode: 'class',
+ content: [
+ './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
+ './vendor/laravel/jetstream/**/*.blade.php',
+ './storage/framework/views/*.php',
+ './resources/views/**/*.blade.php',
+ './resources/js/**/*.vue',
+ './resources/js/**/**/*.vue',
+ './resources/js/**/**/**/*.vue',
+ './resources/js/**/**/**/**/*.vue',
+ ],
+
+ theme: {
+ extend: {
+ fontFamily: {
+ sans: ['Inter var', ...defaultTheme.fontFamily.sans],
+ },
+
+ colors: {
+ primary: {
+ DEFAULT: '#3B82F6',
+ 50: '#EBF2FE',
+ 100: '#D7E6FD',
+ 200: '#B0CDFB',
+ 300: '#89B4FA',
+ 400: '#629BF8',
+ 500: '#3B82F6',
+ 600: '#0B61EE',
+ 700: '#084BB8',
+ 800: '#063583',
+ 900: '#041F4D',
+ 950: '#021532'
+ },
+ }
+ },
+ },
+
+ plugins: [
+ require('@tailwindcss/forms'),
+ require('@tailwindcss/typography'),
+ require('@tailwindcss/line-clamp'),
+ require('@tailwindcss/aspect-ratio')
+ ],
+};
diff --git a/tests/Feature/ApiTokenPermissionsTest.php b/tests/Feature/ApiTokenPermissionsTest.php
index bdf7318..1ef8192 100644
--- a/tests/Feature/ApiTokenPermissionsTest.php
+++ b/tests/Feature/ApiTokenPermissionsTest.php
@@ -16,8 +16,6 @@ public function test_api_token_permissions_can_be_updated(): void
{
if (! Features::hasApiFeatures()) {
$this->markTestSkipped('API support is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->withPersonalTeam()->create());
diff --git a/tests/Feature/AuthenticationTest.php b/tests/Feature/AuthenticationTest.php
index 7623fe9..7bfcae2 100644
--- a/tests/Feature/AuthenticationTest.php
+++ b/tests/Feature/AuthenticationTest.php
@@ -3,7 +3,6 @@
namespace Tests\Feature;
use App\Models\User;
-use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
@@ -28,7 +27,7 @@ public function test_users_can_authenticate_using_the_login_screen(): void
]);
$this->assertAuthenticated();
- $response->assertRedirect(RouteServiceProvider::HOME);
+ $response->assertRedirect(route('dashboard', absolute: false));
}
public function test_users_can_not_authenticate_with_invalid_password(): void
diff --git a/tests/Feature/CreateApiTokenTest.php b/tests/Feature/CreateApiTokenTest.php
index 3220f50..e539736 100644
--- a/tests/Feature/CreateApiTokenTest.php
+++ b/tests/Feature/CreateApiTokenTest.php
@@ -15,8 +15,6 @@ public function test_api_tokens_can_be_created(): void
{
if (! Features::hasApiFeatures()) {
$this->markTestSkipped('API support is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->withPersonalTeam()->create());
diff --git a/tests/Feature/CreateTeamTest.php b/tests/Feature/CreateTeamTest.php
deleted file mode 100644
index 9a6a51e..0000000
--- a/tests/Feature/CreateTeamTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $response = $this->post('/teams', [
- 'name' => 'Test Team',
- ]);
-
- $this->assertCount(2, $user->fresh()->ownedTeams);
- $this->assertEquals('Test Team', $user->fresh()->ownedTeams()->latest('id')->first()->name);
- }
-}
diff --git a/tests/Feature/DeleteAccountTest.php b/tests/Feature/DeleteAccountTest.php
index b50a217..28c782d 100644
--- a/tests/Feature/DeleteAccountTest.php
+++ b/tests/Feature/DeleteAccountTest.php
@@ -15,8 +15,6 @@ public function test_user_accounts_can_be_deleted(): void
{
if (! Features::hasAccountDeletionFeatures()) {
$this->markTestSkipped('Account deletion is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->create());
@@ -32,8 +30,6 @@ public function test_correct_password_must_be_provided_before_account_can_be_del
{
if (! Features::hasAccountDeletionFeatures()) {
$this->markTestSkipped('Account deletion is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->create());
diff --git a/tests/Feature/DeleteApiTokenTest.php b/tests/Feature/DeleteApiTokenTest.php
index 7d84a1a..7995429 100644
--- a/tests/Feature/DeleteApiTokenTest.php
+++ b/tests/Feature/DeleteApiTokenTest.php
@@ -16,8 +16,6 @@ public function test_api_tokens_can_be_deleted(): void
{
if (! Features::hasApiFeatures()) {
$this->markTestSkipped('API support is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->withPersonalTeam()->create());
diff --git a/tests/Feature/DeleteTeamTest.php b/tests/Feature/DeleteTeamTest.php
deleted file mode 100644
index 7cb7d71..0000000
--- a/tests/Feature/DeleteTeamTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $user->ownedTeams()->save($team = Team::factory()->make([
- 'personal_team' => false,
- ]));
-
- $team->users()->attach(
- $otherUser = User::factory()->create(), ['role' => 'test-role']
- );
-
- $response = $this->delete('/teams/'.$team->id);
-
- $this->assertNull($team->fresh());
- $this->assertCount(0, $otherUser->fresh()->teams);
- }
-
- public function test_personal_teams_cant_be_deleted(): void
- {
- $this->actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $response = $this->delete('/teams/'.$user->currentTeam->id);
-
- $this->assertNotNull($user->currentTeam->fresh());
- }
-}
diff --git a/tests/Feature/EmailVerificationTest.php b/tests/Feature/EmailVerificationTest.php
index ad0257d..5d3e336 100644
--- a/tests/Feature/EmailVerificationTest.php
+++ b/tests/Feature/EmailVerificationTest.php
@@ -3,7 +3,6 @@
namespace Tests\Feature;
use App\Models\User;
-use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Event;
@@ -19,8 +18,6 @@ public function test_email_verification_screen_can_be_rendered(): void
{
if (! Features::enabled(Features::emailVerification())) {
$this->markTestSkipped('Email verification not enabled.');
-
- return;
}
$user = User::factory()->withPersonalTeam()->unverified()->create();
@@ -34,8 +31,6 @@ public function test_email_can_be_verified(): void
{
if (! Features::enabled(Features::emailVerification())) {
$this->markTestSkipped('Email verification not enabled.');
-
- return;
}
Event::fake();
@@ -53,15 +48,13 @@ public function test_email_can_be_verified(): void
Event::assertDispatched(Verified::class);
$this->assertTrue($user->fresh()->hasVerifiedEmail());
- $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1');
+ $response->assertRedirect(route('dashboard', absolute: false).'?verified=1');
}
public function test_email_can_not_verified_with_invalid_hash(): void
{
if (! Features::enabled(Features::emailVerification())) {
$this->markTestSkipped('Email verification not enabled.');
-
- return;
}
$user = User::factory()->unverified()->create();
diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php
deleted file mode 100644
index 1eafba6..0000000
--- a/tests/Feature/ExampleTest.php
+++ /dev/null
@@ -1,21 +0,0 @@
-get('/');
-
- $response->assertStatus(200);
- }
-}
diff --git a/tests/Feature/InviteTeamMemberTest.php b/tests/Feature/InviteTeamMemberTest.php
deleted file mode 100644
index 60d1613..0000000
--- a/tests/Feature/InviteTeamMemberTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-markTestSkipped('Team invitations not enabled.');
-
- return;
- }
-
- Mail::fake();
-
- $this->actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $response = $this->post('/teams/'.$user->currentTeam->id.'/members', [
- 'email' => 'test@example.com',
- 'role' => 'admin',
- ]);
-
- Mail::assertSent(TeamInvitation::class);
-
- $this->assertCount(1, $user->currentTeam->fresh()->teamInvitations);
- }
-
- public function test_team_member_invitations_can_be_cancelled(): void
- {
- if (! Features::sendsTeamInvitations()) {
- $this->markTestSkipped('Team invitations not enabled.');
-
- return;
- }
-
- Mail::fake();
-
- $this->actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $invitation = $user->currentTeam->teamInvitations()->create([
- 'email' => 'test@example.com',
- 'role' => 'admin',
- ]);
-
- $response = $this->delete('/team-invitations/'.$invitation->id);
-
- $this->assertCount(0, $user->currentTeam->fresh()->teamInvitations);
- }
-}
diff --git a/tests/Feature/LeaveTeamTest.php b/tests/Feature/LeaveTeamTest.php
deleted file mode 100644
index f586a24..0000000
--- a/tests/Feature/LeaveTeamTest.php
+++ /dev/null
@@ -1,38 +0,0 @@
-withPersonalTeam()->create();
-
- $user->currentTeam->users()->attach(
- $otherUser = User::factory()->create(), ['role' => 'admin']
- );
-
- $this->actingAs($otherUser);
-
- $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id);
-
- $this->assertCount(0, $user->currentTeam->fresh()->users);
- }
-
- public function test_team_owners_cant_leave_their_own_team(): void
- {
- $this->actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$user->id);
-
- $response->assertSessionHasErrorsIn('removeTeamMember', ['team']);
-
- $this->assertNotNull($user->currentTeam->fresh());
- }
-}
diff --git a/tests/Feature/PasswordConfirmationTest.php b/tests/Feature/PasswordConfirmationTest.php
index 7575d3a..34c860a 100644
--- a/tests/Feature/PasswordConfirmationTest.php
+++ b/tests/Feature/PasswordConfirmationTest.php
@@ -4,7 +4,6 @@
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
-use Laravel\Jetstream\Features;
use Tests\TestCase;
class PasswordConfirmationTest extends TestCase
diff --git a/tests/Feature/PasswordResetTest.php b/tests/Feature/PasswordResetTest.php
index 7c65edb..cbd9d0d 100644
--- a/tests/Feature/PasswordResetTest.php
+++ b/tests/Feature/PasswordResetTest.php
@@ -17,8 +17,6 @@ public function test_reset_password_link_screen_can_be_rendered(): void
{
if (! Features::enabled(Features::resetPasswords())) {
$this->markTestSkipped('Password updates are not enabled.');
-
- return;
}
$response = $this->get('/forgot-password');
@@ -30,8 +28,6 @@ public function test_reset_password_link_can_be_requested(): void
{
if (! Features::enabled(Features::resetPasswords())) {
$this->markTestSkipped('Password updates are not enabled.');
-
- return;
}
Notification::fake();
@@ -49,8 +45,6 @@ public function test_reset_password_screen_can_be_rendered(): void
{
if (! Features::enabled(Features::resetPasswords())) {
$this->markTestSkipped('Password updates are not enabled.');
-
- return;
}
Notification::fake();
@@ -74,8 +68,6 @@ public function test_password_can_be_reset_with_valid_token(): void
{
if (! Features::enabled(Features::resetPasswords())) {
$this->markTestSkipped('Password updates are not enabled.');
-
- return;
}
Notification::fake();
diff --git a/tests/Feature/RegistrationTest.php b/tests/Feature/RegistrationTest.php
index 90b0245..e850635 100644
--- a/tests/Feature/RegistrationTest.php
+++ b/tests/Feature/RegistrationTest.php
@@ -2,7 +2,6 @@
namespace Tests\Feature;
-use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Fortify\Features;
use Laravel\Jetstream\Jetstream;
@@ -16,8 +15,6 @@ public function test_registration_screen_can_be_rendered(): void
{
if (! Features::enabled(Features::registration())) {
$this->markTestSkipped('Registration support is not enabled.');
-
- return;
}
$response = $this->get('/register');
@@ -29,8 +26,6 @@ public function test_registration_screen_cannot_be_rendered_if_support_is_disabl
{
if (Features::enabled(Features::registration())) {
$this->markTestSkipped('Registration support is enabled.');
-
- return;
}
$response = $this->get('/register');
@@ -42,8 +37,6 @@ public function test_new_users_can_register(): void
{
if (! Features::enabled(Features::registration())) {
$this->markTestSkipped('Registration support is not enabled.');
-
- return;
}
$response = $this->post('/register', [
@@ -55,6 +48,6 @@ public function test_new_users_can_register(): void
]);
$this->assertAuthenticated();
- $response->assertRedirect(RouteServiceProvider::HOME);
+ $response->assertRedirect(route('dashboard', absolute: false));
}
}
diff --git a/tests/Feature/RemoveTeamMemberTest.php b/tests/Feature/RemoveTeamMemberTest.php
deleted file mode 100644
index cef1c16..0000000
--- a/tests/Feature/RemoveTeamMemberTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $user->currentTeam->users()->attach(
- $otherUser = User::factory()->create(), ['role' => 'admin']
- );
-
- $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id);
-
- $this->assertCount(0, $user->currentTeam->fresh()->users);
- }
-
- public function test_only_team_owner_can_remove_team_members(): void
- {
- $user = User::factory()->withPersonalTeam()->create();
-
- $user->currentTeam->users()->attach(
- $otherUser = User::factory()->create(), ['role' => 'admin']
- );
-
- $this->actingAs($otherUser);
-
- $response = $this->delete('/teams/'.$user->currentTeam->id.'/members/'.$user->id);
-
- $response->assertStatus(403);
- }
-}
diff --git a/tests/Feature/TwoFactorAuthenticationSettingsTest.php b/tests/Feature/TwoFactorAuthenticationSettingsTest.php
index 5ba5f62..9feff4c 100644
--- a/tests/Feature/TwoFactorAuthenticationSettingsTest.php
+++ b/tests/Feature/TwoFactorAuthenticationSettingsTest.php
@@ -15,8 +15,6 @@ public function test_two_factor_authentication_can_be_enabled(): void
{
if (! Features::canManageTwoFactorAuthentication()) {
$this->markTestSkipped('Two factor authentication is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->create());
@@ -33,8 +31,6 @@ public function test_recovery_codes_can_be_regenerated(): void
{
if (! Features::canManageTwoFactorAuthentication()) {
$this->markTestSkipped('Two factor authentication is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->create());
@@ -56,8 +52,6 @@ public function test_two_factor_authentication_can_be_disabled(): void
{
if (! Features::canManageTwoFactorAuthentication()) {
$this->markTestSkipped('Two factor authentication is not enabled.');
-
- return;
}
$this->actingAs($user = User::factory()->create());
diff --git a/tests/Feature/UpdateTeamMemberRoleTest.php b/tests/Feature/UpdateTeamMemberRoleTest.php
deleted file mode 100644
index 4a7c474..0000000
--- a/tests/Feature/UpdateTeamMemberRoleTest.php
+++ /dev/null
@@ -1,48 +0,0 @@
-actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $user->currentTeam->users()->attach(
- $otherUser = User::factory()->create(), ['role' => 'admin']
- );
-
- $response = $this->put('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id, [
- 'role' => 'editor',
- ]);
-
- $this->assertTrue($otherUser->fresh()->hasTeamRole(
- $user->currentTeam->fresh(), 'editor'
- ));
- }
-
- public function test_only_team_owner_can_update_team_member_roles(): void
- {
- $user = User::factory()->withPersonalTeam()->create();
-
- $user->currentTeam->users()->attach(
- $otherUser = User::factory()->create(), ['role' => 'admin']
- );
-
- $this->actingAs($otherUser);
-
- $response = $this->put('/teams/'.$user->currentTeam->id.'/members/'.$otherUser->id, [
- 'role' => 'editor',
- ]);
-
- $this->assertTrue($otherUser->fresh()->hasTeamRole(
- $user->currentTeam->fresh(), 'admin'
- ));
- }
-}
diff --git a/tests/Feature/UpdateTeamNameTest.php b/tests/Feature/UpdateTeamNameTest.php
deleted file mode 100644
index 39968a1..0000000
--- a/tests/Feature/UpdateTeamNameTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-actingAs($user = User::factory()->withPersonalTeam()->create());
-
- $response = $this->put('/teams/'.$user->currentTeam->id, [
- 'name' => 'Test Team',
- ]);
-
- $this->assertCount(1, $user->fresh()->ownedTeams);
- $this->assertEquals('Test Team', $user->currentTeam->fresh()->name);
- }
-}
diff --git a/vite.config.js b/vite.config.mjs
similarity index 100%
rename from vite.config.js
rename to vite.config.mjs