RepoAuditor 0.2.73__tar.gz → 0.2.76__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {repoauditor-0.2.73 → repoauditor-0.2.76}/PKG-INFO +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Impl/ExistsRequirementImpl.py +2 -2
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/EnsureStatusChecks.py +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicValueRequirementImpl.py +5 -5
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRequirementImpl.py +12 -9
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/Impl/EnableRulesetRequirementImpl.py +4 -2
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/Impl/ValueRequirementImpl.py +4 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequirePullRequests.py +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireSignedCommits.py +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/RequireStatusChecks.py +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DefaultBranch.py +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Description.py +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardValueRequirementImpl.py +3 -3
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Private.py +4 -5
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Requirement.py +6 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/__init__.py +1 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/CommunityStandards/CommunityStandardsQuery_UnitTest.py +5 -1
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/CommunityStandards_EndToEndTest.py +4 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubEnterprise_EndToEndTest.py +4 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals_UnitTest.py +6 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/EnsureStatusChecks_UnitTest.py +6 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush_UnitTest.py +7 -5
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireApprovals_UnitTest.py +6 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireCodeOwnerReview_UnitTest.py +6 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicBranchProtectionRequirements/RequireUpToDateBranches_UnitTest.py +16 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/DefaultBranchQueryRequirements/Protected_UnitTest.py +6 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/GitHubSession_UnitTest.py +2 -2
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/DependabotSecurityUpdates_UnitTest.py +14 -8
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/Description_UnitTest.py +5 -5
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/License_UnitTest.py +8 -6
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/MergeCommitMessage_UnitTest.py +10 -6
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/Private_UnitTest.py +10 -6
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanningPushProtection_UnitTest.py +14 -8
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/SecretScanning_UnitTest.py +14 -8
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQueryRequirements/SquashMergeCommitMessage_UnitTest.py +8 -6
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ValueRequrementImpl_UnitTest.py +6 -6
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/fixtures.py +10 -5
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHub_EndToEndTest.py +4 -4
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/__snapshots__/GitHubEnterprise_EndToEndTest.ambr +42 -43
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/__snapshots__/GitHub_EndToEndTest.ambr +66 -67
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Requirement_UnitTest.py +3 -3
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.copier-answers.yml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/CODEOWNERS +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/ISSUE_TEMPLATE/custom.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/actions/release_impl/action.yml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/pull_request_template.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/release_sources.yaml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/workflows/CICD.yml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/workflows/CICD_impl.yml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/workflows/EndToEnd.yml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.github/workflows/codeql.yml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.gitignore +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.pre-commit-config.yaml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/.python-version +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/CODE_OF_CONDUCT.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/CONTRIBUTING.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/DEVELOPMENT.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/GOVERNANCE.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/LICENSE +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/MAINTAINERS.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/README.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/SECURITY.md +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/default_config.yaml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/minisign_key.pub +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/pyproject.toml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/AutoGitSemVer.yaml +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/CommandLineProcessor.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Display.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/EntryPoint.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/ExecuteModules.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Impl/ParallelSequentialProcessor.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Impl/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Module.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugin.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/CommunityStandardsQuery.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Impl/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Module.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOfConduct.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/CodeOwners.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/Contributing.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/IssueTemplates.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/LicenseFile.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/PullRequestTemplates.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/ReadMe.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/SecurityPolicy.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/Requirements/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandards/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/CommunityStandardsPlugin.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionQuery.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowDeletions.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/AllowMainlineForcePushes.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DismissStalePullRequestApprovals.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/DoNotAllowBypassSettings.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/ClassicEnableRequirementImpl.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/Impl/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovalMostRecentPush.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireApprovals.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireCodeOwnerReview.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireConversationResolution.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireLinearHistory.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequirePullRequests.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireSignedCommits.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireStatusChecksToPass.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/RequireUpToDateBranches.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/ClassicBranchProtectionRequirements/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/DefaultBranchQuery.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/Protected.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/DefaultBranchRequirements/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/Impl/Common.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/Impl/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/Module.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/RulesetQuery.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/RulesetRequirements/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardQuery.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/AutoMerge.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DeleteHeadBranches.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/DependabotSecurityUpdates.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/StandardEnableRequirementImpl.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/Impl/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/License.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommit.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/MergeCommitMessage.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/RebaseMergeCommit.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanning.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SecretScanningPushProtection.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashCommitMerge.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SquashMergeCommitMessage.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SuggestUpdatingPullRequestBranches.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportDiscussions.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportIssues.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportProjects.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/SupportWikis.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/TemplateRepository.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/WebCommitSignoff.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/StandardRequirements/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHub/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHubBase/Module.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHubBase/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/GitHubPlugin.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Plugins/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/Query.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/src/RepoAuditor/py.typed +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/CommandLineProcessor_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/EntryPoint_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/ExecuteModules_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Module_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugin_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/CommunityStandards/ExistsRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/CommunityStandards/GitHubCommunityStandards_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicBranchProtectionQuery_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/ClassicValueRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/DefaultBranchQuery_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/EnableRulesetRequirementImpl_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/GitHubModule_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/RulesetRequirements_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/RulsesetQuery_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/StandardQuery_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/__snapshots__/CommunityStandards_EndToEndTest.ambr +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/conftest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/utilities.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Query_UnitTest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/__init__.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/__snapshots__/ExecuteModules_UnitTest.ambr +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/tests/conftest.py +0 -0
- {repoauditor-0.2.73 → repoauditor-0.2.76}/uv.lock +0 -0
|
@@ -80,8 +80,8 @@ class ExistsRequirementImpl(Requirement):
|
|
|
80
80
|
query_data: dict[str, Any],
|
|
81
81
|
requirement_args: dict[str, Any],
|
|
82
82
|
) -> Requirement.EvaluateImplResult:
|
|
83
|
-
# Check if
|
|
84
|
-
if not requirement_args
|
|
83
|
+
# Check if dynamic argument is `not unrequired`.
|
|
84
|
+
if not requirement_args.get(self.dynamic_arg_name, False):
|
|
85
85
|
for location in self.possible_locations:
|
|
86
86
|
# Get full file path in temporary repo directory and check if it exists
|
|
87
87
|
# This checks both upper case and lower case variants
|
|
@@ -24,7 +24,7 @@ class EnsureStatusChecks(Requirement):
|
|
|
24
24
|
def __init__(self) -> None:
|
|
25
25
|
super().__init__(
|
|
26
26
|
"EnsureStatusChecks",
|
|
27
|
-
"Ensure that status checks have been enabled for the branch.",
|
|
27
|
+
"Ensure that status checks have been enabled for the '{branch}' branch.",
|
|
28
28
|
ExecutionStyle.Parallel,
|
|
29
29
|
textwrap.dedent(
|
|
30
30
|
"""\
|
|
@@ -40,11 +40,11 @@ class ClassicValueRequirementImpl(ValueRequirementImpl):
|
|
|
40
40
|
|
|
41
41
|
resolution = textwrap.dedent(
|
|
42
42
|
f"""\
|
|
43
|
-
1) Visit '{{session.github_url}}/settings/branches'
|
|
44
|
-
2) Locate the 'Branch protection rules' section
|
|
45
|
-
3) Click the 'Edit' button next to the branch '{{branch}}'
|
|
46
|
-
4) Locate the '{github_settings_section}' section
|
|
47
|
-
5) Ensure that {github_settings_value_display} is {{__expected_value}}
|
|
43
|
+
1) Visit '{{session.github_url}}/settings/branches'.
|
|
44
|
+
2) Locate the 'Branch protection rules' section.
|
|
45
|
+
3) Click the 'Edit' button next to the branch '{{branch}}'.
|
|
46
|
+
4) Locate the '{github_settings_section}' section.
|
|
47
|
+
5) Ensure that {github_settings_value_display} is '{{__expected_value}}'.
|
|
48
48
|
""",
|
|
49
49
|
)
|
|
50
50
|
|
|
@@ -44,7 +44,7 @@ class EnableRequirementImpl(Requirement):
|
|
|
44
44
|
|
|
45
45
|
super().__init__(
|
|
46
46
|
name,
|
|
47
|
-
f"Validates that {subject} is set to
|
|
47
|
+
f"Validates that {subject} is set to {{__expected_value}}.",
|
|
48
48
|
ExecutionStyle.Parallel,
|
|
49
49
|
resolution,
|
|
50
50
|
rationale,
|
|
@@ -79,6 +79,17 @@ class EnableRequirementImpl(Requirement):
|
|
|
79
79
|
query_data: dict[str, Any],
|
|
80
80
|
requirement_args: dict[str, Any],
|
|
81
81
|
) -> Requirement.EvaluateImplResult:
|
|
82
|
+
expected_value = self.enabled_by_default
|
|
83
|
+
|
|
84
|
+
# The value of the dynamic arg doesn't matter as much as whether it was provided
|
|
85
|
+
if requirement_args.get(self.dynamic_arg_name, False):
|
|
86
|
+
expected_value = not expected_value
|
|
87
|
+
provide_rationale = False
|
|
88
|
+
else:
|
|
89
|
+
provide_rationale = True
|
|
90
|
+
|
|
91
|
+
query_data["__expected_value"] = expected_value
|
|
92
|
+
|
|
82
93
|
result = self.get_configuration_value_func(query_data)
|
|
83
94
|
if result is None:
|
|
84
95
|
if query_data["session"].is_enterprise:
|
|
@@ -95,14 +106,6 @@ class EnableRequirementImpl(Requirement):
|
|
|
95
106
|
|
|
96
107
|
return Requirement.EvaluateImplResult(EvaluateResult.DoesNotApply, None)
|
|
97
108
|
|
|
98
|
-
expected_value = self.enabled_by_default
|
|
99
|
-
|
|
100
|
-
if requirement_args[self.dynamic_arg_name]:
|
|
101
|
-
expected_value = not expected_value
|
|
102
|
-
provide_rationale = False
|
|
103
|
-
else:
|
|
104
|
-
provide_rationale = True
|
|
105
|
-
|
|
106
109
|
if result != expected_value:
|
|
107
110
|
query_data["__checked_desc"] = self.unset_set_terminology[int(expected_value)]
|
|
108
111
|
|
|
@@ -61,13 +61,15 @@ class EnableRulesetRequirementImpl(EnableRequirementImpl):
|
|
|
61
61
|
) -> Requirement.EvaluateImplResult:
|
|
62
62
|
expected_rule_enabled = self.enabled_by_default
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
# The value of the dynamic arg doesn't matter as much as whether it was provided
|
|
65
|
+
if requirement_args.get(self.dynamic_arg_name, False):
|
|
65
66
|
expected_rule_enabled = not expected_rule_enabled
|
|
66
67
|
provide_rationale = False
|
|
67
68
|
else:
|
|
68
69
|
provide_rationale = True
|
|
69
70
|
|
|
70
|
-
query_data["__expected_value"] =
|
|
71
|
+
query_data["__expected_value"] = expected_rule_enabled
|
|
72
|
+
query_data["__enabled_str"] = "Enable" if expected_rule_enabled else "Disable"
|
|
71
73
|
|
|
72
74
|
# Get the rules for the specified branch
|
|
73
75
|
rules = query_data.get("rules", [])
|
|
@@ -51,7 +51,7 @@ class ValueRequirementImpl(Requirement):
|
|
|
51
51
|
|
|
52
52
|
super().__init__(
|
|
53
53
|
name,
|
|
54
|
-
f"Validates that {subject} is set to
|
|
54
|
+
f"Validates that {subject} is set to '{{__expected_value}}'.",
|
|
55
55
|
ExecutionStyle.Parallel,
|
|
56
56
|
resolution,
|
|
57
57
|
rationale,
|
|
@@ -84,6 +84,9 @@ class ValueRequirementImpl(Requirement):
|
|
|
84
84
|
query_data: dict[str, Any],
|
|
85
85
|
requirement_args: dict[str, Any],
|
|
86
86
|
) -> Requirement.EvaluateImplResult:
|
|
87
|
+
expected_value = requirement_args.get("value", self.default_value)
|
|
88
|
+
query_data["__expected_value"] = f"{expected_value}"
|
|
89
|
+
|
|
87
90
|
result = self.get_configuration_value_func(query_data)
|
|
88
91
|
if result is None:
|
|
89
92
|
if self.missing_value_is_warning:
|
|
@@ -91,7 +94,6 @@ class ValueRequirementImpl(Requirement):
|
|
|
91
94
|
|
|
92
95
|
return Requirement.EvaluateImplResult(EvaluateResult.DoesNotApply, None)
|
|
93
96
|
|
|
94
|
-
expected_value = requirement_args["value"]
|
|
95
97
|
is_default_expected_value = expected_value == self.default_value
|
|
96
98
|
|
|
97
99
|
if isinstance(result, DoesNotApplyResult):
|
|
@@ -106,8 +108,6 @@ class ValueRequirementImpl(Requirement):
|
|
|
106
108
|
result = str(result)
|
|
107
109
|
|
|
108
110
|
if result != expected_value:
|
|
109
|
-
query_data["__expected_value"] = f"'{expected_value}'"
|
|
110
|
-
|
|
111
111
|
return Requirement.EvaluateImplResult(
|
|
112
112
|
EvaluateResult.Error,
|
|
113
113
|
f"{self.github_value} must be set to '{expected_value}' (it is currently set to '{result}').",
|
|
@@ -20,6 +20,6 @@ class RequirePullRequests(EnableRulesetRequirementImpl):
|
|
|
20
20
|
github_ruleset_type="pull_request",
|
|
21
21
|
github_ruleset_value="Require a pull request before merging",
|
|
22
22
|
get_configuration_value_func=lambda rule: rule.get("type", "") == "pull_request",
|
|
23
|
-
resolution="{
|
|
23
|
+
resolution="{__enabled_str} pull request rule in repository rulesets",
|
|
24
24
|
rationale="Pull request reviews help maintain code quality and collaboration",
|
|
25
25
|
)
|
|
@@ -20,6 +20,6 @@ class RequireSignedCommits(EnableRulesetRequirementImpl):
|
|
|
20
20
|
github_ruleset_type="required_signatures",
|
|
21
21
|
github_ruleset_value="Require signed commits",
|
|
22
22
|
get_configuration_value_func=lambda rule: rule.get("type", "") == "required_signatures",
|
|
23
|
-
resolution="
|
|
23
|
+
resolution="{__enabled_str} commit signing requirement in repository rulesets",
|
|
24
24
|
rationale="Signed commits ensure commit authenticity",
|
|
25
25
|
)
|
|
@@ -20,6 +20,6 @@ class RequireStatusChecks(EnableRulesetRequirementImpl):
|
|
|
20
20
|
github_ruleset_type="required_status_checks",
|
|
21
21
|
github_ruleset_value="Require status checks to pass",
|
|
22
22
|
get_configuration_value_func=lambda rule: rule.get("type", "") == "required_status_checks",
|
|
23
|
-
resolution="
|
|
23
|
+
resolution="{__enabled_str} required status checks in repository rulesets",
|
|
24
24
|
rationale="Status checks ensure code quality and compatibility",
|
|
25
25
|
)
|
|
@@ -44,9 +44,9 @@ class StandardValueRequirementImpl(
|
|
|
44
44
|
|
|
45
45
|
resolution = textwrap.dedent(
|
|
46
46
|
f"""\
|
|
47
|
-
1) Visit '{{session.github_url}}/{github_settings_url_suffix}'
|
|
48
|
-
2) Locate the '{github_settings_section}' section
|
|
49
|
-
3) Ensure that {github_settings_value_display} is set to {{__expected_value}}
|
|
47
|
+
1) Visit '{{session.github_url}}/{github_settings_url_suffix}'.
|
|
48
|
+
2) Locate the '{github_settings_section}' section.
|
|
49
|
+
3) Ensure that {github_settings_value_display} is set to '{{__expected_value}}'.
|
|
50
50
|
""",
|
|
51
51
|
)
|
|
52
52
|
|
|
@@ -25,7 +25,7 @@ class Private(Requirement):
|
|
|
25
25
|
def __init__(self) -> None:
|
|
26
26
|
super().__init__(
|
|
27
27
|
"Private",
|
|
28
|
-
"Validates that the repository is set to
|
|
28
|
+
"Validates that the repository's visibility is set to '{__expected_visibility}'.",
|
|
29
29
|
ExecutionStyle.Parallel,
|
|
30
30
|
textwrap.dedent(
|
|
31
31
|
"""\
|
|
@@ -71,16 +71,15 @@ class Private(Requirement):
|
|
|
71
71
|
query_data: dict[str, Any],
|
|
72
72
|
requirement_args: dict[str, Any],
|
|
73
73
|
) -> Requirement.EvaluateImplResult:
|
|
74
|
+
expect_private = requirement_args.get("enabled", False)
|
|
75
|
+
query_data["__expected_visibility"] = "private" if expect_private else "public"
|
|
76
|
+
|
|
74
77
|
result = query_data["standard"].get("private", None)
|
|
75
78
|
|
|
76
79
|
if result is None:
|
|
77
80
|
return CreateIncompleteDataResult()
|
|
78
81
|
|
|
79
|
-
expect_private = requirement_args["enabled"]
|
|
80
|
-
|
|
81
82
|
if result != expect_private:
|
|
82
|
-
query_data["__expected_visibility"] = "private" if expect_private else "public"
|
|
83
|
-
|
|
84
83
|
return Requirement.EvaluateImplResult(
|
|
85
84
|
EvaluateResult.Error,
|
|
86
85
|
f"The repository's visibility must be {query_data['__expected_visibility']}.",
|
|
@@ -87,6 +87,9 @@ class Requirement(ABC):
|
|
|
87
87
|
If `requires_explicit_include` is True, the requirement must be explicitly included on the command line.
|
|
88
88
|
"""
|
|
89
89
|
self.name = name
|
|
90
|
+
# Use description template so we can update this description for each requirement
|
|
91
|
+
self.description_template = description
|
|
92
|
+
# Use the description as is as backup
|
|
90
93
|
self.description = description
|
|
91
94
|
self.style = style
|
|
92
95
|
|
|
@@ -112,6 +115,9 @@ class Requirement(ABC):
|
|
|
112
115
|
"""Evaluate the requirements given the query data and specific arguments."""
|
|
113
116
|
result_info = self._EvaluateImpl(query_data, requirement_args)
|
|
114
117
|
|
|
118
|
+
# Fill in templates in description string
|
|
119
|
+
self.description = self.description_template.format(**query_data)
|
|
120
|
+
|
|
115
121
|
if result_info.result == EvaluateResult.Error:
|
|
116
122
|
return Requirement.EvaluateInfo(
|
|
117
123
|
result_info.result,
|
|
@@ -27,10 +27,15 @@ class MockTemporaryDirectory:
|
|
|
27
27
|
|
|
28
28
|
@pytest.fixture(autouse=True)
|
|
29
29
|
def patch_temp_directory(monkeypatch):
|
|
30
|
+
"""Prevent creation of TemporaryDirectory within GetData calls,
|
|
31
|
+
so we don't need to perform cleanup.
|
|
32
|
+
"""
|
|
30
33
|
monkeypatch.delattr("tempfile.TemporaryDirectory")
|
|
31
34
|
|
|
32
35
|
|
|
33
36
|
class TestCommunityStandardsQuery:
|
|
37
|
+
"""Tests for CommunityStandardsQuery class."""
|
|
38
|
+
|
|
34
39
|
def test_GetData(self, module_data, monkeypatch):
|
|
35
40
|
"""Test the GetData method."""
|
|
36
41
|
monkeypatch.setattr(
|
|
@@ -41,7 +46,6 @@ class TestCommunityStandardsQuery:
|
|
|
41
46
|
|
|
42
47
|
def mock_clone_from(github_url, repo_dirname, branch="main"):
|
|
43
48
|
"""A mocked clone_from method for the git.Repo class."""
|
|
44
|
-
pass
|
|
45
49
|
|
|
46
50
|
monkeypatch.setattr(
|
|
47
51
|
Repo,
|
|
@@ -321,8 +321,8 @@ class TestCommunityStandards:
|
|
|
321
321
|
# ----------------------------------------------------------------------
|
|
322
322
|
# ----------------------------------------------------------------------
|
|
323
323
|
# ----------------------------------------------------------------------
|
|
324
|
-
@pytest.fixture
|
|
325
|
-
def
|
|
324
|
+
@pytest.fixture(name="args")
|
|
325
|
+
def args_fixture() -> list[str]:
|
|
326
326
|
return [
|
|
327
327
|
"--include",
|
|
328
328
|
"CommunityStandards",
|
|
@@ -332,8 +332,8 @@ def args() -> list[str]:
|
|
|
332
332
|
|
|
333
333
|
|
|
334
334
|
# ----------------------------------------------------------------------
|
|
335
|
-
@pytest.fixture
|
|
336
|
-
def
|
|
335
|
+
@pytest.fixture(name="pat_args")
|
|
336
|
+
def pat_args_fixture(args) -> list[str]:
|
|
337
337
|
github_pat_filename = (Path(__file__).parent / "github_pat.txt").resolve()
|
|
338
338
|
CheckPATFileExists(github_pat_filename)
|
|
339
339
|
|
|
@@ -23,8 +23,8 @@ pytest.fixture(InitializeStreamCapabilities(), scope="session", autouse=True)
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# ----------------------------------------------------------------------
|
|
26
|
-
@pytest.fixture
|
|
27
|
-
def
|
|
26
|
+
@pytest.fixture(name="args")
|
|
27
|
+
def args_fixture() -> list[str]:
|
|
28
28
|
return [
|
|
29
29
|
"--include",
|
|
30
30
|
"GitHub",
|
|
@@ -37,8 +37,8 @@ def args() -> list[str]:
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
# ----------------------------------------------------------------------
|
|
40
|
-
@pytest.fixture
|
|
41
|
-
def
|
|
40
|
+
@pytest.fixture(name="pat_args")
|
|
41
|
+
def pat_args_fixture(args) -> list[str]:
|
|
42
42
|
github_pat_filename = (Path(__file__).parent / "github_gatech_pat.txt").resolve()
|
|
43
43
|
parsed = urllib.parse.urlparse(GetGithubUrl("enterprise"))
|
|
44
44
|
parsed = parsed._replace(path="")
|
|
@@ -14,8 +14,8 @@ from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionRequirements.DismissStale
|
|
|
14
14
|
from RepoAuditor.Requirement import EvaluateResult
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
@pytest.fixture
|
|
18
|
-
def
|
|
17
|
+
@pytest.fixture(name="query_data")
|
|
18
|
+
def query_data_fixture(session):
|
|
19
19
|
return {
|
|
20
20
|
"session": session,
|
|
21
21
|
"branch": "main",
|
|
@@ -27,12 +27,14 @@ def query_data(session):
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
@pytest.fixture
|
|
31
|
-
def
|
|
30
|
+
@pytest.fixture(name="requirement")
|
|
31
|
+
def requirement_fixture():
|
|
32
32
|
return DismissStalePullRequestApprovals()
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class TestDismissStalePullRequestApprovals:
|
|
36
|
+
"""Tests for the DismissStalePullRequestApprovals requirement class."""
|
|
37
|
+
|
|
36
38
|
def test_required_pull_request_reviews_missing(self, requirement, query_data):
|
|
37
39
|
"""Test when `required_pull_request_reviews` is missing."""
|
|
38
40
|
query_data["branch_protection_data"] = {}
|
|
@@ -14,8 +14,8 @@ from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionRequirements.EnsureStatus
|
|
|
14
14
|
from RepoAuditor.Requirement import EvaluateResult
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
@pytest.fixture
|
|
18
|
-
def
|
|
17
|
+
@pytest.fixture(name="query_data")
|
|
18
|
+
def query_data_fixture(session):
|
|
19
19
|
return {
|
|
20
20
|
"session": session,
|
|
21
21
|
"branch": "main",
|
|
@@ -27,12 +27,14 @@ def query_data(session):
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
@pytest.fixture
|
|
31
|
-
def
|
|
30
|
+
@pytest.fixture(name="requirement")
|
|
31
|
+
def requirement_fixture():
|
|
32
32
|
return EnsureStatusChecks()
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class TestEnsureStatusChecks:
|
|
36
|
+
"""Tests for the EnsureStatusChecks requirement class."""
|
|
37
|
+
|
|
36
38
|
def test_disabled(self, requirement, query_data):
|
|
37
39
|
"""Test disabled requirement"""
|
|
38
40
|
requirement_args = {"disabled": True}
|
|
@@ -14,8 +14,8 @@ from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionRequirements.RequireAppro
|
|
|
14
14
|
from RepoAuditor.Requirement import EvaluateResult
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
@pytest.fixture
|
|
18
|
-
def
|
|
17
|
+
@pytest.fixture(name="query_data")
|
|
18
|
+
def query_data_fixture(session):
|
|
19
19
|
return {
|
|
20
20
|
"session": session,
|
|
21
21
|
"branch": "main",
|
|
@@ -27,12 +27,14 @@ def query_data(session):
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
@pytest.fixture
|
|
31
|
-
def
|
|
30
|
+
@pytest.fixture(name="requirement")
|
|
31
|
+
def requirement_fixture():
|
|
32
32
|
return RequireApprovalMostRecentPush()
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class TestRequireApprovalMostRecentPush:
|
|
36
|
+
"""Tests for the RequireApprovalMostRecentPush requirement class."""
|
|
37
|
+
|
|
36
38
|
def test_required_pull_request_reviews_missing(self, requirement, query_data):
|
|
37
39
|
"""Test when `required_pull_request_reviews` is missing"""
|
|
38
40
|
query_data["branch_protection_data"] = {}
|
|
@@ -59,10 +61,10 @@ class TestRequireApprovalMostRecentPush:
|
|
|
59
61
|
|
|
60
62
|
def test_require_last_push_approval_none(self, requirement, query_data):
|
|
61
63
|
"""Test when `require_last_push_approval` is None"""
|
|
62
|
-
requirement_args = {}
|
|
63
64
|
query_data["branch_protection_data"]["required_pull_request_reviews"][
|
|
64
65
|
"require_last_push_approval"
|
|
65
66
|
] = None
|
|
67
|
+
requirement_args = {}
|
|
66
68
|
result = requirement.Evaluate(query_data, requirement_args)
|
|
67
69
|
assert result.result == EvaluateResult.DoesNotApply
|
|
68
70
|
assert result.context is None
|
|
@@ -12,8 +12,8 @@ from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionRequirements.RequireAppro
|
|
|
12
12
|
from RepoAuditor.Requirement import EvaluateResult
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
@pytest.fixture
|
|
16
|
-
def
|
|
15
|
+
@pytest.fixture(name="query_data")
|
|
16
|
+
def query_data_fixture(session):
|
|
17
17
|
return {
|
|
18
18
|
"session": session,
|
|
19
19
|
"branch": "main",
|
|
@@ -25,12 +25,14 @@ def query_data(session):
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
@pytest.fixture
|
|
29
|
-
def
|
|
28
|
+
@pytest.fixture(name="requirement")
|
|
29
|
+
def requirement_fixture():
|
|
30
30
|
return RequireApprovals()
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class TestRequireApprovals:
|
|
34
|
+
"""Tests for the RequireApprovals requirement class."""
|
|
35
|
+
|
|
34
36
|
def test_required_pull_request_reviews_missing(self, requirement, query_data):
|
|
35
37
|
"""Test when `required_pull_request_reviews` is missing"""
|
|
36
38
|
query_data["branch_protection_data"] = {}
|
|
@@ -14,8 +14,8 @@ from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionRequirements.RequireCodeO
|
|
|
14
14
|
from RepoAuditor.Requirement import EvaluateResult
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
@pytest.fixture
|
|
18
|
-
def
|
|
17
|
+
@pytest.fixture(name="query_data")
|
|
18
|
+
def query_data_fixture(session):
|
|
19
19
|
return {
|
|
20
20
|
"session": session,
|
|
21
21
|
"branch": "main",
|
|
@@ -27,12 +27,14 @@ def query_data(session):
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
@pytest.fixture
|
|
31
|
-
def
|
|
30
|
+
@pytest.fixture(name="requirement")
|
|
31
|
+
def requirement_fixture():
|
|
32
32
|
return RequireCodeOwnerReview()
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class TestRequireCodeOwnerReview:
|
|
36
|
+
"""Tests for the RequireCodeOwnerReview requirement class."""
|
|
37
|
+
|
|
36
38
|
def test_required_pull_request_reviews_missing(self, requirement, query_data):
|
|
37
39
|
"""Test when `required_pull_request_reviews` is missing"""
|
|
38
40
|
query_data["branch_protection_data"] = {}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------------
|
|
2
|
+
# |
|
|
3
|
+
# | Copyright (c) 2024 Scientific Software Engineering Center at Georgia Tech
|
|
4
|
+
# | Distributed under the MIT License.
|
|
5
|
+
# |
|
|
6
|
+
# -------------------------------------------------------------------------------
|
|
7
|
+
"""Unit tests for RequireUpToDateBranches."""
|
|
8
|
+
|
|
1
9
|
import pytest
|
|
2
10
|
|
|
3
11
|
from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionRequirements.RequireUpToDateBranches import (
|
|
@@ -6,8 +14,9 @@ from RepoAuditor.Plugins.GitHub.ClassicBranchProtectionRequirements.RequireUpToD
|
|
|
6
14
|
from RepoAuditor.Requirement import EvaluateResult
|
|
7
15
|
|
|
8
16
|
|
|
9
|
-
@pytest.fixture
|
|
10
|
-
def
|
|
17
|
+
@pytest.fixture(name="query_data")
|
|
18
|
+
def query_data_fixture(session):
|
|
19
|
+
"""Sample query data fixture."""
|
|
11
20
|
return {
|
|
12
21
|
"session": session,
|
|
13
22
|
"branch": "main",
|
|
@@ -19,12 +28,15 @@ def query_data(session):
|
|
|
19
28
|
}
|
|
20
29
|
|
|
21
30
|
|
|
22
|
-
@pytest.fixture
|
|
23
|
-
def
|
|
31
|
+
@pytest.fixture(name="requirement")
|
|
32
|
+
def requirement_fixture():
|
|
33
|
+
"""RequireUpToDateBranches requirement fixture."""
|
|
24
34
|
return RequireUpToDateBranches()
|
|
25
35
|
|
|
26
36
|
|
|
27
37
|
class TestRequireUpToDateBranches:
|
|
38
|
+
"""Tests for RequireUpToDateBranches requirement."""
|
|
39
|
+
|
|
28
40
|
def test_required_status_checks_missing(self, requirement, query_data):
|
|
29
41
|
"""Test when `required_status_checks` is missing"""
|
|
30
42
|
query_data["branch_protection_data"] = {}
|
|
@@ -12,8 +12,8 @@ from RepoAuditor.Plugins.GitHub.DefaultBranchRequirements.Protected import Prote
|
|
|
12
12
|
from RepoAuditor.Requirement import EvaluateResult
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
@pytest.fixture
|
|
16
|
-
def
|
|
15
|
+
@pytest.fixture(name="query_data")
|
|
16
|
+
def query_data_fixture(session):
|
|
17
17
|
return {
|
|
18
18
|
"session": session,
|
|
19
19
|
"default_branch_data": {
|
|
@@ -22,12 +22,14 @@ def query_data(session):
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
@pytest.fixture
|
|
26
|
-
def
|
|
25
|
+
@pytest.fixture(name="requirement")
|
|
26
|
+
def requirement_fixture():
|
|
27
27
|
return Protected()
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class TestProtected:
|
|
31
|
+
"""Tests for the Protected requirement class."""
|
|
32
|
+
|
|
31
33
|
def test_Incomplete(self, requirement, query_data):
|
|
32
34
|
"""Test for incomplete result"""
|
|
33
35
|
query_data["default_branch_data"] = {}
|
{repoauditor-0.2.73 → repoauditor-0.2.76}/tests/Plugins/GitHubModule/GitHubSession_UnitTest.py
RENAMED
|
@@ -14,8 +14,8 @@ import requests
|
|
|
14
14
|
from RepoAuditor.Plugins.GitHubBase.Module import _GitHubSession
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
@pytest.fixture
|
|
18
|
-
def
|
|
17
|
+
@pytest.fixture(name="github_pat")
|
|
18
|
+
def github_pat_fixture(fs):
|
|
19
19
|
"""Fixture for GitHub PAT file, which creates a fake PAT file and returns the path."""
|
|
20
20
|
pat_path = Path(__file__).parent / "dummy_github_pat.txt"
|
|
21
21
|
fs.create_file(pat_path, contents="github_path_abcdefghijklmnop")
|
|
@@ -14,8 +14,8 @@ from RepoAuditor.Plugins.GitHub.StandardRequirements.DependabotSecurityUpdates i
|
|
|
14
14
|
from RepoAuditor.Requirement import EvaluateResult
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
@pytest.fixture
|
|
18
|
-
def
|
|
17
|
+
@pytest.fixture(name="query_data")
|
|
18
|
+
def query_data_fixture(session):
|
|
19
19
|
return {
|
|
20
20
|
"session": session,
|
|
21
21
|
"standard": {
|
|
@@ -28,37 +28,43 @@ def query_data(session):
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
@pytest.fixture
|
|
32
|
-
def
|
|
31
|
+
@pytest.fixture(name="requirement")
|
|
32
|
+
def requirement_fixture():
|
|
33
33
|
return DependabotSecurityUpdates()
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class TestDependabotSecurityUpdates:
|
|
37
|
+
"""Tests for the DependabotSecurityUpdates requirement class."""
|
|
38
|
+
|
|
37
39
|
def test_security_and_analysis_missing(self, requirement, query_data):
|
|
38
40
|
"""Test if `security_and_analysis` is missing"""
|
|
39
41
|
query_data["standard"] = {}
|
|
40
|
-
|
|
42
|
+
requirement_args = {}
|
|
43
|
+
result = requirement.Evaluate(query_data, requirement_args)
|
|
41
44
|
assert result.result == EvaluateResult.Warning
|
|
42
45
|
assert "Incomplete data was encountered" in result.context
|
|
43
46
|
|
|
44
47
|
def test_dependabot_security_updates_missing(self, requirement, query_data):
|
|
45
48
|
"""Test if `dependabot_security_updates` is missing"""
|
|
46
49
|
query_data["standard"]["security_and_analysis"] = {}
|
|
47
|
-
|
|
50
|
+
requirement_args = {}
|
|
51
|
+
result = requirement.Evaluate(query_data, requirement_args)
|
|
48
52
|
assert result.result == EvaluateResult.Warning
|
|
49
53
|
assert "Incomplete data was encountered" in result.context
|
|
50
54
|
|
|
51
55
|
def test_status_missing(self, requirement, query_data):
|
|
52
56
|
"""Test if `status` is missing"""
|
|
53
57
|
query_data["standard"]["security_and_analysis"]["dependabot_security_updates"] = {}
|
|
54
|
-
|
|
58
|
+
requirement_args = {}
|
|
59
|
+
result = requirement.Evaluate(query_data, requirement_args)
|
|
55
60
|
assert result.result == EvaluateResult.Warning
|
|
56
61
|
assert "Incomplete data was encountered" in result.context
|
|
57
62
|
|
|
58
63
|
def test_status_none(self, requirement, query_data):
|
|
59
64
|
"""Test if `status` is None"""
|
|
60
65
|
query_data["standard"]["security_and_analysis"]["dependabot_security_updates"]["status"] = None
|
|
61
|
-
|
|
66
|
+
requirement_args = {}
|
|
67
|
+
result = requirement.Evaluate(query_data, requirement_args)
|
|
62
68
|
assert result.result == EvaluateResult.Warning
|
|
63
69
|
assert "Incomplete data was encountered" in result.context
|
|
64
70
|
|