From 3692fcc4856778595cb67f922cb265d632a20709 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Wed, 1 Sep 2021 15:17:00 +0200 Subject: [PATCH] Adding Profession Import (without specified character) --- app/Http/Controllers/ProfessionController.php | 28 ++++++ resources/views/profession/create.blade.php | 29 ++++++ routes/web.php | 6 ++ tests/Feature/ProfessionTest.php | 89 +++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 app/Http/Controllers/ProfessionController.php create mode 100644 resources/views/profession/create.blade.php create mode 100644 tests/Feature/ProfessionTest.php diff --git a/app/Http/Controllers/ProfessionController.php b/app/Http/Controllers/ProfessionController.php new file mode 100644 index 0000000..9d45905 --- /dev/null +++ b/app/Http/Controllers/ProfessionController.php @@ -0,0 +1,28 @@ +validated(); + + $data = json_decode($request->input('data')); + + try { + ImportProfession::dispatch($data, $request->user()); + } catch(\App\ProfessionImport\Exception $e) { + return redirect()->back()->with('error', $e->getMessage()); + } + return redirect()->back()->with('success', 'Profession imported!'); + } +} diff --git a/resources/views/profession/create.blade.php b/resources/views/profession/create.blade.php new file mode 100644 index 0000000..b89ff6b --- /dev/null +++ b/resources/views/profession/create.blade.php @@ -0,0 +1,29 @@ + + + +
+ {{ __('Import Profession') }} +
+
+ +
+

+ {{ __("Important") }}! + {{ __('Download this') }} + {{ __('addon') }} + {{ __('to generate the import string') }} +

+ + +
+ {{ __('Import string') }} + +
+ +
+ +
+
+
+ +
diff --git a/routes/web.php b/routes/web.php index d931034..8993662 100644 --- a/routes/web.php +++ b/routes/web.php @@ -82,6 +82,12 @@ Route::prefix('items')->name('item.')->group(function () { // ---------------------------- Route::middleware(['auth'])->group(function() { + // Profession + Route::prefix('profession')->name('profession.')->group(function() { + Route::get('/create', [ProfessionController::class, 'create'])->name('create'); + Route::post('/', [ProfessionController::class, 'store'])->name('store'); + }); + Route::prefix('profile')->name('profile.')->group(function () { Route::get('/', [ProfileController::class, 'index'])->name('index'); Route::get('/edit', [ProfileController::class, 'edit'])->name('edit'); diff --git a/tests/Feature/ProfessionTest.php b/tests/Feature/ProfessionTest.php new file mode 100644 index 0000000..b70e431 --- /dev/null +++ b/tests/Feature/ProfessionTest.php @@ -0,0 +1,89 @@ +get(route('profession.create')); + + $response->assertRedirect(route('auth.login')); + } + + public function test_user_is_allowed_to_create_profession() + { + $user = User::factory()->create(); + + $response = $this->actingAs($user) + ->get(route('profession.create')); + + $response->assertStatus(200); // OK + } + + public function test_user_is_allowed_to_import_profession_for_their_own_character() + { + Profession::factory()->create(['name' => 'Influencer']); + $user = User::factory()->create(); + $character = Character::factory() + ->for($user) + ->create(['name' => 'Rambone']); + + $data = '{ + "server":"Bigglesworth", + "player":"Rambone", + "guild":"First Blood", + "profession": { + "locale":"enUS", + "name":"Influencer", + "specializationId":null, + "specializationName":null, + "level":375, + "maxLevel":375, + "recipes": [] + } + }'; + + $response = $this->actingAs($user) + ->post(route('profession.store'), ['data' => $data]); + + $response->assertSessionHas(['success' => "Profession imported!"]); + } + + public function test_user_is_not_allowed_to_import_profession_for_someone_elses_character() + { + Profession::factory()->create(['name' => 'Alchemy']); + $user = User::factory()->create(); + $character = Character::factory()->create(['name' => 'Angus']); + + $data = '{ + "server":"Deviate Delight", + "player":"Angus", + "guild":"Phoenix", + "profession": { + "locale":"enUS", + "name":"Alchemy", + "specializationId":null, + "specializationName":null, + "level":375, + "maxLevel":375, + "recipes": [] + } + }'; + + $response = $this->actingAs($user) + ->post(route('profession.store'), ['data' => $data]); + + $response->assertSessionHas(['error' => 'Could not find character "Angus"']); + } +}