diff --git a/tests/Feature/V2/Dashboard/RoadPatrolProject/StoreTest.php b/tests/Feature/V2/Dashboard/RoadPatrolProject/StoreTest.php index 995a7961..984493fc 100644 --- a/tests/Feature/V2/Dashboard/RoadPatrolProject/StoreTest.php +++ b/tests/Feature/V2/Dashboard/RoadPatrolProject/StoreTest.php @@ -2,14 +2,20 @@ namespace Tests\Feature\V2\Dashboard\RoadPatrolProject; +use App\Facades\Sms\Sms; use App\Models\City; use App\Models\EdarateOstani; use App\Models\EdarateShahri; use App\Models\InfoItem; +use App\Models\LogList; use App\Models\Permission; use App\Models\User; +use App\Services\NominatimService; +use Carbon\Carbon; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; +use Illuminate\Http\UploadedFile; +use Mockery\MockInterface; use Tests\TestCase; class StoreTest extends TestCase @@ -565,7 +571,7 @@ class StoreTest extends TestCase ]); } - public function test_can_store_a_road_patrol(): void + public function test_priority_is_required(): void { $city = City::factory()->create(); $edarateShari = EdarateShahri::factory()->create(); @@ -579,34 +585,131 @@ class StoreTest extends TestCase 'edarate_shahri_id' => $edarateShari->id ]); - $observed_items = [ - [ - 'after_image' => $this->faker->name, - 'item_id' => $this->faker->randomNumber(), - 'sub_item_id' => $this->faker->randomNumber(), - 'local_name' => $this->faker->name(), - 'instant_action' => $this->faker->randomElements([0 , 1]), - 'start_point' => $this->faker->randomNumber(), + $attributes = [ + 'start_point' => '12,12', + 'end_point' => '13,13', + 'officer_name' => $this->faker->name, + 'officer_plaque' => $this->faker->numberBetween(1, 10), + 'officer_phone_number' => $this->faker->numerify("###########"), + 'start_time' => '2016-01-23 11:53', + 'end_time' => '2017-01-23 11:53', + 'observed_items' => [ + [ + 'after_image' => UploadedFile::fake()->create('image.jpg', 10), + 'item_id' => $this->faker->randomNumber(), + 'sub_item_id' => $this->faker->randomNumber(), + 'local_name' => $this->faker->name(), + 'instant_action' => 0, + 'start_point' => '12,12', + ] ] ]; $infoItem = InfoItem::factory()->create([ - 'item' => $observed_items[0]['item_id'], - 'sub_item' => $observed_items[0]['sub_item_id'], + 'item' => $attributes['observed_items'][0]['item_id'], + 'sub_item' => $attributes['observed_items'][0]['sub_item_id'], ]); - $response = $this->actingAs($user)->postJson('v2/road_patrols/operator/store', [ - 'start_point' => $this->faker->randomNumber(), - 'end_point' => $this->faker->randomNumber(), - 'officer_name' => $this->faker->name(), - 'officer_plaque' => $this->faker->randomNumber(), - 'officer_phone_number' => $this->faker->randomNumber(), - 'observed_items' => $observed_items - ]); + $mock = $this->mock(NominatimService::class, function (MockInterface $mock) { + $mock->shouldReceive('get_way_id_from_nominatim')->andReturn(0); + }); + + $response = $this->actingAs($user)->postJson('v2/road_patrols/operator/store', $attributes); $response->assertUnprocessable() ->assertInvalid([ - 'observed_items.0.after_image' => __('validation.image', ['attribute' => 'observed_items.0.after_image']) + "observed_items.0.priority" => __('validation.required', ['attribute' => 'priority']), ]); } + + public function test_can_store_a_road_patrol_when_instant_action_is_0(): void + { + $city = City::factory()->create(); + $edarateShari = EdarateShahri::factory()->create(); + $logList = LogList::factory()->create([ + 'log_unique_code' => 1147 + ]); + + $user = User::factory() + ->has(Permission::factory([ + 'name' => 'add-road-patrol' + ])) + ->create([ + 'city_id' => $city->id, + 'edarate_shahri_id' => $edarateShari->id + ]); + + $attributes = [ + 'start_point' => '12,12', + 'end_point' => '13,13', + 'officer_name' => $this->faker->name, + 'officer_plaque' => $this->faker->numerify(), + 'officer_phone_number' => $this->faker->numerify("###########"), + 'start_time' => '2016-01-23 11:53', + 'end_time' => '2017-01-23 11:53', + 'observed_items' => [ + [ + 'after_image' => UploadedFile::fake()->create('image.jpg', 10), + 'item_id' => $this->faker->randomNumber(), + 'sub_item_id' => $this->faker->randomNumber(), + 'local_name' => $this->faker->name(), + 'instant_action' => 0, + 'start_point' => '12,12', + 'priority' => $this->faker->numberBetween(1, 3), + 'priority_fa' => $this->faker->name, + ] + ] + ]; + + $infoItem = InfoItem::factory()->create([ + 'item' => $attributes['observed_items'][0]['item_id'], + 'sub_item' => $attributes['observed_items'][0]['sub_item_id'], + ]); + + $mock = $this->mock(NominatimService::class, function (MockInterface $mock) { + $mock->shouldReceive('get_way_id_from_nominatim')->andReturn(0); + }); + + Sms::shouldReceive('sendSms'); + + $response = $this->actingAs($user)->postJson('v2/road_patrols/operator/store', $attributes); + + $response->assertOk(); + + $this->assertDatabaseHas('road_patrols', [ + 'start_lat' => 12, + 'start_lon' => 12, + 'end_lat' => 13, + 'end_lon' => 13, + 'officer_name' => $attributes['officer_name'], + 'officer_phone_number' => $attributes['officer_phone_number'], + 'officer_plaque' => $attributes['officer_plaque'], + 'operator_id' => $user->id, + 'operator_name' => $user->name, + 'province_id' => $user->province_id, + 'province_fa' => $user->province_fa, + 'city_id' => $user->city_id, + 'city_fa' => $user->city_fa, + 'edare_id' => $user->edarate_shahri_id, + 'edare_name' => $user->edarate_shahri_name, + 'start_way_id' => 0, + 'end_way_id' => 0, + 'status' => 0, + 'status_fa' => 'در حال بررسی', + 'start_time' => $attributes['start_time'], + 'end_time' => $attributes['end_time'], + 'description' => null, + ]); + + $this->assertDatabaseHas('observed_items', [ + 'item_id' => $infoItem->item, + 'item_name' => $infoItem->item_str, + 'sub_item_id' => $infoItem->sub_item, + 'sub_item_name' => $infoItem->sub_item_str, + 'local_name' => $attributes['observed_items'][0]['local_name'], + 'description' => null, + 'start_lat' => 12, + 'start_lon' => 12, + ]); + } }