123 lines
4.2 KiB
PHP
123 lines
4.2 KiB
PHP
<?PHP
|
|
/**
|
|
* Tests for PUQI.
|
|
*
|
|
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
|
*/
|
|
declare(strict_types = 1);
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
use PHPUnit\Framework\Attributes\CoversClass;
|
|
use PHPUnit\Framework\Attributes\Small;
|
|
|
|
/**
|
|
* Tests for PUQI.
|
|
*/
|
|
#[small]
|
|
#[CoversClass(\MDPuqi::class)]
|
|
final class MDPuqiTest extends TestCase {
|
|
/**
|
|
* Provider for licenses.
|
|
*
|
|
* @return Generator<array{0: string, 1: MDPuqiMessageStatus, 2: bool}>
|
|
*/
|
|
public static function licenseProvider():Generator {
|
|
|
|
yield 'Empty' => ['', MDPuqiMessageStatus::warning, false];
|
|
yield 'Open' => ['CC0', MDPuqiMessageStatus::praise, true];
|
|
yield 'Open Attr' => ['CC BY', MDPuqiMessageStatus::praise, true];
|
|
yield 'Closed' => ['RR-F', MDPuqiMessageStatus::warning, false];
|
|
|
|
}
|
|
|
|
/**
|
|
* Test for license.
|
|
*
|
|
* @param string $input Input string.
|
|
* @param MDPuqiMessageStatus $warningStatus Expected message status.
|
|
* @param boolean $positive Positive or negative result.
|
|
*
|
|
* @return void
|
|
*/
|
|
#[DataProvider('licenseProvider')]
|
|
public function testMetadataLicensesResultInExpectedAccessment(string $input, MDPuqiMessageStatus $warningStatus, bool $positive):void {
|
|
|
|
$tlLoader = new MDTlLoader("abc", "en");
|
|
$puqi = new MDPuqi($tlLoader);
|
|
$puqi->checkMetadataLicense($input);
|
|
$msgs = $puqi->getMessages();
|
|
|
|
self::assertEquals(1, count($msgs));
|
|
$msg = $msgs[0];
|
|
|
|
self::assertEquals($warningStatus, $msg->status);
|
|
$score = $puqi->getScore();
|
|
self::assertEquals($positive, $score > 0, "Expected score to be positive or negative, got the oppite result. Score is: " . $score);
|
|
|
|
}
|
|
|
|
/**
|
|
* Test for license.
|
|
*
|
|
* @param string $input Input string.
|
|
* @param MDPuqiMessageStatus $warningStatus Expected message status.
|
|
* @param boolean $positive Positive or negative result.
|
|
*
|
|
* @return void
|
|
*/
|
|
#[DataProvider('licenseProvider')]
|
|
public function testImageLicensesResultInExpectedAccessment(string $input, MDPuqiMessageStatus $warningStatus, bool $positive):void {
|
|
|
|
$tlLoader = new MDTlLoader("abc", "en");
|
|
$puqi = new MDPuqi($tlLoader);
|
|
$puqi->checkImageLicenses([['license' => $input, 'rightsholder' => 'Somebody']]);
|
|
$msgs = $puqi->getMessages();
|
|
|
|
self::assertEquals(1, count($msgs));
|
|
$msg = $msgs[0];
|
|
|
|
self::assertEquals($warningStatus, $msg->status);
|
|
$score = $puqi->getScore();
|
|
self::assertEquals($positive, $score > 0, "Expected score to be positive or negative, got the oppite result. Score is: " . $score);
|
|
|
|
}
|
|
|
|
/**
|
|
* Data provider for tag.
|
|
* 0: Input number of tags.
|
|
* 1: Expected score.
|
|
*
|
|
* @return Generator<array{0: int, 1: int}>
|
|
*/
|
|
public static function tagNoAndScoreProvider():Generator {
|
|
|
|
yield 'No tags' => [0, 0 + MDPuqi::QI_PENALTY_NO_TAG];
|
|
yield 'One tag' => [1, 0 + MDPuqi::QI_PENALTY_ONLY_ONE_TAG];
|
|
yield 'Two tag' => [2, 0 + MDPuqi::QI_PENALTY_ONLY_TWO_TAG];
|
|
yield 'Regular number of tags' => [5, 0 + 5 * MDPuqi::QI_REWARD_TAGS_MULTIPLIER];
|
|
yield 'Number of tags above threshold' => [MDPuqi::THRESHOLD_TAGS_TOO_MANY + 1, 0 + MDPuqi::THRESHOLD_TAGS_TOO_MANY * MDPuqi::QI_REWARD_TAGS_MULTIPLIER + 1 * MDPuqi::QI_REWARD_TAGS_MULTIPLIER_ABOVE_THRESHOLD];
|
|
|
|
}
|
|
|
|
/**
|
|
* Test for tag evaluation.
|
|
*
|
|
* @param integer $noOfTags Input number of tags.
|
|
* @param integer $expectedScore Expected score.
|
|
*
|
|
* @return void
|
|
*/
|
|
#[DataProvider('tagNoAndScoreProvider')]
|
|
public function testTagEvaluation(int $noOfTags, int $expectedScore):void {
|
|
|
|
$puqi = new MDPuqi(new MDTlLoader("abc", "en"));
|
|
$puqi->checkEvents([], [], [], [], $noOfTags);
|
|
$msgs = $puqi->getMessages();
|
|
|
|
$score = $puqi->getScore();
|
|
self::assertEquals(MDPuqi::QI_PENALTY_NO_EVENTS + $expectedScore, $score, "Tag eval: Score differs from expected. Messages: " . var_export($puqi->getMessages(), true));
|
|
|
|
}
|
|
}
|