Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
90.00% covered (success)
90.00%
18 / 20
88.89% covered (warning)
88.89%
8 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
PagesQualityStats
90.00% covered (success)
90.00%
18 / 20
88.89% covered (warning)
88.89%
8 / 9
11.12
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 equals
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
6
 getNumberOfPages
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getNumberOfPagesForQualityLevel
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 getNumberOfPagesWithAnyQualityLevel
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getNumberOfPagesWithoutQualityLevel
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 withLevelChange
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 withPageCreation
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 withPageDeletion
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace ProofreadPage\Index;
4
5/**
6 * @license GPL-2.0-or-later
7 *
8 * Statistics on the proofreading quality of pages of an Index page
9 */
10class PagesQualityStats {
11
12    /** @var int */
13    private $numberOfPages;
14
15    /** @var int[] */
16    private $numberOfPagesByLevel;
17
18    /**
19     * @param int $numberOfPages
20     * @param int[] $numberOfPagesByLevel
21     */
22    public function __construct( int $numberOfPages, array $numberOfPagesByLevel ) {
23        $this->numberOfPages = $numberOfPages;
24        $this->numberOfPagesByLevel = $numberOfPagesByLevel;
25    }
26
27    /**
28     * @param PagesQualityStats $other
29     * @return bool
30     */
31    public function equals( PagesQualityStats $other ): bool {
32        return $this->numberOfPages == $other->numberOfPages &&
33            $this->numberOfPagesByLevel == $other->numberOfPagesByLevel;
34    }
35
36    /**
37     * @return int
38     */
39    public function getNumberOfPages(): int {
40        return $this->numberOfPages;
41    }
42
43    /**
44     * @param int $level
45     * @return int
46     */
47    public function getNumberOfPagesForQualityLevel( int $level ): int {
48        if ( !array_key_exists( $level, $this->numberOfPagesByLevel ) ) {
49            return 0;
50        }
51        return $this->numberOfPagesByLevel[$level];
52    }
53
54    /**
55     * @return int
56     */
57    public function getNumberOfPagesWithAnyQualityLevel(): int {
58        return array_sum( $this->numberOfPagesByLevel );
59    }
60
61    /**
62     * @return int
63     */
64    public function getNumberOfPagesWithoutQualityLevel(): int {
65        return $this->numberOfPages - $this->getNumberOfPagesWithAnyQualityLevel();
66    }
67
68    /**
69     * @param int $oldLevel
70     * @param int $newLevel
71     * @return self
72     */
73    public function withLevelChange( int $oldLevel, int $newLevel ): self {
74        $newNumberOfPagesByLevel = $this->numberOfPagesByLevel;
75        $newNumberOfPagesByLevel[$oldLevel]--;
76        $newNumberOfPagesByLevel[$newLevel]++;
77        return new PagesQualityStats( $this->numberOfPages, $newNumberOfPagesByLevel );
78    }
79
80    /**
81     * @param int $newLevel
82     * @return self
83     */
84    public function withPageCreation( int $newLevel ): self {
85        $newNumberOfPagesByLevel = $this->numberOfPagesByLevel;
86        $newNumberOfPagesByLevel[$newLevel]++;
87        return new PagesQualityStats( $this->numberOfPages, $newNumberOfPagesByLevel );
88    }
89
90    /**
91     * @param int $oldLevel
92     * @return self
93     */
94    public function withPageDeletion( int $oldLevel ): self {
95        $newNumberOfPagesByLevel = $this->numberOfPagesByLevel;
96        $newNumberOfPagesByLevel[$oldLevel]--;
97        return new PagesQualityStats( $this->numberOfPages, $newNumberOfPagesByLevel );
98    }
99}