diff --git a/src/app/Http/Controllers/API/V4/UsersController.php b/src/app/Http/Controllers/API/V4/UsersController.php --- a/src/app/Http/Controllers/API/V4/UsersController.php +++ b/src/app/Http/Controllers/API/V4/UsersController.php @@ -214,7 +214,17 @@ $state = 'failed'; } + // Check if the user is a controller of his wallet + $isController = $user->canDelete($user); + $hasCustomDomain = $user->wallet()->entitlements() + ->where('entitleable_type', Domain::class) + ->count() > 0; + return [ + // TODO: This will change when we enable all users to create domains + 'enableDomains' => $isController && $hasCustomDomain, + 'enableUsers' => $isController, + 'enableWallets' => $isController, 'process' => $process, 'processState' => $state, 'isReady' => $all === $checked, diff --git a/src/resources/sass/menu.scss b/src/resources/sass/menu.scss --- a/src/resources/sass/menu.scss +++ b/src/resources/sass/menu.scss @@ -38,6 +38,7 @@ #footer-menu { background-color: $main-color; height: 100px; + overflow: hidden; .navbar-brand { margin: 0; diff --git a/src/resources/vue/Dashboard.vue b/src/resources/vue/Dashboard.vue --- a/src/resources/vue/Dashboard.vue +++ b/src/resources/vue/Dashboard.vue @@ -6,13 +6,13 @@ Your profile - + Domains - + User accounts - + Wallet {{ $root.price(balance) }} diff --git a/src/tests/Browser/DomainTest.php b/src/tests/Browser/DomainTest.php --- a/src/tests/Browser/DomainTest.php +++ b/src/tests/Browser/DomainTest.php @@ -144,14 +144,20 @@ $browser->visit('/login') ->on(new Home()) ->submitLogon('jack@kolab.org', 'simple123', true) - // On dashboard click the "Domains" link ->on(new Dashboard()) + ->assertVisible('@links a.link-profile') + ->assertMissing('@links a.link-domains') + ->assertMissing('@links a.link-users') + ->assertMissing('@links a.link-wallet'); +/* + // On dashboard click the "Domains" link ->assertSeeIn('@links a.link-domains', 'Domains') ->click('@links a.link-domains') // On Domains List page click the domain entry ->on(new DomainList()) ->assertMissing('@table tbody') ->assertSeeIn('tfoot td', 'There are no domains in this account.'); +*/ }); } } diff --git a/src/tests/Browser/LogonTest.php b/src/tests/Browser/LogonTest.php --- a/src/tests/Browser/LogonTest.php +++ b/src/tests/Browser/LogonTest.php @@ -72,10 +72,13 @@ { $this->browse(function (Browser $browser) { $browser->visit(new Home()) - ->submitLogon('john@kolab.org', 'simple123', true); - - // Checks if we're really on Dashboard page - $browser->on(new Dashboard()) + ->submitLogon('john@kolab.org', 'simple123', true) + // Checks if we're really on Dashboard page + ->on(new Dashboard()) + ->assertVisible('@links a.link-profile') + ->assertVisible('@links a.link-domains') + ->assertVisible('@links a.link-users') + ->assertVisible('@links a.link-wallet') ->within(new Menu(), function ($browser) { $browser->assertMenuItems(['support', 'contact', 'webmail', 'logout']); }); @@ -201,7 +204,8 @@ $browser->type('@second-factor-input', $code) ->press('form button') ->waitUntilMissing('@second-factor-input.is-invalid') - ->waitForLocation('/dashboard')->on(new Dashboard()); + ->waitForLocation('/dashboard') + ->on(new Dashboard()); }); } } diff --git a/src/tests/Browser/SignupTest.php b/src/tests/Browser/SignupTest.php --- a/src/tests/Browser/SignupTest.php +++ b/src/tests/Browser/SignupTest.php @@ -369,7 +369,11 @@ $browser->waitUntilMissing('@step3') ->waitUntilMissing('.app-loader') ->on(new Dashboard()) - ->assertUser('signuptestdusk@' . \config('app.domain')); + ->assertUser('signuptestdusk@' . \config('app.domain')) + ->assertVisible('@links a.link-profile') + ->assertMissing('@links a.link-domains') + ->assertVisible('@links a.link-users') + ->assertVisible('@links a.link-wallet'); // Logout the user $browser->within(new Menu(), function ($browser) { @@ -466,7 +470,11 @@ $browser->waitUntilMissing('@step3') ->waitUntilMissing('.app-loader') ->on(new Dashboard()) - ->assertUser('admin@user-domain-signup.com'); + ->assertUser('admin@user-domain-signup.com') + ->assertVisible('@links a.link-profile') + ->assertVisible('@links a.link-domains') + ->assertVisible('@links a.link-users') + ->assertVisible('@links a.link-wallet'); $browser->within(new Menu(), function ($browser) { $browser->clickMenuItem('logout'); diff --git a/src/tests/Feature/Controller/UsersTest.php b/src/tests/Feature/Controller/UsersTest.php --- a/src/tests/Feature/Controller/UsersTest.php +++ b/src/tests/Feature/Controller/UsersTest.php @@ -913,6 +913,11 @@ $this->assertSame($wallet->id, $result['wallet']['id']); $this->assertArrayNotHasKey('discount', $result['wallet']); + $this->assertTrue($result['statusInfo']['enableDomains']); + $this->assertTrue($result['statusInfo']['enableWallets']); + $this->assertTrue($result['statusInfo']['enableUsers']); + + // Ned is John's wallet controller $ned = $this->getTestUser('ned@kolab.org'); $ned_wallet = $ned->wallets()->first(); $result = $this->invokeMethod(new UsersController(), 'userResponse', [$ned]); @@ -929,6 +934,10 @@ $this->assertSame($provider, $result['wallet']['provider']); $this->assertSame($provider, $result['wallets'][0]['provider']); + $this->assertTrue($result['statusInfo']['enableDomains']); + $this->assertTrue($result['statusInfo']['enableWallets']); + $this->assertTrue($result['statusInfo']['enableUsers']); + // Test discount in a response $discount = Discount::where('code', 'TEST')->first(); $wallet->discount()->associate($discount); @@ -948,6 +957,14 @@ $this->assertSame($discount->discount, $result['wallets'][0]['discount']); $this->assertSame($discount->description, $result['wallets'][0]['discount_description']); $this->assertSame($mod_provider, $result['wallets'][0]['provider']); + + // Jack is not a John's wallet controller + $jack = $this->getTestUser('jack@kolab.org'); + $result = $this->invokeMethod(new UsersController(), 'userResponse', [$jack]); + + $this->assertFalse($result['statusInfo']['enableDomains']); + $this->assertFalse($result['statusInfo']['enableWallets']); + $this->assertFalse($result['statusInfo']['enableUsers']); } /**