@@ -1608,3 +1608,97 @@ func TestGithubClient_UploadSnapshotToDependencyGraph(t *testing.T) {
16081608 err = createBadGitHubClient (t ).UploadSnapshotToDependencyGraph (ctx , owner , repo1 , & snapshot )
16091609 assert .Error (t , err )
16101610}
1611+
1612+ func TestGitHubClient_IsCodeScanningEnabled (t * testing.T ) {
1613+ ctx := context .Background ()
1614+
1615+ t .Run ("code scanning enabled - 422 response" , func (t * testing.T ) {
1616+ unprocessableResponse := []byte (`{
1617+ "message": "Invalid request",
1618+ "errors": [
1619+ {
1620+ "code": "invalid",
1621+ "field": "sarif"
1622+ }
1623+ ]
1624+ }` )
1625+
1626+ client , cleanUp := createServerAndClientReturningStatus (t , vcsutils .GitHub , false , unprocessableResponse ,
1627+ fmt .Sprintf ("/repos/%s/%s/code-scanning/sarifs" , owner , repo1 ), http .StatusUnprocessableEntity ,
1628+ createGitHubHandler )
1629+ defer cleanUp ()
1630+
1631+ enabled , err := client .IsCodeScanningEnabled (ctx , owner , repo1 )
1632+ assert .NoError (t , err )
1633+ assert .True (t , enabled )
1634+ })
1635+
1636+ t .Run ("code scanning disabled - 403 with code scanning message" , func (t * testing.T ) {
1637+ forbiddenResponse := []byte (`{
1638+ "message": "Advanced Security must be enabled for this repository to use code scanning.",
1639+ "documentation_url": "https://docs.github.com/rest/reference/code-scanning"
1640+ }` )
1641+
1642+ client , cleanUp := createServerAndClientReturningStatus (t , vcsutils .GitHub , false , forbiddenResponse ,
1643+ fmt .Sprintf ("/repos/%s/%s/code-scanning/sarifs" , owner , repo1 ), http .StatusForbidden ,
1644+ createGitHubHandler )
1645+ defer cleanUp ()
1646+
1647+ enabled , err := client .IsCodeScanningEnabled (ctx , owner , repo1 )
1648+ assert .NoError (t , err )
1649+ assert .False (t , enabled )
1650+ })
1651+
1652+ t .Run ("generic forbidden - 403 without code scanning message" , func (t * testing.T ) {
1653+ genericForbiddenResponse := []byte (`{
1654+ "message": "Forbidden"
1655+ }` )
1656+
1657+ client , cleanUp := createServerAndClientReturningStatus (t , vcsutils .GitHub , false , genericForbiddenResponse ,
1658+ fmt .Sprintf ("/repos/%s/%s/code-scanning/sarifs" , owner , repo1 ), http .StatusForbidden ,
1659+ createGitHubHandler )
1660+ defer cleanUp ()
1661+
1662+ enabled , err := client .IsCodeScanningEnabled (ctx , owner , repo1 )
1663+ assert .NoError (t , err )
1664+ assert .False (t , enabled )
1665+ })
1666+
1667+ t .Run ("unexpected success - 200 response" , func (t * testing.T ) {
1668+ successResponse := []byte (`{"message": "Success"}` )
1669+
1670+ client , cleanUp := createServerAndClientReturningStatus (t , vcsutils .GitHub , false , successResponse ,
1671+ fmt .Sprintf ("/repos/%s/%s/code-scanning/sarifs" , owner , repo1 ), http .StatusOK ,
1672+ createGitHubHandler )
1673+ defer cleanUp ()
1674+
1675+ enabled , err := client .IsCodeScanningEnabled (ctx , owner , repo1 )
1676+ assert .NoError (t , err )
1677+ assert .True (t , enabled ) // Should return true but log a warning
1678+ })
1679+
1680+ t .Run ("network error" , func (t * testing.T ) {
1681+ enabled , err := createBadGitHubClient (t ).IsCodeScanningEnabled (ctx , owner , repo1 )
1682+ assert .Error (t , err )
1683+ assert .False (t , enabled )
1684+ })
1685+
1686+ t .Run ("invalid parameters" , func (t * testing.T ) {
1687+ client , cleanUp := createServerAndClientReturningStatus (t , vcsutils .GitHub , false , nil ,
1688+ fmt .Sprintf ("/repos/%s/%s/code-scanning/sarifs" , owner , repo1 ), http .StatusUnprocessableEntity ,
1689+ createGitHubHandler )
1690+ defer cleanUp ()
1691+
1692+ // Test empty owner
1693+ enabled , err := client .IsCodeScanningEnabled (ctx , "" , repo1 )
1694+ assert .Error (t , err )
1695+ assert .False (t , enabled )
1696+ assert .Contains (t , err .Error (), "owner" )
1697+
1698+ // Test empty repository
1699+ enabled , err = client .IsCodeScanningEnabled (ctx , owner , "" )
1700+ assert .Error (t , err )
1701+ assert .False (t , enabled )
1702+ assert .Contains (t , err .Error (), "repository" )
1703+ })
1704+ }
0 commit comments