From 89d88110f558ef0a23f8cfac1af57d80f9acb22d Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sun, 11 Jul 2021 15:32:35 +0200 Subject: [PATCH] app/Jobs/ImportProfession.php: add support for specialization. --- app/Jobs/ImportProfession.php | 11 ++++++ tests/Feature/ProfessionImportTest.php | 46 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/app/Jobs/ImportProfession.php b/app/Jobs/ImportProfession.php index 16d5209..3d57d06 100644 --- a/app/Jobs/ImportProfession.php +++ b/app/Jobs/ImportProfession.php @@ -54,8 +54,19 @@ class ImportProfession implements ShouldQueue throw new Exception($message); } + // Find/Create specialization + if (isset($data->profession->specializationId) && $data->profession->specializationId) { + $specialization_id = Spell::firstOrCreate( + ['id' => $data->profession->specializationId], + ['name' => $data->profession->specializationName] + )->id; + } else { + $specialization_id = null; + } + // Create/update profession for player. $this->ch_prof = $character->professions()->updateOrCreate(['profession_id' => $profession->id], [ + 'specialization_id' => $specialization_id, 'skill' => $data->profession->level, ]); diff --git a/tests/Feature/ProfessionImportTest.php b/tests/Feature/ProfessionImportTest.php index 3830dd3..02adad5 100644 --- a/tests/Feature/ProfessionImportTest.php +++ b/tests/Feature/ProfessionImportTest.php @@ -12,6 +12,7 @@ use App\Models\CharacterProfession; use App\Models\Profession; use App\Models\Item; use App\Models\Recipe; +use App\Models\Spell; use App\Jobs\ImportProfession; class ProfessionImportTest extends TestCase @@ -250,4 +251,49 @@ class ProfessionImportTest extends TestCase 'item_id' => $item->id, ]); } + + public function test_specialization_is_imported_correctly() + { + $character = Character::factory()->create([ 'name' => 'Specialdude']); + $profession = Profession::factory()->create([ 'name' => 'Alchemy' ]); + $specialization = Spell::factory()->create(['id' => 28672, 'name' => 'Transmutation Master']); + + $data = (object) [ + "player" => $character->name, + "profession" => (object) [ + "name" => $profession->name, + "specializationId" => 28672, + "specializationName" => "Transmutation Master", + "level" => 375, + "recipes" => [], + ] + ]; + + ImportProfession::dispatch($character, $data); + + $this->assertNotNull($character->professions[0]->specialization, "specalization was not imported"); + $this->assertEquals(28672, $character->professions[0]->specialization->id); + $this->assertEquals("Transmutation Master", $character->professions[0]->specialization->name); + + $this->assertEquals(1, Spell::count()); + } + + public function test_specialization_can_be_omitted() + { + $character = Character::factory()->create([ 'name' => 'frankthetank']); + $profession = Profession::factory()->create([ 'name' => 'Carpenter' ]); + + $data = (object) [ + "player" => $character->name, + "profession" => (object) [ + "name" => $profession->name, + "level" => 375, + "recipes" => [], + ] + ]; + + ImportProfession::dispatch($character, $data); + + $this->assertNull($character->professions[0]->specialization); + } }