create(); $folder_level_1 = Folder::factory(Folder::class) ->create([ 'name' => 'level 1', 'author' => 'user', 'user_id' => $user->id, ]); $folder_level_2 = Folder::factory(Folder::class) ->create([ 'name' => 'level 2', 'parent_id' => $folder_level_1->id, 'author' => 'user', 'user_id' => $user->id, ]); $folder_level_3 = Folder::factory(Folder::class) ->create([ 'name' => 'level 3', 'parent_id' => $folder_level_2->id, 'author' => 'user', 'user_id' => $user->id, ]); $folder_level_2_sibling = Folder::factory(Folder::class) ->create([ 'name' => 'level 2 Sibling', 'parent_id' => $folder_level_1->id, 'author' => 'user', 'user_id' => $user->id, ]); $this ->actingAs($user) ->getJson('/api/browse/navigation') ->assertStatus(200) ->assertExactJson([ [ 'name' => 'Home', 'location' => 'base', 'folders' => [ [ 'id' => $folder_level_1->id, 'parent_id' => null, 'name' => 'level 1', 'items' => 2, 'trashed_items' => 2, 'type' => 'folder', 'folders' => [ [ 'id' => $folder_level_2->id, 'parent_id' => $folder_level_1->id, 'name' => 'level 2', 'items' => 1, 'trashed_items' => 1, 'type' => 'folder', 'folders' => [ [ 'id' => $folder_level_3->id, 'user_id' => $user->id, 'parent_id' => $folder_level_2->id, 'name' => 'level 3', 'color' => null, 'emoji' => null, 'author' => 'user', 'deleted_at' => null, 'created_at' => $folder_level_3->created_at, 'updated_at' => $folder_level_3->updated_at->toJson(), 'items' => 0, 'trashed_items' => 0, 'type' => 'folder', 'folders' => [], ], ], ], [ 'id' => $folder_level_2_sibling->id, 'parent_id' => $folder_level_1->id, 'name' => 'level 2 Sibling', 'items' => 0, 'trashed_items' => 0, 'type' => 'folder', 'folders' => [], ], ], ], ], ], ]); } /** * @test */ public function it_get_folder_content() { $user = User::factory(User::class) ->create(); $root = Folder::factory(Folder::class) ->create([ 'name' => 'root', 'user_id' => $user->id, ]); $folder = Folder::factory(Folder::class) ->create([ 'parent_id' => $root->id, 'name' => 'Documents', 'author' => 'user', 'user_id' => $user->id, ]); $file = File::factory(File::class) ->create([ 'folder_id' => $root->id, 'name' => 'Document', 'basename' => 'document.pdf', 'mimetype' => 'application/pdf', 'author' => 'user', 'type' => 'file', 'user_id' => $user->id, ]); $this ->actingAs($user) ->getJson("/api/browse/folders/$root->id") ->assertStatus(200) ->assertExactJson([ [ 'id' => $folder->id, 'user_id' => $user->id, 'parent_id' => $root->id, 'name' => 'Documents', 'color' => null, 'emoji' => null, 'author' => 'user', 'deleted_at' => null, 'created_at' => $folder->created_at, 'updated_at' => $folder->updated_at->toJson(), 'items' => 0, 'trashed_items' => 0, 'type' => 'folder', 'parent' => [ 'id' => $root->id, 'name' => 'root', 'items' => 2, 'trashed_items' => 2, 'type' => 'folder', ], 'shared' => null, ], [ 'id' => $file->id, 'user_id' => $user->id, 'folder_id' => $root->id, 'thumbnail' => null, 'name' => 'Document', 'basename' => 'document.pdf', 'mimetype' => 'application/pdf', 'filesize' => $file->filesize, 'type' => 'file', 'metadata' => null, 'author' => 'user', 'deleted_at' => null, 'created_at' => $file->created_at, 'updated_at' => $file->updated_at->toJson(), 'file_url' => 'http://localhost/file/document.pdf', 'parent' => [ 'id' => $root->id, 'name' => 'root', 'items' => 2, 'trashed_items' => 2, 'type' => 'folder', ], 'shared' => null, ], ]); } /** * @test */ public function it_get_recent_files() { $user = User::factory(User::class) ->create(); $root = Folder::factory(Folder::class) ->create([ 'name' => 'root', 'user_id' => $user->id, ]); $file_1 = File::factory(File::class) ->create([ 'folder_id' => $root->id, 'name' => 'Document 1', 'basename' => 'document-1.pdf', 'mimetype' => 'application/pdf', 'author' => 'user', 'type' => 'file', 'user_id' => $user->id, 'created_at' => now(), ]); $this->travel(5)->minutes(); $file_2 = File::factory(File::class) ->create([ 'folder_id' => $root->id, 'name' => 'Document 2', 'basename' => 'document-2.pdf', 'mimetype' => 'application/pdf', 'author' => 'user', 'type' => 'file', 'user_id' => $user->id, 'created_at' => now(), ]); $this ->actingAs($user) ->getJson('/api/browse/latest') ->assertStatus(200) ->assertExactJson([ [ 'id' => $file_2->id, 'user_id' => $user->id, 'folder_id' => $root->id, 'thumbnail' => null, 'name' => 'Document 2', 'basename' => 'document-2.pdf', 'mimetype' => 'application/pdf', 'filesize' => $file_2->filesize, 'type' => 'file', 'metadata' => null, 'author' => 'user', 'deleted_at' => null, 'created_at' => $file_2->created_at, 'updated_at' => $file_2->updated_at->toJson(), 'file_url' => 'http://localhost/file/document-2.pdf', 'parent' => [ 'id' => $root->id, 'name' => 'root', 'items' => 2, 'trashed_items' => 2, 'type' => 'folder', ], ], [ 'id' => $file_1->id, 'user_id' => $user->id, 'folder_id' => $root->id, 'thumbnail' => null, 'name' => 'Document 1', 'basename' => 'document-1.pdf', 'mimetype' => 'application/pdf', 'filesize' => $file_1->filesize, 'type' => 'file', 'metadata' => null, 'author' => 'user', 'deleted_at' => null, 'created_at' => $file_1->created_at, 'updated_at' => $file_1->updated_at->toJson(), 'file_url' => 'http://localhost/file/document-1.pdf', 'parent' => [ 'id' => $root->id, 'name' => 'root', 'items' => 2, 'trashed_items' => 2, 'type' => 'folder', ], ], ]); } /** * @test */ public function it_get_participant_uploads() { $user = User::factory(User::class) ->create(); $file = File::factory(File::class) ->create([ 'author' => 'visitor', 'type' => 'file', 'user_id' => $user->id, ]); $this ->actingAs($user) ->getJson('/api/browse/participants') ->assertStatus(200) ->assertJsonFragment([ 'id' => $file->id, ]); } /** * @test */ public function it_get_trash_root() { $user = User::factory(User::class) ->create(); $folder = Folder::factory(Folder::class) ->create([ 'parent_id' => null, 'name' => 'root', 'user_id' => $user->id, 'author' => 'user', 'deleted_at' => now(), ]); $file = File::factory(File::class) ->create([ 'folder_id' => null, 'name' => 'Document', 'basename' => 'document.pdf', 'mimetype' => 'application/pdf', 'author' => 'user', 'type' => 'file', 'user_id' => $user->id, 'deleted_at' => now(), ]); File::factory(File::class) ->create([ 'folder_id' => $folder->id, 'user_id' => $user->id, 'deleted_at' => now(), ]); $this ->actingAs($user) ->getJson('/api/browse/trash') ->assertStatus(200) ->assertExactJson([ [ 'id' => $folder->id, 'user_id' => $user->id, 'parent_id' => null, 'name' => 'root', 'color' => null, 'emoji' => null, 'author' => 'user', 'deleted_at' => $folder->deleted_at, 'created_at' => $folder->created_at, 'updated_at' => $folder->updated_at->toJson(), 'items' => 0, 'trashed_items' => 1, 'type' => 'folder', 'parent' => null, ], [ 'id' => $file->id, 'user_id' => $user->id, 'folder_id' => null, 'thumbnail' => null, 'name' => 'Document', 'basename' => 'document.pdf', 'mimetype' => 'application/pdf', 'filesize' => $file->filesize, 'type' => 'file', 'metadata' => null, 'author' => 'user', 'deleted_at' => $file->deleted_at, 'created_at' => $file->created_at, 'updated_at' => $file->updated_at->toJson(), 'file_url' => 'http://localhost/file/document.pdf', 'parent' => null, ], ]); } /** * @test */ public function it_get_shared_items() { $user = User::factory(User::class) ->create(); Sanctum::actingAs($user); $folder = Folder::factory(Folder::class) ->create([ 'user_id' => $user->id, ]); $file = File::factory(File::class) ->create([ 'user_id' => $user->id, ]); collect([$folder, $file]) ->each(function ($item) use ($user) { Share::factory(Share::class) ->create([ 'type' => $item->type === 'folder' ? 'folder' : 'file', 'item_id' => $item->id, 'user_id' => $user->id, ]); }); collect([$folder, $file]) ->each(function ($item) use ($user) { $this->getJson('/api/browse/share') ->assertStatus(200) ->assertJsonFragment([ 'id' => $item->id, ]); }); } /** * @test */ public function it_get_searched_file() { $user = User::factory(User::class) ->create(); $file = File::factory(File::class) ->create([ 'name' => 'Document', 'user_id' => $user->id, ]); $this ->actingAs($user) ->getJson('/api/browse/search?query=doc') ->assertStatus(200) ->assertJsonFragment([ 'id' => $file->id, ]); } /** * @test */ public function it_get_searched_folder() { $user = User::factory(User::class) ->create(); $folder = Folder::factory(Folder::class) ->create([ 'name' => 'Documents', 'user_id' => $user->id, ]); $this ->actingAs($user) ->getJson('/api/browse/search?query=doc') ->assertStatus(200) ->assertJsonFragment([ 'id' => $folder->id, ]); } }