/** * Check Inspections * * @param \Suitcoda\Model\Inspection $inspection [] * @return void */ public function check(Inspection $inspection) { $jobs = $inspection->jobInspects()->get(); if ($jobs->isEmpty()) { return; } foreach ($jobs as $job) { if ($job->status == '1' || $job->status == '0') { return; } } $this->calc->calculate($inspection); }
/** * Calculate score for one inspection * * @param Inspection $inspection [] * @return void */ public function calculate(Inspection $inspection) { foreach ($inspection->scopeList as $category) { $uniqueUrlInIssues = $inspection->uniqueUrlIssueByCategory($category->slug); $uniqueUrlInJobs = $inspection->uniqueUrlJobByCategory($category->slug); $errorRate = $uniqueUrlInIssues / $uniqueUrlInJobs; $score = $this->score->findOrNewByRelatedId($inspection->getKey(), $category->getKey()); $score->score = round($errorRate, 2); $score->inspection()->associate($inspection); $score->category()->associate($category); $score->save(); } $alUniqueUrlInIssues = $inspection->uniqueUrlIssue(); $alUniqueUrlInJobs = $inspection->uniqueUrlJob(); $overallErrorRate = $alUniqueUrlInIssues / $alUniqueUrlInJobs; $inspection->update(['status' => 2, 'score' => round($overallErrorRate, 2)]); }
/** * Test get inspection score by given category name * * @return void */ public function testGetScoreByCategory() { $inspection = new Inspection(); $this->assertEquals('-', $inspection->getScoreByCategory('SEO')); $inspectionFaker = factory(Inspection::class)->create(); factory(Score::class)->create(['inspection_id' => $inspectionFaker->id, 'score' => 0.7]); $this->assertEquals('70%', $inspectionFaker->getScoreByCategory('test')); }