@@ -5423,6 +5423,19 @@ func (s *MethodTestSuite) TestOAuth2ProviderAppCodes() {
54235423 UserID : user .ID ,
54245424 }).Asserts (rbac .ResourceOauth2AppCodeToken .WithOwner (user .ID .String ()), policy .ActionDelete )
54255425 }))
5426+ s .Run ("ConsumeOAuth2ProviderAppCodeByPrefix" , s .Subtest (func (db database.Store , check * expects ) {
5427+ user := dbgen .User (s .T (), db , database.User {})
5428+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5429+ // Use unique prefix to avoid test isolation issues
5430+ uniquePrefix := fmt .Sprintf ("prefix-%s-%d" , s .T ().Name (), time .Now ().UnixNano ())
5431+ code := dbgen .OAuth2ProviderAppCode (s .T (), db , database.OAuth2ProviderAppCode {
5432+ SecretPrefix : []byte (uniquePrefix ),
5433+ UserID : user .ID ,
5434+ AppID : app .ID ,
5435+ ExpiresAt : time .Now ().Add (24 * time .Hour ), // Extended expiry for test stability
5436+ })
5437+ check .Args (code .SecretPrefix ).Asserts (code , policy .ActionUpdate ).Returns (code )
5438+ }))
54265439}
54275440
54285441func (s * MethodTestSuite ) TestOAuth2ProviderAppTokens () {
@@ -5498,6 +5511,110 @@ func (s *MethodTestSuite) TestOAuth2ProviderAppTokens() {
54985511 }))
54995512}
55005513
5514+ func (s * MethodTestSuite ) TestOAuth2ProviderDeviceCodes () {
5515+ s .Run ("InsertOAuth2ProviderDeviceCode" , s .Subtest (func (db database.Store , check * expects ) {
5516+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5517+ check .Args (database.InsertOAuth2ProviderDeviceCodeParams {
5518+ ClientID : app .ID ,
5519+ }).Asserts (rbac .ResourceOauth2AppCodeToken , policy .ActionCreate )
5520+ }))
5521+ s .Run ("GetOAuth2ProviderDeviceCodeByID" , s .Subtest (func (db database.Store , check * expects ) {
5522+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5523+ deviceCode , err := db .InsertOAuth2ProviderDeviceCode (context .Background (), database.InsertOAuth2ProviderDeviceCodeParams {
5524+ ClientID : app .ID ,
5525+ DeviceCodePrefix : "test-prefix" ,
5526+ UserCode : "TEST1234" ,
5527+ VerificationUri : "http://example.com/device" ,
5528+ })
5529+ require .NoError (s .T (), err )
5530+ check .Args (deviceCode .ID ).Asserts (deviceCode , policy .ActionRead ).Returns (deviceCode )
5531+ }))
5532+ s .Run ("GetOAuth2ProviderDeviceCodeByPrefix" , s .Subtest (func (db database.Store , check * expects ) {
5533+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5534+ deviceCode , err := db .InsertOAuth2ProviderDeviceCode (context .Background (), database.InsertOAuth2ProviderDeviceCodeParams {
5535+ ClientID : app .ID ,
5536+ DeviceCodePrefix : "test-prefix" ,
5537+ UserCode : "TEST1234" ,
5538+ VerificationUri : "http://example.com/device" ,
5539+ })
5540+ require .NoError (s .T (), err )
5541+ check .Args (deviceCode .DeviceCodePrefix ).Asserts (deviceCode , policy .ActionRead ).Returns (deviceCode )
5542+ }))
5543+ s .Run ("GetOAuth2ProviderDeviceCodeByUserCode" , s .Subtest (func (db database.Store , check * expects ) {
5544+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5545+ deviceCode , err := db .InsertOAuth2ProviderDeviceCode (context .Background (), database.InsertOAuth2ProviderDeviceCodeParams {
5546+ ClientID : app .ID ,
5547+ DeviceCodePrefix : "test-prefix" ,
5548+ UserCode : "TEST1234" ,
5549+ VerificationUri : "http://example.com/device" ,
5550+ })
5551+ require .NoError (s .T (), err )
5552+ check .Args (deviceCode .UserCode ).Asserts (deviceCode , policy .ActionRead ).Returns (deviceCode )
5553+ }))
5554+ s .Run ("GetOAuth2ProviderDeviceCodesByClientID" , s .Subtest (func (db database.Store , check * expects ) {
5555+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5556+ deviceCode , err := db .InsertOAuth2ProviderDeviceCode (context .Background (), database.InsertOAuth2ProviderDeviceCodeParams {
5557+ ClientID : app .ID ,
5558+ DeviceCodePrefix : "test-prefix" ,
5559+ UserCode : "TEST1234" ,
5560+ VerificationUri : "http://example.com/device" ,
5561+ })
5562+ require .NoError (s .T (), err )
5563+ check .Args (app .ID ).Asserts (rbac .ResourceOauth2AppCodeToken , policy .ActionRead ).Returns ([]database.OAuth2ProviderDeviceCode {deviceCode })
5564+ }))
5565+ s .Run ("ConsumeOAuth2ProviderDeviceCodeByPrefix" , s .Subtest (func (db database.Store , check * expects ) {
5566+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5567+ user := dbgen .User (s .T (), db , database.User {})
5568+ // Use unique identifiers to avoid test isolation issues
5569+ uniquePrefix := fmt .Sprintf ("dev-prefix-%s-%d" , s .T ().Name (), time .Now ().UnixNano ())
5570+ uniqueUserCode := fmt .Sprintf ("USER%s-%d" , s .T ().Name (), time .Now ().UnixNano ())
5571+ // Create device code using dbgen (now available!)
5572+ deviceCode := dbgen .OAuth2ProviderDeviceCode (s .T (), db , database.OAuth2ProviderDeviceCode {
5573+ DeviceCodePrefix : uniquePrefix ,
5574+ UserCode : uniqueUserCode ,
5575+ ClientID : app .ID ,
5576+ ExpiresAt : time .Now ().Add (24 * time .Hour ), // Extended expiry for test stability
5577+ })
5578+ // Authorize the device code so it can be consumed
5579+ deviceCode , err := db .UpdateOAuth2ProviderDeviceCodeAuthorization (s .T ().Context (), database.UpdateOAuth2ProviderDeviceCodeAuthorizationParams {
5580+ ID : deviceCode .ID ,
5581+ UserID : uuid.NullUUID {UUID : user .ID , Valid : true },
5582+ Status : database .OAuth2DeviceStatusAuthorized ,
5583+ })
5584+ require .NoError (s .T (), err )
5585+ require .Equal (s .T (), database .OAuth2DeviceStatusAuthorized , deviceCode .Status )
5586+ check .Args (uniquePrefix ).Asserts (deviceCode , policy .ActionUpdate ).Returns (deviceCode )
5587+ }))
5588+ s .Run ("UpdateOAuth2ProviderDeviceCodeAuthorization" , s .Subtest (func (db database.Store , check * expects ) {
5589+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5590+ user := dbgen .User (s .T (), db , database.User {})
5591+ // Create device code using dbgen
5592+ deviceCode := dbgen .OAuth2ProviderDeviceCode (s .T (), db , database.OAuth2ProviderDeviceCode {
5593+ ClientID : app .ID ,
5594+ })
5595+ require .Equal (s .T (), database .OAuth2DeviceStatusPending , deviceCode .Status )
5596+ check .Args (database.UpdateOAuth2ProviderDeviceCodeAuthorizationParams {
5597+ ID : deviceCode .ID ,
5598+ UserID : uuid.NullUUID {UUID : user .ID , Valid : true },
5599+ Status : database .OAuth2DeviceStatusAuthorized ,
5600+ }).Asserts (deviceCode , policy .ActionUpdate )
5601+ }))
5602+ s .Run ("DeleteOAuth2ProviderDeviceCodeByID" , s .Subtest (func (db database.Store , check * expects ) {
5603+ app := dbgen .OAuth2ProviderApp (s .T (), db , database.OAuth2ProviderApp {})
5604+ deviceCode , err := db .InsertOAuth2ProviderDeviceCode (context .Background (), database.InsertOAuth2ProviderDeviceCodeParams {
5605+ ClientID : app .ID ,
5606+ DeviceCodePrefix : "test-prefix" ,
5607+ UserCode : "TEST1234" ,
5608+ VerificationUri : "http://example.com/device" ,
5609+ })
5610+ require .NoError (s .T (), err )
5611+ check .Args (deviceCode .ID ).Asserts (deviceCode , policy .ActionDelete )
5612+ }))
5613+ s .Run ("DeleteExpiredOAuth2ProviderDeviceCodes" , s .Subtest (func (db database.Store , check * expects ) {
5614+ check .Args ().Asserts (rbac .ResourceSystem , policy .ActionDelete )
5615+ }))
5616+ }
5617+
55015618func (s * MethodTestSuite ) TestResourcesMonitor () {
55025619 createAgent := func (t * testing.T , db database.Store ) (database.WorkspaceAgent , database.WorkspaceTable ) {
55035620 t .Helper ()
0 commit comments