listsOrderTrackingMock = Mockery::mock(ListsOrderTracking::class); $this->listOrderTrackingLogic = new ListOrderTrackingLogic($this->listsOrderTrackingMock); } protected function tearDown(): void { Mockery::close(); parent::tearDown(); } public function test_logic_with_valid_tracking_number() { // Arrange $trackingNo = '123456789'; $reference = 'X202503131317208'; $orderId = 1; $packingListId = 1; $mockOrder = Mockery::mock('overload:' . Order::class)->makePartial(); $mockOrder->shouldReceive('where') ->with('reference', $trackingNo) ->andReturnSelf(); $mockOrder->shouldReceive('first') ->andReturn($mockOrder); $mockOrder->id = $orderId; $mockOrder->reference = $trackingNo; $mockPackingList = Mockery::mock('overload:' . PackingList::class)->makePartial(); $mockPackingList->id = $packingListId; $mockPackingList->reference = $reference; $mockOrder->shouldReceive('packingLists')->andReturn(collect([$mockPackingList])); Artisan::shouldReceive('call') ->once() ->withArgs(['process-yd-by-traking-no-data-command', ['trackingNo' => $reference]]) ->andReturn(0); $this->listsOrderTrackingMock->shouldReceive('deserializeFilters') ->andReturn(['tracking_no' => $trackingNo]); $this->listsOrderTrackingMock->shouldReceive('execute') ->andReturn(collect([])); $fakeRequest = Request::create('/tracking', 'GET', ['filters' => json_encode(['tracking_no' => $trackingNo])]); // Act $response = $this->listOrderTrackingLogic->logic($fakeRequest); // Assert $this->assertInstanceOf(JsonResponse::class, $response); } public function test_logic_with_invalid_tracking_number() { // Arrange Artisan::shouldReceive('call')->never(); $this->listsOrderTrackingMock->shouldReceive('deserializeFilters') ->andReturn(['tracking_no' => 'invalid']); $this->listsOrderTrackingMock->shouldReceive('execute') ->andReturn(collect([])); $request = Request::create('/tracking', 'GET', ['filters' => json_encode(['tracking_no' => 'invalid'])]); // Act $fakeRequest = $this->listOrderTrackingLogic->logic($request); // Assert $this->assertInstanceOf(JsonResponse::class, $fakeRequest); } }