gitea/tests/integration
Marcell Mars a3881ffa3d
Enhancing Gitea OAuth2 Provider with Granular Scopes for Resource Access (#32573)
Resolve #31609

This PR was initiated following my personal research to find the
lightest possible Single Sign-On solution for self-hosted setups. The
existing solutions often seemed too enterprise-oriented, involving many
moving parts and services, demanding significant resources while
promising planetary-scale capabilities. Others were adequate in
supporting basic OAuth2 flows but lacked proper user management
features, such as a change password UI.

Gitea hits the sweet spot for me, provided it supports more granular
access permissions for resources under users who accept the OAuth2
application.

This PR aims to introduce granularity in handling user resources as
nonintrusively and simply as possible. It allows third parties to inform
users about their intent to not ask for the full access and instead
request a specific, reduced scope. If the provided scopes are **only**
the typical ones for OIDC/OAuth2—`openid`, `profile`, `email`, and
`groups`—everything remains unchanged (currently full access to user's
resources). Additionally, this PR supports processing scopes already
introduced with [personal
tokens](https://docs.gitea.com/development/oauth2-provider#scopes) (e.g.
`read:user`, `write:issue`, `read:group`, `write:repository`...)

Personal tokens define scopes around specific resources: user info,
repositories, issues, packages, organizations, notifications,
miscellaneous, admin, and activitypub, with access delineated by read
and/or write permissions.

The initial case I wanted to address was to have Gitea act as an OAuth2
Identity Provider. To achieve that, with this PR, I would only add
`openid public-only` to provide access token to the third party to
authenticate the Gitea's user but no further access to the API and users
resources.

Another example: if a third party wanted to interact solely with Issues,
it would need to add `read:user` (for authorization) and
`read:issue`/`write:issue` to manage Issues.

My approach is based on my understanding of how scopes can be utilized,
supported by examples like [Sample Use Cases: Scopes and
Claims](https://auth0.com/docs/get-started/apis/scopes/sample-use-cases-scopes-and-claims)
on auth0.com.

I renamed `CheckOAuthAccessToken` to `GetOAuthAccessTokenScopeAndUserID`
so now it returns AccessTokenScope and user's ID. In the case of
additional scopes in `userIDFromToken` the default `all` would be
reduced to whatever was asked via those scopes. The main difference is
the opportunity to reduce the permissions from `all`, as is currently
the case, to what is provided by the additional scopes described above.

Screenshots:

![Screenshot_20241121_121405](https://github.com/user-attachments/assets/29deaed7-4333-4b02-8898-b822e6f2463e)

![Screenshot_20241121_120211](https://github.com/user-attachments/assets/7a4a4ef7-409c-4116-9d5f-2fe00eb37167)

![Screenshot_20241121_120119](https://github.com/user-attachments/assets/aa52c1a2-212d-4e64-bcdf-7122cee49eb6)

![Screenshot_20241121_120018](https://github.com/user-attachments/assets/9eac318c-e381-4ea9-9e2c-3a3f60319e47)
---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2024-11-22 12:06:41 +08:00
..
migration-test Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
schemas verify nodeinfo response by schema (#22137) 2022-12-17 01:22:34 -05:00
actions_trigger_test.go Add reviewers selection to new pull request (#32403) 2024-11-09 04:48:31 +00:00
admin_config_test.go Move admin routers from /admin to /-/admin (#32189) 2024-10-10 04:56:49 +00:00
admin_user_test.go Move admin routers from /admin to /-/admin (#32189) 2024-10-10 04:56:49 +00:00
api_actions_artifact_test.go Refactor tests to prevent from unnecessary preparations (#32398) 2024-11-01 23:18:29 +08:00
api_actions_artifact_v4_test.go Refactor tests to prevent from unnecessary preparations (#32398) 2024-11-01 23:18:29 +08:00
api_activitypub_person_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_admin_org_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_admin_test.go Support repo license (#24872) 2024-10-01 15:25:08 -04:00
api_branch_test.go Recommend/convert to use case-sensitive collation for MySQL/MSSQL (#28662) 2024-01-10 11:03:23 +00:00
api_comment_attachment_test.go Include file extension checks in attachment API (#32151) 2024-11-06 21:34:32 +00:00
api_comment_test.go Add user blocking (#29028) 2024-03-04 08:16:03 +00:00
api_feed_user_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
api_fork_test.go Refactor find forks and fix possible bugs that weak permissions check (#32528) 2024-11-18 03:06:25 +00:00
api_gitignore_templates_test.go Add API for gitignore templates (#22783) 2023-04-27 11:51:20 +08:00
api_gpg_keys_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_helper_for_declarative_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_httpsig_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
api_issue_attachment_test.go Include file extension checks in attachment API (#32151) 2024-11-06 21:34:32 +00:00
api_issue_config_test.go Update misspell to 0.5.1 and add misspellings.csv (#30573) 2024-04-27 08:03:49 +00:00
api_issue_label_test.go Support using label names when changing issue labels (#30943) 2024-05-13 04:28:53 +00:00
api_issue_milestone_test.go Fix milestone deadline and date related problems (#32339) 2024-11-05 07:46:40 +00:00
api_issue_pin_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_issue_reaction_test.go Add user blocking (#29028) 2024-03-04 08:16:03 +00:00
api_issue_stopwatch_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_issue_subscription_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_issue_templates_test.go Refactor issue template parsing and fix API endpoint (#29069) 2024-02-12 05:04:10 +00:00
api_issue_test.go Fix bug when a token is given public only (#32204) 2024-10-08 12:51:09 +03:00
api_issue_tracked_time_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_keys_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_label_templates_test.go Add API for Label templates (#24602) 2023-05-23 18:10:23 +08:00
api_license_templates_test.go Add API for License templates (#23009) 2023-04-26 02:08:28 -04:00
api_nodeinfo_test.go Allow non-admin users to delete review requests (#29057) 2024-02-24 12:38:43 +00:00
api_notification_test.go Enable more revive linter rules (#30608) 2024-04-22 11:48:42 +00:00
api_oauth2_apps_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_org_avatar_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_org_test.go Allow code search by filename (#32210) 2024-10-11 23:35:04 +00:00
api_packages_alpine_test.go Integrate alpine noarch packages into other architectures index (#29137) 2024-02-25 15:10:55 +00:00
api_packages_cargo_test.go Run go generate and go vet on all packages (#30529) 2024-04-17 09:40:35 +00:00
api_packages_chef_test.go Resolve lint for unused parameter and unnecessary type arguments (#30750) 2024-04-29 08:47:56 +00:00
api_packages_composer_test.go Add bin to Composer Metadata (#32099) 2024-09-21 22:42:17 +00:00
api_packages_conan_test.go Fix nuget/conan/container packages upload bugs (#31967) 2024-09-05 07:05:42 +00:00
api_packages_conda_test.go Support compression for Actions logs (#31761) 2024-08-09 10:10:30 +08:00
api_packages_container_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
api_packages_cran_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_packages_debian_test.go Fix db engine (#32351) 2024-10-27 18:48:07 -04:00
api_packages_generic_test.go Azure blob storage support (#30995) 2024-05-30 07:33:50 +00:00
api_packages_goproxy_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_packages_helm_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_packages_maven_test.go Fix upload maven pacakge parallelly (#31851) 2024-09-21 19:26:45 +00:00
api_packages_npm_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_packages_nuget_test.go Fix nuget/conan/container packages upload bugs (#31967) 2024-09-05 07:05:42 +00:00
api_packages_pub_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_packages_pypi_test.go Fix links in PyPI Simple Repository API page (#30594) 2024-04-20 01:15:14 +00:00
api_packages_rpm_test.go Add signature support for the RPM module (#27069) 2024-08-06 09:03:33 -04:00
api_packages_rubygems_test.go Improve rubygems package registry (#31357) 2024-06-17 08:42:46 +00:00
api_packages_swift_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_packages_test.go Use crypto/sha256 (#29386) 2024-02-25 13:32:13 +00:00
api_packages_vagrant_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_private_serv_test.go Final round of db.DefaultContext refactor (#27587) 2023-10-14 08:37:24 +00:00
api_pull_commits_test.go api: GetPullRequestCommits: return file list (#27483) 2023-10-09 11:22:12 +00:00
api_pull_review_test.go Add reviewers selection to new pull request (#32403) 2024-11-09 04:48:31 +00:00
api_pull_test.go Fix bug in getting merged pull request by commit (#32079) 2024-09-24 01:00:09 +00:00
api_releases_attachment_test.go Include file extension checks in attachment API (#32151) 2024-11-06 21:34:32 +00:00
api_releases_test.go Handle invalid target when creating releases using API (#31841) 2024-09-12 07:47:31 +00:00
api_repo_archive_test.go Add an immutable tarball link to archive download headers for Nix (#31139) 2024-05-28 15:30:34 +00:00
api_repo_avatar_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_branch_test.go Fix bug when a token is given public only (#32204) 2024-10-08 12:51:09 +03:00
api_repo_collaborator_test.go Add user blocking (#29028) 2024-03-04 08:16:03 +00:00
api_repo_compare_test.go feat(api): implement branch/commit comparison API (#30349) 2024-04-16 11:45:04 +08:00
api_repo_edit_test.go Add merge style fast-forward-only (#28954) 2024-02-12 23:37:23 +01:00
api_repo_file_create_test.go Move context from modules to services (#29440) 2024-02-27 08:12:22 +01:00
api_repo_file_delete_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_file_get_test.go Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
api_repo_file_helpers.go Fix Bug in Issue Config when only contact links are set (#26521) 2023-09-28 20:16:40 +08:00
api_repo_file_update_test.go Move context from modules to services (#29440) 2024-02-27 08:12:22 +01:00
api_repo_files_change_test.go Move context from modules to services (#29440) 2024-02-27 08:12:22 +01:00
api_repo_get_contents_list_test.go Simplify how git repositories are opened (#28937) 2024-01-27 21:09:51 +01:00
api_repo_get_contents_test.go Simplify how git repositories are opened (#28937) 2024-01-27 21:09:51 +01:00
api_repo_git_blobs_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_git_commits_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_git_hook_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_git_notes_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_git_ref_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_git_tags_test.go Resolve lint for unused parameter and unnecessary type arguments (#30750) 2024-04-29 08:47:56 +00:00
api_repo_git_trees_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_hook_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_languages_test.go Remove session in api tests (#21984) 2022-12-01 22:39:42 -05:00
api_repo_lfs_locks_test.go Fix #31185 try fix lfs download from bitbucket failed (#31201) 2024-06-11 22:22:28 +00:00
api_repo_lfs_migrate_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_lfs_test.go Fix #31185 try fix lfs download from bitbucket failed (#31201) 2024-06-11 22:22:28 +00:00
api_repo_license_test.go Support repo license (#24872) 2024-10-01 15:25:08 -04:00
api_repo_raw_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_secrets_test.go feat(api): enhance Actions Secrets Management API for repository (#30656) 2024-04-26 21:11:49 +08:00
api_repo_tags_test.go Add lint-go-gopls (#30729) 2024-06-05 09:22:38 +08:00
api_repo_teams_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_repo_test.go Allow code search by filename (#32210) 2024-10-11 23:35:04 +00:00
api_repo_topic_test.go Refactor topic Find functions and add more tests for pagination (#30127) 2024-03-29 11:38:16 +08:00
api_repo_variables_test.go Add API for Variables (#29520) 2024-03-28 20:40:35 +00:00
api_settings_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
api_team_test.go Allow everyone to read or write a wiki by a repo unit setting (#30495) 2024-04-17 15:58:37 +00:00
api_team_user_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_token_test.go Fix incorrect /tokens api (#32085) 2024-09-20 19:00:39 +00:00
api_twofa_test.go Fix basic auth with webauthn (#32531) 2024-11-16 17:52:16 +00:00
api_user_avatar_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_user_block_test.go Add user blocking (#29028) 2024-03-04 08:16:03 +00:00
api_user_email_test.go Unify user update methods (#28733) 2024-02-04 13:29:09 +00:00
api_user_follow_test.go Add user blocking (#29028) 2024-03-04 08:16:03 +00:00
api_user_heatmap_test.go Refactor timeutil package (#28623) 2023-12-28 10:09:57 +00:00
api_user_info_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_user_org_perm_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_user_orgs_test.go Fix wrong display of recently pushed notification (#25812) 2024-05-21 17:00:35 +00:00
api_user_search_test.go Fix bug when a token is given public only (#32204) 2024-10-08 12:51:09 +03:00
api_user_secrets_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
api_user_star_test.go Add user blocking (#29028) 2024-03-04 08:16:03 +00:00
api_user_update_test.go Add an api test for updating user (#30539) 2024-04-18 03:16:20 +00:00
api_user_variables_test.go Clarify Actions resources ownership (#31724) 2024-08-01 09:04:04 +00:00
api_user_watch_test.go Add user blocking (#29028) 2024-03-04 08:16:03 +00:00
api_wiki_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
attachment_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
auth_ldap_test.go Move admin routers from /admin to /-/admin (#32189) 2024-10-10 04:56:49 +00:00
avatar.png Add API for changing Avatars (#25369) 2023-06-29 23:22:55 +00:00
benchmarks_test.go Replace deprecated math/rand functions (#30733) 2024-04-27 18:50:35 +02:00
branches_test.go Refactor locale&string&template related code (#29165) 2024-02-14 21:48:45 +00:00
change_default_branch_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
cmd_keys_test.go Refactor to use urfave/cli/v2 (#25959) 2023-07-21 17:28:19 +08:00
compare_test.go Simplify 404/500 page (#31409) 2024-06-23 17:45:21 +00:00
cors_test.go Refactor CORS handler (#28587) 2023-12-25 20:13:18 +08:00
create_no_session_test.go Refactor tests (#26464) 2023-08-12 16:30:16 +00:00
csrf_test.go Refactor CSRF protector (#32057) 2024-09-18 15:17:25 +08:00
db_collation_test.go Refactor push mirror find and add check for updating push mirror (#32539) 2024-11-18 05:59:04 +00:00
delete_user_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
download_test.go Remove deprecated packages & staticcheck fixes (#22012) 2022-12-02 17:06:23 -05:00
dump_restore_test.go Add lint-go-gopls (#30729) 2024-06-05 09:22:38 +08:00
editor_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
empty_repo_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
eventsource_test.go Convert to url auth to header auth in tests (#28484) 2023-12-21 23:59:59 +00:00
explore_repos_test.go Improve repo search UI (#29767) 2024-03-15 09:45:30 +00:00
explore_user_test.go Remove unnecessary ".Link" usages (#29909) 2024-03-20 13:56:42 +08:00
git_clone_wiki_test.go Use raw Wiki links for non-renderable Wiki files (#30273) 2024-04-10 17:49:57 +00:00
git_general_test.go Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
git_helper_for_declarative_test.go Fix push multiple branches error with tests (#31151) 2024-05-29 06:43:02 +00:00
git_lfs_ssh_test.go Fix LFS route mock, realm, middleware names (#32488) 2024-11-13 16:58:09 +08:00
git_misc_test.go Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
git_push_test.go Prevent update pull refs manually and will not affect other refs update (#31931) 2024-09-02 07:38:27 +00:00
git_smart_http_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
goget_test.go Support SSH for go get (#24664) 2023-05-12 09:44:37 +00:00
gpg_git_test.go Add lint-go-gopls (#30729) 2024-06-05 09:22:38 +08:00
html_helper.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
incoming_email_test.go Add missing comment reply handling (#32050) 2024-09-17 20:56:26 +00:00
integration_test.go Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
issue_test.go Fix milestone deadline and date related problems (#32339) 2024-11-05 07:46:40 +00:00
lfs_getobject_test.go Remove GetByBean method because sometimes it's danger when query condition parameter is zero and also introduce new generic methods (#28220) 2023-12-07 15:27:36 +08:00
lfs_local_endpoint_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
lfs_view_test.go Fix test fixtures for user2/lfs.git (#32477) 2024-11-12 05:41:22 +00:00
linguist_test.go Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
links_test.go Refactor RepoRefByType (#32413) 2024-11-05 06:35:54 +00:00
markup_external_test.go Refactor render system (#32492) 2024-11-14 05:02:11 +00:00
migrate_test.go bump to go 1.23 (#31855) 2024-09-10 02:23:07 +00:00
mirror_pull_test.go Move migration functions to services layer (#29497) 2024-03-01 02:23:00 +00:00
mirror_push_test.go Refactor push mirror find and add check for updating push mirror (#32539) 2024-11-18 05:59:04 +00:00
nonascii_branches_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
oauth_test.go Enhancing Gitea OAuth2 Provider with Granular Scopes for Resource Access (#32573) 2024-11-22 12:06:41 +08:00
org_count_test.go Use db.Find instead of writing methods for every object (#28084) 2023-11-24 03:49:41 +00:00
org_project_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
org_team_invite_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
org_test.go Ensure GetCSRF doesn't return an empty token (#32130) 2024-09-30 02:28:09 +00:00
private-testing.key
privateactivity_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
project_test.go Rename project board -> column to make the UI less confusing (#30170) 2024-05-27 08:59:54 +00:00
pull_commit_test.go Fix the logic of finding the latest pull review commit ID (#32139) 2024-10-01 01:58:55 +00:00
pull_compare_test.go Allow maintainers to view and edit files of private repos when "Allow maintainers to edit" is enabled (#32215) 2024-10-11 19:08:19 +00:00
pull_create_test.go Fix PR creation on forked repositories (#31863) 2024-10-04 13:12:48 -04:00
pull_diff_test.go Add commits dropdown in PR files view and allow commit by commit review (#25528) 2023-07-28 21:18:12 +02:00
pull_merge_test.go Add line-through for deleted branch on pull request view page (#32500) 2024-11-21 17:04:18 +00:00
pull_review_test.go Fix wrong display of recently pushed notification (#25812) 2024-05-21 17:00:35 +00:00
pull_status_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
pull_update_test.go Add reviewers selection to new pull request (#32403) 2024-11-09 04:48:31 +00:00
README_ZH.md add {{TEST_MINIO_ENDPOINT}} for local testing "with/without" docker + fix pgsql testing doc (#32105) 2024-10-03 01:00:56 +00:00
README.md Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
release_test.go Restyle release list, fix branch dropdown (#30837) 2024-05-13 23:33:51 +02:00
rename_branch_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
repo_activity_test.go Fix wrong display of recently pushed notification (#25812) 2024-05-21 17:00:35 +00:00
repo_archive_test.go Skip gzip for some well-known compressed file types (#30796) 2024-05-02 02:27:25 +00:00
repo_branch_test.go Improve testing and try to fix MySQL hanging (#32515) 2024-11-15 23:45:07 +08:00
repo_commits_search_test.go Integration Test for Commit Search containing Square Brackets (#28751) 2024-01-11 11:04:45 +08:00
repo_commits_test.go Restore warning commit status (#27504) 2023-10-08 22:16:06 +00:00
repo_fork_test.go Refactor find forks and fix possible bugs that weak permissions check (#32528) 2024-11-18 03:06:25 +00:00
repo_generate_test.go Substitute variables in path names of template repos too (#25294) 2023-06-20 21:14:47 +00:00
repo_mergecommit_revert_test.go Run go generate and go vet on all packages (#30529) 2024-04-17 09:40:35 +00:00
repo_migrate_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
repo_search_test.go Resolve lint for unused parameter and unnecessary type arguments (#30750) 2024-04-29 08:47:56 +00:00
repo_tag_test.go Fix broken releases when re-pushing tags (#32435) 2024-11-08 10:53:06 +08:00
repo_test.go Fix repo home UI when there is no repo description (#30552) 2024-04-21 23:47:31 +00:00
repo_topic_test.go Refactor topic Find functions and add more tests for pagination (#30127) 2024-03-29 11:38:16 +08:00
repo_watch_test.go Replace 'userxx' with 'orgxx' in all test files when the user type is org (#27052) 2023-09-14 02:59:53 +00:00
repo_webhook_test.go Fix incorrect menu/link on webhook edit page (#29709) 2024-03-14 01:37:15 +00:00
repofiles_change_test.go Refactor names (#31405) 2024-06-19 06:32:45 +08:00
session_test.go Fix session key conflict with database keyword (#28613) 2023-12-27 15:24:23 +08:00
setting_test.go Introduce flex-list & flex-item elements for Gitea UI (#25790) 2023-08-01 00:13:42 +02:00
signin_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
signout_test.go Use JSON response for "user/logout" (#25522) 2023-06-26 21:36:10 +02:00
signup_test.go Allow to change primary email before account activation (#29412) 2024-02-27 10:55:13 +00:00
ssh_key_test.go Redesign Scoped Access Tokens (#24767) 2023-06-04 20:57:16 +02:00
timetracking_test.go Replace 'userxx' with 'orgxx' in all test files when the user type is org (#27052) 2023-09-14 02:59:53 +00:00
user_avatar_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00
user_settings_test.go Allow disabling authentication related user features (#31535) 2024-07-09 17:36:31 +00:00
user_test.go Improve the maintainblity of the reserved username list (#32229) 2024-10-10 09:04:42 +00:00
version_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
view_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
webfinger_test.go Replace interface{} with any (#25686) 2023-07-04 18:36:08 +00:00
xss_test.go Refactor CSRF token (#32216) 2024-10-10 03:48:21 +00:00

Integration tests

Integration tests can be run with make commands for the
appropriate backends, namely:

make test-sqlite
make test-pgsql
make test-mysql
make test-mssql

Make sure to perform a clean build before running tests:

make clean build

Run tests via local act_runner

Run all jobs

act_runner exec -W ./.github/workflows/pull-db-tests.yml --event=pull_request --default-actions-url="https://github.com" -i catthehacker/ubuntu:runner-latest

Warning: This file defines many jobs, so it will be resource-intensive and therefor not recommended.

Run single job

act_runner exec -W ./.github/workflows/pull-db-tests.yml --event=pull_request --default-actions-url="https://github.com" -i catthehacker/ubuntu:runner-latest -j <job_name>

You can list all job names via:

act_runner exec -W ./.github/workflows/pull-db-tests.yml --event=pull_request --default-actions-url="https://github.com" -i catthehacker/ubuntu:runner-latest -l

Run sqlite integration tests

Start tests

make test-sqlite

Run MySQL integration tests

Setup a MySQL database inside docker

docker run -e "MYSQL_DATABASE=test" -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" -p 3306:3306 --rm --name mysql mysql:latest #(just ctrl-c to stop db and clean the container)
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --rm --name elasticsearch elasticsearch:7.6.0 #(in a second terminal, just ctrl-c to stop db and clean the container)

Start tests based on the database container

TEST_MYSQL_HOST=localhost:3306 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' make test-mysql

Run pgsql integration tests

Setup a pgsql database inside docker

docker run -e "POSTGRES_DB=test" -e "POSTGRES_USER=postgres" -e "POSTGRES_PASSWORD=postgres" -p 5432:5432 --rm --name pgsql postgres:latest #(just ctrl-c to stop db and clean the container)

Setup minio inside docker

docker run --rm -p 9000:9000 -e MINIO_ROOT_USER=123456 -e MINIO_ROOT_PASSWORD=12345678 --name minio bitnami/minio:2023.8.31

Start tests based on the database container

TEST_MINIO_ENDPOINT=localhost:9000 TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=postgres TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres make test-pgsql

Run mssql integration tests

Setup a mssql database inside docker

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_PID=Standard" -e "SA_PASSWORD=MwantsaSecurePassword1" -p 1433:1433 --rm --name mssql microsoft/mssql-server-linux:latest #(just ctrl-c to stop db and clean the container)

Start tests based on the database container

TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=gitea_test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 make test-mssql

Running individual tests

Example command to run GPG test:

For SQLite:

make test-sqlite#GPG

For other databases(replace mssql to mysql, or pgsql):

TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 make test-mssql#GPG

Setting timeouts for declaring long-tests and long-flushes

We appreciate that some testing machines may not be very powerful and
the default timeouts for declaring a slow test or a slow clean-up flush
may not be appropriate.

You can set the following environment variables:

GITEA_TEST_SLOW_RUN="10s" GITEA_TEST_SLOW_FLUSH="1s" make test-sqlite