public static function run() { $class = get_called_class(); TEST($class, "{$class}.student.saveEditSubmitAndDelete", function ($class) { // Create job global $MJob; $jobId = new MongoId($MJob->save([], false)); $studentId = new MongoId(); // make sure saving an application for a job with no application // fails EQ(null, ApplicationStudent::save($jobId, $studentId, [])); // create application for job $questionId = new MongoId(); $questions = [$questionId]; ApplicationJob::createOrUpdate($jobId, $questions); $answers = [['_id' => $questionId, 'answer' => 'swag']]; $firstApplication = ApplicationStudent::save($jobId, $studentId, $answers); NEQ(null, $firstApplication); $applicationId = $firstApplication->getId(); NEQ(null, $firstApplication->getQuestions()); EQ('swag', $firstApplication->getQuestions()[0]['answer']); // edit application ApplicationStudent::edit($applicationId, [['_id' => $questionId, 'answer' => 'qswag']]); $editedApplication = ApplicationModel::getSavedForJob($jobId)[0]; EQ('qswag', $editedApplication['questions'][0]['answer']); // submit application TRUE(ApplicationStudent::submitSaved($applicationId)); TRUE(ApplicationModel::checkSubmitted($applicationId)); // submit new application $secondStudent = new MongoId(); $secondApplication = ApplicationStudent::submitNew($jobId, $secondStudent, $answers); TRUE(ApplicationModel::checkSubmitted($secondApplication->getId())); // create, save, and delete application $thirdStudent = new MongoId(); $applicationToDelete = ApplicationStudent::save($jobId, $thirdStudent, $answers)->getId(); TRUE(ApplicationModel::applicationExists($jobId, $thirdStudent)); TRUE(ApplicationStudent::deleteSaved($applicationToDelete)); }); TEST($class, "{$class}.student.getUnclaimedAndClaimed", function ($class) { TRUE(false, 'TODO: Write test'); }); TEST($class, "{$class}.job.createOrUpdate", function ($class) { // Try to create/update application for nonexistent job FALSE(ApplicationJob::createOrUpdate(new MongoId(), [])); // Create job global $MJob; $jobId = new MongoId($MJob->save([], false)); // Try to create application for job $oldQuestionId = new MongoId(); $oldQuestions = [$oldQuestionId]; TRUE(ApplicationJob::createOrUpdate($jobId, $oldQuestions)); EQ($MJob::getApplicationQuestionIds($jobId), $oldQuestions); // Try to change one question in application for job $newQuestionId = new MongoId(); $newQuestions = [$newQuestionId]; TRUE(ApplicationJob::createOrUpdate($jobId, $newQuestions)); EQ($MJob::getApplicationQuestionIds($jobId), $newQuestions); TRUE(false, 'TODO: Check to make sure student applications are updated right.'); }); }
private static function submit(MongoId $jobId, MongoId $studentId, array $questions) { $answers = array(); foreach ($questions as $_id => $answer) { $answers[] = ['_id' => $_id, 'answer' => $answer]; } $application = ApplicationStudent::save($jobId, $studentId, $answers); $applicationId = $application->getId(); $submitted = ApplicationStudent::submit($applicationId); if ($submitted) { $job = JobModel::getByIdMinimal($jobId); $jobTitle = $job['title']; $linkApplicants = "http://sublite.net/employers/viewapplicants/{$jobId}"; $linkManage = "http://sublite.net/employers/home"; $recruiterId = $job['recruiter']; $recruiter = RecruiterModel::getByIdMinimal($recruiterId); $recruiterFirstname = $recruiter['firstname']; $recruiterEmail = $recruiter['email']; $message = "\n Hi {$recruiterFirstname},\n <br /><br />\n You have received a new applicant for your job: <b>{$jobTitle}</b>!\n <br /><br />\n To unlock and view this application, go to\n <a href='{$linkApplicants}'>View Applicants</a>.\n <br />\n To manage your jobs, go to <a href='{$linkManage}'>Manage</a>.\n <br /><br />\n View Applicants: <a href='{$linkApplicants}'>{$linkApplicants}</a><br />\n Manage Jobs: <a href='{$linkManage}'>{$linkManage}</a><br />\n <br /><br />\n -------------------<br />\n Team SubLite\n <br /><br />\n Please let us know if you have any questions. We hope you find the\n right candidate for your job.\n "; sendgmail([$recruiterEmail], "*****@*****.**", "New Applicant for '{$jobTitle}' | SubLite", $message); //send an email to the student $companyId = $job['company']; $company = CompanyModel::getById($companyId); $companyName = $company['name']; $student = StudentModel::getByIdMinimal($studentId); $studentFirstName = $student['name']; $studentEmail = $student['email']; $linkApplication = "http://sublite.net/jobs/application/{$applicationId}"; $linkJob = "http://sublite.net/job?id={$jobId}"; $linkJobSearch = "http://sublite.net/jobs/search"; $linkJobsByCompany = "http://sublite.net/jobs/search?byrecruiter={$recruiterId}"; $message = "\n Hi {$studentFirstName},\n <br />\n <br />{$companyName} has successfully received your <a href='{$linkApplication}'>application</a> for <b>{$jobTitle}</b>!<br />\n <br />View your application: {$linkApplication}\n <br />View the job you applied to {$linkJob}\n <br />View more jobs by {$linkJobsByCompany}<br />\n <br />You are now one step closer to finding your perfect summer experience! Take more steps by applying to more jobs: {$linkJobSearch}<br />\n -------------------<br />\n Good luck!\n <br />\n Team SubLite\n "; sendgmail([$studentEmail], "*****@*****.**", "Confirmation for Job Application", $message); self::redirect("../application/{$applicationId}"); } self::error("You must attach a resume to your profile in order to submit " . "an application."); }