Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 28
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 2
CoachLevels
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
CoachLevelHelper
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 1
 categorizeCharacterUsage
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Helpers;
4
5class CoachLevels
6{
7    public function __construct(
8        public readonly int $beginner,
9        public readonly int $intermediate,
10        public readonly int $proficient,
11        public readonly int $advanced,
12        public readonly int $expert
13    ) {}
14}
15
16class CoachLevelHelper
17{
18    public static function categorizeCharacterUsage($characterUsages, $usersCount): CoachLevels
19    {
20        $categories = [
21            'beginner' => 0,
22            'intermediate' => 0,
23            'proficient' => 0,
24            'advanced' => 0,
25            'expert' => 0,
26        ];
27
28        foreach ($characterUsages as $usage) {
29            $totalCharacters = $usage->characters_typed;
30
31            $category = match (true) {
32                $totalCharacters < 10000 => 'beginner',
33                $totalCharacters < 25000 => 'intermediate',
34                $totalCharacters < 50000 => 'proficient',
35                $totalCharacters < 100000 => 'advanced',
36                default => 'expert',
37            };
38
39            $categories[$category]++;
40        }
41
42        $diff = $usersCount - count($characterUsages);
43
44        if ($diff > 0) {
45            $categories['beginner'] += $diff;
46        }
47
48        return new CoachLevels(
49            beginner: $categories['beginner'],
50            intermediate: $categories['intermediate'],
51            proficient: $categories['proficient'],
52            advanced: $categories['advanced'],
53            expert: $categories['expert']
54        );
55    }
56}