public function testStoreWithReplyAndStatusClosed() { $this->ticket_model = factory(App\Ticket::class)->make(['id' => $this->faker->randomNumber]); $request = new TicketStoreRequest(['user_id' => 12, 'title' => $this->faker->sentence, 'body' => $this->faker->paragraph, 'reply_body' => $this->faker->sentence, 'status' => 'closed']); $dispatch_request = $request->instance(); $dispatch_request->merge(['auth_id' => auth()->user()->id]); $dispatcher = m::mock('Illuminate\\Bus\\Dispatcher[dispatchFrom]', [$this->app]); $dispatcher->shouldReceive('dispatchFrom')->once()->with('App\\Jobs\\TicketCreateJob', $dispatch_request, [])->andReturn($this->ticket_model); $dispatcher->shouldReceive('dispatchFrom')->once()->with('App\\Jobs\\ActionCreateJob', m::on(function ($param) { return empty(array_diff($param->toArray(), ['ticket_id' => $this->ticket_model->id, 'user_id' => $this->user_model->id, 'hours' => null, 'time_at' => null, 'status' => 'closed', 'defer_event' => true])); }), m::on(function ($param) use($request) { return empty(array_diff($param, ['type' => 'closed', 'body' => $request->get('reply_body')])); })); $this->app->instance('Illuminate\\Contracts\\Bus\\Dispatcher', $dispatcher); $controller = new TicketsController($this->ticket, $this->user); $controller->store($request); }
public function store(TicketStoreRequest $request) { if (!$request->has('user_id')) { $user = $this->user->create(['display_name' => $request->input('display_name'), 'email' => $request->input('email'), 'username' => preg_replace("/[^a-zA-Z0-9]/", "", $request->input('display_name')) . rand(10000, 99990)]); $request->merge(['user_id' => $user->id]); } $request->merge(['auth_id' => auth()->user()->id]); $ticket = $this->dispatchFrom('App\\Jobs\\TicketCreateJob', $request); $action = collect(['ticket_id' => $ticket->id, 'user_id' => auth()->user()->id, 'hours' => $request->get('hours'), 'time_at' => $request->has('time_at') ? Carbon::createFromFormat('m/d/Y', $request->get('time_at'), auth()->user()->tz)->timezone('utc') : null, 'status' => $request->has('status') ? $request->get('status') : 'open', 'defer_event' => true]); if ($request->has('reply_body')) { $this->dispatchFrom('App\\Jobs\\ActionCreateJob', $action, ['type' => in_array($request->get('status'), ['closed', 'resolved']) ? $request->get('status') : 'reply', 'body' => $request->get('reply_body')]); $action->put('hours', 0); } if ($request->has('comment_body')) { $this->dispatchFrom('App\\Jobs\\ActionCreateJob', $action, ['type' => 'comment', 'body' => $request->get('comment_body')]); } return redirect()->route('tickets.show', [$ticket['id']])->with('message', 'Ticket #' . $ticket['id'] . ' sucessfully created.'); }