11import { describe , expect , test } from 'vitest'
22import { shouldFilterMetadataPermission , calculateAdditionalPermissions } from '../scripts/sync'
33
4+ type PermissionSet = Record < string , string >
5+
6+ interface Operation {
7+ operationId : string
8+ permissionSets : PermissionSet [ ]
9+ }
10+
11+ interface ProgAccessData {
12+ userToServerRest : boolean
13+ serverToServer : boolean
14+ permissions : PermissionSet [ ]
15+ }
16+
17+ interface ActorResource {
18+ title : string
19+ visibility : string
20+ }
21+
22+ interface FilteredOperation {
23+ operationId : string
24+ permission : string
25+ additionalPermissions : boolean
26+ }
27+
28+ interface MetadataPermission {
29+ operationId : string
30+ additionalPermissions : boolean
31+ }
32+
433describe ( 'metadata permissions filtering' , ( ) => {
534 // Mock data structure representing operations with metadata permissions
6- const mockOperationsWithMetadata = [
35+ const mockOperationsWithMetadata : Operation [ ] = [
736 {
837 operationId : 'repos/enable-automated-security-fixes' ,
938 permissionSets : [ { metadata : 'read' , administration : 'write' } ] ,
@@ -23,7 +52,7 @@ describe('metadata permissions filtering', () => {
2352 ]
2453
2554 // Mock programmatic access data
26- const mockProgAccessData = {
55+ const mockProgAccessData : Record < string , ProgAccessData > = {
2756 'repos/enable-automated-security-fixes' : {
2857 userToServerRest : true ,
2958 serverToServer : true ,
@@ -47,7 +76,7 @@ describe('metadata permissions filtering', () => {
4776 }
4877
4978 // Mock actor resources
50- const mockProgActorResources = {
79+ const mockProgActorResources : Record < string , ActorResource > = {
5180 metadata : {
5281 title : 'Metadata' ,
5382 visibility : 'public' ,
@@ -95,8 +124,8 @@ describe('metadata permissions filtering', () => {
95124 } )
96125
97126 test ( 'filters metadata operations with additional permissions' , ( ) => {
98- const filteredOperations = [ ]
99- const metadataPermissions = [ ]
127+ const filteredOperations : FilteredOperation [ ] = [ ]
128+ const metadataPermissions : MetadataPermission [ ] = [ ]
100129
101130 for ( const operation of mockOperationsWithMetadata ) {
102131 const progData = mockProgAccessData [ operation . operationId ]
@@ -137,15 +166,15 @@ describe('metadata permissions filtering', () => {
137166 // Should have other permissions from operations with additional permissions
138167 const adminPermission = filteredOperations . find ( ( op ) => op . permission === 'administration' )
139168 expect ( adminPermission ) . toBeDefined ( )
140- expect ( adminPermission . operationId ) . toBe ( 'repos/enable-automated-security-fixes' )
141- expect ( adminPermission . additionalPermissions ) . toBe ( true )
169+ expect ( adminPermission ! . operationId ) . toBe ( 'repos/enable-automated-security-fixes' )
170+ expect ( adminPermission ! . additionalPermissions ) . toBe ( true )
142171
143172 const orgAdminPermission = filteredOperations . find (
144173 ( op ) => op . permission === 'organization_administration' ,
145174 )
146175 expect ( orgAdminPermission ) . toBeDefined ( )
147- expect ( orgAdminPermission . operationId ) . toBe ( 'orgs/update-webhook' )
148- expect ( orgAdminPermission . additionalPermissions ) . toBe ( true )
176+ expect ( orgAdminPermission ! . operationId ) . toBe ( 'orgs/update-webhook' )
177+ expect ( orgAdminPermission ! . additionalPermissions ) . toBe ( true )
149178 } )
150179
151180 test ( 'preserves non-metadata permissions regardless of additional permissions' , ( ) => {
@@ -168,11 +197,11 @@ describe('metadata permissions filtering', () => {
168197 expect ( shouldFilterMetadataPermission ( 'metadata' , [ ] ) ) . toBe ( false )
169198
170199 // Permission set with empty object (edge case)
171- const edgeCase1 = [ { metadata : 'read' } , { } ]
200+ const edgeCase1 : Record < string , string > [ ] = [ { metadata : 'read' } , { } ]
172201 expect ( shouldFilterMetadataPermission ( 'metadata' , edgeCase1 ) ) . toBe ( true )
173202
174203 // Multiple permission sets with metadata in different sets
175- const edgeCase2 = [ { metadata : 'read' } , { admin : 'write' } ]
204+ const edgeCase2 : Record < string , string > [ ] = [ { metadata : 'read' } , { admin : 'write' } ]
176205 expect ( shouldFilterMetadataPermission ( 'metadata' , edgeCase2 ) ) . toBe ( true )
177206 } )
178207
@@ -207,17 +236,23 @@ describe('metadata permissions filtering', () => {
207236
208237 test ( 'handles complex permission structures from real data' , ( ) => {
209238 // Multiple permission sets (should filter metadata)
210- const multiplePermissionSets = [ { metadata : 'read' } , { administration : 'write' } ]
239+ const multiplePermissionSets : Record < string , string > [ ] = [
240+ { metadata : 'read' } ,
241+ { administration : 'write' } ,
242+ ]
211243 expect ( shouldFilterMetadataPermission ( 'metadata' , multiplePermissionSets ) ) . toBe ( true )
212244
213245 // Single permission set with multiple permissions (should filter metadata)
214- const multiplePermissionsInSet = [
246+ const multiplePermissionsInSet : Record < string , string > [ ] = [
215247 { metadata : 'read' , contents : 'write' , pull_requests : 'write' } ,
216248 ]
217249 expect ( shouldFilterMetadataPermission ( 'metadata' , multiplePermissionsInSet ) ) . toBe ( true )
218250
219251 // Multiple permission sets where metadata is not in the first set
220- const metadataInSecondSet = [ { administration : 'write' } , { metadata : 'read' } ]
252+ const metadataInSecondSet : Record < string , string > [ ] = [
253+ { administration : 'write' } ,
254+ { metadata : 'read' } ,
255+ ]
221256 expect ( shouldFilterMetadataPermission ( 'metadata' , metadataInSecondSet ) ) . toBe ( true )
222257 } )
223258
@@ -250,7 +285,7 @@ describe('metadata permissions filtering', () => {
250285 } )
251286
252287 test ( 'verifies consistency with additional-permissions flag calculation' , ( ) => {
253- const testCases = [
288+ const testCases : Array < { permissionSets : Record < string , string > [ ] ; expected : boolean } > = [
254289 // Single permission, single set - no additional permissions
255290 { permissionSets : [ { metadata : 'read' } ] , expected : false } ,
256291
@@ -283,12 +318,7 @@ describe('metadata permissions filtering', () => {
283318 // - DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}
284319 // Because they have metadata + organization_administration permissions
285320
286- const mockMutatingOperation = {
287- operationId : 'actions/set-selected-repositories-enabled-github-actions-organization' ,
288- permissionSets : [ { metadata : 'read' , organization_administration : 'write' } ] ,
289- }
290-
291- const progData = {
321+ const progData : ProgAccessData = {
292322 userToServerRest : true ,
293323 serverToServer : true ,
294324 permissions : [ { metadata : 'read' , organization_administration : 'write' } ] ,
0 commit comments