1313namespace App \Tests \Controller ;
1414
1515use App \Audit \AuditRecordType ;
16+ use App \Entity \AuditRecord ;
1617use App \Entity \Package ;
18+ use App \Entity \RequireLink ;
1719use App \Entity \Version ;
1820use Doctrine \DBAL \Connection ;
1921use Doctrine \Persistence \ManagerRegistry ;
@@ -36,53 +38,61 @@ protected function tearDown(): void
3638 parent ::tearDown ();
3739 }
3840
39- public function testVersionChangesGetRecorded (): void
41+ public function testVersionCreationGetsRecorded (): void
4042 {
4143 $ container = static ::getContainer ();
4244 $ em = $ container ->get (ManagerRegistry::class)->getManager ();
4345
44- $ package = new Package ();
45- $ package ->setRepository ('https://github.com/composer/composer ' );
46+ $ version = $ this ->createPackageAndVersion ();
47+
48+ $ log = $ em ->getRepository (AuditRecord::class)->findOneBy ([
49+ 'type ' => AuditRecordType::VersionCreated,
50+ 'packageId ' => $ version ->getPackage ()->getId (),
51+ ]);
52+
53+ self ::assertNotNull ($ log , 'No audit record created for new version ' );
54+ self ::assertSame ('composer ' , $ log ->vendor );
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 ' ]);
62+ }
4663
47- $ version = new Version ();
48- $ version ->setPackage ($ package );
49- $ version ->setName ($ package ->getName ());
50- $ version ->setVersion ('1.0.0 ' );
51- $ version ->setNormalizedVersion ('1.0.0.0 ' );
52- $ version ->setDevelopment (false );
53- $ version ->setLicense ([]);
54- $ version ->setAutoload ([]);
55- $ version ->setDist (['reference ' => 'old-dist-ref ' , 'type ' => 'zip ' , 'url ' => 'https://example.org/dist.zip ' ]);
64+ public function testVersionChangesGetRecorded (): void
65+ {
66+ $ container = static ::getContainer ();
67+ $ em = $ container ->get (ManagerRegistry::class)->getManager ();
5668
57- $ em ->persist ($ package );
58- $ em ->persist ($ version );
59- $ em ->flush ();
69+ $ version = $ this ->createPackageAndVersion ();
6070
6171 $ version ->setDist (['reference ' => 'new-dist-ref ' , 'type ' => 'zip ' , 'url ' => 'https://example.org/dist.zip ' ]);
6272 $ version ->setSource (['reference ' => 'new-source-ref ' , 'type ' => 'git ' , 'url ' => 'git://example.org/dist.zip ' ]);
6373 $ em ->persist ($ version );
6474 $ em ->flush ();
6575
6676 $ logs = $ container ->get (Connection::class)->fetchAllAssociative ('SELECT * FROM audit_log ORDER BY id DESC ' );
67- self ::assertCount (2 , $ logs ); // package creation + version reference change
77+ self ::assertCount (3 , $ logs ); // package creation + version creation + version reference change
6878 self ::assertSame (AuditRecordType::VersionReferenceChanged->value , $ logs [0 ]['type ' ]);
69- self ::assertSame ('{"name": "composer/composer", "dist_to": "new-dist-ref", "version": "1.0.0", "dist_from": "old- dist-ref", "source_to": "new-source-ref", "source_from": null } ' , $ logs [0 ]['attributes ' ]);
79+ self ::assertSame ('{"name": "composer/composer", "dist_to": "new-dist-ref", "version": "1.0.0", "dist_from": "dist-ref", "source_to": "new-source-ref", "source_from": "source-ref" } ' , $ logs [0 ]['attributes ' ]);
7080
7181 // verify that unrelated changes do not create new audit logs
7282 $ version ->setLicense (['MIT ' ]);
7383 $ em ->persist ($ version );
7484 $ em ->flush ();
7585
7686 $ logs = $ container ->get (Connection::class)->fetchAllAssociative ('SELECT * FROM audit_log ORDER BY id DESC ' );
77- self ::assertCount (2 , $ logs ); // package creation + version reference change
87+ self ::assertCount (3 , $ logs ); // package creation + version creation + version reference change
7888
7989 // verify that changing dist only without ref change does not create new audit log and does not crash
8090 $ version ->setDist (['reference ' => 'new-dist-ref ' , 'type ' => 'zip2 ' , 'url ' => 'https://example.org/dist.zip2 ' ]);
8191 $ em ->persist ($ version );
8292 $ em ->flush ();
8393
8494 $ logs = $ container ->get (Connection::class)->fetchAllAssociative ('SELECT * FROM audit_log ORDER BY id DESC ' );
85- self ::assertCount (2 , $ logs ); // package creation + version reference change
95+ self ::assertCount (3 , $ logs ); // package creation + version creation + version reference change
8696
8797 // verify that only reference changes triggers a new audit log
8898 $ version ->setDist (['reference ' => 'new-dist-ref ' , 'type ' => 'zip3 ' , 'url ' => 'https://example.org/dist.zip2 ' ]);
@@ -91,13 +101,47 @@ public function testVersionChangesGetRecorded(): void
91101 $ em ->flush ();
92102
93103 $ logs = $ container ->get (Connection::class)->fetchAllAssociative ('SELECT * FROM audit_log ORDER BY id DESC ' );
94- self ::assertCount (2 , $ logs );
104+ self ::assertCount (3 , $ logs );
95105
96- $ em ->remove ($ version );
106+ $ em ->getRepository (Version::class)-> remove ($ version );
97107 $ em ->flush ();
98108
99109 $ logs = $ container ->get (Connection::class)->fetchAllAssociative ('SELECT * FROM audit_log ORDER BY id DESC ' );
100- self ::assertCount (3 , $ logs );
110+ self ::assertCount (4 , $ logs );
101111 self ::assertSame (AuditRecordType::VersionDeleted->value , $ logs [0 ]['type ' ]);
102112 }
113+
114+ private function createPackageAndVersion (): Version
115+ {
116+ $ container = static ::getContainer ();
117+ $ em = $ container ->get (ManagerRegistry::class)->getManager ();
118+
119+ $ package = new Package ();
120+ $ package ->setName ('composer/composer ' );
121+ $ package ->setRepository ('https://github.com/composer/composer ' );
122+
123+ $ version = new Version ();
124+ $ version ->setPackage ($ package );
125+ $ version ->setName ($ package ->getName ());
126+ $ version ->setVersion ('1.0.0 ' );
127+ $ version ->setNormalizedVersion ('1.0.0.0 ' );
128+ $ version ->setDevelopment (false );
129+ $ version ->setLicense ([]);
130+ $ version ->setAutoload ([]);
131+ $ version ->setDist (['reference ' => 'dist-ref ' , 'type ' => 'zip ' , 'url ' => 'https://example.org/dist.zip ' ]);
132+ $ version ->setSource (['reference ' => 'source-ref ' , 'type ' => 'git ' , 'url ' => 'https://example.org/dist.git ' ]);
133+
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 );
141+ $ em ->persist ($ package );
142+ $ em ->persist ($ version );
143+ $ em ->flush ();
144+
145+ return $ version ;
146+ }
103147}
0 commit comments