public function test_remove_all_schedule_for_one_company() { $companyOne = factory(Company::class)->create(); $companyTwo = factory(Company::class)->create(); $scheduleOne = factory(Schedule::class)->create(['who_object' => Company::class, 'who_id' => $companyOne->id]); $scheduleTwo = factory(Schedule::class)->create(['who_object' => Company::class, 'who_id' => $companyTwo->id]); // check is saved correctly to DB $this->seeInDatabase('schedules', ['id' => $scheduleOne->id, 'who_object' => Company::class, 'who_id' => $companyOne->id]); $this->seeInDatabase('schedules', ['id' => $scheduleTwo->id, 'who_object' => Company::class, 'who_id' => $companyTwo->id]); // remove reminders for Company One $scheduleRepository = new ScheduleRepository(); $scheduleRepository->removeAllForObject($companyOne); // check is one removed from DB $this->dontSeeInDatabase('schedules', ['id' => $scheduleOne->id, 'who_object' => Company::class, 'who_id' => $companyOne->id]); $this->seeInDatabase('schedules', ['id' => $scheduleTwo->id, 'who_object' => Company::class, 'who_id' => $companyTwo->id]); }
/** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Company $company * @return \Illuminate\Http\Response */ public function update(Request $request, Company $company) { $this->authorize('update-company', $company); $this->validate($request, ['name' => 'required|max:255', 'licence_expire_at' => 'date_format:Y-m-d']); $company->name = $request->name; if ($request->licence_expire_at != '') { $company->licence_expire_at = $request->licence_expire_at; $company->is_suspended = false; } $company->save(); // update schedules for SendReminderEmail(s) if (isset($company->licence_expire_at)) { $lrc = new LicenceReminderCalculator(); $scheduleRepository = new ScheduleRepository(); $scheduleRepository->removeAllForObject($company); // send reminders emails on configured days before expiration date $reminders = $scheduleRepository->addSendReminderEmail($company, $lrc); // suspend company on expiration date $suspensions = $scheduleRepository->addSuspendCompany($company); // send suspension emails on expiration date $suspensionEmails = $scheduleRepository->addSendSuspensionEmail($company); // send approval email now $approvalEmail = new ActionCommandSendApprovalEmailCommand($company->id); $approvalEmail->execute(); } return redirect('/companies'); }