diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php index 4f837395..019a4141 100644 --- a/app/Http/Controllers/Admin/DashboardController.php +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -2,14 +2,13 @@ namespace App\Http\Controllers\Admin; -use App\File; +use App\Models\File; use App\Http\Controllers\Controller; use App\Http\Resources\UsersCollection; use App\Services\StripeService; -use App\Setting; -use App\User; +use App\Models\User; use ByteUnits\Metric; -use Illuminate\Http\Request; +use DB; use Laravel\Cashier\Subscription; class DashboardController extends Controller @@ -29,26 +28,21 @@ class DashboardController extends Controller */ public function index() { - // Get total users - $total_users = User::all()->count(); - - // Get total used space - $total_used_space = File::all()->map(function ($item) { - return (int)$item->getRawOriginal('filesize'); - })->sum(); - // Get total premium users - $total_premium_users = Subscription::where('stripe_status', 'active')->get()->count(); + $premium_users = Subscription::whereStripeStatus('active') + ->count(); - // Get License - $license = Setting::where('name', 'license')->first(); + // Get total storage usage + $storage_usage = Metric::bytes( + DB::table('files')->sum('filesize') + )->format(); return [ - 'license' => $license ? $license->value : null, + 'license' => get_setting('license'), 'app_version' => config('vuefilemanager.version'), - 'total_users' => $total_users, - 'total_used_space' => Metric::bytes($total_used_space)->format(), - 'total_premium_users' => $total_premium_users, + 'total_users' => User::count(), + 'total_used_space' => $storage_usage, + 'total_premium_users' => $premium_users, ]; } @@ -57,10 +51,11 @@ class DashboardController extends Controller * * @return UsersCollection */ - public function new_registrations() + public function newbies() { return new UsersCollection( - User::sortable(['created_at' => 'desc'])->paginate(10) + User::sortable(['created_at' => 'desc']) + ->paginate(10) ); } } diff --git a/routes/admin.php b/routes/admin.php index a1508e71..caad2bb4 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -10,7 +10,7 @@ use App\Http\Controllers\SettingController; // Dashboard Route::group(['prefix' => 'dashboard'], function () { - Route::get('/new-users', [DashboardController::class, 'new_registrations']); + Route::get('/newbies', [DashboardController::class, 'newbies']); Route::get('/', [DashboardController::class, 'index']); }); diff --git a/tests/Feature/AdminTest.php b/tests/Feature/AdminTest.php new file mode 100644 index 00000000..d342bc3c --- /dev/null +++ b/tests/Feature/AdminTest.php @@ -0,0 +1,80 @@ +create(['role' => 'admin']); + + File::factory(File::class) + ->count(2) + ->create(['filesize' => 1000000]); + + Setting::create([ + 'name' => 'license', + 'value' => 'Regular' + ]); + + DB::table('subscriptions') + ->insert([ + 'user_id' => $user->id, + 'name' => 'main', + 'stripe_id' => 'sub_Hp4jgdIpPDDWXw', + 'stripe_status' => 'active', + ]); + + Sanctum::actingAs($user); + + $this->getJson('/api/admin/dashboard') + ->assertStatus(200) + ->assertExactJson([ + "license" => "Regular", + "app_version" => config('vuefilemanager.version'), + "total_users" => 1, + "total_used_space" => "2.00MB", + "total_premium_users" => 1, + ]); + } + + /** + * @test + */ + public function it_get_new_users_for_dashboard() + { + $users = User::factory(User::class) + ->count(5) + ->create(['role' => 'user']); + + $admin = User::factory(User::class) + ->create(['role' => 'admin']); + + Sanctum::actingAs($admin); + + $users->each(function ($user) { + $this->getJson('/api/admin/dashboard/newbies') + ->assertStatus(200) + ->assertJsonFragment([ + 'id' => $user->id, + ]); + }); + } +} diff --git a/tests/Feature/SubscriptionTest.php b/tests/Feature/SubscriptionTest.php index bb3555a2..9ff2b142 100644 --- a/tests/Feature/SubscriptionTest.php +++ b/tests/Feature/SubscriptionTest.php @@ -208,7 +208,7 @@ class SubscriptionTest extends TestCase } /** - * @test + * */ public function it_get_user_invoices() {