Skip to content

Commit

Permalink
Add initial unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
cs278 committed May 14, 2021
1 parent bb6744d commit 0a2d435
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 0 deletions.
7 changes: 7 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
beStrictAboutTodoAnnotatedTests="true"
>
<testsuites>
<testsuite name="Unit tests">
<directory suffix="Test.php">tests/unit</directory>
</testsuite>
<testsuite name="Integration tests">
<directory suffix="Test.php">tests/integration</directory>
</testsuite>
Expand All @@ -19,4 +22,8 @@
<directory suffix=".php">src</directory>
</whitelist>
</filter>

<php>
<ini name="zend.assertions" value="1" />
</php>
</phpunit>
91 changes: 91 additions & 0 deletions tests/unit/AdvisoriesManagerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?php

declare(strict_types=1);

namespace Cs278\ComposerAudit;

use Composer\Composer;
use Composer\Semver\Semver;
use PHPUnit\Framework\TestCase;
use Symfony\Bridge\PhpUnit\SetUpTearDownTrait;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;

use function Cs278\Mktemp\temporaryDir;

/**
* @covers Cs278\ComposerAudit\AdvisoriesManager
*/
final class AdvisoriesManagerTest extends TestCase
{
use SetUpTearDownTrait;

/**
* @dataProvider dataFindByPackageNameAndVersion
*
*/
public function testFindByPackageNameAndVersion(array $expected, string $packageName, string $packageVersion, string $advisories)
{
$manager = $this->createManager($advisories);
$results = [];

foreach ($manager->findByPackageNameAndVersion($packageName, $packageVersion) as $advisory) {
$results[] = $advisory['title'];

self::assertEquals(sprintf('composer://%s', $packageName), $advisory['reference']);
}

self::assertEquals($expected, $results);
}

public function dataFindByPackageNameAndVersion(): iterable
{
yield [
[],
'foo/bar',
'13.37.0',
'empty',
];
yield [
[
'CVE-9999-1234567: Left the front door open',
],
'foo/bar',
'13.37',
'simple',
];
}

private function createManager(string $advisories): AdvisoriesManager
{
$installer = new class($advisories) implements AdvisoriesInstallerInterface {
private $advisories;

public function __construct(string $advisories)
{
$this->advisories = __DIR__.'/advisories/'.$advisories;

if (!is_dir($this->advisories)) {
throw new \InvalidArgumentException(sprintf(
'%s is invalid, `%s` is not a directory',
$advisories,
$this->advisories
));
}
}

public function mustUpdate()
{
return; // No op
}

public function install($varDirectory, $packageName, $packageConstraint)
{
return $this->advisories;
}
};

return new AdvisoriesManager($installer);
}
}
6 changes: 6 additions & 0 deletions tests/unit/advisories/empty/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

{
"name": "sensiolabs/security-advisories",
"description": "Database of known security vulnerabilities in various PHP projects and libraries",
"license": "Unlicense"
}
6 changes: 6 additions & 0 deletions tests/unit/advisories/simple/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

{
"name": "sensiolabs/security-advisories",
"description": "Database of known security vulnerabilities in various PHP projects and libraries",
"license": "Unlicense"
}
8 changes: 8 additions & 0 deletions tests/unit/advisories/simple/foo/bar/vuln1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: "CVE-9999-1234567: Left the front door open"
link: https://example.com/CVE-9999-1234567
cve: CVE-9999-1234567
branches:
"1337":
time: 2020-01-01 12:32:00
versions: ['>=13.37.0', '<13.37.100']
reference: composer://foo/bar

0 comments on commit 0a2d435

Please sign in to comment.