Skip to content

Commit

Permalink
rework serializers tests
Browse files Browse the repository at this point in the history
Signed-off-by: Jan Kowalleck <jan.kowalleck@gmail.com>
  • Loading branch information
jkowalleck committed Oct 8, 2022
1 parent c8a1e5a commit 5fe8abd
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 449 deletions.
200 changes: 3 additions & 197 deletions tests/Core/Serialization/BaseSerializerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,211 +23,17 @@

namespace CycloneDX\Tests\Core\Serialization;

use CycloneDX\Core\Collections\BomRefRepository;
use CycloneDX\Core\Collections\ComponentRepository;
use CycloneDX\Core\Models\Bom;
use CycloneDX\Core\Models\BomRef;
use CycloneDX\Core\Models\Component;
use CycloneDX\Core\Models\Metadata;
use CycloneDX\Core\Serialization\BaseSerializer;
use CycloneDX\Core\Spec\Spec;
use Exception;
use Generator;
use PHPUnit\Framework\TestCase;

/**
* @covers \CycloneDX\Core\Serialization\BaseSerializer
*
* @uses \CycloneDX\Core\Serialization\BomRefDiscriminator
* @TODO
*/
class BaseSerializerTest extends TestCase
{
/**
* @var BaseSerializer|\PHPUnit\Framework\MockObject\MockObject
*/
private $serializer;

/**
* @var Spec|\PHPUnit\Framework\MockObject\MockObject
*/
private $spec;

protected function setUp(): void
{
$this->spec = $this->createMock(Spec::class);
$this->serializer = $this->getMockForAbstractClass(BaseSerializer::class, [$this->spec]);
}

public function testGetSpec(): void
{
self::assertSame(
$this->spec,
$this->serializer->getSpec()
);
}

/**
* @uses \CycloneDX\Core\Models\BomRef
*/
public function testSerializeCallsNormalize(): void
{
$bom = $this->createStub(Bom::class);

$this->serializer->expects(self::once())
->method('normalize')
->with($bom)
->willReturn('foobar');

$actual = $this->serializer->serialize($bom);

self::assertSame('foobar', $actual);
}

/**
* @uses \CycloneDX\Core\Models\BomRef
*/
public function testSerializeForwardsExceptionsFromNormalize(): void
{
$bom = $this->createStub(Bom::class);
$exception = $this->createMock(Exception::class);

$this->serializer->expects(self::once())
->method('normalize')
->with($bom)
->willThrowException($exception);

$this->expectExceptionObject($exception);

$this->serializer->serialize($bom);
}

/**
* @param BomRef[] $allBomRefs
*
* @dataProvider dpBomWithRefs
*
* @covers \CycloneDX\Core\Serialization\BomRefDiscriminator
*
* @uses \CycloneDX\Core\Models\BomRef
*/
public function testSerializeUsesUniqueBomRefsAndResetThemAfterwards(Bom $bom, array $allBomRefs): void
{
$allBomRefsValuesOriginal = [];
foreach ($allBomRefs as $bomRef) {
$allBomRefsValuesOriginal[] = [$bomRef, $bomRef->getValue()];
}

$allBomRefsValuesOnNormalize = [];

$this->serializer->expects(self::once())
->method('normalize')
->with($bom)
->willReturnCallback(
function () use ($allBomRefsValuesOriginal, &$allBomRefsValuesOnNormalize) {
/**
* @var BomRef $bomRef
*/
foreach ($allBomRefsValuesOriginal as [$bomRef]) {
$allBomRefsValuesOnNormalize[] = [$bomRef, $bomRef->getValue()];
}

return 'foobar';
}
);

$actual = $this->serializer->serialize($bom);

foreach ($allBomRefsValuesOriginal as [$bomRef, $bomRefValueOriginal]) {
self::assertSame($bomRefValueOriginal, $bomRef->getValue());
}

$valuesOnNormalize = array_column($allBomRefsValuesOnNormalize, 1);
self::assertSameSize(
$valuesOnNormalize,
array_unique($valuesOnNormalize, \SORT_STRING),
'some values were found not unique in:'.\PHP_EOL.
print_r($valuesOnNormalize, true)
);

self::assertSame('foobar', $actual);
}

public function dpBomWithRefs(): Generator
public function testTodo(): void
{
$dependencies = $this->createStub(BomRefRepository::class);

foreach (['null' => null, 'common string' => 'foo'] as $name => $bomRefValue) {
$componentNullDeps = $this->createConfiguredMock(
Component::class,
[
'getBomRef' => new BomRef($bomRefValue),
'getDependencies' => $dependencies,
]
);
$componentEmptyDeps = $this->createConfiguredMock(
Component::class,
[
'getBomRef' => new BomRef($bomRefValue),
'getDependencies' => $this->createMock(BomRefRepository::class),
]
);
$componentKnownDeps = $this->createConfiguredMock(
Component::class,
[
'getBomRef' => new BomRef($bomRefValue),
'getDependencies' => $this->createConfiguredMock(
BomRefRepository::class,
[
'getItems' => [$componentNullDeps->getBomRef()],
]
),
]
);
$componentRoot = $this->createConfiguredMock(
Component::class,
[
'getBomRef' => new BomRef($bomRefValue),
'getDependencies' => $this->createConfiguredMock(
BomRefRepository::class,
[
'getItems' => [
$componentKnownDeps->getBomRef(),
$componentEmptyDeps->getBomRef(),
],
]
),
]
);

yield "bom with components and meta: bomRef=$name" => [
$this->createConfiguredMock(
Bom::class,
[
'getComponents' => $this->createConfiguredMock(
ComponentRepository::class,
[
'getItems' => [
$componentNullDeps,
$componentEmptyDeps,
$componentKnownDeps,
],
]
),
'getMetadata' => $this->createConfiguredMock(
Metadata::class,
[
'getComponent' => $componentRoot,
]
),
]
),
[
$componentRoot->getBomRef(),
$componentNullDeps->getBomRef(),
$componentEmptyDeps->getBomRef(),
$componentKnownDeps->getBomRef(),
],
];
}
$this->markTestSkipped('TODO');
}
}
112 changes: 3 additions & 109 deletions tests/Core/Serialization/JsonSerializerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,123 +23,17 @@

namespace CycloneDX\Tests\Core\Serialization;

use CycloneDX\Core\Models\Bom;
use CycloneDX\Core\Serialization\JsonSerializer;
use CycloneDX\Core\Spec\Spec;
use PHPUnit\Framework\TestCase;

/**
* @covers \CycloneDX\Core\Serialization\JsonSerializer
*
* @uses \CycloneDX\Core\Serialization\BaseSerializer
* @TODO
*/
class JsonSerializerTest extends TestCase
{
/**
* @uses \CycloneDX\Core\Serialization\JSON\_BaseNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\NormalizerFactory
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\BomNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\ComponentRepositoryNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\ComponentNormalizer
* @uses \CycloneDX\Core\Serialization\BomRefDiscriminator
*/
public function testSerialize12(): void
public function testTodo(): void
{
$spec = $this->createConfiguredMock(
Spec::class,
[
'getVersion' => '1.2',
'isSupportedFormat' => true,
]
);
$serializer = new JsonSerializer($spec);
$bom = $this->createStub(Bom::class);

$actual = $serializer->serialize($bom);

self::assertJsonStringEqualsJsonString(
<<<'JSON'
{
"$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json",
"bomFormat": "CycloneDX",
"specVersion": "1.2",
"version": 0,
"components": []
}
JSON,
$actual
);
}

/**
* @uses \CycloneDX\Core\Serialization\JSON\_BaseNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\NormalizerFactory
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\BomNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\ComponentRepositoryNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\ComponentNormalizer
* @uses \CycloneDX\Core\Serialization\BomRefDiscriminator
*/
public function testSerialize13(): void
{
$spec = $this->createConfiguredMock(
Spec::class,
[
'getVersion' => '1.3',
'isSupportedFormat' => true,
]
);
$serializer = new JsonSerializer($spec);
$bom = $this->createStub(Bom::class);

$actual = $serializer->serialize($bom);

self::assertJsonStringEqualsJsonString(
<<<'JSON'
{
"$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json",
"bomFormat": "CycloneDX",
"specVersion": "1.3",
"version": 0,
"components": []
}
JSON,
$actual
);
}

/**
* @uses \CycloneDX\Core\Serialization\JSON\_BaseNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\NormalizerFactory
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\BomNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\ComponentRepositoryNormalizer
* @uses \CycloneDX\Core\Serialization\JSON\Normalizers\ComponentNormalizer
* @uses \CycloneDX\Core\Serialization\BomRefDiscriminator
*/
public function testSerialize14(): void
{
$spec = $this->createConfiguredMock(
Spec::class,
[
'getVersion' => '1.4',
'isSupportedFormat' => true,
]
);
$serializer = new JsonSerializer($spec);
$bom = $this->createStub(Bom::class);

$actual = $serializer->serialize($bom);

self::assertJsonStringEqualsJsonString(
<<<'JSON'
{
"$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"version": 0,
"components": []
}
JSON,
$actual
);
$this->markTestSkipped('TODO');
}
}

0 comments on commit 5fe8abd

Please sign in to comment.