Skip to content

Commit cc6e77b

Browse files
Store new version's metadata
1 parent e600b4e commit cc6e77b

File tree

4 files changed

+29
-14
lines changed

4 files changed

+29
-14
lines changed

src/Audit/Display/AuditLogDisplayFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ public function buildSingle(AuditRecord $record): AuditLogDisplayInterface
5757
$record->datetime,
5858
$record->attributes['name'],
5959
$record->attributes['version'],
60-
$record->attributes['source'] ?? null,
61-
$record->attributes['dist'] ?? null,
60+
$record->attributes['metadata']['source']['reference'] ?? null,
61+
$record->attributes['metadata']['dist']['reference'] ?? null,
6262
$this->buildActor($record->attributes['actor']),
6363
),
6464
AuditRecordType::VersionDeleted => new VersionDeletedDisplay(

src/Entity/AuditRecord.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
use Doctrine\ORM\Mapping as ORM;
1818
use Symfony\Component\Uid\Ulid;
1919

20+
/**
21+
* @phpstan-import-type VersionArray from Version
22+
*/
2023
#[ORM\Entity(repositoryClass: AuditRecordRepository::class)]
2124
#[ORM\Table(name: 'audit_log')]
2225
#[ORM\Index(name: 'type_idx', columns: ['type'])]
@@ -80,11 +83,14 @@ public static function packageTransferred(Package $package, ?User $actor, array
8083
return new self(AuditRecordType::PackageTransferred, ['name' => $package->getName(), 'actor' => self::getUserData($actor, 'admin'), 'previous_maintainers' => $previous, 'current_maintainers' => $current], $actor?->getId(), $package->getVendor(), $package->getId());
8184
}
8285

83-
public static function versionCreated(Version $version, ?User $actor): self
86+
/**
87+
* @param VersionArray $metadata
88+
*/
89+
public static function versionCreated(Version $version, array $metadata, ?User $actor): self
8490
{
8591
$package = $version->getPackage();
8692

87-
return new self(AuditRecordType::VersionCreated, ['name' => $package->getName(), 'version' => $version->getVersion(), 'actor' => self::getUserData($actor, 'automation'), 'source' => $version->getSource()['reference'] ?? null, 'dist' => $version->getDist()['reference'] ?? null], $actor?->getId(), $package->getVendor(), $package->getId());
93+
return new self(AuditRecordType::VersionCreated, ['name' => $package->getName(), 'version' => $version->getVersion(), 'actor' => self::getUserData($actor, 'automation'), 'metadata' => $metadata], $actor?->getId(), $package->getVendor(), $package->getId());
8894
}
8995

9096
public static function versionDeleted(Version $version, ?User $actor): self

src/EventListener/VersionListener.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public function __construct(
4545
*/
4646
public function postPersist(Version $version, LifecycleEventArgs $event): void
4747
{
48-
$record = AuditRecord::versionCreated($version, $this->getUser());
48+
$data = $version->toV2Array([]);
49+
$record = AuditRecord::versionCreated($version, $data, $this->getUser());
4950
$this->getEM()->getRepository(AuditRecord::class)->insert($record);
5051
}
5152

tests/Audit/VersionAuditRecordTest.php

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use App\Audit\AuditRecordType;
1616
use App\Entity\AuditRecord;
1717
use App\Entity\Package;
18+
use App\Entity\RequireLink;
1819
use App\Entity\Version;
1920
use Doctrine\DBAL\Connection;
2021
use Doctrine\Persistence\ManagerRegistry;
@@ -50,15 +51,14 @@ public function testVersionCreationGetsRecorded(): void
5051
]);
5152

5253
self::assertNotNull($log, 'No audit record created for new version');
53-
self::assertSame('automation', $log->attributes['actor']);
5454
self::assertSame('composer', $log->vendor);
55-
self::assertEqualsCanonicalizing([
56-
'name' => 'composer/composer',
57-
'actor' => 'automation',
58-
'version' => '1.0.0',
59-
'source' => 'source-ref',
60-
'dist' => 'dist-ref',
61-
], $log->attributes);
55+
$attributes = $log->attributes;
56+
self::assertSame('composer/composer', $attributes['name']);
57+
self::assertSame('automation', $attributes['actor']);
58+
self::assertSame('1.0.0', $attributes['version']);
59+
self::assertSame('dist-ref', $attributes['metadata']['dist']['reference']);
60+
self::assertSame('source-ref', $attributes['metadata']['source']['reference']);
61+
self::assertSame('^1.5.0', $attributes['metadata']['require']['composer/ca-bundle']);
6262
}
6363

6464
public function testVersionChangesGetRecorded(): void
@@ -103,7 +103,7 @@ public function testVersionChangesGetRecorded(): void
103103
$logs = $container->get(Connection::class)->fetchAllAssociative('SELECT * FROM audit_log ORDER BY id DESC');
104104
self::assertCount(3, $logs);
105105

106-
$em->remove($version);
106+
$em->getRepository(Version::class)->remove($version);
107107
$em->flush();
108108

109109
$logs = $container->get(Connection::class)->fetchAllAssociative('SELECT * FROM audit_log ORDER BY id DESC');
@@ -117,6 +117,7 @@ private function createPackageAndVersion(): Version
117117
$em = $container->get(ManagerRegistry::class)->getManager();
118118

119119
$package = new Package();
120+
$package->setName('composer/composer');
120121
$package->setRepository('https://github.com/composer/composer');
121122

122123
$version = new Version();
@@ -130,6 +131,13 @@ private function createPackageAndVersion(): Version
130131
$version->setDist(['reference' => 'dist-ref', 'type' => 'zip', 'url' => 'https://example.org/dist.zip']);
131132
$version->setSource(['reference' => 'source-ref', 'type' => 'git', 'url' => 'https://example.org/dist.git']);
132133

134+
$link = new RequireLink();
135+
$link->setVersion($version);
136+
$link->setPackageVersion('^1.5.0');
137+
$link->setPackageName('composer/ca-bundle');
138+
$version->addRequireLink($link);
139+
140+
$em->persist($link);
133141
$em->persist($package);
134142
$em->persist($version);
135143
$em->flush();

0 commit comments

Comments
 (0)