From 2775289b1514213b41a274c7f14919dce3d9716f Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 17 Oct 2025 21:22:22 +0200 Subject: [PATCH 1/5] tests: Move integration tests from inline modules to `src/tests/` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move integration tests from `#[cfg(test)] mod tests` blocks in source files to consolidated test modules under `src/tests/`. This improves code organization and prepares for separating test compilation from library compilation. Moved tests: - Route handlers → `src/tests/routes/` - Worker jobs → `src/tests/worker/` All tests continue to compile as part of the library. Snapshots have been migrated to match new test locations. --- src/controllers/krate/delete.rs | 361 +----------------- .../trustpub/github_configs/create/mod.rs | 3 - .../trustpub/github_configs/delete/mod.rs | 3 - .../trustpub/github_configs/list/mod.rs | 3 - .../trustpub/tokens/exchange/mod.rs | 5 - src/controllers/trustpub/tokens/revoke/mod.rs | 3 - src/controllers/user/email_verification.rs | 43 --- src/controllers/version/docs.rs | 97 ----- src/openapi.rs | 15 - src/tests/mod.rs | 1 + src/tests/openapi.rs | 11 + src/tests/routes/crates/delete.rs | 359 +++++++++++++++++ src/tests/routes/crates/mod.rs | 1 + ...ates__delete__happy_path_new_crate-3.snap} | 2 +- ...ates__delete__happy_path_old_crate-3.snap} | 2 +- ...elete__happy_path_really_old_crate-3.snap} | 2 +- src/tests/routes/crates/versions/docs.rs | 91 +++++ src/tests/routes/crates/versions/mod.rs | 1 + src/tests/routes/mod.rs | 1 + .../routes/trustpub/github_configs/create.rs} | 0 .../routes/trustpub/github_configs/delete.rs} | 0 .../routes/trustpub/github_configs/list.rs} | 0 .../routes/trustpub/github_configs/mod.rs | 3 + ...github_configs__create__happy_path-2.snap} | 2 +- ...github_configs__create__happy_path-3.snap} | 2 +- ...reate__happy_path_with_environment-2.snap} | 2 +- ...configs__create__legacy_token_auth-2.snap} | 2 +- ...auth_with_trusted_publishing_scope-2.snap} | 2 +- ...ken_auth_with_wildcard_crate_scope-2.snap} | 2 +- ...github_configs__delete__happy_path-2.snap} | 2 +- ...configs__delete__legacy_token_auth-2.snap} | 2 +- ...auth_with_trusted_publishing_scope-2.snap} | 2 +- ...ken_auth_with_wildcard_crate_scope-2.snap} | 2 +- ...nfigs__list__crate_with_no_configs-2.snap} | 2 +- ...__github_configs__list__happy_path-2.snap} | 2 +- ...__github_configs__list__happy_path-4.snap} | 2 +- ...b_configs__list__legacy_token_auth-2.snap} | 2 +- ...auth_with_trusted_publishing_scope-2.snap} | 2 +- ...ken_auth_with_wildcard_crate_scope-2.snap} | 2 +- src/tests/routes/trustpub/mod.rs | 2 + .../trustpub/tokens/exchange/github.rs} | 0 .../trustpub/tokens/exchange/gitlab.rs} | 0 .../routes/trustpub/tokens/exchange/mod.rs | 2 + src/tests/routes/trustpub/tokens/mod.rs | 2 + .../routes/trustpub/tokens/revoke.rs} | 0 src/tests/routes/users/email_verification.rs | 39 ++ src/tests/routes/users/mod.rs | 1 + ...rs__email_verification__happy_path-3.snap} | 0 ...__tests__openapi__openapi_snapshot-2.snap} | 0 src/tests/worker/generate_og_image.rs | 89 +++++ src/tests/worker/mod.rs | 2 + ..._worker__generate_og_image__og-image.snap} | 2 +- ...ker__generate_og_image__og-image.snap.png} | Bin src/tests/worker/trustpub/delete_jtis.rs | 40 ++ src/tests/worker/trustpub/delete_tokens.rs | 44 +++ src/tests/worker/trustpub/mod.rs | 2 + src/worker/jobs/generate_og_image.rs | 93 ----- src/worker/jobs/trustpub/delete_jtis.rs | 40 -- src/worker/jobs/trustpub/delete_tokens.rs | 44 --- 59 files changed, 712 insertions(+), 729 deletions(-) create mode 100644 src/tests/openapi.rs create mode 100644 src/tests/routes/crates/delete.rs rename src/{controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap => tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_new_crate-3.snap} (96%) rename src/{controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap => tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_old_crate-3.snap} (96%) rename src/{controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap => tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_really_old_crate-3.snap} (96%) create mode 100644 src/tests/routes/crates/versions/docs.rs rename src/{controllers/trustpub/github_configs/create/tests.rs => tests/routes/trustpub/github_configs/create.rs} (100%) rename src/{controllers/trustpub/github_configs/delete/tests.rs => tests/routes/trustpub/github_configs/delete.rs} (100%) rename src/{controllers/trustpub/github_configs/list/tests.rs => tests/routes/trustpub/github_configs/list.rs} (100%) create mode 100644 src/tests/routes/trustpub/github_configs/mod.rs rename src/{controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_wildcard_crate_scope-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-2.snap} (82%) rename src/{controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-3.snap} (93%) rename src/{controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path_with_environment-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap} (82%) rename src/{controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__legacy_token_auth-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__legacy_token_auth-2.snap} (82%) rename src/{controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_trusted_publishing_scope-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap} (82%) rename src/{controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap} (82%) rename src/{controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__happy_path-2.snap} (90%) rename src/{controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__legacy_token_auth-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap} (90%) rename src/{controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_trusted_publishing_scope-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap} (90%) rename src/{controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_wildcard_crate_scope-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap} (90%) rename src/{controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__crate_with_no_configs-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap} (50%) rename src/{controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-2.snap} (90%) rename src/{controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-4.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-4.snap} (83%) rename src/{controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_wildcard_crate_scope-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__legacy_token_auth-2.snap} (83%) rename src/{controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__legacy_token_auth-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap} (83%) rename src/{controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_trusted_publishing_scope-2.snap => tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap} (83%) create mode 100644 src/tests/routes/trustpub/mod.rs rename src/{controllers/trustpub/tokens/exchange/github_tests.rs => tests/routes/trustpub/tokens/exchange/github.rs} (100%) rename src/{controllers/trustpub/tokens/exchange/gitlab_tests.rs => tests/routes/trustpub/tokens/exchange/gitlab.rs} (100%) create mode 100644 src/tests/routes/trustpub/tokens/exchange/mod.rs create mode 100644 src/tests/routes/trustpub/tokens/mod.rs rename src/{controllers/trustpub/tokens/revoke/tests.rs => tests/routes/trustpub/tokens/revoke.rs} (100%) create mode 100644 src/tests/routes/users/email_verification.rs rename src/{controllers/user/snapshots/crates_io__controllers__user__email_verification__tests__happy_path-3.snap => tests/routes/users/snapshots/crates_io__tests__routes__users__email_verification__happy_path-3.snap} (100%) rename src/{snapshots/crates_io__openapi__tests__openapi_snapshot-2.snap => tests/snapshots/crates_io__tests__openapi__openapi_snapshot-2.snap} (100%) create mode 100644 src/tests/worker/generate_og_image.rs rename src/{worker/jobs/snapshots/crates_io__worker__jobs__generate_og_image__tests__og-image.snap => tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap} (60%) rename src/{worker/jobs/snapshots/crates_io__worker__jobs__generate_og_image__tests__og-image.snap.png => tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap.png} (100%) create mode 100644 src/tests/worker/trustpub/delete_jtis.rs create mode 100644 src/tests/worker/trustpub/delete_tokens.rs create mode 100644 src/tests/worker/trustpub/mod.rs diff --git a/src/controllers/krate/delete.rs b/src/controllers/krate/delete.rs index f26932a4faf..de82ac5bef5 100644 --- a/src/controllers/krate/delete.rs +++ b/src/controllers/krate/delete.rs @@ -22,7 +22,7 @@ use minijinja::context; use serde::Deserialize; use tracing::error; -const DOWNLOADS_PER_MONTH_LIMIT: u64 = 1000; +pub const DOWNLOADS_PER_MONTH_LIMIT: u64 = 1000; const AVAILABLE_AFTER: TimeDelta = TimeDelta::hours(24); #[derive(Debug, Deserialize, FromRequestParts, utoipa::IntoParams)] @@ -198,362 +198,3 @@ async fn has_rev_dep(conn: &mut AsyncPgConnection, crate_id: i32) -> QueryResult Ok(rev_dep.is_some()) } - -#[cfg(test)] -mod tests { - use super::*; - use crate::models::OwnerKind; - use crate::tests::builders::{DependencyBuilder, PublishBuilder}; - use crate::tests::util::{RequestHelper, Response, TestApp}; - use axum::RequestPartsExt; - use claims::{assert_none, assert_some}; - use crates_io_database::schema::crate_owners; - use diesel_async::AsyncPgConnection; - use http::{Request, StatusCode}; - use insta::assert_snapshot; - use serde_json::json; - - #[tokio::test] - async fn test_query_params() -> anyhow::Result<()> { - let check = async |uri| { - let request = Request::builder().uri(uri).body(())?; - let (mut parts, _) = request.into_parts(); - Ok::<_, anyhow::Error>(parts.extract::().await?) - }; - - let params = check("/api/v1/crates/foo").await?; - assert_none!(params.message); - - let params = check("/api/v1/crates/foo?").await?; - assert_none!(params.message); - - let params = check("/api/v1/crates/foo?message=").await?; - assert_eq!(assert_some!(params.message), ""); - - let params = check("/api/v1/crates/foo?message=hello%20world").await?; - assert_eq!(assert_some!(params.message), "hello world"); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_happy_path_new_crate() -> anyhow::Result<()> { - let (app, anon, user) = TestApp::full().with_user().await; - let mut conn = app.db_conn().await; - let upstream = app.upstream_index(); - - publish_crate(&user, "foo").await; - let crate_id = adjust_creation_date(&mut conn, "foo", 71).await?; - - // Update downloads count so that it wouldn't be deletable if it wasn't new - adjust_downloads(&mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT * 100).await?; - - assert_crate_exists(&anon, "foo", true).await; - assert!(upstream.crate_exists("foo")?); - assert_snapshot!(app.stored_files().await.join("\n"), @r" - crates/foo/foo-1.0.0.crate - index/3/f/foo - rss/crates.xml - rss/crates/foo.xml - rss/updates.xml - "); - - let response = delete_crate(&user, "foo").await; - assert_snapshot!(response.status(), @"204 No Content"); - assert!(response.body().is_empty()); - - assert_snapshot!(app.emails_snapshot().await); - - // Assert that the crate no longer exists - assert_crate_exists(&anon, "foo", false).await; - assert!(!upstream.crate_exists("foo")?); - assert_snapshot!(app.stored_files().await.join("\n"), @r" - rss/crates.xml - rss/updates.xml - "); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_happy_path_old_crate() -> anyhow::Result<()> { - let (app, anon, user) = TestApp::full().with_user().await; - let mut conn = app.db_conn().await; - let upstream = app.upstream_index(); - - publish_crate(&user, "foo").await; - let crate_id = adjust_creation_date(&mut conn, "foo", 73).await?; - adjust_downloads(&mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT).await?; - - assert_crate_exists(&anon, "foo", true).await; - assert!(upstream.crate_exists("foo")?); - assert_snapshot!(app.stored_files().await.join("\n"), @r" - crates/foo/foo-1.0.0.crate - index/3/f/foo - rss/crates.xml - rss/crates/foo.xml - rss/updates.xml - "); - - let response = delete_crate(&user, "foo").await; - assert_snapshot!(response.status(), @"204 No Content"); - assert!(response.body().is_empty()); - - assert_snapshot!(app.emails_snapshot().await); - - // Assert that the crate no longer exists - assert_crate_exists(&anon, "foo", false).await; - assert!(!upstream.crate_exists("foo")?); - assert_snapshot!(app.stored_files().await.join("\n"), @r" - rss/crates.xml - rss/updates.xml - "); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_happy_path_really_old_crate() -> anyhow::Result<()> { - let (app, anon, user) = TestApp::full().with_user().await; - let mut conn = app.db_conn().await; - let upstream = app.upstream_index(); - - publish_crate(&user, "foo").await; - let crate_id = adjust_creation_date(&mut conn, "foo", 1000 * 24).await?; - adjust_downloads(&mut conn, crate_id, 30 * DOWNLOADS_PER_MONTH_LIMIT).await?; - - assert_crate_exists(&anon, "foo", true).await; - assert!(upstream.crate_exists("foo")?); - assert_snapshot!(app.stored_files().await.join("\n"), @r" - crates/foo/foo-1.0.0.crate - index/3/f/foo - rss/crates.xml - rss/crates/foo.xml - rss/updates.xml - "); - - let response = delete_crate(&user, "foo").await; - assert_snapshot!(response.status(), @"204 No Content"); - assert!(response.body().is_empty()); - - assert_snapshot!(app.emails_snapshot().await); - - // Assert that the crate no longer exists - assert_crate_exists(&anon, "foo", false).await; - assert!(!upstream.crate_exists("foo")?); - assert_snapshot!(app.stored_files().await.join("\n"), @r" - rss/crates.xml - rss/updates.xml - "); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_no_auth() -> anyhow::Result<()> { - let (_app, anon, user) = TestApp::full().with_user().await; - - publish_crate(&user, "foo").await; - - let response = delete_crate(&anon, "foo").await; - assert_snapshot!(response.status(), @"403 Forbidden"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"this action requires authentication"}]}"#); - - assert_crate_exists(&anon, "foo", true).await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_token_auth() -> anyhow::Result<()> { - let (_app, anon, user, token) = TestApp::full().with_token().await; - - publish_crate(&user, "foo").await; - - let response = delete_crate(&token, "foo").await; - assert_snapshot!(response.status(), @"403 Forbidden"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"this action can only be performed on the crates.io website"}]}"#); - - assert_crate_exists(&anon, "foo", true).await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_missing_crate() -> anyhow::Result<()> { - let (_app, _anon, user) = TestApp::full().with_user().await; - - let response = delete_crate(&user, "foo").await; - assert_snapshot!(response.status(), @"404 Not Found"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"crate `foo` does not exist"}]}"#); - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_not_owner() -> anyhow::Result<()> { - let (app, anon, user) = TestApp::full().with_user().await; - let user2 = app.db_new_user("bar").await; - - publish_crate(&user, "foo").await; - - let response = delete_crate(&user2, "foo").await; - assert_snapshot!(response.status(), @"403 Forbidden"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only owners have permission to delete crates"}]}"#); - - assert_crate_exists(&anon, "foo", true).await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_team_owner() -> anyhow::Result<()> { - let (app, anon) = TestApp::full().empty().await; - let user = app.db_new_user("user-org-owner").await; - let user2 = app.db_new_user("user-one-team").await; - - publish_crate(&user, "foo").await; - - // Add team owner - let body = json!({ "owners": ["github:test-org:all"] }).to_string(); - let response = user.put::<()>("/api/v1/crates/foo/owners", body).await; - assert_snapshot!(response.status(), @"200 OK"); - - let response = delete_crate(&user2, "foo").await; - assert_snapshot!(response.status(), @"403 Forbidden"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"team members don't have permission to delete crates"}]}"#); - - assert_crate_exists(&anon, "foo", true).await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_too_many_owners() -> anyhow::Result<()> { - let (app, anon, user) = TestApp::full().with_user().await; - let mut conn = app.db_conn().await; - let user2 = app.db_new_user("bar").await; - - publish_crate(&user, "foo").await; - let crate_id = adjust_creation_date(&mut conn, "foo", 73).await?; - - // Add another owner - diesel::insert_into(crate_owners::table) - .values(( - crate_owners::crate_id.eq(crate_id), - crate_owners::owner_id.eq(user2.as_model().id), - crate_owners::owner_kind.eq(OwnerKind::User), - )) - .execute(&mut conn) - .await?; - - let response = delete_crate(&user, "foo").await; - assert_snapshot!(response.status(), @"422 Unprocessable Entity"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only crates with a single owner can be deleted after 72 hours"}]}"#); - - assert_crate_exists(&anon, "foo", true).await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_too_many_downloads() -> anyhow::Result<()> { - let (app, anon, user) = TestApp::full().with_user().await; - let mut conn = app.db_conn().await; - - publish_crate(&user, "foo").await; - let crate_id = adjust_creation_date(&mut conn, "foo", 73).await?; - adjust_downloads(&mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT + 1).await?; - - let response = delete_crate(&user, "foo").await; - assert_snapshot!(response.status(), @"422 Unprocessable Entity"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only crates with less than 1000 downloads per month can be deleted after 72 hours"}]}"#); - - assert_crate_exists(&anon, "foo", true).await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_rev_deps() -> anyhow::Result<()> { - let (_app, anon, user) = TestApp::full().with_user().await; - - publish_crate(&user, "foo").await; - - // Publish another crate - let pb = PublishBuilder::new("bar", "1.0.0").dependency(DependencyBuilder::new("foo")); - let response = user.publish_crate(pb).await; - assert_snapshot!(response.status(), @"200 OK"); - - let response = delete_crate(&user, "foo").await; - assert_snapshot!(response.status(), @"422 Unprocessable Entity"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only crates without reverse dependencies can be deleted"}]}"#); - - assert_crate_exists(&anon, "foo", true).await; - - Ok(()) - } - - // Publishes a crate with the given name and a single `v1.0.0` version. - async fn publish_crate(user: &impl RequestHelper, name: &str) { - let pb = PublishBuilder::new(name, "1.0.0"); - let response = user.publish_crate(pb).await; - assert_eq!(response.status(), StatusCode::OK); - } - - /// Moves the `created_at` field of a crate by the given number of hours - /// into the past and returns the ID of the crate. - async fn adjust_creation_date( - conn: &mut AsyncPgConnection, - name: &str, - hours: i64, - ) -> QueryResult { - let created_at = Utc::now() - TimeDelta::hours(hours); - let created_at = created_at.naive_utc(); - - diesel::update(crates::table) - .filter(crates::name.eq(name)) - .set(crates::created_at.eq(created_at)) - .returning(crates::id) - .get_result(conn) - .await - } - - // Updates the download count of a crate. - async fn adjust_downloads( - conn: &mut AsyncPgConnection, - crate_id: i32, - downloads: u64, - ) -> QueryResult<()> { - let downloads = downloads.to_i64().unwrap_or(i64::MAX); - - diesel::update(crate_downloads::table) - .filter(crate_downloads::crate_id.eq(crate_id)) - .set(crate_downloads::downloads.eq(downloads)) - .execute(conn) - .await?; - - Ok(()) - } - - // Performs the `DELETE` request to delete the crate, and runs any pending - // background jobs, then returns the response. - async fn delete_crate(user: &impl RequestHelper, name: &str) -> Response<()> { - let url = format!("/api/v1/crates/{name}"); - let response = user.delete::<()>(&url).await; - user.app().run_pending_background_jobs().await; - response - } - - // Asserts that the crate with the given name exists or not. - async fn assert_crate_exists(user: &impl RequestHelper, name: &str, exists: bool) { - let expected_status = match exists { - true => StatusCode::OK, - false => StatusCode::NOT_FOUND, - }; - - let url = format!("/api/v1/crates/{name}"); - let response = user.get::<()>(&url).await; - assert_eq!(response.status(), expected_status); - } -} diff --git a/src/controllers/trustpub/github_configs/create/mod.rs b/src/controllers/trustpub/github_configs/create/mod.rs index 525c874905a..ce0fb206353 100644 --- a/src/controllers/trustpub/github_configs/create/mod.rs +++ b/src/controllers/trustpub/github_configs/create/mod.rs @@ -19,9 +19,6 @@ use diesel_async::RunQueryDsl; use http::request::Parts; use tracing::warn; -#[cfg(test)] -mod tests; - /// Create a new Trusted Publishing configuration for GitHub Actions. #[utoipa::path( post, diff --git a/src/controllers/trustpub/github_configs/delete/mod.rs b/src/controllers/trustpub/github_configs/delete/mod.rs index 94e81814e2d..98fb21bea6d 100644 --- a/src/controllers/trustpub/github_configs/delete/mod.rs +++ b/src/controllers/trustpub/github_configs/delete/mod.rs @@ -14,9 +14,6 @@ use http::StatusCode; use http::request::Parts; use tracing::warn; -#[cfg(test)] -mod tests; - /// Delete Trusted Publishing configuration for GitHub Actions. #[utoipa::path( delete, diff --git a/src/controllers/trustpub/github_configs/list/mod.rs b/src/controllers/trustpub/github_configs/list/mod.rs index 6b7df5fab0f..8ae8db4f5ce 100644 --- a/src/controllers/trustpub/github_configs/list/mod.rs +++ b/src/controllers/trustpub/github_configs/list/mod.rs @@ -15,9 +15,6 @@ use diesel_async::RunQueryDsl; use http::request::Parts; use serde::Deserialize; -#[cfg(test)] -mod tests; - #[derive(Debug, Deserialize, FromRequestParts, utoipa::IntoParams)] #[from_request(via(Query))] #[into_params(parameter_in = Query)] diff --git a/src/controllers/trustpub/tokens/exchange/mod.rs b/src/controllers/trustpub/tokens/exchange/mod.rs index 8bfe9bc6e4b..aaf431abc55 100644 --- a/src/controllers/trustpub/tokens/exchange/mod.rs +++ b/src/controllers/trustpub/tokens/exchange/mod.rs @@ -20,11 +20,6 @@ use diesel_async::{AsyncConnection, AsyncPgConnection, RunQueryDsl}; use secrecy::ExposeSecret; use tracing::warn; -#[cfg(test)] -mod github_tests; -#[cfg(test)] -mod gitlab_tests; - /// Exchange an OIDC token for a temporary access token. #[utoipa::path( post, diff --git a/src/controllers/trustpub/tokens/revoke/mod.rs b/src/controllers/trustpub/tokens/revoke/mod.rs index 512ed42a92f..2bf79a540fd 100644 --- a/src/controllers/trustpub/tokens/revoke/mod.rs +++ b/src/controllers/trustpub/tokens/revoke/mod.rs @@ -8,9 +8,6 @@ use diesel_async::RunQueryDsl; use http::StatusCode; use secrecy::ExposeSecret; -#[cfg(test)] -mod tests; - /// Revoke a temporary access token. /// /// The access token is expected to be passed in the `Authorization` header diff --git a/src/controllers/user/email_verification.rs b/src/controllers/user/email_verification.rs index 29479db6c84..d7e61c8fa3b 100644 --- a/src/controllers/user/email_verification.rs +++ b/src/controllers/user/email_verification.rs @@ -102,46 +102,3 @@ pub async fn resend_email_verification( Ok(OkResponse::new()) } - -#[cfg(test)] -mod tests { - use crate::tests::util::{RequestHelper, TestApp}; - use insta::assert_snapshot; - - #[tokio::test(flavor = "multi_thread")] - async fn test_no_auth() { - let (app, anon, user) = TestApp::init().with_user().await; - - let url = format!("/api/v1/users/{}/resend", user.as_model().id); - let response = anon.put::<()>(&url, "").await; - assert_snapshot!(response.status(), @"403 Forbidden"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"this action requires authentication"}]}"#); - - assert_eq!(app.emails().await.len(), 0); - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_wrong_user() { - let (app, _anon, user) = TestApp::init().with_user().await; - let user2 = app.db_new_user("bar").await; - - let url = format!("/api/v1/users/{}/resend", user2.as_model().id); - let response = user.put::<()>(&url, "").await; - assert_snapshot!(response.status(), @"400 Bad Request"); - assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"current user does not match requested user"}]}"#); - - assert_eq!(app.emails().await.len(), 0); - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_happy_path() { - let (app, _anon, user) = TestApp::init().with_user().await; - - let url = format!("/api/v1/users/{}/resend", user.as_model().id); - let response = user.put::<()>(&url, "").await; - assert_snapshot!(response.status(), @"200 OK"); - assert_snapshot!(response.text(), @r#"{"ok":true}"#); - - assert_snapshot!(app.emails_snapshot().await); - } -} diff --git a/src/controllers/version/docs.rs b/src/controllers/version/docs.rs index 05ef0de6940..96fcbe231d4 100644 --- a/src/controllers/version/docs.rs +++ b/src/controllers/version/docs.rs @@ -52,100 +52,3 @@ pub async fn rebuild_version_docs( Ok(StatusCode::CREATED) } - -#[cfg(test)] -mod tests { - use crate::tests::{ - builders::{CrateBuilder, VersionBuilder}, - util::{RequestHelper as _, TestApp}, - }; - use crates_io_database::models::NewUser; - use crates_io_docs_rs::MockDocsRsClient; - use insta::assert_snapshot; - - #[tokio::test(flavor = "multi_thread")] - async fn test_trigger_rebuild_ok() -> anyhow::Result<()> { - let mut docs_rs_mock = MockDocsRsClient::new(); - docs_rs_mock - .expect_rebuild_docs() - .returning(|_, _| Ok(())) - .times(1); - - let (app, _client, cookie_client) = - TestApp::full().with_docs_rs(docs_rs_mock).with_user().await; - - let mut conn = app.db_conn().await; - - CrateBuilder::new("krate", cookie_client.as_model().id) - .version(VersionBuilder::new("0.1.0")) - .build(&mut conn) - .await?; - - let response = cookie_client - .post::<()>("/api/v1/crates/krate/0.1.0/rebuild_docs", "") - .await; - assert_snapshot!(response.status(), @"201 Created"); - - app.run_pending_background_jobs().await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_trigger_rebuild_permission_failed() -> anyhow::Result<()> { - let mut docs_rs_mock = MockDocsRsClient::new(); - docs_rs_mock - .expect_rebuild_docs() - .returning(|_, _| Ok(())) - .never(); - - let (app, _client, cookie_client) = - TestApp::full().with_docs_rs(docs_rs_mock).with_user().await; - - let mut conn = app.db_conn().await; - - let other_user = NewUser::builder() - .gh_id(111) - .gh_login("other_user") - .gh_encrypted_token(&[]) - .build() - .insert(&mut conn) - .await?; - - CrateBuilder::new("krate", other_user.id) - .version(VersionBuilder::new("0.1.0")) - .build(&mut conn) - .await?; - - let response = cookie_client - .post::<()>("/api/v1/crates/krate/0.1.0/rebuild_docs", "") - .await; - assert_snapshot!(response.status(), @"403 Forbidden"); - - app.run_pending_background_jobs().await; - - Ok(()) - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_trigger_rebuild_unknown_crate_doesnt_queue_job() -> anyhow::Result<()> { - let mut docs_rs_mock = MockDocsRsClient::new(); - docs_rs_mock - .expect_rebuild_docs() - .returning(|_, _| Ok(())) - .never(); - - let (app, _client, cookie_client) = - TestApp::full().with_docs_rs(docs_rs_mock).with_user().await; - - let response = cookie_client - .post::<()>("/api/v1/crates/krate/0.1.0/rebuild_docs", "") - .await; - - assert_snapshot!(response.status(), @"404 Not Found"); - - app.run_pending_background_jobs().await; - - Ok(()) - } -} diff --git a/src/openapi.rs b/src/openapi.rs index ca84b3cd3bf..9f9159a6c2d 100644 --- a/src/openapi.rs +++ b/src/openapi.rs @@ -82,18 +82,3 @@ impl Modify for SecurityAddon { components.add_security_scheme("trustpub_token", SecurityScheme::Http(trustpub_token)); } } - -#[cfg(test)] -mod tests { - use crate::tests::util::{RequestHelper, TestApp}; - use insta::{assert_json_snapshot, assert_snapshot}; - - #[tokio::test(flavor = "multi_thread")] - async fn test_openapi_snapshot() { - let (_app, anon) = TestApp::init().empty().await; - - let response = anon.get::<()>("/api/openapi.json").await; - assert_snapshot!(response.status(), @"200 OK"); - assert_json_snapshot!(response.json()); - } -} diff --git a/src/tests/mod.rs b/src/tests/mod.rs index f95c2ae3c89..e31da9ad386 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -24,6 +24,7 @@ mod issues; mod krate; mod middleware; mod not_found_error; +mod openapi; mod owners; mod pagination; mod read_only_mode; diff --git a/src/tests/openapi.rs b/src/tests/openapi.rs new file mode 100644 index 00000000000..95688590242 --- /dev/null +++ b/src/tests/openapi.rs @@ -0,0 +1,11 @@ +use crate::tests::util::{RequestHelper, TestApp}; +use insta::{assert_json_snapshot, assert_snapshot}; + +#[tokio::test(flavor = "multi_thread")] +async fn test_openapi_snapshot() { + let (_app, anon) = TestApp::init().empty().await; + + let response = anon.get::<()>("/api/openapi.json").await; + assert_snapshot!(response.status(), @"200 OK"); + assert_json_snapshot!(response.json()); +} diff --git a/src/tests/routes/crates/delete.rs b/src/tests/routes/crates/delete.rs new file mode 100644 index 00000000000..7533238aeb8 --- /dev/null +++ b/src/tests/routes/crates/delete.rs @@ -0,0 +1,359 @@ +use crate::controllers::krate::delete::{DOWNLOADS_PER_MONTH_LIMIT, DeleteQueryParams}; +use crate::models::OwnerKind; +use crate::schema::{crate_downloads, crates}; +use crate::tests::builders::{DependencyBuilder, PublishBuilder}; +use crate::tests::util::{RequestHelper, Response, TestApp}; +use axum::RequestPartsExt; +use bigdecimal::ToPrimitive; +use chrono::{TimeDelta, Utc}; +use claims::{assert_none, assert_some}; +use crates_io_database::schema::crate_owners; +use diesel::prelude::*; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; +use http::{Request, StatusCode}; +use insta::assert_snapshot; +use serde_json::json; + +#[tokio::test] +async fn test_query_params() -> anyhow::Result<()> { + let check = async |uri| { + let request = Request::builder().uri(uri).body(())?; + let (mut parts, _) = request.into_parts(); + Ok::<_, anyhow::Error>(parts.extract::().await?) + }; + + let params = check("/api/v1/crates/foo").await?; + assert_none!(params.message()); + + let params = check("/api/v1/crates/foo?").await?; + assert_none!(params.message()); + + let params = check("/api/v1/crates/foo?message=").await?; + assert_none!(params.message()); + + let params = check("/api/v1/crates/foo?message=hello%20world").await?; + assert_eq!(assert_some!(params.message()), "hello world"); + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_happy_path_new_crate() -> anyhow::Result<()> { + let (app, anon, user) = TestApp::full().with_user().await; + let mut conn = app.db_conn().await; + let upstream = app.upstream_index(); + + publish_crate(&user, "foo").await; + let crate_id = adjust_creation_date(&mut conn, "foo", 71).await?; + + // Update downloads count so that it wouldn't be deletable if it wasn't new + adjust_downloads(&mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT * 100).await?; + + assert_crate_exists(&anon, "foo", true).await; + assert!(upstream.crate_exists("foo")?); + assert_snapshot!(app.stored_files().await.join("\n"), @r" + crates/foo/foo-1.0.0.crate + index/3/f/foo + rss/crates.xml + rss/crates/foo.xml + rss/updates.xml + "); + + let response = delete_crate(&user, "foo").await; + assert_snapshot!(response.status(), @"204 No Content"); + assert!(response.body().is_empty()); + + assert_snapshot!(app.emails_snapshot().await); + + // Assert that the crate no longer exists + assert_crate_exists(&anon, "foo", false).await; + assert!(!upstream.crate_exists("foo")?); + assert_snapshot!(app.stored_files().await.join("\n"), @r" + rss/crates.xml + rss/updates.xml + "); + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_happy_path_old_crate() -> anyhow::Result<()> { + let (app, anon, user) = TestApp::full().with_user().await; + let mut conn = app.db_conn().await; + let upstream = app.upstream_index(); + + publish_crate(&user, "foo").await; + let crate_id = adjust_creation_date(&mut conn, "foo", 73).await?; + adjust_downloads(&mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT).await?; + + assert_crate_exists(&anon, "foo", true).await; + assert!(upstream.crate_exists("foo")?); + assert_snapshot!(app.stored_files().await.join("\n"), @r" + crates/foo/foo-1.0.0.crate + index/3/f/foo + rss/crates.xml + rss/crates/foo.xml + rss/updates.xml + "); + + let response = delete_crate(&user, "foo").await; + assert_snapshot!(response.status(), @"204 No Content"); + assert!(response.body().is_empty()); + + assert_snapshot!(app.emails_snapshot().await); + + // Assert that the crate no longer exists + assert_crate_exists(&anon, "foo", false).await; + assert!(!upstream.crate_exists("foo")?); + assert_snapshot!(app.stored_files().await.join("\n"), @r" + rss/crates.xml + rss/updates.xml + "); + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_happy_path_really_old_crate() -> anyhow::Result<()> { + let (app, anon, user) = TestApp::full().with_user().await; + let mut conn = app.db_conn().await; + let upstream = app.upstream_index(); + + publish_crate(&user, "foo").await; + let crate_id = adjust_creation_date(&mut conn, "foo", 1000 * 24).await?; + adjust_downloads(&mut conn, crate_id, 30 * DOWNLOADS_PER_MONTH_LIMIT).await?; + + assert_crate_exists(&anon, "foo", true).await; + assert!(upstream.crate_exists("foo")?); + assert_snapshot!(app.stored_files().await.join("\n"), @r" + crates/foo/foo-1.0.0.crate + index/3/f/foo + rss/crates.xml + rss/crates/foo.xml + rss/updates.xml + "); + + let response = delete_crate(&user, "foo").await; + assert_snapshot!(response.status(), @"204 No Content"); + assert!(response.body().is_empty()); + + assert_snapshot!(app.emails_snapshot().await); + + // Assert that the crate no longer exists + assert_crate_exists(&anon, "foo", false).await; + assert!(!upstream.crate_exists("foo")?); + assert_snapshot!(app.stored_files().await.join("\n"), @r" + rss/crates.xml + rss/updates.xml + "); + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_no_auth() -> anyhow::Result<()> { + let (_app, anon, user) = TestApp::full().with_user().await; + + publish_crate(&user, "foo").await; + + let response = delete_crate(&anon, "foo").await; + assert_snapshot!(response.status(), @"403 Forbidden"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"this action requires authentication"}]}"#); + + assert_crate_exists(&anon, "foo", true).await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_token_auth() -> anyhow::Result<()> { + let (_app, anon, user, token) = TestApp::full().with_token().await; + + publish_crate(&user, "foo").await; + + let response = delete_crate(&token, "foo").await; + assert_snapshot!(response.status(), @"403 Forbidden"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"this action can only be performed on the crates.io website"}]}"#); + + assert_crate_exists(&anon, "foo", true).await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_missing_crate() -> anyhow::Result<()> { + let (_app, _anon, user) = TestApp::full().with_user().await; + + let response = delete_crate(&user, "foo").await; + assert_snapshot!(response.status(), @"404 Not Found"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"crate `foo` does not exist"}]}"#); + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_not_owner() -> anyhow::Result<()> { + let (app, anon, user) = TestApp::full().with_user().await; + let user2 = app.db_new_user("bar").await; + + publish_crate(&user, "foo").await; + + let response = delete_crate(&user2, "foo").await; + assert_snapshot!(response.status(), @"403 Forbidden"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only owners have permission to delete crates"}]}"#); + + assert_crate_exists(&anon, "foo", true).await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_team_owner() -> anyhow::Result<()> { + let (app, anon) = TestApp::full().empty().await; + let user = app.db_new_user("user-org-owner").await; + let user2 = app.db_new_user("user-one-team").await; + + publish_crate(&user, "foo").await; + + // Add team owner + let body = json!({ "owners": ["github:test-org:all"] }).to_string(); + let response = user.put::<()>("/api/v1/crates/foo/owners", body).await; + assert_snapshot!(response.status(), @"200 OK"); + + let response = delete_crate(&user2, "foo").await; + assert_snapshot!(response.status(), @"403 Forbidden"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"team members don't have permission to delete crates"}]}"#); + + assert_crate_exists(&anon, "foo", true).await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_too_many_owners() -> anyhow::Result<()> { + let (app, anon, user) = TestApp::full().with_user().await; + let mut conn = app.db_conn().await; + let user2 = app.db_new_user("bar").await; + + publish_crate(&user, "foo").await; + let crate_id = adjust_creation_date(&mut conn, "foo", 73).await?; + + // Add another owner + diesel::insert_into(crate_owners::table) + .values(( + crate_owners::crate_id.eq(crate_id), + crate_owners::owner_id.eq(user2.as_model().id), + crate_owners::owner_kind.eq(OwnerKind::User), + )) + .execute(&mut conn) + .await?; + + let response = delete_crate(&user, "foo").await; + assert_snapshot!(response.status(), @"422 Unprocessable Entity"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only crates with a single owner can be deleted after 72 hours"}]}"#); + + assert_crate_exists(&anon, "foo", true).await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_too_many_downloads() -> anyhow::Result<()> { + let (app, anon, user) = TestApp::full().with_user().await; + let mut conn = app.db_conn().await; + + publish_crate(&user, "foo").await; + let crate_id = adjust_creation_date(&mut conn, "foo", 73).await?; + adjust_downloads(&mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT + 1).await?; + + let response = delete_crate(&user, "foo").await; + assert_snapshot!(response.status(), @"422 Unprocessable Entity"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only crates with less than 1000 downloads per month can be deleted after 72 hours"}]}"#); + + assert_crate_exists(&anon, "foo", true).await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_rev_deps() -> anyhow::Result<()> { + let (_app, anon, user) = TestApp::full().with_user().await; + + publish_crate(&user, "foo").await; + + // Publish another crate + let pb = PublishBuilder::new("bar", "1.0.0").dependency(DependencyBuilder::new("foo")); + let response = user.publish_crate(pb).await; + assert_snapshot!(response.status(), @"200 OK"); + + let response = delete_crate(&user, "foo").await; + assert_snapshot!(response.status(), @"422 Unprocessable Entity"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"only crates without reverse dependencies can be deleted"}]}"#); + + assert_crate_exists(&anon, "foo", true).await; + + Ok(()) +} + +// Publishes a crate with the given name and a single `v1.0.0` version. +async fn publish_crate(user: &impl RequestHelper, name: &str) { + let pb = PublishBuilder::new(name, "1.0.0"); + let response = user.publish_crate(pb).await; + assert_eq!(response.status(), StatusCode::OK); +} + +/// Moves the `created_at` field of a crate by the given number of hours +/// into the past and returns the ID of the crate. +async fn adjust_creation_date( + conn: &mut AsyncPgConnection, + name: &str, + hours: i64, +) -> QueryResult { + let created_at = Utc::now() - TimeDelta::hours(hours); + let created_at = created_at.naive_utc(); + + diesel::update(crates::table) + .filter(crates::name.eq(name)) + .set(crates::created_at.eq(created_at)) + .returning(crates::id) + .get_result(conn) + .await +} + +// Updates the download count of a crate. +async fn adjust_downloads( + conn: &mut AsyncPgConnection, + crate_id: i32, + downloads: u64, +) -> QueryResult<()> { + let downloads = downloads.to_i64().unwrap_or(i64::MAX); + + diesel::update(crate_downloads::table) + .filter(crate_downloads::crate_id.eq(crate_id)) + .set(crate_downloads::downloads.eq(downloads)) + .execute(conn) + .await?; + + Ok(()) +} + +// Performs the `DELETE` request to delete the crate, and runs any pending +// background jobs, then returns the response. +async fn delete_crate(user: &impl RequestHelper, name: &str) -> Response<()> { + let url = format!("/api/v1/crates/{name}"); + let response = user.delete::<()>(&url).await; + user.app().run_pending_background_jobs().await; + response +} + +// Asserts that the crate with the given name exists or not. +async fn assert_crate_exists(user: &impl RequestHelper, name: &str, exists: bool) { + let expected_status = match exists { + true => StatusCode::OK, + false => StatusCode::NOT_FOUND, + }; + + let url = format!("/api/v1/crates/{name}"); + let response = user.get::<()>(&url).await; + assert_eq!(response.status(), expected_status); +} diff --git a/src/tests/routes/crates/mod.rs b/src/tests/routes/crates/mod.rs index a2160a66431..bd1e1aaa9f1 100644 --- a/src/tests/routes/crates/mod.rs +++ b/src/tests/routes/crates/mod.rs @@ -1,4 +1,5 @@ mod admin; +mod delete; pub mod downloads; mod following; mod list; diff --git a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap b/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_new_crate-3.snap similarity index 96% rename from src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap rename to src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_new_crate-3.snap index 1b1443d59e8..79080d995e3 100644 --- a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap +++ b/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_new_crate-3.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/krate/delete.rs +source: src/tests/routes/crates/delete.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap b/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_old_crate-3.snap similarity index 96% rename from src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap rename to src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_old_crate-3.snap index 1b1443d59e8..79080d995e3 100644 --- a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap +++ b/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_old_crate-3.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/krate/delete.rs +source: src/tests/routes/crates/delete.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap b/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_really_old_crate-3.snap similarity index 96% rename from src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap rename to src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_really_old_crate-3.snap index 1b1443d59e8..79080d995e3 100644 --- a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap +++ b/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_really_old_crate-3.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/krate/delete.rs +source: src/tests/routes/crates/delete.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/tests/routes/crates/versions/docs.rs b/src/tests/routes/crates/versions/docs.rs new file mode 100644 index 00000000000..dd9c22b3eb6 --- /dev/null +++ b/src/tests/routes/crates/versions/docs.rs @@ -0,0 +1,91 @@ +use crate::tests::builders::{CrateBuilder, VersionBuilder}; +use crate::tests::util::{RequestHelper as _, TestApp}; +use crates_io_database::models::NewUser; +use crates_io_docs_rs::MockDocsRsClient; +use insta::assert_snapshot; + +#[tokio::test(flavor = "multi_thread")] +async fn test_trigger_rebuild_ok() -> anyhow::Result<()> { + let mut docs_rs_mock = MockDocsRsClient::new(); + docs_rs_mock + .expect_rebuild_docs() + .returning(|_, _| Ok(())) + .times(1); + + let (app, _client, cookie_client) = + TestApp::full().with_docs_rs(docs_rs_mock).with_user().await; + + let mut conn = app.db_conn().await; + + CrateBuilder::new("krate", cookie_client.as_model().id) + .version(VersionBuilder::new("0.1.0")) + .build(&mut conn) + .await?; + + let response = cookie_client + .post::<()>("/api/v1/crates/krate/0.1.0/rebuild_docs", "") + .await; + assert_snapshot!(response.status(), @"201 Created"); + + app.run_pending_background_jobs().await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_trigger_rebuild_permission_failed() -> anyhow::Result<()> { + let mut docs_rs_mock = MockDocsRsClient::new(); + docs_rs_mock + .expect_rebuild_docs() + .returning(|_, _| Ok(())) + .never(); + + let (app, _client, cookie_client) = + TestApp::full().with_docs_rs(docs_rs_mock).with_user().await; + + let mut conn = app.db_conn().await; + + let other_user = NewUser::builder() + .gh_id(111) + .gh_login("other_user") + .gh_encrypted_token(&[]) + .build() + .insert(&mut conn) + .await?; + + CrateBuilder::new("krate", other_user.id) + .version(VersionBuilder::new("0.1.0")) + .build(&mut conn) + .await?; + + let response = cookie_client + .post::<()>("/api/v1/crates/krate/0.1.0/rebuild_docs", "") + .await; + assert_snapshot!(response.status(), @"403 Forbidden"); + + app.run_pending_background_jobs().await; + + Ok(()) +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_trigger_rebuild_unknown_crate_doesnt_queue_job() -> anyhow::Result<()> { + let mut docs_rs_mock = MockDocsRsClient::new(); + docs_rs_mock + .expect_rebuild_docs() + .returning(|_, _| Ok(())) + .never(); + + let (app, _client, cookie_client) = + TestApp::full().with_docs_rs(docs_rs_mock).with_user().await; + + let response = cookie_client + .post::<()>("/api/v1/crates/krate/0.1.0/rebuild_docs", "") + .await; + + assert_snapshot!(response.status(), @"404 Not Found"); + + app.run_pending_background_jobs().await; + + Ok(()) +} diff --git a/src/tests/routes/crates/versions/mod.rs b/src/tests/routes/crates/versions/mod.rs index 82411c3deb3..94945acd54b 100644 --- a/src/tests/routes/crates/versions/mod.rs +++ b/src/tests/routes/crates/versions/mod.rs @@ -1,5 +1,6 @@ mod authors; pub mod dependencies; +mod docs; pub mod download; mod list; mod read; diff --git a/src/tests/routes/mod.rs b/src/tests/routes/mod.rs index 8e997ae71ec..773fd844d4d 100644 --- a/src/tests/routes/mod.rs +++ b/src/tests/routes/mod.rs @@ -21,4 +21,5 @@ mod private; pub mod session; mod site_metadata; pub mod summary; +mod trustpub; pub mod users; diff --git a/src/controllers/trustpub/github_configs/create/tests.rs b/src/tests/routes/trustpub/github_configs/create.rs similarity index 100% rename from src/controllers/trustpub/github_configs/create/tests.rs rename to src/tests/routes/trustpub/github_configs/create.rs diff --git a/src/controllers/trustpub/github_configs/delete/tests.rs b/src/tests/routes/trustpub/github_configs/delete.rs similarity index 100% rename from src/controllers/trustpub/github_configs/delete/tests.rs rename to src/tests/routes/trustpub/github_configs/delete.rs diff --git a/src/controllers/trustpub/github_configs/list/tests.rs b/src/tests/routes/trustpub/github_configs/list.rs similarity index 100% rename from src/controllers/trustpub/github_configs/list/tests.rs rename to src/tests/routes/trustpub/github_configs/list.rs diff --git a/src/tests/routes/trustpub/github_configs/mod.rs b/src/tests/routes/trustpub/github_configs/mod.rs new file mode 100644 index 00000000000..bc76d87cac4 --- /dev/null +++ b/src/tests/routes/trustpub/github_configs/mod.rs @@ -0,0 +1,3 @@ +mod create; +mod delete; +mod list; diff --git a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_wildcard_crate_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-2.snap similarity index 82% rename from src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_wildcard_crate_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-2.snap index 9b76d1fe41b..df5067e234e 100644 --- a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_wildcard_crate_scope-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/create/tests.rs +source: src/tests/routes/trustpub/github_configs/create.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-3.snap similarity index 93% rename from src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-3.snap index e44c7d3f7b7..05a1d37cf21 100644 --- a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-3.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/create/tests.rs +source: src/tests/routes/trustpub/github_configs/create.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path_with_environment-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap similarity index 82% rename from src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path_with_environment-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap index e9f65c508ab..ab17cc4a0c2 100644 --- a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path_with_environment-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/create/tests.rs +source: src/tests/routes/trustpub/github_configs/create.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__legacy_token_auth-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__legacy_token_auth-2.snap similarity index 82% rename from src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__legacy_token_auth-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__legacy_token_auth-2.snap index 9b76d1fe41b..df5067e234e 100644 --- a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__legacy_token_auth-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__legacy_token_auth-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/create/tests.rs +source: src/tests/routes/trustpub/github_configs/create.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_trusted_publishing_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap similarity index 82% rename from src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_trusted_publishing_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap index 9b76d1fe41b..df5067e234e 100644 --- a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__token_auth_with_trusted_publishing_scope-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/create/tests.rs +source: src/tests/routes/trustpub/github_configs/create.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap similarity index 82% rename from src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap index 9b76d1fe41b..df5067e234e 100644 --- a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/create/tests.rs +source: src/tests/routes/trustpub/github_configs/create.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__happy_path-2.snap similarity index 90% rename from src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__happy_path-2.snap index 57f704d2001..f7ec9fdd542 100644 --- a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__happy_path-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/delete/tests.rs +source: src/tests/routes/trustpub/github_configs/delete.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__legacy_token_auth-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap similarity index 90% rename from src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__legacy_token_auth-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap index 57f704d2001..f7ec9fdd542 100644 --- a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__legacy_token_auth-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/delete/tests.rs +source: src/tests/routes/trustpub/github_configs/delete.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_trusted_publishing_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap similarity index 90% rename from src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_trusted_publishing_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap index 57f704d2001..f7ec9fdd542 100644 --- a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_trusted_publishing_scope-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/delete/tests.rs +source: src/tests/routes/trustpub/github_configs/delete.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_wildcard_crate_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap similarity index 90% rename from src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_wildcard_crate_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap index 57f704d2001..f7ec9fdd542 100644 --- a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__token_auth_with_wildcard_crate_scope-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/delete/tests.rs +source: src/tests/routes/trustpub/github_configs/delete.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__crate_with_no_configs-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap similarity index 50% rename from src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__crate_with_no_configs-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap index 9f426eb063d..1cc9b449789 100644 --- a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__crate_with_no_configs-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/list/tests.rs +source: src/tests/routes/trustpub/github_configs/list.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-2.snap similarity index 90% rename from src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-2.snap index 755072a4dde..244aafc8b46 100644 --- a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/list/tests.rs +source: src/tests/routes/trustpub/github_configs/list.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-4.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-4.snap similarity index 83% rename from src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-4.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-4.snap index 494dfefd992..1183786b30b 100644 --- a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__happy_path-4.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-4.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/list/tests.rs +source: src/tests/routes/trustpub/github_configs/list.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_wildcard_crate_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__legacy_token_auth-2.snap similarity index 83% rename from src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_wildcard_crate_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__legacy_token_auth-2.snap index f7ec4c3038f..9daedb86795 100644 --- a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_wildcard_crate_scope-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__legacy_token_auth-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/list/tests.rs +source: src/tests/routes/trustpub/github_configs/list.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__legacy_token_auth-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap similarity index 83% rename from src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__legacy_token_auth-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap index f7ec4c3038f..9daedb86795 100644 --- a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__legacy_token_auth-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/list/tests.rs +source: src/tests/routes/trustpub/github_configs/list.rs expression: response.json() --- { diff --git a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_trusted_publishing_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap similarity index 83% rename from src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_trusted_publishing_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap index f7ec4c3038f..9daedb86795 100644 --- a/src/controllers/trustpub/github_configs/list/snapshots/crates_io__controllers__trustpub__github_configs__list__tests__token_auth_with_trusted_publishing_scope-2.snap +++ b/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/trustpub/github_configs/list/tests.rs +source: src/tests/routes/trustpub/github_configs/list.rs expression: response.json() --- { diff --git a/src/tests/routes/trustpub/mod.rs b/src/tests/routes/trustpub/mod.rs new file mode 100644 index 00000000000..579b8ed5840 --- /dev/null +++ b/src/tests/routes/trustpub/mod.rs @@ -0,0 +1,2 @@ +mod github_configs; +mod tokens; diff --git a/src/controllers/trustpub/tokens/exchange/github_tests.rs b/src/tests/routes/trustpub/tokens/exchange/github.rs similarity index 100% rename from src/controllers/trustpub/tokens/exchange/github_tests.rs rename to src/tests/routes/trustpub/tokens/exchange/github.rs diff --git a/src/controllers/trustpub/tokens/exchange/gitlab_tests.rs b/src/tests/routes/trustpub/tokens/exchange/gitlab.rs similarity index 100% rename from src/controllers/trustpub/tokens/exchange/gitlab_tests.rs rename to src/tests/routes/trustpub/tokens/exchange/gitlab.rs diff --git a/src/tests/routes/trustpub/tokens/exchange/mod.rs b/src/tests/routes/trustpub/tokens/exchange/mod.rs new file mode 100644 index 00000000000..cd2325daabd --- /dev/null +++ b/src/tests/routes/trustpub/tokens/exchange/mod.rs @@ -0,0 +1,2 @@ +mod github; +mod gitlab; diff --git a/src/tests/routes/trustpub/tokens/mod.rs b/src/tests/routes/trustpub/tokens/mod.rs new file mode 100644 index 00000000000..dca78b104e6 --- /dev/null +++ b/src/tests/routes/trustpub/tokens/mod.rs @@ -0,0 +1,2 @@ +mod exchange; +mod revoke; diff --git a/src/controllers/trustpub/tokens/revoke/tests.rs b/src/tests/routes/trustpub/tokens/revoke.rs similarity index 100% rename from src/controllers/trustpub/tokens/revoke/tests.rs rename to src/tests/routes/trustpub/tokens/revoke.rs diff --git a/src/tests/routes/users/email_verification.rs b/src/tests/routes/users/email_verification.rs new file mode 100644 index 00000000000..f44f38cca2f --- /dev/null +++ b/src/tests/routes/users/email_verification.rs @@ -0,0 +1,39 @@ +use crate::tests::util::{RequestHelper, TestApp}; +use insta::assert_snapshot; + +#[tokio::test(flavor = "multi_thread")] +async fn test_no_auth() { + let (app, anon, user) = TestApp::init().with_user().await; + + let url = format!("/api/v1/users/{}/resend", user.as_model().id); + let response = anon.put::<()>(&url, "").await; + assert_snapshot!(response.status(), @"403 Forbidden"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"this action requires authentication"}]}"#); + + assert_eq!(app.emails().await.len(), 0); +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_wrong_user() { + let (app, _anon, user) = TestApp::init().with_user().await; + let user2 = app.db_new_user("bar").await; + + let url = format!("/api/v1/users/{}/resend", user2.as_model().id); + let response = user.put::<()>(&url, "").await; + assert_snapshot!(response.status(), @"400 Bad Request"); + assert_snapshot!(response.text(), @r#"{"errors":[{"detail":"current user does not match requested user"}]}"#); + + assert_eq!(app.emails().await.len(), 0); +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_happy_path() { + let (app, _anon, user) = TestApp::init().with_user().await; + + let url = format!("/api/v1/users/{}/resend", user.as_model().id); + let response = user.put::<()>(&url, "").await; + assert_snapshot!(response.status(), @"200 OK"); + assert_snapshot!(response.text(), @r#"{"ok":true}"#); + + assert_snapshot!(app.emails_snapshot().await); +} diff --git a/src/tests/routes/users/mod.rs b/src/tests/routes/users/mod.rs index c788314a57b..94ce1083ee4 100644 --- a/src/tests/routes/users/mod.rs +++ b/src/tests/routes/users/mod.rs @@ -1,3 +1,4 @@ +mod email_verification; mod read; mod stats; pub mod update; diff --git a/src/controllers/user/snapshots/crates_io__controllers__user__email_verification__tests__happy_path-3.snap b/src/tests/routes/users/snapshots/crates_io__tests__routes__users__email_verification__happy_path-3.snap similarity index 100% rename from src/controllers/user/snapshots/crates_io__controllers__user__email_verification__tests__happy_path-3.snap rename to src/tests/routes/users/snapshots/crates_io__tests__routes__users__email_verification__happy_path-3.snap diff --git a/src/snapshots/crates_io__openapi__tests__openapi_snapshot-2.snap b/src/tests/snapshots/crates_io__tests__openapi__openapi_snapshot-2.snap similarity index 100% rename from src/snapshots/crates_io__openapi__tests__openapi_snapshot-2.snap rename to src/tests/snapshots/crates_io__tests__openapi__openapi_snapshot-2.snap diff --git a/src/tests/worker/generate_og_image.rs b/src/tests/worker/generate_og_image.rs new file mode 100644 index 00000000000..5b766de3d8f --- /dev/null +++ b/src/tests/worker/generate_og_image.rs @@ -0,0 +1,89 @@ +use crate::tests::builders::CrateBuilder; +use crate::tests::util::TestApp; +use claims::{assert_err, assert_ok}; +use crates_io_env_vars::var; +use crates_io_worker::BackgroundJob; +use insta::assert_binary_snapshot; +use std::process::Command; +use tracing::warn; + +fn is_ci() -> bool { + var("CI").unwrap().is_some() +} + +fn typst_available() -> bool { + Command::new("typst").arg("--version").spawn().is_ok() +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_generate_og_image_job() { + let (app, _, user) = TestApp::full().with_og_image_generator().with_user().await; + + if !is_ci() && !typst_available() { + warn!("Skipping OG image generation test because 'typst' is not available"); + return; + } + + let mut conn = app.db_conn().await; + + // Create a test crate with keywords using CrateBuilder + CrateBuilder::new("test-crate", user.as_model().id) + .description("A test crate for OG image generation") + .keyword("testing") + .keyword("rust") + .expect_build(&mut conn) + .await; + + // Create and enqueue the job + let job = crate::worker::jobs::GenerateOgImage::new("test-crate".to_string()); + job.enqueue(&mut conn).await.unwrap(); + + // Run the background job + app.run_pending_background_jobs().await; + + // Verify the OG image was uploaded to storage + let storage = app.as_inner().storage.as_inner(); + let og_image_path = "og-images/test-crate.png"; + + // Try to download the image to verify it exists + let download_result = storage.get(&og_image_path.into()).await; + let result = assert_ok!( + download_result, + "OG image should be uploaded to storage at: {og_image_path}" + ); + + // Verify it's a non-empty file + let image_bytes = result.bytes().await.unwrap().to_vec(); + assert!(!image_bytes.is_empty(), "OG image should not be empty"); + + // Verify it starts with PNG magic bytes + assert_eq!( + &image_bytes[0..8], + &[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A], + "Uploaded file should be a valid PNG" + ); + + assert_binary_snapshot!("og-image.png", image_bytes); +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_generate_og_image_job_nonexistent_crate() { + let (app, _, _) = TestApp::full().with_user().await; + let mut conn = app.db_conn().await; + + // Create and enqueue the job for a non-existent crate + let job = crate::worker::jobs::GenerateOgImage::new("nonexistent-crate".to_string()); + job.enqueue(&mut conn).await.unwrap(); + + // Run the background job - should complete without error + app.run_pending_background_jobs().await; + + // Verify no OG image was uploaded + let storage = app.as_inner().storage.as_inner(); + let og_image_path = "og-images/nonexistent-crate.png"; + let download_result = storage.get(&og_image_path.into()).await; + assert_err!( + download_result, + "No OG image should be uploaded for nonexistent crate" + ); +} diff --git a/src/tests/worker/mod.rs b/src/tests/worker/mod.rs index f6f21e41382..f9305a041ef 100644 --- a/src/tests/worker/mod.rs +++ b/src/tests/worker/mod.rs @@ -1,6 +1,8 @@ +mod generate_og_image; mod git; mod readmes; mod rss; mod send_publish_notifications; mod sync_admins; +mod trustpub; mod update_default_version; diff --git a/src/worker/jobs/snapshots/crates_io__worker__jobs__generate_og_image__tests__og-image.snap b/src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap similarity index 60% rename from src/worker/jobs/snapshots/crates_io__worker__jobs__generate_og_image__tests__og-image.snap rename to src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap index cf5fa112c7b..30b140434e0 100644 --- a/src/worker/jobs/snapshots/crates_io__worker__jobs__generate_og_image__tests__og-image.snap +++ b/src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap @@ -1,5 +1,5 @@ --- -source: src/worker/jobs/generate_og_image.rs +source: src/tests/worker/generate_og_image.rs expression: image_bytes extension: png snapshot_kind: binary diff --git a/src/worker/jobs/snapshots/crates_io__worker__jobs__generate_og_image__tests__og-image.snap.png b/src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap.png similarity index 100% rename from src/worker/jobs/snapshots/crates_io__worker__jobs__generate_og_image__tests__og-image.snap.png rename to src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap.png diff --git a/src/tests/worker/trustpub/delete_jtis.rs b/src/tests/worker/trustpub/delete_jtis.rs new file mode 100644 index 00000000000..730d1cf1f57 --- /dev/null +++ b/src/tests/worker/trustpub/delete_jtis.rs @@ -0,0 +1,40 @@ +use crate::tests::util::TestApp; +use crate::worker::jobs::trustpub::DeleteExpiredJtis; +use chrono::{TimeDelta, Utc}; +use crates_io_database::models::trustpub::NewUsedJti; +use crates_io_database::schema::trustpub_used_jtis; +use crates_io_worker::BackgroundJob; +use diesel::prelude::*; +use diesel_async::RunQueryDsl; +use insta::assert_compact_debug_snapshot; + +#[tokio::test(flavor = "multi_thread")] +async fn test_expiry() -> anyhow::Result<()> { + let (app, _client) = TestApp::full().empty().await; + let mut conn = app.db_conn().await; + + let jti = NewUsedJti { + expires_at: Utc::now() + TimeDelta::minutes(30), + jti: "foo", + }; + jti.insert(&mut conn).await?; + + let jti = NewUsedJti { + expires_at: Utc::now() - TimeDelta::minutes(5), + jti: "bar", + }; + jti.insert(&mut conn).await?; + + DeleteExpiredJtis.enqueue(&mut conn).await?; + app.run_pending_background_jobs().await; + + // Check that the expired token was deleted + let known_jtis: Vec = trustpub_used_jtis::table + .select(trustpub_used_jtis::jti) + .load(&mut conn) + .await?; + + assert_compact_debug_snapshot!(known_jtis, @r#"["foo"]"#); + + Ok(()) +} diff --git a/src/tests/worker/trustpub/delete_tokens.rs b/src/tests/worker/trustpub/delete_tokens.rs new file mode 100644 index 00000000000..7934dfbb612 --- /dev/null +++ b/src/tests/worker/trustpub/delete_tokens.rs @@ -0,0 +1,44 @@ +use crate::tests::util::TestApp; +use crate::worker::jobs::trustpub::DeleteExpiredTokens; +use chrono::{TimeDelta, Utc}; +use crates_io_database::models::trustpub::NewToken; +use crates_io_database::schema::trustpub_tokens; +use crates_io_worker::BackgroundJob; +use diesel::prelude::*; +use diesel_async::RunQueryDsl; +use insta::assert_compact_debug_snapshot; + +#[tokio::test(flavor = "multi_thread")] +async fn test_expiry() -> anyhow::Result<()> { + let (app, _client) = TestApp::full().empty().await; + let mut conn = app.db_conn().await; + + let token = NewToken { + expires_at: Utc::now() + TimeDelta::minutes(30), + hashed_token: &[0xC0, 0xFF, 0xEE], + crate_ids: &[1], + trustpub_data: None, + }; + token.insert(&mut conn).await?; + + let token = NewToken { + expires_at: Utc::now() - TimeDelta::minutes(5), + hashed_token: &[0xBA, 0xAD, 0xF0, 0x0D], + crate_ids: &[2], + trustpub_data: None, + }; + token.insert(&mut conn).await?; + + DeleteExpiredTokens.enqueue(&mut conn).await?; + app.run_pending_background_jobs().await; + + // Check that the expired token was deleted + let crate_ids: Vec>> = trustpub_tokens::table + .select(trustpub_tokens::crate_ids) + .load(&mut conn) + .await?; + + assert_compact_debug_snapshot!(crate_ids, @"[[Some(1)]]"); + + Ok(()) +} diff --git a/src/tests/worker/trustpub/mod.rs b/src/tests/worker/trustpub/mod.rs new file mode 100644 index 00000000000..81eae863be5 --- /dev/null +++ b/src/tests/worker/trustpub/mod.rs @@ -0,0 +1,2 @@ +mod delete_jtis; +mod delete_tokens; diff --git a/src/worker/jobs/generate_og_image.rs b/src/worker/jobs/generate_og_image.rs index b93df2976b1..3fdfce69818 100644 --- a/src/worker/jobs/generate_og_image.rs +++ b/src/worker/jobs/generate_og_image.rs @@ -196,96 +196,3 @@ async fn fetch_user_owners( .load(conn) .await } - -#[cfg(test)] -mod tests { - use super::*; - use crate::tests::builders::CrateBuilder; - use crate::tests::util::TestApp; - use claims::{assert_err, assert_ok}; - use crates_io_env_vars::var; - use crates_io_worker::BackgroundJob; - use insta::assert_binary_snapshot; - use std::process::Command; - - fn is_ci() -> bool { - var("CI").unwrap().is_some() - } - - fn typst_available() -> bool { - Command::new("typst").arg("--version").spawn().is_ok() - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_generate_og_image_job() { - let (app, _, user) = TestApp::full().with_og_image_generator().with_user().await; - - if !is_ci() && !typst_available() { - warn!("Skipping OG image generation test because 'typst' is not available"); - return; - } - - let mut conn = app.db_conn().await; - - // Create a test crate with keywords using CrateBuilder - CrateBuilder::new("test-crate", user.as_model().id) - .description("A test crate for OG image generation") - .keyword("testing") - .keyword("rust") - .expect_build(&mut conn) - .await; - - // Create and enqueue the job - let job = GenerateOgImage::new("test-crate".to_string()); - job.enqueue(&mut conn).await.unwrap(); - - // Run the background job - app.run_pending_background_jobs().await; - - // Verify the OG image was uploaded to storage - let storage = app.as_inner().storage.as_inner(); - let og_image_path = "og-images/test-crate.png"; - - // Try to download the image to verify it exists - let download_result = storage.get(&og_image_path.into()).await; - let result = assert_ok!( - download_result, - "OG image should be uploaded to storage at: {og_image_path}" - ); - - // Verify it's a non-empty file - let image_bytes = result.bytes().await.unwrap().to_vec(); - assert!(!image_bytes.is_empty(), "OG image should not be empty"); - - // Verify it starts with PNG magic bytes - assert_eq!( - &image_bytes[0..8], - &[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A], - "Uploaded file should be a valid PNG" - ); - - assert_binary_snapshot!("og-image.png", image_bytes); - } - - #[tokio::test(flavor = "multi_thread")] - async fn test_generate_og_image_job_nonexistent_crate() { - let (app, _, _) = TestApp::full().with_user().await; - let mut conn = app.db_conn().await; - - // Create and enqueue the job for a non-existent crate - let job = GenerateOgImage::new("nonexistent-crate".to_string()); - job.enqueue(&mut conn).await.unwrap(); - - // Run the background job - should complete without error - app.run_pending_background_jobs().await; - - // Verify no OG image was uploaded - let storage = app.as_inner().storage.as_inner(); - let og_image_path = "og-images/nonexistent-crate.png"; - let download_result = storage.get(&og_image_path.into()).await; - assert_err!( - download_result, - "No OG image should be uploaded for nonexistent crate" - ); - } -} diff --git a/src/worker/jobs/trustpub/delete_jtis.rs b/src/worker/jobs/trustpub/delete_jtis.rs index ec23d5642dd..20a14f698ad 100644 --- a/src/worker/jobs/trustpub/delete_jtis.rs +++ b/src/worker/jobs/trustpub/delete_jtis.rs @@ -28,43 +28,3 @@ impl BackgroundJob for DeleteExpiredJtis { Ok(()) } } - -#[cfg(test)] -mod tests { - use super::*; - use crate::tests::util::TestApp; - use chrono::{TimeDelta, Utc}; - use crates_io_database::models::trustpub::NewUsedJti; - use insta::assert_compact_debug_snapshot; - - #[tokio::test(flavor = "multi_thread")] - async fn test_expiry() -> anyhow::Result<()> { - let (app, _client) = TestApp::full().empty().await; - let mut conn = app.db_conn().await; - - let jti = NewUsedJti { - expires_at: Utc::now() + TimeDelta::minutes(30), - jti: "foo", - }; - jti.insert(&mut conn).await?; - - let jti = NewUsedJti { - expires_at: Utc::now() - TimeDelta::minutes(5), - jti: "bar", - }; - jti.insert(&mut conn).await?; - - DeleteExpiredJtis.enqueue(&mut conn).await?; - app.run_pending_background_jobs().await; - - // Check that the expired token was deleted - let known_jtis: Vec = trustpub_used_jtis::table - .select(trustpub_used_jtis::jti) - .load(&mut conn) - .await?; - - assert_compact_debug_snapshot!(known_jtis, @r#"["foo"]"#); - - Ok(()) - } -} diff --git a/src/worker/jobs/trustpub/delete_tokens.rs b/src/worker/jobs/trustpub/delete_tokens.rs index b5a9a2bde6c..6a7f55c813d 100644 --- a/src/worker/jobs/trustpub/delete_tokens.rs +++ b/src/worker/jobs/trustpub/delete_tokens.rs @@ -27,47 +27,3 @@ impl BackgroundJob for DeleteExpiredTokens { Ok(()) } } - -#[cfg(test)] -mod tests { - use super::*; - use crate::tests::util::TestApp; - use chrono::{TimeDelta, Utc}; - use crates_io_database::models::trustpub::NewToken; - use insta::assert_compact_debug_snapshot; - - #[tokio::test(flavor = "multi_thread")] - async fn test_expiry() -> anyhow::Result<()> { - let (app, _client) = TestApp::full().empty().await; - let mut conn = app.db_conn().await; - - let token = NewToken { - expires_at: Utc::now() + TimeDelta::minutes(30), - hashed_token: &[0xC0, 0xFF, 0xEE], - crate_ids: &[1], - trustpub_data: None, - }; - token.insert(&mut conn).await?; - - let token = NewToken { - expires_at: Utc::now() - TimeDelta::minutes(5), - hashed_token: &[0xBA, 0xAD, 0xF0, 0x0D], - crate_ids: &[2], - trustpub_data: None, - }; - token.insert(&mut conn).await?; - - DeleteExpiredTokens.enqueue(&mut conn).await?; - app.run_pending_background_jobs().await; - - // Check that the expired token was deleted - let crate_ids: Vec>> = trustpub_tokens::table - .select(trustpub_tokens::crate_ids) - .load(&mut conn) - .await?; - - assert_compact_debug_snapshot!(crate_ids, @"[[Some(1)]]"); - - Ok(()) - } -} From 9072f3cd7c38fb0d7133538d0ec0b1788f6beb79 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 17 Oct 2025 21:50:06 +0200 Subject: [PATCH 2/5] test_utils: Add `github` module with `next_gh_id()` helper --- crates/crates_io_test_utils/src/github.rs | 7 +++++++ crates/crates_io_test_utils/src/lib.rs | 1 + src/tests/util/github.rs | 7 +------ src/typosquat/test_util.rs | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 crates/crates_io_test_utils/src/github.rs diff --git a/crates/crates_io_test_utils/src/github.rs b/crates/crates_io_test_utils/src/github.rs new file mode 100644 index 00000000000..e34c6476863 --- /dev/null +++ b/crates/crates_io_test_utils/src/github.rs @@ -0,0 +1,7 @@ +use std::sync::atomic::{AtomicUsize, Ordering}; + +static NEXT_GH_ID: AtomicUsize = AtomicUsize::new(1); + +pub fn next_gh_id() -> i32 { + NEXT_GH_ID.fetch_add(1, Ordering::SeqCst) as i32 +} diff --git a/crates/crates_io_test_utils/src/lib.rs b/crates/crates_io_test_utils/src/lib.rs index e0cfaaad43c..4cf65edeee3 100644 --- a/crates/crates_io_test_utils/src/lib.rs +++ b/crates/crates_io_test_utils/src/lib.rs @@ -1 +1,2 @@ pub mod builders; +pub mod github; diff --git a/src/tests/util/github.rs b/src/tests/util/github.rs index 29ef82d122a..8bb9b9e92fd 100644 --- a/src/tests/util/github.rs +++ b/src/tests/util/github.rs @@ -3,13 +3,8 @@ use crates_io_github::{ GitHubError, GitHubOrgMembership, GitHubOrganization, GitHubTeam, GitHubTeamMembership, GitHubUser, MockGitHubClient, }; -use std::sync::atomic::{AtomicUsize, Ordering}; -static NEXT_GH_ID: AtomicUsize = AtomicUsize::new(1); - -pub fn next_gh_id() -> i32 { - NEXT_GH_ID.fetch_add(1, Ordering::SeqCst) as i32 -} +pub use crates_io_test_utils::github::next_gh_id; pub(crate) const MOCK_GITHUB_DATA: MockData = MockData { orgs: &[MockOrg { diff --git a/src/typosquat/test_util.rs b/src/typosquat/test_util.rs index 8ed7d6d1961..3f6072e2b5e 100644 --- a/src/typosquat/test_util.rs +++ b/src/typosquat/test_util.rs @@ -1,7 +1,7 @@ use diesel::prelude::*; use crate::models::{Crate, NewTeam, NewUser, Team, User}; -use crate::tests::util::github::next_gh_id; +use crates_io_test_utils::github::next_gh_id; pub mod faker { use super::*; From b492daaa5f8cecbe4868ad518a1ed715b94023cd Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 17 Oct 2025 22:05:13 +0200 Subject: [PATCH 3/5] test_utils: Add `helpers` module with `add_team_to_crate()` --- crates/crates_io_test_utils/src/helpers.rs | 18 ++++++++++++++++++ crates/crates_io_test_utils/src/lib.rs | 1 + src/tests/mod.rs | 19 ++----------------- src/typosquat/database.rs | 2 +- 4 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 crates/crates_io_test_utils/src/helpers.rs diff --git a/crates/crates_io_test_utils/src/helpers.rs b/crates/crates_io_test_utils/src/helpers.rs new file mode 100644 index 00000000000..fe1fb0f26f6 --- /dev/null +++ b/crates/crates_io_test_utils/src/helpers.rs @@ -0,0 +1,18 @@ +use crates_io_database::models::{Crate, CrateOwner, Team, User}; +use diesel::prelude::*; +use diesel_async::AsyncPgConnection; + +pub async fn add_team_to_crate( + t: &Team, + krate: &Crate, + u: &User, + conn: &mut AsyncPgConnection, +) -> QueryResult<()> { + CrateOwner::builder() + .crate_id(krate.id) + .team_id(t.id) + .created_by(u.id) + .build() + .insert(conn) + .await +} diff --git a/crates/crates_io_test_utils/src/lib.rs b/crates/crates_io_test_utils/src/lib.rs index 4cf65edeee3..3bdfa89347a 100644 --- a/crates/crates_io_test_utils/src/lib.rs +++ b/crates/crates_io_test_utils/src/lib.rs @@ -1,2 +1,3 @@ pub mod builders; pub mod github; +pub mod helpers; diff --git a/src/tests/mod.rs b/src/tests/mod.rs index e31da9ad386..37cb4b7ea1f 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -1,4 +1,4 @@ -use crate::models::{Crate, CrateOwner, NewCategory, NewTeam, NewUser, Team, User}; +use crate::models::{NewCategory, NewTeam, NewUser}; use crate::tests::util::{RequestHelper, TestApp}; use crate::views::{ EncodableCategory, EncodableCrate, EncodableKeyword, EncodableOwner, EncodableVersion, @@ -7,8 +7,6 @@ use crate::views::{ use crate::tests::util::github::next_gh_id; use crate::util::gh_token_encryption::GitHubTokenEncryption; -use diesel::prelude::*; -use diesel_async::AsyncPgConnection; use serde::{Deserialize, Serialize}; use std::sync::LazyLock; @@ -116,20 +114,7 @@ fn new_team(login: &str) -> NewTeam<'_> { .build() } -pub async fn add_team_to_crate( - t: &Team, - krate: &Crate, - u: &User, - conn: &mut AsyncPgConnection, -) -> QueryResult<()> { - CrateOwner::builder() - .crate_id(krate.id) - .team_id(t.id) - .created_by(u.id) - .build() - .insert(conn) - .await -} +pub use crates_io_test_utils::helpers::add_team_to_crate; fn new_category<'a>(category: &'a str, slug: &'a str, description: &'a str) -> NewCategory<'a> { NewCategory { diff --git a/src/typosquat/database.rs b/src/typosquat/database.rs index be0b7ba0807..5a87a2c717e 100644 --- a/src/typosquat/database.rs +++ b/src/typosquat/database.rs @@ -170,9 +170,9 @@ impl From for Owner { #[cfg(test)] mod tests { use super::*; - use crate::tests::add_team_to_crate; use crate::typosquat::test_util::faker; use crates_io_test_db::TestDatabase; + use crates_io_test_utils::helpers::add_team_to_crate; use thiserror::Error; #[tokio::test] From 61ba48672021889046095521f49aa08b40f687ed Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 17 Oct 2025 22:08:54 +0200 Subject: [PATCH 4/5] util: Make `GitHubTokenEncryption::for_testing()` available in debug builds --- src/util/gh_token_encryption.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/gh_token_encryption.rs b/src/util/gh_token_encryption.rs index 0eaa0ff2137..c8d45caf309 100644 --- a/src/util/gh_token_encryption.rs +++ b/src/util/gh_token_encryption.rs @@ -18,7 +18,7 @@ impl GitHubTokenEncryption { /// Creates a new [GitHubTokenEncryption] instance with a cipher for testing /// purposes. - #[cfg(test)] + #[cfg(any(test, debug_assertions))] pub fn for_testing() -> Self { let test_key = b"test_key_32_bytes_long_for_tests"; Self::new(Aes256Gcm::new(Key::::from_slice(test_key))) From 35b7e51495ee47d392d085d899c4cd1221ee78a0 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 17 Oct 2025 22:12:58 +0200 Subject: [PATCH 5/5] tests: Extract integration tests to separate compilation unit This achieves the primary goal: modifying test files no longer triggers library recompilation, significantly improving incremental test iteration. --- Cargo.toml | 4 ++ src/index.rs | 2 +- src/lib.rs | 2 - src/tests/account_lock.rs | 4 +- src/tests/authentication.rs | 8 ++-- src/tests/blocked_routes.rs | 4 +- src/tests/categories.rs | 14 +++---- src/tests/cors.rs | 4 +- src/tests/dump_db.rs | 6 +-- src/tests/github_secret_scanning.rs | 12 +++--- src/tests/issues/issue1205.rs | 4 +- src/tests/issues/issue2736.rs | 6 +-- src/tests/krate/following.rs | 4 +- src/tests/krate/publish/analysis.rs | 6 +-- src/tests/krate/publish/audit_action.rs | 6 +-- src/tests/krate/publish/auth.rs | 6 +-- src/tests/krate/publish/basics.rs | 8 ++-- src/tests/krate/publish/build_metadata.rs | 4 +- src/tests/krate/publish/categories.rs | 6 +-- src/tests/krate/publish/deleted_crates.rs | 6 +-- src/tests/krate/publish/dependencies.rs | 6 +-- src/tests/krate/publish/edition.rs | 6 +-- src/tests/krate/publish/emails.rs | 6 +-- src/tests/krate/publish/features.rs | 4 +- src/tests/krate/publish/git.rs | 4 +- src/tests/krate/publish/inheritance.rs | 4 +- src/tests/krate/publish/keywords.rs | 4 +- src/tests/krate/publish/links.rs | 6 +-- src/tests/krate/publish/manifest.rs | 6 +-- src/tests/krate/publish/max_size.rs | 4 +- src/tests/krate/publish/rate_limit.rs | 8 ++-- src/tests/krate/publish/readme.rs | 4 +- src/tests/krate/publish/similar_names.rs | 4 +- ...analysis__crate_files_are_analyzed-2.snap} | 0 ..._auth__new_krate_with_bearer_token-2.snap} | 0 ..._krate__publish__basics__new_krate-2.snap} | 0 ..._krate__publish__basics__new_krate-3.snap} | 0 ..._krate__publish__basics__new_krate-5.snap} | 0 ...__publish__basics__new_krate_twice-2.snap} | 0 ...__publish__basics__new_krate_twice-3.snap} | 0 ...blish__basics__new_krate_twice_alt-2.snap} | 0 ...blish__basics__new_krate_twice_alt-3.snap} | 0 ...h__basics__new_krate_weird_version-2.snap} | 0 ...lish__basics__new_krate_with_token-2.snap} | 0 ...with_build_metadata@build_metadata_1.snap} | 0 ...with_build_metadata@build_metadata_2.snap} | 0 ...with_build_metadata@build_metadata_3.snap} | 0 ...blish__categories__good_categories-2.snap} | 0 ...__publish__dependencies__dep_limit-4.snap} | 0 ...__dependencies__new_krate_sorts_deps.snap} | 0 ...endencies__new_krate_with_dependency.snap} | 0 ...dencies__new_with_renamed_dependency.snap} | 0 ...w_with_underscore_renamed_dependency.snap} | 0 ...publish__edition__edition_is_saved-2.snap} | 0 ...publish__edition__edition_is_saved-4.snap} | 0 ...ame_start_with_number_and_underscore.snap} | 0 ...ish__features__feature_name_with_dot.snap} | 0 ...res__feature_name_with_unicode_chars.snap} | 0 ...ublish__features__features_version_2.snap} | 0 ...__publish__keywords__good_keywords-2.snap} | 0 ...ish__links__crate_with_links_field-3.snap} | 0 ...ish__links__crate_with_links_field-5.snap} | 0 ...blish__links__crate_with_links_field.snap} | 0 ..._publish__manifest__boolean_readme-2.snap} | 0 ..._publish__manifest__boolean_readme-4.snap} | 0 ...blish__manifest__lib_and_bin_crate-2.snap} | 0 ...blish__manifest__lib_and_bin_crate-4.snap} | 0 ...ult_axum_limit_and_max_upload_size-2.snap} | 0 ...eadme__new_krate_with_empty_readme-2.snap} | 0 ...ish__readme__new_krate_with_readme-2.snap} | 0 ...krate_with_readme_and_plus_version-2.snap} | 0 ...ate__publish__trustpub__full_flow-11.snap} | 0 ...rate__publish__trustpub__full_flow-7.snap} | 0 ...rate__publish__trustpub__full_flow-9.snap} | 0 ...ate__publish__trustpub__happy_path-2.snap} | 0 ..._happy_path_with_fancy_auth_header-2.snap} | 0 ...te__publish__validation__bad_name-10.snap} | 0 ...ate__publish__validation__bad_name-2.snap} | 0 ...ate__publish__validation__bad_name-3.snap} | 0 ...ate__publish__validation__bad_name-4.snap} | 0 ...ate__publish__validation__bad_name-5.snap} | 0 ...ate__publish__validation__bad_name-6.snap} | 0 ...ate__publish__validation__bad_name-7.snap} | 0 ...ate__publish__validation__bad_name-8.snap} | 0 ...ate__publish__validation__bad_name-9.snap} | 0 ...krate__publish__validation__bad_name.snap} | 0 src/tests/krate/publish/tarball.rs | 4 +- src/tests/krate/publish/timestamps.rs | 8 ++-- src/tests/krate/publish/trustpub.rs | 4 +- src/tests/krate/publish/validation.rs | 6 +-- ...yanking__patch_version_yank_unyank-2.snap} | 0 ...yanking__patch_version_yank_unyank-3.snap} | 0 ...yanking__patch_version_yank_unyank-4.snap} | 0 ...yanking__patch_version_yank_unyank-5.snap} | 0 ...yanking__patch_version_yank_unyank-6.snap} | 0 ...__yanking__patch_version_yank_unyank.snap} | 0 src/tests/krate/yanking.rs | 12 +++--- src/tests/middleware/head.rs | 2 +- src/tests/mod.rs | 10 ++--- src/tests/not_found_error.rs | 2 +- src/tests/openapi.rs | 2 +- src/tests/owners.rs | 18 ++++----- src/tests/pagination.rs | 4 +- src/tests/read_only_mode.rs | 6 +-- src/tests/routes/categories/get.rs | 8 ++-- src/tests/routes/categories/list.rs | 4 +- ...ion__routes__categories__get__show-2.snap} | 0 ...n__routes__categories__list__index-2.snap} | 0 ...ion__routes__categories__list__index.snap} | 0 src/tests/routes/category_slugs/list.rs | 4 +- ...urns_all_slugs_in_alphabetical_order.snap} | 0 src/tests/routes/crates/admin.rs | 8 ++-- src/tests/routes/crates/delete.rs | 10 ++--- src/tests/routes/crates/downloads.rs | 8 ++-- src/tests/routes/crates/following.rs | 4 +- src/tests/routes/crates/list.rs | 26 +++++-------- src/tests/routes/crates/new.rs | 4 +- src/tests/routes/crates/owners/add.rs | 8 ++-- src/tests/routes/crates/owners/remove.rs | 6 +-- src/tests/routes/crates/read.rs | 6 +-- .../routes/crates/reverse_dependencies.rs | 8 ++-- ..._crates__admin__index_include_yanked.snap} | 0 ...ates__delete__happy_path_new_crate-3.snap} | 0 ...ates__delete__happy_path_old_crate-3.snap} | 0 ...elete__happy_path_really_old_crate-3.snap} | 0 ...crates__downloads__crate_downloads-2.snap} | 0 ...ates__downloads__version_downloads-2.snap} | 0 ...st__invalid_params_with_null_bytes-2.snap} | 0 ...st__invalid_params_with_null_bytes-3.snap} | 0 ...st__invalid_params_with_null_bytes-4.snap} | 0 ...st__invalid_params_with_null_bytes-5.snap} | 0 ...list__invalid_params_with_null_bytes.snap} | 0 ...tes__read__include_default_version-2.snap} | 0 ...on__routes__crates__read__new_name-2.snap} | 0 ...ration__routes__crates__read__show-2.snap} | 0 ...tes__crates__read__show_all_yanked-2.snap} | 0 ...routes__crates__read__show_minimal-2.snap} | 0 ...t_included_in_reverse_dependencies-2.snap} | 0 ...dependencies__reverse_dependencies-2.snap} | 0 ...dependencies__reverse_dependencies-4.snap} | 0 ...des_published_by_user_when_present-2.snap} | 0 ..._supports_u64_version_number_parts-2.snap} | 0 ...ld_version_depended_but_new_doesnt-2.snap} | 0 ...version_doesnt_depend_but_new_does-2.snap} | 0 ...t_included_in_reverse_dependencies-2.snap} | 0 ...t_included_in_reverse_dependencies-4.snap} | 0 src/tests/routes/crates/versions/authors.rs | 4 +- .../routes/crates/versions/dependencies.rs | 6 +-- src/tests/routes/crates/versions/docs.rs | 4 +- src/tests/routes/crates/versions/download.rs | 4 +- src/tests/routes/crates/versions/list.rs | 8 ++-- src/tests/routes/crates/versions/read.rs | 10 ++--- ...__crates__versions__authors__authors.snap} | 0 ...__crates__versions__list__versions-2.snap} | 0 ...rate_name_and_semver_no_published_by.snap} | 0 ...read__show_by_crate_name_and_version.snap} | 0 .../routes/crates/versions/yank_unyank.rs | 12 +++--- src/tests/routes/keywords/list.rs | 6 +-- src/tests/routes/keywords/read.rs | 8 ++-- src/tests/routes/me/email_notifications.rs | 10 ++--- src/tests/routes/me/get.rs | 8 ++-- ...> integration__routes__me__get__me-4.snap} | 0 ...> integration__routes__me__get__me-6.snap} | 0 src/tests/routes/me/tokens/create.rs | 8 ++-- src/tests/routes/me/tokens/delete.rs | 6 +-- src/tests/routes/me/tokens/delete_current.rs | 6 +-- src/tests/routes/me/tokens/get.rs | 4 +- src/tests/routes/me/tokens/list.rs | 6 +-- ...kens__create__create_token_success-2.snap} | 0 ...kens__create__create_token_success-3.snap} | 0 ...ate__create_token_with_expiry_date-2.snap} | 0 ...ate__create_token_with_expiry_date-3.snap} | 0 ...ate__create_token_with_null_scopes-2.snap} | 0 ...ate__create_token_with_null_scopes-3.snap} | 0 ...__create__create_token_with_scopes-2.snap} | 0 ...__create__create_token_with_scopes-3.snap} | 0 ...oken_with_trusted_publishing_scope-2.snap} | 0 ...oken_with_trusted_publishing_scope-3.snap} | 0 ...ion__routes__me__tokens__get__show-2.snap} | 0 ...okens__get__show_token_with_scopes-2.snap} | 0 ...tes__me__tokens__list__list_tokens-2.snap} | 0 src/tests/routes/me/updates.rs | 10 ++--- src/tests/routes/metrics.rs | 4 +- .../routes/private/crate_owner_invitations.rs | 8 ++-- src/tests/routes/session/authorize.rs | 2 +- src/tests/routes/session/begin.rs | 2 +- src/tests/routes/site_metadata.rs | 2 +- ...e_metadata_includes_banner_message-2.snap} | 0 src/tests/routes/summary.rs | 10 ++--- .../routes/trustpub/github_configs/create.rs | 4 +- .../routes/trustpub/github_configs/delete.rs | 4 +- .../routes/trustpub/github_configs/list.rs | 4 +- ...github_configs__create__happy_path-2.snap} | 0 ...github_configs__create__happy_path-3.snap} | 0 ...reate__happy_path_with_environment-2.snap} | 0 ...configs__create__legacy_token_auth-2.snap} | 0 ...auth_with_trusted_publishing_scope-2.snap} | 0 ...ken_auth_with_wildcard_crate_scope-2.snap} | 0 ...github_configs__delete__happy_path-2.snap} | 0 ...configs__delete__legacy_token_auth-2.snap} | 0 ...auth_with_trusted_publishing_scope-2.snap} | 0 ...ken_auth_with_wildcard_crate_scope-2.snap} | 0 ...nfigs__list__crate_with_no_configs-2.snap} | 0 ...__github_configs__list__happy_path-2.snap} | 0 ...__github_configs__list__happy_path-4.snap} | 0 ...b_configs__list__legacy_token_auth-2.snap} | 0 ...auth_with_trusted_publishing_scope-2.snap} | 0 ...ken_auth_with_wildcard_crate_scope-2.snap} | 0 .../routes/trustpub/tokens/exchange/github.rs | 4 +- .../routes/trustpub/tokens/exchange/gitlab.rs | 4 +- src/tests/routes/trustpub/tokens/revoke.rs | 2 +- src/tests/routes/users/email_verification.rs | 2 +- src/tests/routes/users/read.rs | 8 ++-- ...rs__email_verification__happy_path-3.snap} | 2 +- src/tests/routes/users/stats.rs | 8 ++-- src/tests/routes/users/update.rs | 8 ++-- .../users/update/publish_notifications.rs | 4 +- ...ions__unsubscribe_and_resubscribe-11.snap} | 0 ...tions__unsubscribe_and_resubscribe-2.snap} | 0 ...tions__unsubscribe_and_resubscribe-5.snap} | 0 ...tions__unsubscribe_and_resubscribe-7.snap} | 0 src/tests/server.rs | 4 +- ...hub_secret_alert_for_revoked_token-2.snap} | 0 ...hub_secret_alert_for_unknown_token-2.snap} | 0 ...t_alert_for_unknown_trustpub_token-2.snap} | 0 ..._github_secret_alert_revokes_token-2.snap} | 0 ..._github_secret_alert_revokes_token-3.snap} | 0 ...ecret_alert_revokes_trustpub_token-2.snap} | 0 ...ecret_alert_revokes_trustpub_token-3.snap} | 0 ...okes_trustpub_token_multiple_users-2.snap} | 0 ...okes_trustpub_token_multiple_users-3.snap} | 0 ...gration__openapi__openapi_snapshot-2.snap} | 2 +- ...n__owners__modify_multiple_owners-10.snap} | 0 ...tion__owners__modify_multiple_owners.snap} | 0 ...tegration__owners__new_crate_owner-2.snap} | 0 ...integration__owners__new_crate_owner.snap} | 0 ..._which_writes_db_in_read_only_mode-2.snap} | 0 ...affic_via_arbitrary_header_and_value.snap} | 0 ...ration__server__block_traffic_via_ip.snap} | 0 ...on__server__user_agent_is_required-2.snap} | 0 ...tion__server__user_agent_is_required.snap} | 0 ... => integration__team__publish_owned.snap} | 0 src/tests/team.rs | 12 +++--- src/tests/token.rs | 8 ++-- src/tests/unhealthy_database.rs | 4 +- src/tests/user.rs | 22 +++++------ src/tests/util.rs | 8 ++-- src/tests/util/response.rs | 4 +- src/tests/util/test_app.rs | 35 ++++++++---------- src/tests/version.rs | 6 +-- src/tests/worker/generate_og_image.rs | 8 ++-- src/tests/worker/git.rs | 10 ++--- src/tests/worker/readmes.rs | 4 +- ...__sync_crate_feed__sync_crate_feed-2.snap} | 0 ...sync_crates_feed__sync_crates_feed-2.snap} | 0 ...nc_updates_feed__sync_updates_feed-2.snap} | 0 src/tests/worker/rss/sync_crate_feed.rs | 6 +-- src/tests/worker/rss/sync_crates_feed.rs | 6 +-- src/tests/worker/rss/sync_updates_feed.rs | 6 +-- .../worker/send_publish_notifications.rs | 4 +- ..._worker__generate_og_image__og-image.snap} | 0 ...ker__generate_og_image__og-image.snap.png} | Bin ...worker__sync_admins__sync_admins_job.snap} | 0 src/tests/worker/sync_admins.rs | 6 +-- src/tests/worker/trustpub/delete_jtis.rs | 4 +- src/tests/worker/trustpub/delete_tokens.rs | 4 +- src/tests/worker/update_default_version.rs | 4 +- src/typosquat/test_util.rs | 2 +- 268 files changed, 362 insertions(+), 373 deletions(-) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__analysis__crate_files_are_analyzed-2.snap => integration__krate__publish__analysis__crate_files_are_analyzed-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__auth__new_krate_with_bearer_token-2.snap => integration__krate__publish__auth__new_krate_with_bearer_token-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate-2.snap => integration__krate__publish__basics__new_krate-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate-3.snap => integration__krate__publish__basics__new_krate-3.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate-5.snap => integration__krate__publish__basics__new_krate-5.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate_twice-2.snap => integration__krate__publish__basics__new_krate_twice-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate_twice-3.snap => integration__krate__publish__basics__new_krate_twice-3.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate_twice_alt-2.snap => integration__krate__publish__basics__new_krate_twice_alt-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate_twice_alt-3.snap => integration__krate__publish__basics__new_krate_twice_alt-3.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate_weird_version-2.snap => integration__krate__publish__basics__new_krate_weird_version-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__basics__new_krate_with_token-2.snap => integration__krate__publish__basics__new_krate_with_token-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_1.snap => integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_1.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_2.snap => integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_3.snap => integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_3.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__categories__good_categories-2.snap => integration__krate__publish__categories__good_categories-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__dependencies__dep_limit-4.snap => integration__krate__publish__dependencies__dep_limit-4.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__dependencies__new_krate_sorts_deps.snap => integration__krate__publish__dependencies__new_krate_sorts_deps.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__dependencies__new_krate_with_dependency.snap => integration__krate__publish__dependencies__new_krate_with_dependency.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__dependencies__new_with_renamed_dependency.snap => integration__krate__publish__dependencies__new_with_renamed_dependency.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap => integration__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__edition__edition_is_saved-2.snap => integration__krate__publish__edition__edition_is_saved-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__edition__edition_is_saved-4.snap => integration__krate__publish__edition__edition_is_saved-4.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__features__feature_name_start_with_number_and_underscore.snap => integration__krate__publish__features__feature_name_start_with_number_and_underscore.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__features__feature_name_with_dot.snap => integration__krate__publish__features__feature_name_with_dot.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__features__feature_name_with_unicode_chars.snap => integration__krate__publish__features__feature_name_with_unicode_chars.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__features__features_version_2.snap => integration__krate__publish__features__features_version_2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__keywords__good_keywords-2.snap => integration__krate__publish__keywords__good_keywords-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__links__crate_with_links_field-3.snap => integration__krate__publish__links__crate_with_links_field-3.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__links__crate_with_links_field-5.snap => integration__krate__publish__links__crate_with_links_field-5.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__links__crate_with_links_field.snap => integration__krate__publish__links__crate_with_links_field.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__manifest__boolean_readme-2.snap => integration__krate__publish__manifest__boolean_readme-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__manifest__boolean_readme-4.snap => integration__krate__publish__manifest__boolean_readme-4.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__manifest__lib_and_bin_crate-2.snap => integration__krate__publish__manifest__lib_and_bin_crate-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__manifest__lib_and_bin_crate-4.snap => integration__krate__publish__manifest__lib_and_bin_crate-4.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__max_size__tarball_between_default_axum_limit_and_max_upload_size-2.snap => integration__krate__publish__max_size__tarball_between_default_axum_limit_and_max_upload_size-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__readme__new_krate_with_empty_readme-2.snap => integration__krate__publish__readme__new_krate_with_empty_readme-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__readme__new_krate_with_readme-2.snap => integration__krate__publish__readme__new_krate_with_readme-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__readme__new_krate_with_readme_and_plus_version-2.snap => integration__krate__publish__readme__new_krate_with_readme_and_plus_version-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__trustpub__full_flow-11.snap => integration__krate__publish__trustpub__full_flow-11.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__trustpub__full_flow-7.snap => integration__krate__publish__trustpub__full_flow-7.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__trustpub__full_flow-9.snap => integration__krate__publish__trustpub__full_flow-9.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__trustpub__happy_path-2.snap => integration__krate__publish__trustpub__happy_path-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__trustpub__happy_path_with_fancy_auth_header-2.snap => integration__krate__publish__trustpub__happy_path_with_fancy_auth_header-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-10.snap => integration__krate__publish__validation__bad_name-10.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-2.snap => integration__krate__publish__validation__bad_name-2.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-3.snap => integration__krate__publish__validation__bad_name-3.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-4.snap => integration__krate__publish__validation__bad_name-4.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-5.snap => integration__krate__publish__validation__bad_name-5.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-6.snap => integration__krate__publish__validation__bad_name-6.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-7.snap => integration__krate__publish__validation__bad_name-7.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-8.snap => integration__krate__publish__validation__bad_name-8.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name-9.snap => integration__krate__publish__validation__bad_name-9.snap} (100%) rename src/tests/krate/publish/snapshots/{crates_io__tests__krate__publish__validation__bad_name.snap => integration__krate__publish__validation__bad_name.snap} (100%) rename src/tests/krate/snapshots/{crates_io__tests__krate__yanking__patch_version_yank_unyank-2.snap => integration__krate__yanking__patch_version_yank_unyank-2.snap} (100%) rename src/tests/krate/snapshots/{crates_io__tests__krate__yanking__patch_version_yank_unyank-3.snap => integration__krate__yanking__patch_version_yank_unyank-3.snap} (100%) rename src/tests/krate/snapshots/{crates_io__tests__krate__yanking__patch_version_yank_unyank-4.snap => integration__krate__yanking__patch_version_yank_unyank-4.snap} (100%) rename src/tests/krate/snapshots/{crates_io__tests__krate__yanking__patch_version_yank_unyank-5.snap => integration__krate__yanking__patch_version_yank_unyank-5.snap} (100%) rename src/tests/krate/snapshots/{crates_io__tests__krate__yanking__patch_version_yank_unyank-6.snap => integration__krate__yanking__patch_version_yank_unyank-6.snap} (100%) rename src/tests/krate/snapshots/{crates_io__tests__krate__yanking__patch_version_yank_unyank.snap => integration__krate__yanking__patch_version_yank_unyank.snap} (100%) rename src/tests/routes/categories/snapshots/{crates_io__tests__routes__categories__get__show-2.snap => integration__routes__categories__get__show-2.snap} (100%) rename src/tests/routes/categories/snapshots/{crates_io__tests__routes__categories__list__index-2.snap => integration__routes__categories__list__index-2.snap} (100%) rename src/tests/routes/categories/snapshots/{crates_io__tests__routes__categories__list__index.snap => integration__routes__categories__list__index.snap} (100%) rename src/tests/routes/category_slugs/snapshots/{crates_io__tests__routes__category_slugs__list__category_slugs_returns_all_slugs_in_alphabetical_order.snap => integration__routes__category_slugs__list__category_slugs_returns_all_slugs_in_alphabetical_order.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__admin__index_include_yanked.snap => integration__routes__crates__admin__index_include_yanked.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__delete__happy_path_new_crate-3.snap => integration__routes__crates__delete__happy_path_new_crate-3.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__delete__happy_path_old_crate-3.snap => integration__routes__crates__delete__happy_path_old_crate-3.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__delete__happy_path_really_old_crate-3.snap => integration__routes__crates__delete__happy_path_really_old_crate-3.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__downloads__crate_downloads-2.snap => integration__routes__crates__downloads__crate_downloads-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__downloads__version_downloads-2.snap => integration__routes__crates__downloads__version_downloads-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-2.snap => integration__routes__crates__list__invalid_params_with_null_bytes-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-3.snap => integration__routes__crates__list__invalid_params_with_null_bytes-3.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-4.snap => integration__routes__crates__list__invalid_params_with_null_bytes-4.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-5.snap => integration__routes__crates__list__invalid_params_with_null_bytes-5.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__list__invalid_params_with_null_bytes.snap => integration__routes__crates__list__invalid_params_with_null_bytes.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__read__include_default_version-2.snap => integration__routes__crates__read__include_default_version-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__read__new_name-2.snap => integration__routes__crates__read__new_name-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__read__show-2.snap => integration__routes__crates__read__show-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__read__show_all_yanked-2.snap => integration__routes__crates__read__show_all_yanked-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__read__show_minimal-2.snap => integration__routes__crates__read__show_minimal-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__prerelease_versions_not_included_in_reverse_dependencies-2.snap => integration__routes__crates__reverse_dependencies__prerelease_versions_not_included_in_reverse_dependencies-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies-2.snap => integration__routes__crates__reverse_dependencies__reverse_dependencies-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies-4.snap => integration__routes__crates__reverse_dependencies__reverse_dependencies-4.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_includes_published_by_user_when_present-2.snap => integration__routes__crates__reverse_dependencies__reverse_dependencies_includes_published_by_user_when_present-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_query_supports_u64_version_number_parts-2.snap => integration__routes__crates__reverse_dependencies__reverse_dependencies_query_supports_u64_version_number_parts-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_depended_but_new_doesnt-2.snap => integration__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_depended_but_new_doesnt-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_doesnt_depend_but_new_does-2.snap => integration__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_doesnt_depend_but_new_does-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-2.snap => integration__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-2.snap} (100%) rename src/tests/routes/crates/snapshots/{crates_io__tests__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-4.snap => integration__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-4.snap} (100%) rename src/tests/routes/crates/versions/snapshots/{crates_io__tests__routes__crates__versions__authors__authors.snap => integration__routes__crates__versions__authors__authors.snap} (100%) rename src/tests/routes/crates/versions/snapshots/{crates_io__tests__routes__crates__versions__list__versions-2.snap => integration__routes__crates__versions__list__versions-2.snap} (100%) rename src/tests/routes/crates/versions/snapshots/{crates_io__tests__routes__crates__versions__read__show_by_crate_name_and_semver_no_published_by.snap => integration__routes__crates__versions__read__show_by_crate_name_and_semver_no_published_by.snap} (100%) rename src/tests/routes/crates/versions/snapshots/{crates_io__tests__routes__crates__versions__read__show_by_crate_name_and_version.snap => integration__routes__crates__versions__read__show_by_crate_name_and_version.snap} (100%) rename src/tests/routes/me/snapshots/{crates_io__tests__routes__me__get__me-4.snap => integration__routes__me__get__me-4.snap} (100%) rename src/tests/routes/me/snapshots/{crates_io__tests__routes__me__get__me-6.snap => integration__routes__me__get__me-6.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_success-2.snap => integration__routes__me__tokens__create__create_token_success-2.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_success-3.snap => integration__routes__me__tokens__create__create_token_success-3.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-2.snap => integration__routes__me__tokens__create__create_token_with_expiry_date-2.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-3.snap => integration__routes__me__tokens__create__create_token_with_expiry_date-3.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-2.snap => integration__routes__me__tokens__create__create_token_with_null_scopes-2.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-3.snap => integration__routes__me__tokens__create__create_token_with_null_scopes-3.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_scopes-2.snap => integration__routes__me__tokens__create__create_token_with_scopes-2.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_scopes-3.snap => integration__routes__me__tokens__create__create_token_with_scopes-3.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_trusted_publishing_scope-2.snap => integration__routes__me__tokens__create__create_token_with_trusted_publishing_scope-2.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__create__create_token_with_trusted_publishing_scope-3.snap => integration__routes__me__tokens__create__create_token_with_trusted_publishing_scope-3.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__get__show-2.snap => integration__routes__me__tokens__get__show-2.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__get__show_token_with_scopes-2.snap => integration__routes__me__tokens__get__show_token_with_scopes-2.snap} (100%) rename src/tests/routes/me/tokens/snapshots/{crates_io__tests__routes__me__tokens__list__list_tokens-2.snap => integration__routes__me__tokens__list__list_tokens-2.snap} (100%) rename src/tests/routes/snapshots/{crates_io__tests__routes__site_metadata__site_metadata_includes_banner_message-2.snap => integration__routes__site_metadata__site_metadata_includes_banner_message-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__create__happy_path-2.snap => integration__routes__trustpub__github_configs__create__happy_path-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__create__happy_path-3.snap => integration__routes__trustpub__github_configs__create__happy_path-3.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap => integration__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__create__legacy_token_auth-2.snap => integration__routes__trustpub__github_configs__create__legacy_token_auth-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap => integration__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap => integration__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__delete__happy_path-2.snap => integration__routes__trustpub__github_configs__delete__happy_path-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap => integration__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap => integration__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap => integration__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap => integration__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__list__happy_path-2.snap => integration__routes__trustpub__github_configs__list__happy_path-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__list__happy_path-4.snap => integration__routes__trustpub__github_configs__list__happy_path-4.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__list__legacy_token_auth-2.snap => integration__routes__trustpub__github_configs__list__legacy_token_auth-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap => integration__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap} (100%) rename src/tests/routes/trustpub/github_configs/snapshots/{crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap => integration__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap} (100%) rename src/tests/routes/users/snapshots/{crates_io__tests__routes__users__email_verification__happy_path-3.snap => integration__routes__users__email_verification__happy_path-3.snap} (88%) rename src/tests/routes/users/update/snapshots/{crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap => integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap} (100%) rename src/tests/routes/users/update/snapshots/{crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap => integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap} (100%) rename src/tests/routes/users/update/snapshots/{crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap => integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap} (100%) rename src/tests/routes/users/update/snapshots/{crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap => integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_for_revoked_token-2.snap => integration__github_secret_scanning__github_secret_alert_for_revoked_token-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_for_unknown_token-2.snap => integration__github_secret_scanning__github_secret_alert_for_unknown_token-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_for_unknown_trustpub_token-2.snap => integration__github_secret_scanning__github_secret_alert_for_unknown_trustpub_token-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-2.snap => integration__github_secret_scanning__github_secret_alert_revokes_token-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-3.snap => integration__github_secret_scanning__github_secret_alert_revokes_token-3.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-2.snap => integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap => integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-2.snap => integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap => integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap} (100%) rename src/tests/snapshots/{crates_io__tests__openapi__openapi_snapshot-2.snap => integration__openapi__openapi_snapshot-2.snap} (99%) rename src/tests/snapshots/{crates_io__tests__owners__modify_multiple_owners-10.snap => integration__owners__modify_multiple_owners-10.snap} (100%) rename src/tests/snapshots/{crates_io__tests__owners__modify_multiple_owners.snap => integration__owners__modify_multiple_owners.snap} (100%) rename src/tests/snapshots/{crates_io__tests__owners__new_crate_owner-2.snap => integration__owners__new_crate_owner-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__owners__new_crate_owner.snap => integration__owners__new_crate_owner.snap} (100%) rename src/tests/snapshots/{crates_io__tests__read_only_mode__cannot_hit_endpoint_which_writes_db_in_read_only_mode-2.snap => integration__read_only_mode__cannot_hit_endpoint_which_writes_db_in_read_only_mode-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__server__block_traffic_via_arbitrary_header_and_value.snap => integration__server__block_traffic_via_arbitrary_header_and_value.snap} (100%) rename src/tests/snapshots/{crates_io__tests__server__block_traffic_via_ip.snap => integration__server__block_traffic_via_ip.snap} (100%) rename src/tests/snapshots/{crates_io__tests__server__user_agent_is_required-2.snap => integration__server__user_agent_is_required-2.snap} (100%) rename src/tests/snapshots/{crates_io__tests__server__user_agent_is_required.snap => integration__server__user_agent_is_required.snap} (100%) rename src/tests/snapshots/{crates_io__tests__team__publish_owned.snap => integration__team__publish_owned.snap} (100%) rename src/tests/worker/rss/snapshots/{crates_io__tests__worker__rss__sync_crate_feed__sync_crate_feed-2.snap => integration__worker__rss__sync_crate_feed__sync_crate_feed-2.snap} (100%) rename src/tests/worker/rss/snapshots/{crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap => integration__worker__rss__sync_crates_feed__sync_crates_feed-2.snap} (100%) rename src/tests/worker/rss/snapshots/{crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap => integration__worker__rss__sync_updates_feed__sync_updates_feed-2.snap} (100%) rename src/tests/worker/snapshots/{crates_io__tests__worker__generate_og_image__og-image.snap => integration__worker__generate_og_image__og-image.snap} (100%) rename src/tests/worker/snapshots/{crates_io__tests__worker__generate_og_image__og-image.snap.png => integration__worker__generate_og_image__og-image.snap.png} (100%) rename src/tests/worker/snapshots/{crates_io__tests__worker__sync_admins__sync_admins_job.snap => integration__worker__sync_admins__sync_admins_job.snap} (100%) diff --git a/Cargo.toml b/Cargo.toml index 6481dd6c80f..4c9201808f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,10 @@ opt-level = 2 name = "crates_io" doctest = true +[[test]] +name = "integration" +path = "src/tests/mod.rs" + [dependencies] aes-gcm = { version = "=0.10.3", features = ["std"] } anyhow = "=1.0.100" diff --git a/src/index.rs b/src/index.rs index ccc7da31edb..6cbc0ffb3a8 100644 --- a/src/index.rs +++ b/src/index.rs @@ -140,9 +140,9 @@ pub async fn index_metadata( mod tests { use super::*; use crate::schema::users; - use crate::tests::builders::{CrateBuilder, VersionBuilder}; use chrono::{Days, Utc}; use crates_io_test_db::TestDatabase; + use crates_io_test_utils::builders::{CrateBuilder, VersionBuilder}; use insta::assert_json_snapshot; #[tokio::test] diff --git a/src/lib.rs b/src/lib.rs index 1af04f03bf7..ec94d5ac334 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,8 +42,6 @@ pub mod sqs; pub mod ssh; pub mod storage; pub mod tasks; -#[cfg(test)] -pub mod tests; pub mod typosquat; pub mod util; pub mod worker; diff --git a/src/tests/account_lock.rs b/src/tests/account_lock.rs index 8a015236331..9cbf91499d9 100644 --- a/src/tests/account_lock.rs +++ b/src/tests/account_lock.rs @@ -1,4 +1,4 @@ -use crate::tests::{TestApp, util::RequestHelper}; +use crate::{TestApp, util::RequestHelper}; use chrono::{DateTime, Duration, Utc}; use insta::assert_snapshot; @@ -6,7 +6,7 @@ const URL: &str = "/api/v1/me"; const LOCK_REASON: &str = "test lock reason"; async fn lock_account(app: &TestApp, user_id: i32, until: Option>) { - use crate::schema::users; + use crates_io::schema::users; use diesel::prelude::*; use diesel_async::RunQueryDsl; diff --git a/src/tests/authentication.rs b/src/tests/authentication.rs index ed564ee9c64..83fe9549e14 100644 --- a/src/tests/authentication.rs +++ b/src/tests/authentication.rs @@ -1,8 +1,8 @@ -use crate::tests::TestApp; -use crate::tests::util::{MockRequestExt, MockTokenUser, RequestHelper, Response}; +use crate::TestApp; +use crate::util::{MockRequestExt, MockTokenUser, RequestHelper, Response}; -use crate::tests::builders::PublishBuilder; -use crate::tests::util::encode_session_header; +use crate::builders::PublishBuilder; +use crate::util::encode_session_header; use http::{Method, StatusCode, header}; use insta::assert_snapshot; diff --git a/src/tests/blocked_routes.rs b/src/tests/blocked_routes.rs index 485291121c2..d00209200b7 100644 --- a/src/tests/blocked_routes.rs +++ b/src/tests/blocked_routes.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; use http::StatusCode; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/categories.rs b/src/tests/categories.rs index 4076333fbfe..56bbd511bac 100644 --- a/src/tests/categories.rs +++ b/src/tests/categories.rs @@ -1,5 +1,5 @@ -use crate::schema::categories; use claims::assert_ok; +use crates_io::schema::categories; use crates_io_test_db::TestDatabase; use diesel::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; @@ -53,7 +53,7 @@ async fn sync_adds_new_categories() { let test_db = TestDatabase::new(); let mut conn = test_db.async_connect().await; - crate::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, &mut conn) + crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, &mut conn) .await .unwrap(); @@ -66,10 +66,10 @@ async fn sync_removes_missing_categories() { let test_db = TestDatabase::new(); let mut conn = test_db.async_connect().await; - crate::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, &mut conn) + crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, &mut conn) .await .unwrap(); - crate::boot::categories::sync_with_connection(ALGORITHMS, &mut conn) + crates_io::boot::categories::sync_with_connection(ALGORITHMS, &mut conn) .await .unwrap(); @@ -82,10 +82,10 @@ async fn sync_adds_and_removes() { let test_db = TestDatabase::new(); let mut conn = test_db.async_connect().await; - crate::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, &mut conn) + crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, &mut conn) .await .unwrap(); - crate::boot::categories::sync_with_connection(ALGORITHMS_AND_ANOTHER, &mut conn) + crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_ANOTHER, &mut conn) .await .unwrap(); @@ -99,5 +99,5 @@ async fn test_real_categories() { let mut conn = test_db.async_connect().await; const TOML: &str = include_str!("../boot/categories.toml"); - assert_ok!(crate::boot::categories::sync_with_connection(TOML, &mut conn).await); + assert_ok!(crates_io::boot::categories::sync_with_connection(TOML, &mut conn).await); } diff --git a/src/tests/cors.rs b/src/tests/cors.rs index ad7300001aa..b37d7e0fa30 100644 --- a/src/tests/cors.rs +++ b/src/tests/cors.rs @@ -1,5 +1,5 @@ -use crate::tests::TestApp; -use crate::tests::util::{MockRequestExt, RequestHelper}; +use crate::TestApp; +use crate::util::{MockRequestExt, RequestHelper}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/dump_db.rs b/src/tests/dump_db.rs index c7d0e549ac8..4809f94c442 100644 --- a/src/tests/dump_db.rs +++ b/src/tests/dump_db.rs @@ -1,7 +1,7 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::TestApp; -use crate::worker::jobs::DumpDb; +use crate::builders::CrateBuilder; +use crate::util::TestApp; use bytes::Buf; +use crates_io::worker::jobs::DumpDb; use crates_io_worker::BackgroundJob; use flate2::read::GzDecoder; use insta::{assert_debug_snapshot, assert_snapshot}; diff --git a/src/tests/github_secret_scanning.rs b/src/tests/github_secret_scanning.rs index c9a14915e19..4a6b3bf2869 100644 --- a/src/tests/github_secret_scanning.rs +++ b/src/tests/github_secret_scanning.rs @@ -1,12 +1,12 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::MockRequestExt; -use crate::tests::util::insta::api_token_redaction; -use crate::tests::{RequestHelper, TestApp}; -use crate::util::token::HashedToken; -use crate::{models::ApiToken, schema::api_tokens}; +use crate::builders::CrateBuilder; +use crate::util::MockRequestExt; +use crate::util::insta::api_token_redaction; +use crate::{RequestHelper, TestApp}; use base64::{Engine as _, engine::general_purpose}; use chrono::{TimeDelta, Utc}; use claims::assert_ok; +use crates_io::util::token::HashedToken; +use crates_io::{models::ApiToken, schema::api_tokens}; use crates_io_database::models::CrateOwner; use crates_io_database::models::trustpub::NewToken; use crates_io_database::schema::trustpub_tokens; diff --git a/src/tests/issues/issue1205.rs b/src/tests/issues/issue1205.rs index a21c0a5e709..f41dd85ce01 100644 --- a/src/tests/issues/issue1205.rs +++ b/src/tests/issues/issue1205.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use crates_io_github::{GitHubOrganization, GitHubTeam, GitHubTeamMembership, MockGitHubClient}; use insta::assert_snapshot; diff --git a/src/tests/issues/issue2736.rs b/src/tests/issues/issue2736.rs index 7ea847ce4ec..749e7b1d982 100644 --- a/src/tests/issues/issue2736.rs +++ b/src/tests/issues/issue2736.rs @@ -1,7 +1,7 @@ -use crate::models::CrateOwner; -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use claims::assert_none; +use crates_io::models::CrateOwner; use crates_io_database::schema::users; use diesel::prelude::*; use diesel_async::RunQueryDsl; diff --git a/src/tests/krate/following.rs b/src/tests/krate/following.rs index d5c832d5b6b..c09eab3bfb1 100644 --- a/src/tests/krate/following.rs +++ b/src/tests/krate/following.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use googletest::prelude::*; use http::StatusCode; use insta::assert_snapshot; diff --git a/src/tests/krate/publish/analysis.rs b/src/tests/krate/publish/analysis.rs index 549ca483cb5..a9168663bd1 100644 --- a/src/tests/krate/publish/analysis.rs +++ b/src/tests/krate/publish/analysis.rs @@ -1,7 +1,7 @@ -use crate::schema::versions; -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use claims::{assert_ok, assert_some}; +use crates_io::schema::versions; use diesel::QueryDsl; use diesel_async::RunQueryDsl; use insta::{assert_json_snapshot, assert_snapshot}; diff --git a/src/tests/krate/publish/audit_action.rs b/src/tests/krate/publish/audit_action.rs index 9c8de6e101a..449593b1df9 100644 --- a/src/tests/krate/publish/audit_action.rs +++ b/src/tests/krate/publish/audit_action.rs @@ -2,9 +2,9 @@ use googletest::prelude::*; #[tokio::test(flavor = "multi_thread")] async fn publish_records_an_audit_action() { - use crate::models::VersionOwnerAction; - use crate::tests::builders::PublishBuilder; - use crate::tests::util::{RequestHelper, TestApp}; + use crate::builders::PublishBuilder; + use crate::util::{RequestHelper, TestApp}; + use crates_io::models::VersionOwnerAction; let (app, anon, _, token) = TestApp::full().with_token().await; diff --git a/src/tests/krate/publish/auth.rs b/src/tests/krate/publish/auth.rs index c94261e43f7..740c1590f29 100644 --- a/src/tests/krate/publish/auth.rs +++ b/src/tests/krate/publish/auth.rs @@ -1,6 +1,6 @@ -use crate::schema::api_tokens; -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{MockTokenUser, RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{MockTokenUser, RequestHelper, TestApp}; +use crates_io::schema::api_tokens; use diesel::ExpressionMethods; use diesel_async::RunQueryDsl; use googletest::prelude::*; diff --git a/src/tests/krate/publish/basics.rs b/src/tests/krate/publish/basics.rs index 84a8c6485f8..4e16bcaa798 100644 --- a/src/tests/krate/publish/basics.rs +++ b/src/tests/krate/publish/basics.rs @@ -1,6 +1,6 @@ -use crate::schema::versions_published_by; -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{RequestHelper, TestApp}; +use crates_io::schema::versions_published_by; use diesel::QueryDsl; use diesel_async::{AsyncPgConnection, RunQueryDsl}; use googletest::prelude::*; @@ -163,7 +163,7 @@ async fn new_krate_duplicate_version() { #[tokio::test(flavor = "multi_thread")] async fn new_krate_advance_num_versions() { - use crate::schema::default_versions; + use crates_io::schema::default_versions; let (app, _, _, token) = TestApp::full().with_token().await; let mut conn = app.db_conn().await; diff --git a/src/tests/krate/publish/build_metadata.rs b/src/tests/krate/publish/build_metadata.rs index 3c6cd0033d7..4b7a0184792 100644 --- a/src/tests/krate/publish/build_metadata.rs +++ b/src/tests/krate/publish/build_metadata.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use http::StatusCode; use insta::assert_json_snapshot; use serde_json::json; diff --git a/src/tests/krate/publish/categories.rs b/src/tests/krate/publish/categories.rs index def0dad830e..b34df1844a9 100644 --- a/src/tests/krate/publish/categories.rs +++ b/src/tests/krate/publish/categories.rs @@ -1,6 +1,6 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::new_category; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::new_category; +use crate::util::{RequestHelper, TestApp}; use crates_io_database::schema::categories; use diesel::insert_into; use diesel_async::RunQueryDsl; diff --git a/src/tests/krate/publish/deleted_crates.rs b/src/tests/krate/publish/deleted_crates.rs index c3feaadc9e6..852e837dea7 100644 --- a/src/tests/krate/publish/deleted_crates.rs +++ b/src/tests/krate/publish/deleted_crates.rs @@ -1,7 +1,7 @@ -use crate::models::NewDeletedCrate; -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use chrono::{Duration, Utc}; +use crates_io::models::NewDeletedCrate; use crates_io_database::schema::deleted_crates; use diesel_async::RunQueryDsl; use googletest::prelude::*; diff --git a/src/tests/krate/publish/dependencies.rs b/src/tests/krate/publish/dependencies.rs index 7e9560bfd31..245b6d72e57 100644 --- a/src/tests/krate/publish/dependencies.rs +++ b/src/tests/krate/publish/dependencies.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, DependencyBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, DependencyBuilder, PublishBuilder}; +use crate::util::{RequestHelper, TestApp}; use googletest::prelude::*; use insta::{assert_json_snapshot, assert_snapshot}; @@ -160,7 +160,7 @@ async fn new_with_underscore_renamed_dependency() { #[tokio::test(flavor = "multi_thread")] async fn new_krate_with_dependency() { - use crate::tests::routes::crates::versions::dependencies::Deps; + use crate::routes::crates::versions::dependencies::Deps; let (app, anon, user, token) = TestApp::full().with_token().await; let mut conn = app.db_conn().await; diff --git a/src/tests/krate/publish/edition.rs b/src/tests/krate/publish/edition.rs index fd0bb839305..40031e76952 100644 --- a/src/tests/krate/publish/edition.rs +++ b/src/tests/krate/publish/edition.rs @@ -1,6 +1,6 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::insta::{any_id_redaction, id_redaction}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::insta::{any_id_redaction, id_redaction}; +use crate::util::{RequestHelper, TestApp}; use insta::{assert_json_snapshot, assert_snapshot}; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/krate/publish/emails.rs b/src/tests/krate/publish/emails.rs index bdcc7093b50..24c2eb02d14 100644 --- a/src/tests/krate/publish/emails.rs +++ b/src/tests/krate/publish/emails.rs @@ -1,6 +1,6 @@ -use crate::schema::emails; -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; +use crates_io::schema::emails; use diesel::{ExpressionMethods, delete, update}; use diesel_async::RunQueryDsl; use googletest::prelude::*; diff --git a/src/tests/krate/publish/features.rs b/src/tests/krate/publish/features.rs index 509bb4509b9..5c4d4d68056 100644 --- a/src/tests/krate/publish/features.rs +++ b/src/tests/krate/publish/features.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, DependencyBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, DependencyBuilder, PublishBuilder}; +use crate::util::{RequestHelper, TestApp}; use googletest::prelude::*; use insta::{assert_json_snapshot, assert_snapshot}; diff --git a/src/tests/krate/publish/git.rs b/src/tests/krate/publish/git.rs index b6221a259a0..b1019e70fb5 100644 --- a/src/tests/krate/publish/git.rs +++ b/src/tests/krate/publish/git.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/krate/publish/inheritance.rs b/src/tests/krate/publish/inheritance.rs index ca4b92f7699..26eca2ce831 100644 --- a/src/tests/krate/publish/inheritance.rs +++ b/src/tests/krate/publish/inheritance.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/krate/publish/keywords.rs b/src/tests/krate/publish/keywords.rs index c16c76c0069..40e630351cf 100644 --- a/src/tests/krate/publish/keywords.rs +++ b/src/tests/krate/publish/keywords.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use googletest::prelude::*; use insta::{assert_json_snapshot, assert_snapshot}; diff --git a/src/tests/krate/publish/links.rs b/src/tests/krate/publish/links.rs index 7bdad666ad2..27fb4d675cc 100644 --- a/src/tests/krate/publish/links.rs +++ b/src/tests/krate/publish/links.rs @@ -1,6 +1,6 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::insta::{self, assert_json_snapshot}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::insta::{self, assert_json_snapshot}; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/krate/publish/manifest.rs b/src/tests/krate/publish/manifest.rs index e5d6583d644..bc35799cdae 100644 --- a/src/tests/krate/publish/manifest.rs +++ b/src/tests/krate/publish/manifest.rs @@ -1,6 +1,6 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::insta::{any_id_redaction, id_redaction}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::insta::{any_id_redaction, id_redaction}; +use crate::util::{RequestHelper, TestApp}; use insta::{assert_json_snapshot, assert_snapshot}; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/krate/publish/max_size.rs b/src/tests/krate/publish/max_size.rs index 3f3ddb07ea6..6400878a06a 100644 --- a/src/tests/krate/publish/max_size.rs +++ b/src/tests/krate/publish/max_size.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{RequestHelper, TestApp}; use claims::assert_ok; use crates_io_tarball::TarballBuilder; use flate2::Compression; diff --git a/src/tests/krate/publish/rate_limit.rs b/src/tests/krate/publish/rate_limit.rs index ab7a69abdb5..3a6d5183352 100644 --- a/src/tests/krate/publish/rate_limit.rs +++ b/src/tests/krate/publish/rate_limit.rs @@ -1,8 +1,8 @@ -use crate::rate_limiter::LimitedAction; -use crate::schema::{publish_limit_buckets, publish_rate_overrides}; -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use chrono::{DateTime, Utc}; +use crates_io::rate_limiter::LimitedAction; +use crates_io::schema::{publish_limit_buckets, publish_rate_overrides}; use diesel::ExpressionMethods; use diesel_async::RunQueryDsl; use insta::assert_snapshot; diff --git a/src/tests/krate/publish/readme.rs b/src/tests/krate/publish/readme.rs index 13895edabde..c1ae353893c 100644 --- a/src/tests/krate/publish/readme.rs +++ b/src/tests/krate/publish/readme.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{RequestHelper, TestApp}; use insta::{assert_json_snapshot, assert_snapshot}; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/krate/publish/similar_names.rs b/src/tests/krate/publish/similar_names.rs index 6368c915f41..8d6295a5cba 100644 --- a/src/tests/krate/publish/similar_names.rs +++ b/src/tests/krate/publish/similar_names.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{RequestHelper, TestApp}; use googletest::prelude::*; use insta::assert_snapshot; diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__analysis__crate_files_are_analyzed-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__analysis__crate_files_are_analyzed-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__analysis__crate_files_are_analyzed-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__analysis__crate_files_are_analyzed-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__auth__new_krate_with_bearer_token-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__auth__new_krate_with_bearer_token-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__auth__new_krate_with_bearer_token-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__auth__new_krate_with_bearer_token-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-3.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate-3.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-3.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate-3.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-5.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate-5.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-5.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate-5.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice-3.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice-3.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice-3.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice-3.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice_alt-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice_alt-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice_alt-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice_alt-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice_alt-3.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice_alt-3.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_twice_alt-3.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_twice_alt-3.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_weird_version-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_weird_version-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_weird_version-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_weird_version-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_with_token-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_with_token-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate_with_token-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__basics__new_krate_with_token-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_1.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_1.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_1.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_1.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_3.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_3.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__build_metadata__version_with_build_metadata@build_metadata_3.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__build_metadata__version_with_build_metadata@build_metadata_3.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__categories__good_categories-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__categories__good_categories-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__categories__good_categories-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__categories__good_categories-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__dep_limit-4.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__dep_limit-4.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__dep_limit-4.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__dep_limit-4.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_krate_sorts_deps.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_krate_sorts_deps.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_krate_sorts_deps.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_krate_sorts_deps.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_krate_with_dependency.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_krate_with_dependency.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_krate_with_dependency.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_krate_with_dependency.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_with_renamed_dependency.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_with_renamed_dependency.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_with_renamed_dependency.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_with_renamed_dependency.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__edition__edition_is_saved-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__edition__edition_is_saved-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__edition__edition_is_saved-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__edition__edition_is_saved-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__edition__edition_is_saved-4.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__edition__edition_is_saved-4.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__edition__edition_is_saved-4.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__edition__edition_is_saved-4.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__feature_name_start_with_number_and_underscore.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__features__feature_name_start_with_number_and_underscore.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__feature_name_start_with_number_and_underscore.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__features__feature_name_start_with_number_and_underscore.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__feature_name_with_dot.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__features__feature_name_with_dot.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__feature_name_with_dot.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__features__feature_name_with_dot.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__feature_name_with_unicode_chars.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__features__feature_name_with_unicode_chars.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__feature_name_with_unicode_chars.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__features__feature_name_with_unicode_chars.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__features_version_2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__features__features_version_2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__features__features_version_2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__features__features_version_2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__keywords__good_keywords-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__keywords__good_keywords-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__keywords__good_keywords-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__keywords__good_keywords-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__links__crate_with_links_field-3.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__links__crate_with_links_field-3.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__links__crate_with_links_field-3.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__links__crate_with_links_field-3.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__links__crate_with_links_field-5.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__links__crate_with_links_field-5.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__links__crate_with_links_field-5.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__links__crate_with_links_field-5.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__links__crate_with_links_field.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__links__crate_with_links_field.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__links__crate_with_links_field.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__links__crate_with_links_field.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__boolean_readme-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__manifest__boolean_readme-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__boolean_readme-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__manifest__boolean_readme-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__boolean_readme-4.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__manifest__boolean_readme-4.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__boolean_readme-4.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__manifest__boolean_readme-4.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__lib_and_bin_crate-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__manifest__lib_and_bin_crate-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__lib_and_bin_crate-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__manifest__lib_and_bin_crate-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__lib_and_bin_crate-4.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__manifest__lib_and_bin_crate-4.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__manifest__lib_and_bin_crate-4.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__manifest__lib_and_bin_crate-4.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__max_size__tarball_between_default_axum_limit_and_max_upload_size-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__max_size__tarball_between_default_axum_limit_and_max_upload_size-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__max_size__tarball_between_default_axum_limit_and_max_upload_size-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__max_size__tarball_between_default_axum_limit_and_max_upload_size-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__readme__new_krate_with_empty_readme-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__readme__new_krate_with_empty_readme-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__readme__new_krate_with_empty_readme-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__readme__new_krate_with_empty_readme-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__readme__new_krate_with_readme-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__readme__new_krate_with_readme-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__readme__new_krate_with_readme-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__readme__new_krate_with_readme-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__readme__new_krate_with_readme_and_plus_version-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__readme__new_krate_with_readme_and_plus_version-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__readme__new_krate_with_readme_and_plus_version-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__readme__new_krate_with_readme_and_plus_version-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-11.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__full_flow-11.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-11.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__full_flow-11.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-7.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__full_flow-7.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-7.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__full_flow-7.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-9.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__full_flow-9.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-9.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__full_flow-9.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__happy_path-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__happy_path-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__happy_path-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__happy_path-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__happy_path_with_fancy_auth_header-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__happy_path_with_fancy_auth_header-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__happy_path_with_fancy_auth_header-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__trustpub__happy_path_with_fancy_auth_header-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-10.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-10.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-10.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-10.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-2.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-2.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-2.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-2.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-3.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-3.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-3.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-3.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-4.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-4.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-4.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-4.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-5.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-5.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-5.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-5.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-6.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-6.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-6.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-6.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-7.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-7.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-7.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-7.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-8.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-8.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-8.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-8.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-9.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-9.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name-9.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name-9.snap diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name.snap b/src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name.snap similarity index 100% rename from src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__validation__bad_name.snap rename to src/tests/krate/publish/snapshots/integration__krate__publish__validation__bad_name.snap diff --git a/src/tests/krate/publish/tarball.rs b/src/tests/krate/publish/tarball.rs index e58e3316ffa..18cdcd02f9d 100644 --- a/src/tests/krate/publish/tarball.rs +++ b/src/tests/krate/publish/tarball.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use bytes::{BufMut, BytesMut}; use claims::assert_ok; use crates_io_tarball::TarballBuilder; diff --git a/src/tests/krate/publish/timestamps.rs b/src/tests/krate/publish/timestamps.rs index 8590b8744e1..cda28bf3fe8 100644 --- a/src/tests/krate/publish/timestamps.rs +++ b/src/tests/krate/publish/timestamps.rs @@ -1,9 +1,9 @@ #[tokio::test(flavor = "multi_thread")] async fn uploading_new_version_touches_crate() { - use crate::schema::crates; - use crate::tests::CrateResponse; - use crate::tests::builders::PublishBuilder; - use crate::tests::util::{RequestHelper, TestApp}; + use crate::CrateResponse; + use crate::builders::PublishBuilder; + use crate::util::{RequestHelper, TestApp}; + use crates_io::schema::crates; use diesel::ExpressionMethods; use diesel::dsl::*; use diesel_async::RunQueryDsl; diff --git a/src/tests/krate/publish/trustpub.rs b/src/tests/krate/publish/trustpub.rs index e36034ec4d5..24e8dfa4f3f 100644 --- a/src/tests/krate/publish/trustpub.rs +++ b/src/tests/krate/publish/trustpub.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{MockTokenUser, RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{MockTokenUser, RequestHelper, TestApp}; use chrono::{TimeDelta, Utc}; use crates_io_database::models::trustpub::NewToken; use crates_io_github::{GitHubUser, MockGitHubClient}; diff --git a/src/tests/krate/publish/validation.rs b/src/tests/krate/publish/validation.rs index dfee13784c8..5b65190c069 100644 --- a/src/tests/krate/publish/validation.rs +++ b/src/tests/krate/publish/validation.rs @@ -1,6 +1,6 @@ -use crate::models::krate::MAX_NAME_LENGTH; -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; +use crates_io::models::krate::MAX_NAME_LENGTH; use googletest::prelude::*; use http::StatusCode; use insta::{assert_json_snapshot, assert_snapshot}; diff --git a/src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-2.snap b/src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-2.snap similarity index 100% rename from src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-2.snap rename to src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-2.snap diff --git a/src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-3.snap b/src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-3.snap similarity index 100% rename from src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-3.snap rename to src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-3.snap diff --git a/src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-4.snap b/src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-4.snap similarity index 100% rename from src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-4.snap rename to src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-4.snap diff --git a/src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-5.snap b/src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-5.snap similarity index 100% rename from src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-5.snap rename to src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-5.snap diff --git a/src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-6.snap b/src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-6.snap similarity index 100% rename from src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank-6.snap rename to src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank-6.snap diff --git a/src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank.snap b/src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank.snap similarity index 100% rename from src/tests/krate/snapshots/crates_io__tests__krate__yanking__patch_version_yank_unyank.snap rename to src/tests/krate/snapshots/integration__krate__yanking__patch_version_yank_unyank.snap diff --git a/src/tests/krate/yanking.rs b/src/tests/krate/yanking.rs index 12e7192a326..0e868b23bdf 100644 --- a/src/tests/krate/yanking.rs +++ b/src/tests/krate/yanking.rs @@ -1,11 +1,11 @@ -use crate::rate_limiter::LimitedAction; -use crate::schema::publish_limit_buckets; -use crate::tests::VersionResponse; -use crate::tests::builders::PublishBuilder; -use crate::tests::routes::crates::versions::yank_unyank::YankRequestHelper; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::VersionResponse; +use crate::builders::PublishBuilder; +use crate::routes::crates::versions::yank_unyank::YankRequestHelper; +use crate::util::{RequestHelper, TestApp}; use chrono::Utc; use claims::assert_some_eq; +use crates_io::rate_limiter::LimitedAction; +use crates_io::schema::publish_limit_buckets; use diesel::ExpressionMethods; use diesel_async::RunQueryDsl; use googletest::prelude::*; diff --git a/src/tests/middleware/head.rs b/src/tests/middleware/head.rs index 0017eb2a86f..adf161dab1a 100644 --- a/src/tests/middleware/head.rs +++ b/src/tests/middleware/head.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use http::{Method, StatusCode}; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 37cb4b7ea1f..ae5321d094a 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -1,12 +1,12 @@ -use crate::models::{NewCategory, NewTeam, NewUser}; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::{ +use crate::util::{RequestHelper, TestApp}; +use crates_io::models::{NewCategory, NewTeam, NewUser}; +use crates_io::views::{ EncodableCategory, EncodableCrate, EncodableKeyword, EncodableOwner, EncodableVersion, GoodCrate, }; -use crate::tests::util::github::next_gh_id; -use crate::util::gh_token_encryption::GitHubTokenEncryption; +use crate::util::github::next_gh_id; +use crates_io::util::gh_token_encryption::GitHubTokenEncryption; use serde::{Deserialize, Serialize}; use std::sync::LazyLock; diff --git a/src/tests/not_found_error.rs b/src/tests/not_found_error.rs index b75b7ab3128..7c603ec640e 100644 --- a/src/tests/not_found_error.rs +++ b/src/tests/not_found_error.rs @@ -1,4 +1,4 @@ -use crate::tests::{RequestHelper, TestApp}; +use crate::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/openapi.rs b/src/tests/openapi.rs index 95688590242..d0d9031e67f 100644 --- a/src/tests/openapi.rs +++ b/src/tests/openapi.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use insta::{assert_json_snapshot, assert_snapshot}; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/owners.rs b/src/tests/owners.rs index e5417b5ca28..6726c511542 100644 --- a/src/tests/owners.rs +++ b/src/tests/owners.rs @@ -1,11 +1,9 @@ -use crate::models::Crate; -use crate::schema::emails; -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{ - MockAnonymousUser, MockCookieUser, MockTokenUser, RequestHelper, Response, -}; -use crate::tests::{TestApp, add_team_to_crate, new_team}; -use crate::views::{ +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{MockAnonymousUser, MockCookieUser, MockTokenUser, RequestHelper, Response}; +use crate::{TestApp, add_team_to_crate, new_team}; +use crates_io::models::Crate; +use crates_io::schema::emails; +use crates_io::views::{ EncodableCrateOwnerInvitationV1, EncodableOwner, EncodablePublicUser, InvitationResponse, }; @@ -620,7 +618,7 @@ async fn test_accept_invitation_by_mail() { /// Hacky way to simulate the expiration of an ownership invitation. Instead of letting a month /// pass, the creation date of the invite is moved back a month. pub async fn expire_invitation(app: &TestApp, crate_id: i32) { - use crate::schema::crate_owner_invitations; + use crates_io::schema::crate_owner_invitations; let mut conn = app.db_conn().await; @@ -807,7 +805,7 @@ async fn test_accept_expired_invitation_by_mail() { #[tokio::test(flavor = "multi_thread")] async fn inactive_users_dont_get_invitations() { - use crate::models::NewUser; + use crates_io::models::NewUser; let (app, _, owner, owner_token) = TestApp::init().with_token().await; let mut conn = app.db_conn().await; diff --git a/src/tests/pagination.rs b/src/tests/pagination.rs index e5111db4e94..bb09b6757a1 100644 --- a/src/tests/pagination.rs +++ b/src/tests/pagination.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; use ipnetwork::IpNetwork; diff --git a/src/tests/read_only_mode.rs b/src/tests/read_only_mode.rs index 6e7baa7fca5..365416d1835 100644 --- a/src/tests/read_only_mode.rs +++ b/src/tests/read_only_mode.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::{RequestHelper, TestApp}; use claims::assert_ok_eq; use diesel::prelude::*; use diesel_async::RunQueryDsl; @@ -64,7 +64,7 @@ async fn can_download_crate_in_read_only_mode() { // We're in read only mode so the download should not have been counted - use crate::schema::version_downloads; + use crates_io::schema::version_downloads; use diesel::dsl::sum; let dl_count: Result, _> = version_downloads::table diff --git a/src/tests/routes/categories/get.rs b/src/tests/routes/categories/get.rs index 4c99e804a5a..7b9628b6a37 100644 --- a/src/tests/routes/categories/get.rs +++ b/src/tests/routes/categories/get.rs @@ -1,8 +1,8 @@ -use crate::models::Category; -use crate::tests::builders::CrateBuilder; -use crate::tests::new_category; -use crate::tests::util::{MockAnonymousUser, RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::new_category; +use crate::util::{MockAnonymousUser, RequestHelper, TestApp}; use claims::assert_ok; +use crates_io::models::Category; use crates_io_database::schema::categories; use diesel::insert_into; use diesel_async::RunQueryDsl; diff --git a/src/tests/routes/categories/list.rs b/src/tests/routes/categories/list.rs index 4e344344c81..69d48294716 100644 --- a/src/tests/routes/categories/list.rs +++ b/src/tests/routes/categories/list.rs @@ -1,5 +1,5 @@ -use crate::tests::new_category; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::new_category; +use crate::util::{RequestHelper, TestApp}; use crates_io_database::schema::categories; use diesel::insert_into; use diesel_async::RunQueryDsl; diff --git a/src/tests/routes/categories/snapshots/crates_io__tests__routes__categories__get__show-2.snap b/src/tests/routes/categories/snapshots/integration__routes__categories__get__show-2.snap similarity index 100% rename from src/tests/routes/categories/snapshots/crates_io__tests__routes__categories__get__show-2.snap rename to src/tests/routes/categories/snapshots/integration__routes__categories__get__show-2.snap diff --git a/src/tests/routes/categories/snapshots/crates_io__tests__routes__categories__list__index-2.snap b/src/tests/routes/categories/snapshots/integration__routes__categories__list__index-2.snap similarity index 100% rename from src/tests/routes/categories/snapshots/crates_io__tests__routes__categories__list__index-2.snap rename to src/tests/routes/categories/snapshots/integration__routes__categories__list__index-2.snap diff --git a/src/tests/routes/categories/snapshots/crates_io__tests__routes__categories__list__index.snap b/src/tests/routes/categories/snapshots/integration__routes__categories__list__index.snap similarity index 100% rename from src/tests/routes/categories/snapshots/crates_io__tests__routes__categories__list__index.snap rename to src/tests/routes/categories/snapshots/integration__routes__categories__list__index.snap diff --git a/src/tests/routes/category_slugs/list.rs b/src/tests/routes/category_slugs/list.rs index d9104d705cd..e7ab234f975 100644 --- a/src/tests/routes/category_slugs/list.rs +++ b/src/tests/routes/category_slugs/list.rs @@ -1,5 +1,5 @@ -use crate::tests::new_category; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::new_category; +use crate::util::{RequestHelper, TestApp}; use crates_io_database::schema::categories; use diesel::insert_into; use diesel_async::RunQueryDsl; diff --git a/src/tests/routes/category_slugs/snapshots/crates_io__tests__routes__category_slugs__list__category_slugs_returns_all_slugs_in_alphabetical_order.snap b/src/tests/routes/category_slugs/snapshots/integration__routes__category_slugs__list__category_slugs_returns_all_slugs_in_alphabetical_order.snap similarity index 100% rename from src/tests/routes/category_slugs/snapshots/crates_io__tests__routes__category_slugs__list__category_slugs_returns_all_slugs_in_alphabetical_order.snap rename to src/tests/routes/category_slugs/snapshots/integration__routes__category_slugs__list__category_slugs_returns_all_slugs_in_alphabetical_order.snap diff --git a/src/tests/routes/crates/admin.rs b/src/tests/routes/crates/admin.rs index 892715d5acd..8115c633d61 100644 --- a/src/tests/routes/crates/admin.rs +++ b/src/tests/routes/crates/admin.rs @@ -1,10 +1,8 @@ use crate::{ - schema::users, - tests::{ - builders::{CrateBuilder, VersionBuilder}, - util::{RequestHelper, TestApp}, - }, + builders::{CrateBuilder, VersionBuilder}, + util::{RequestHelper, TestApp}, }; +use crates_io::schema::users; use diesel::prelude::*; use diesel_async::RunQueryDsl; use insta::{assert_json_snapshot, assert_snapshot}; diff --git a/src/tests/routes/crates/delete.rs b/src/tests/routes/crates/delete.rs index 7533238aeb8..2014e3623bb 100644 --- a/src/tests/routes/crates/delete.rs +++ b/src/tests/routes/crates/delete.rs @@ -1,12 +1,12 @@ -use crate::controllers::krate::delete::{DOWNLOADS_PER_MONTH_LIMIT, DeleteQueryParams}; -use crate::models::OwnerKind; -use crate::schema::{crate_downloads, crates}; -use crate::tests::builders::{DependencyBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, Response, TestApp}; +use crate::builders::{DependencyBuilder, PublishBuilder}; +use crate::util::{RequestHelper, Response, TestApp}; use axum::RequestPartsExt; use bigdecimal::ToPrimitive; use chrono::{TimeDelta, Utc}; use claims::{assert_none, assert_some}; +use crates_io::controllers::krate::delete::{DOWNLOADS_PER_MONTH_LIMIT, DeleteQueryParams}; +use crates_io::models::OwnerKind; +use crates_io::schema::{crate_downloads, crates}; use crates_io_database::schema::crate_owners; use diesel::prelude::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; diff --git a/src/tests/routes/crates/downloads.rs b/src/tests/routes/crates/downloads.rs index ac4894d3c7e..ada91fb1e97 100644 --- a/src/tests/routes/crates/downloads.rs +++ b/src/tests/routes/crates/downloads.rs @@ -1,8 +1,8 @@ -use crate::schema::{crates, version_downloads, versions}; -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{MockAnonymousUser, RequestHelper, TestApp}; -use crate::views::EncodableVersionDownload; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{MockAnonymousUser, RequestHelper, TestApp}; use chrono::{Duration, Utc}; +use crates_io::schema::{crates, version_downloads, versions}; +use crates_io::views::EncodableVersionDownload; use diesel::prelude::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; use http::StatusCode; diff --git a/src/tests/routes/crates/following.rs b/src/tests/routes/crates/following.rs index 75f4452a06b..9cdc416df0d 100644 --- a/src/tests/routes/crates/following.rs +++ b/src/tests/routes/crates/following.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/routes/crates/list.rs b/src/tests/routes/crates/list.rs index 073318fb594..c7e2ad47910 100644 --- a/src/tests/routes/crates/list.rs +++ b/src/tests/routes/crates/list.rs @@ -1,8 +1,8 @@ -use crate::models::Category; -use crate::schema::crates; -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::tests::{new_category, new_user}; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; +use crate::{new_category, new_user}; +use crates_io::models::Category; +use crates_io::schema::crates; use crates_io_database::schema::categories; use diesel::sql_types::Timestamptz; use diesel::{dsl::*, prelude::*, update}; @@ -1212,7 +1212,7 @@ static PAGE_RE: LazyLock = LazyLock::new(|| Regex::new(r"((?:^page|&page|\?page)=\d+)").unwrap()); // search with both offset-based (prepend with `page=1` query) and seek-based pagination -async fn search_both(anon: &U, query: &str) -> [crate::tests::CrateList; 2] { +async fn search_both(anon: &U, query: &str) -> [crate::CrateList; 2] { if PAGE_RE.is_match(query) { panic!("url already contains page param"); } @@ -1240,18 +1240,12 @@ async fn search_both(anon: &U, query: &str) -> [crate::tests:: [offset, seek] } -async fn search_both_by_user_id( - anon: &U, - id: i32, -) -> [crate::tests::CrateList; 2] { +async fn search_both_by_user_id(anon: &U, id: i32) -> [crate::CrateList; 2] { let url = format!("user_id={id}"); search_both(anon, &url).await } -async fn page_with_seek( - anon: &U, - query: &str, -) -> (Vec, i32) { +async fn page_with_seek(anon: &U, query: &str) -> (Vec, i32) { let mut url = Some(format!("?per_page=1&{query}")); let mut results = Vec::new(); let mut calls = 0; @@ -1278,12 +1272,12 @@ async fn page_with_seek( } fn default_versions_iter( - crates: &[crate::tests::EncodableCrate], + crates: &[crate::EncodableCrate], ) -> impl Iterator> { crates.iter().map(|c| &c.default_version) } -fn yanked_iter(crates: &[crate::tests::EncodableCrate]) -> impl Iterator { +fn yanked_iter(crates: &[crate::EncodableCrate]) -> impl Iterator { crates.iter().map(|c| &c.yanked) } diff --git a/src/tests/routes/crates/new.rs b/src/tests/routes/crates/new.rs index d128ca576a6..18dd491dd39 100644 --- a/src/tests/routes/crates/new.rs +++ b/src/tests/routes/crates/new.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/routes/crates/owners/add.rs b/src/tests/routes/crates/owners/add.rs index 8ac6ff2c61e..39342242248 100644 --- a/src/tests/routes/crates/owners/add.rs +++ b/src/tests/routes/crates/owners/add.rs @@ -1,7 +1,7 @@ -use crate::models::token::{CrateScope, EndpointScope}; -use crate::tests::builders::CrateBuilder; -use crate::tests::owners::expire_invitation; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::owners::expire_invitation; +use crate::util::{RequestHelper, TestApp}; +use crates_io::models::token::{CrateScope, EndpointScope}; use insta::assert_snapshot; // This is testing Cargo functionality! ! ! diff --git a/src/tests/routes/crates/owners/remove.rs b/src/tests/routes/crates/owners/remove.rs index 8e830a7e7bb..0e844359b13 100644 --- a/src/tests/routes/crates/owners/remove.rs +++ b/src/tests/routes/crates/owners/remove.rs @@ -1,6 +1,6 @@ -use crate::models::CrateOwner; -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; +use crates_io::models::CrateOwner; use crates_io_github::{GitHubOrganization, GitHubTeam, GitHubTeamMembership, MockGitHubClient}; use insta::assert_snapshot; diff --git a/src/tests/routes/crates/read.rs b/src/tests/routes/crates/read.rs index 51155cf57f0..e4c3cc4ea36 100644 --- a/src/tests/routes/crates/read.rs +++ b/src/tests/routes/crates/read.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, PublishBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, PublishBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; use diesel_async::RunQueryDsl; use http::StatusCode; use insta::{assert_json_snapshot, assert_snapshot}; @@ -10,7 +10,7 @@ async fn show() { let mut conn = app.db_conn().await; let user = user.as_model(); - use crate::schema::versions; + use crates_io::schema::versions; use diesel::{ExpressionMethods, update}; CrateBuilder::new("foo_show", user.id) diff --git a/src/tests/routes/crates/reverse_dependencies.rs b/src/tests/routes/crates/reverse_dependencies.rs index 4944a95c75c..c27a4c0e948 100644 --- a/src/tests/routes/crates/reverse_dependencies.rs +++ b/src/tests/routes/crates/reverse_dependencies.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; use insta::{assert_json_snapshot, assert_snapshot}; #[tokio::test(flavor = "multi_thread")] @@ -154,7 +154,7 @@ async fn yanked_versions_not_included_in_reverse_dependencies() { ".versions[].updated_at" => "[datetime]", }); - use crate::schema::versions; + use crates_io::schema::versions; use diesel::{ExpressionMethods, QueryDsl}; use diesel_async::RunQueryDsl; @@ -180,7 +180,7 @@ async fn reverse_dependencies_includes_published_by_user_when_present() { let mut conn = app.db_conn().await; let user = user.as_model(); - use crate::schema::versions; + use crates_io::schema::versions; use diesel::{ExpressionMethods, update}; use diesel_async::RunQueryDsl; diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__admin__index_include_yanked.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__admin__index_include_yanked.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__admin__index_include_yanked.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__admin__index_include_yanked.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_new_crate-3.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__delete__happy_path_new_crate-3.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_new_crate-3.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__delete__happy_path_new_crate-3.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_old_crate-3.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__delete__happy_path_old_crate-3.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_old_crate-3.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__delete__happy_path_old_crate-3.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_really_old_crate-3.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__delete__happy_path_really_old_crate-3.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__delete__happy_path_really_old_crate-3.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__delete__happy_path_really_old_crate-3.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__downloads__crate_downloads-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__downloads__crate_downloads-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__downloads__crate_downloads-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__downloads__crate_downloads-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__downloads__version_downloads-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__downloads__version_downloads-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__downloads__version_downloads-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__downloads__version_downloads-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-3.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-3.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-3.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-3.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-4.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-4.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-4.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-4.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-5.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-5.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes-5.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes-5.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__list__invalid_params_with_null_bytes.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__list__invalid_params_with_null_bytes.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__include_default_version-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__read__include_default_version-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__include_default_version-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__read__include_default_version-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__new_name-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__read__new_name-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__new_name-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__read__new_name-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__show-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__read__show-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__show-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__read__show-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__show_all_yanked-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__read__show_all_yanked-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__show_all_yanked-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__read__show_all_yanked-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__show_minimal-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__read__show_minimal-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__read__show_minimal-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__read__show_minimal-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__prerelease_versions_not_included_in_reverse_dependencies-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__prerelease_versions_not_included_in_reverse_dependencies-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__prerelease_versions_not_included_in_reverse_dependencies-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__prerelease_versions_not_included_in_reverse_dependencies-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies-4.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies-4.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies-4.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies-4.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_includes_published_by_user_when_present-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_includes_published_by_user_when_present-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_includes_published_by_user_when_present-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_includes_published_by_user_when_present-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_query_supports_u64_version_number_parts-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_query_supports_u64_version_number_parts-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_query_supports_u64_version_number_parts-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_query_supports_u64_version_number_parts-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_depended_but_new_doesnt-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_depended_but_new_doesnt-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_depended_but_new_doesnt-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_depended_but_new_doesnt-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_doesnt_depend_but_new_does-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_doesnt_depend_but_new_does-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_doesnt_depend_but_new_does-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__reverse_dependencies_when_old_version_doesnt_depend_but_new_does-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-2.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-2.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-2.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-2.snap diff --git a/src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-4.snap b/src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-4.snap similarity index 100% rename from src/tests/routes/crates/snapshots/crates_io__tests__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-4.snap rename to src/tests/routes/crates/snapshots/integration__routes__crates__reverse_dependencies__yanked_versions_not_included_in_reverse_dependencies-4.snap diff --git a/src/tests/routes/crates/versions/authors.rs b/src/tests/routes/crates/versions/authors.rs index 8796fb7b328..8f4ab759ec0 100644 --- a/src/tests/routes/crates/versions/authors.rs +++ b/src/tests/routes/crates/versions/authors.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use insta::assert_json_snapshot; use serde_json::Value; diff --git a/src/tests/routes/crates/versions/dependencies.rs b/src/tests/routes/crates/versions/dependencies.rs index f783bfc1075..c5d21d6f362 100644 --- a/src/tests/routes/crates/versions/dependencies.rs +++ b/src/tests/routes/crates/versions/dependencies.rs @@ -1,6 +1,6 @@ -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::EncodableDependency; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; +use crates_io::views::EncodableDependency; use insta::assert_snapshot; use serde::Deserialize; diff --git a/src/tests/routes/crates/versions/docs.rs b/src/tests/routes/crates/versions/docs.rs index dd9c22b3eb6..279aa9626f6 100644 --- a/src/tests/routes/crates/versions/docs.rs +++ b/src/tests/routes/crates/versions/docs.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper as _, TestApp}; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper as _, TestApp}; use crates_io_database::models::NewUser; use crates_io_docs_rs::MockDocsRsClient; use insta::assert_snapshot; diff --git a/src/tests/routes/crates/versions/download.rs b/src/tests/routes/crates/versions/download.rs index 26fa1214991..0d3618ccd81 100644 --- a/src/tests/routes/crates/versions/download.rs +++ b/src/tests/routes/crates/versions/download.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; #[tokio::test(flavor = "multi_thread")] async fn test_redirects() { diff --git a/src/tests/routes/crates/versions/list.rs b/src/tests/routes/crates/versions/list.rs index 29d7047974e..c1e68525c50 100644 --- a/src/tests/routes/crates/versions/list.rs +++ b/src/tests/routes/crates/versions/list.rs @@ -1,7 +1,7 @@ -use crate::schema::versions; -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::EncodableVersion; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; +use crates_io::schema::versions; +use crates_io::views::EncodableVersion; use diesel::{prelude::*, update}; use diesel_async::RunQueryDsl; use googletest::prelude::*; diff --git a/src/tests/routes/crates/versions/read.rs b/src/tests/routes/crates/versions/read.rs index 02d9c1a6313..93ad3e11a04 100644 --- a/src/tests/routes/crates/versions/read.rs +++ b/src/tests/routes/crates/versions/read.rs @@ -1,6 +1,6 @@ -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::insta::{self, assert_json_snapshot}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::insta::{self, assert_json_snapshot}; +use crate::util::{RequestHelper, TestApp}; use diesel::prelude::*; use diesel_async::RunQueryDsl; use serde_json::Value; @@ -33,7 +33,7 @@ async fn show_by_crate_name_and_version() { #[tokio::test(flavor = "multi_thread")] async fn show_by_crate_name_and_semver_no_published_by() { - use crate::schema::versions; + use crates_io::schema::versions; use diesel::update; let (app, anon, user) = TestApp::init().with_user().await; @@ -66,7 +66,7 @@ async fn show_by_crate_name_and_semver_no_published_by() { #[tokio::test(flavor = "multi_thread")] async fn block_bad_version_urls() { - use crate::schema::versions; + use crates_io::schema::versions; use diesel::{ExpressionMethods, update}; let (app, anon, user) = TestApp::init().with_user().await; diff --git a/src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__authors__authors.snap b/src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__authors__authors.snap similarity index 100% rename from src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__authors__authors.snap rename to src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__authors__authors.snap diff --git a/src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__list__versions-2.snap b/src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__list__versions-2.snap similarity index 100% rename from src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__list__versions-2.snap rename to src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__list__versions-2.snap diff --git a/src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__read__show_by_crate_name_and_semver_no_published_by.snap b/src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__read__show_by_crate_name_and_semver_no_published_by.snap similarity index 100% rename from src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__read__show_by_crate_name_and_semver_no_published_by.snap rename to src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__read__show_by_crate_name_and_semver_no_published_by.snap diff --git a/src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__read__show_by_crate_name_and_version.snap b/src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__read__show_by_crate_name_and_version.snap similarity index 100% rename from src/tests/routes/crates/versions/snapshots/crates_io__tests__routes__crates__versions__read__show_by_crate_name_and_version.snap rename to src/tests/routes/crates/versions/snapshots/integration__routes__crates__versions__read__show_by_crate_name_and_version.snap diff --git a/src/tests/routes/crates/versions/yank_unyank.rs b/src/tests/routes/crates/versions/yank_unyank.rs index a801c4ce5e7..50a4c2ac787 100644 --- a/src/tests/routes/crates/versions/yank_unyank.rs +++ b/src/tests/routes/crates/versions/yank_unyank.rs @@ -1,6 +1,6 @@ -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::util::{RequestHelper, Response, TestApp}; -use crate::tests::{OkBool, VersionResponse}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::util::{RequestHelper, Response, TestApp}; +use crate::{OkBool, VersionResponse}; use insta::assert_snapshot; use serde_json::json; @@ -124,10 +124,10 @@ async fn unyank_records_an_audit_action() { mod auth { use super::*; - use crate::models::token::{CrateScope, EndpointScope}; - use crate::schema::{crates, users, versions}; - use crate::tests::util::{MockAnonymousUser, MockCookieUser}; + use crate::util::{MockAnonymousUser, MockCookieUser}; use chrono::{Duration, Utc}; + use crates_io::models::token::{CrateScope, EndpointScope}; + use crates_io::schema::{crates, users, versions}; use diesel::prelude::*; use diesel_async::RunQueryDsl; use insta::assert_snapshot; diff --git a/src/tests/routes/keywords/list.rs b/src/tests/routes/keywords/list.rs index e70d01c07fa..7d5de6685b3 100644 --- a/src/tests/routes/keywords/list.rs +++ b/src/tests/routes/keywords/list.rs @@ -1,6 +1,6 @@ -use crate::models::Keyword; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::EncodableKeyword; +use crate::util::{RequestHelper, TestApp}; +use crates_io::models::Keyword; +use crates_io::views::EncodableKeyword; use serde::Deserialize; #[derive(Deserialize)] diff --git a/src/tests/routes/keywords/read.rs b/src/tests/routes/keywords/read.rs index 703da785089..99f21ce6602 100644 --- a/src/tests/routes/keywords/read.rs +++ b/src/tests/routes/keywords/read.rs @@ -1,7 +1,7 @@ -use crate::models::Keyword; -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::EncodableKeyword; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; +use crates_io::models::Keyword; +use crates_io::views::EncodableKeyword; use insta::assert_snapshot; use serde::Deserialize; diff --git a/src/tests/routes/me/email_notifications.rs b/src/tests/routes/me/email_notifications.rs index 7140a5ee76f..10ee50a0155 100644 --- a/src/tests/routes/me/email_notifications.rs +++ b/src/tests/routes/me/email_notifications.rs @@ -1,7 +1,7 @@ -use crate::schema::crate_owners; -use crate::tests::builders::CrateBuilder; -use crate::tests::new_user; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::new_user; +use crate::util::{RequestHelper, TestApp}; +use crates_io::schema::crate_owners; use diesel::prelude::*; use diesel_async::RunQueryDsl; use http::StatusCode; @@ -14,7 +14,7 @@ struct EmailNotificationsUpdate { email_notifications: bool, } -impl crate::tests::util::MockCookieUser { +impl crate::util::MockCookieUser { async fn update_email_notifications(&self, updates: Vec) { let response = self .put::<()>("/api/v1/me/email_notifications", json!(updates).to_string()) diff --git a/src/tests/routes/me/get.rs b/src/tests/routes/me/get.rs index 25cdff6bc41..16ef82d3571 100644 --- a/src/tests/routes/me/get.rs +++ b/src/tests/routes/me/get.rs @@ -1,10 +1,10 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::{EncodablePrivateUser, OwnedCrate}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; +use crates_io::views::{EncodablePrivateUser, OwnedCrate}; use insta::{assert_json_snapshot, assert_snapshot}; use serde::Deserialize; -impl crate::tests::util::MockCookieUser { +impl crate::util::MockCookieUser { pub async fn show_me(&self) -> UserShowPrivateResponse { let url = "/api/v1/me"; self.get(url).await.good() diff --git a/src/tests/routes/me/snapshots/crates_io__tests__routes__me__get__me-4.snap b/src/tests/routes/me/snapshots/integration__routes__me__get__me-4.snap similarity index 100% rename from src/tests/routes/me/snapshots/crates_io__tests__routes__me__get__me-4.snap rename to src/tests/routes/me/snapshots/integration__routes__me__get__me-4.snap diff --git a/src/tests/routes/me/snapshots/crates_io__tests__routes__me__get__me-6.snap b/src/tests/routes/me/snapshots/integration__routes__me__get__me-6.snap similarity index 100% rename from src/tests/routes/me/snapshots/crates_io__tests__routes__me__get__me-6.snap rename to src/tests/routes/me/snapshots/integration__routes__me__get__me-6.snap diff --git a/src/tests/routes/me/tokens/create.rs b/src/tests/routes/me/tokens/create.rs index be5ead70d2b..0906c5650c7 100644 --- a/src/tests/routes/me/tokens/create.rs +++ b/src/tests/routes/me/tokens/create.rs @@ -1,8 +1,8 @@ -use crate::models::ApiToken; -use crate::models::token::{CrateScope, EndpointScope, NewApiToken}; -use crate::tests::util::insta::{self, assert_json_snapshot}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::insta::{self, assert_json_snapshot}; +use crate::util::{RequestHelper, TestApp}; use claims::assert_ok; +use crates_io::models::ApiToken; +use crates_io::models::token::{CrateScope, EndpointScope, NewApiToken}; use diesel::prelude::*; use diesel_async::RunQueryDsl; use googletest::prelude::*; diff --git a/src/tests/routes/me/tokens/delete.rs b/src/tests/routes/me/tokens/delete.rs index deecb14c220..e7b7c648c42 100644 --- a/src/tests/routes/me/tokens/delete.rs +++ b/src/tests/routes/me/tokens/delete.rs @@ -1,7 +1,7 @@ -use crate::models::ApiToken; -use crate::schema::api_tokens; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use claims::assert_ok; +use crates_io::models::ApiToken; +use crates_io::schema::api_tokens; use diesel::prelude::*; use diesel_async::RunQueryDsl; use serde::Deserialize; diff --git a/src/tests/routes/me/tokens/delete_current.rs b/src/tests/routes/me/tokens/delete_current.rs index 62f7717ecaa..c492f609186 100644 --- a/src/tests/routes/me/tokens/delete_current.rs +++ b/src/tests/routes/me/tokens/delete_current.rs @@ -1,7 +1,7 @@ -use crate::models::ApiToken; -use crate::schema::api_tokens; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use claims::assert_ok; +use crates_io::models::ApiToken; +use crates_io::schema::api_tokens; use diesel::prelude::*; use diesel_async::RunQueryDsl; use insta::assert_snapshot; diff --git a/src/tests/routes/me/tokens/get.rs b/src/tests/routes/me/tokens/get.rs index 15aa4d38490..28e0d8c744c 100644 --- a/src/tests/routes/me/tokens/get.rs +++ b/src/tests/routes/me/tokens/get.rs @@ -1,7 +1,7 @@ -use crate::models::token::{CrateScope, EndpointScope, NewApiToken}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use chrono::{Duration, Utc}; use claims::assert_ok; +use crates_io::models::token::{CrateScope, EndpointScope, NewApiToken}; use insta::{assert_json_snapshot, assert_snapshot}; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/routes/me/tokens/list.rs b/src/tests/routes/me/tokens/list.rs index 87d66974dcb..3945b72a11d 100644 --- a/src/tests/routes/me/tokens/list.rs +++ b/src/tests/routes/me/tokens/list.rs @@ -1,8 +1,8 @@ -use crate::models::token::{CrateScope, EndpointScope, NewApiToken}; -use crate::tests::util::insta::{self, assert_json_snapshot}; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::insta::{self, assert_json_snapshot}; +use crate::util::{RequestHelper, TestApp}; use chrono::{Duration, Utc}; use claims::{assert_ok, assert_some}; +use crates_io::models::token::{CrateScope, EndpointScope, NewApiToken}; use insta::assert_snapshot; use serde_json::json; diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_success-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_success-2.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-3.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_success-3.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-3.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_success-3.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_expiry_date-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_expiry_date-2.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-3.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_expiry_date-3.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-3.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_expiry_date-3.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_null_scopes-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_null_scopes-2.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-3.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_null_scopes-3.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-3.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_null_scopes-3.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_scopes-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_scopes-2.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-3.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_scopes-3.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-3.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_scopes-3.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_trusted_publishing_scope-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_trusted_publishing_scope-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_trusted_publishing_scope-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_trusted_publishing_scope-2.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_trusted_publishing_scope-3.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_trusted_publishing_scope-3.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_trusted_publishing_scope-3.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__create__create_token_with_trusted_publishing_scope-3.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__get__show-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__get__show-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__get__show-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__get__show-2.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__get__show_token_with_scopes-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__get__show_token_with_scopes-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__get__show_token_with_scopes-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__get__show_token_with_scopes-2.snap diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__list__list_tokens-2.snap b/src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__list__list_tokens-2.snap similarity index 100% rename from src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__list__list_tokens-2.snap rename to src/tests/routes/me/tokens/snapshots/integration__routes__me__tokens__list__list_tokens-2.snap diff --git a/src/tests/routes/me/updates.rs b/src/tests/routes/me/updates.rs index eb4694ff9ad..8444bd25c5c 100644 --- a/src/tests/routes/me/updates.rs +++ b/src/tests/routes/me/updates.rs @@ -1,9 +1,9 @@ -use crate::schema::versions; -use crate::tests::OkBool; -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::EncodableVersion; +use crate::OkBool; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::util::{RequestHelper, TestApp}; use claims::assert_none; +use crates_io::schema::versions; +use crates_io::views::EncodableVersion; use diesel::prelude::*; use diesel::update; use diesel_async::RunQueryDsl; diff --git a/src/tests/routes/metrics.rs b/src/tests/routes/metrics.rs index da6ab019582..c6191f24ff1 100644 --- a/src/tests/routes/metrics.rs +++ b/src/tests/routes/metrics.rs @@ -1,5 +1,5 @@ -use crate::tests::util::{MockAnonymousUser, MockRequestExt, Response}; -use crate::tests::{RequestHelper, TestApp}; +use crate::util::{MockAnonymousUser, MockRequestExt, Response}; +use crate::{RequestHelper, TestApp}; use http::StatusCode; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/routes/private/crate_owner_invitations.rs b/src/tests/routes/private/crate_owner_invitations.rs index 94ca8b78b54..3befe18d542 100644 --- a/src/tests/routes/private/crate_owner_invitations.rs +++ b/src/tests/routes/private/crate_owner_invitations.rs @@ -1,8 +1,8 @@ //! Tests for the `GET /api/private/crate-owners-invitations` endpoint -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{MockCookieUser, RequestHelper, TestApp}; -use crate::views::{EncodableCrateOwnerInvitation, EncodablePublicUser}; +use crate::builders::CrateBuilder; +use crate::util::{MockCookieUser, RequestHelper, TestApp}; +use crates_io::views::{EncodableCrateOwnerInvitation, EncodablePublicUser}; use http::StatusCode; use serde::Deserialize; use serde_json::json; @@ -191,7 +191,7 @@ async fn invitations_list_does_not_include_expired_invites() { .good(); // Simulate one of the invitations expiring - crate::tests::owners::expire_invitation(&app, crate1.id).await; + crate::owners::expire_invitation(&app, crate1.id).await; // user1 has an invite just for crate 2 let invitations = get_invitations(&user, &format!("invitee_id={}", user.as_model().id)).await; diff --git a/src/tests/routes/session/authorize.rs b/src/tests/routes/session/authorize.rs index 6c5168b77dd..580c650e2d4 100644 --- a/src/tests/routes/session/authorize.rs +++ b/src/tests/routes/session/authorize.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/routes/session/begin.rs b/src/tests/routes/session/begin.rs index e820da6d952..b75d78d42ba 100644 --- a/src/tests/routes/session/begin.rs +++ b/src/tests/routes/session/begin.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use serde::Deserialize; #[derive(Deserialize)] diff --git a/src/tests/routes/site_metadata.rs b/src/tests/routes/site_metadata.rs index 7a1bd2867de..32c2a5ffbde 100644 --- a/src/tests/routes/site_metadata.rs +++ b/src/tests/routes/site_metadata.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use insta::{assert_json_snapshot, assert_snapshot}; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/routes/snapshots/crates_io__tests__routes__site_metadata__site_metadata_includes_banner_message-2.snap b/src/tests/routes/snapshots/integration__routes__site_metadata__site_metadata_includes_banner_message-2.snap similarity index 100% rename from src/tests/routes/snapshots/crates_io__tests__routes__site_metadata__site_metadata_includes_banner_message-2.snap rename to src/tests/routes/snapshots/integration__routes__site_metadata__site_metadata_includes_banner_message-2.snap diff --git a/src/tests/routes/summary.rs b/src/tests/routes/summary.rs index 230907249e7..28f43d41523 100644 --- a/src/tests/routes/summary.rs +++ b/src/tests/routes/summary.rs @@ -1,9 +1,9 @@ -use crate::schema::metadata; -use crate::tests::builders::{CrateBuilder, VersionBuilder}; -use crate::tests::new_category; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::{EncodableCategory, EncodableCrate, EncodableKeyword}; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crate::new_category; +use crate::util::{RequestHelper, TestApp}; use chrono::Utc; +use crates_io::schema::metadata; +use crates_io::views::{EncodableCategory, EncodableCrate, EncodableKeyword}; use crates_io_database::schema::categories; use diesel::{ExpressionMethods, insert_into, update}; use diesel_async::scoped_futures::ScopedFutureExt; diff --git a/src/tests/routes/trustpub/github_configs/create.rs b/src/tests/routes/trustpub/github_configs/create.rs index bae5e2baca1..5a4832d4e41 100644 --- a/src/tests/routes/trustpub/github_configs/create.rs +++ b/src/tests/routes/trustpub/github_configs/create.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, Response, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, Response, TestApp}; use anyhow::anyhow; use bytes::Bytes; use crates_io_database::models::token::{CrateScope, EndpointScope}; diff --git a/src/tests/routes/trustpub/github_configs/delete.rs b/src/tests/routes/trustpub/github_configs/delete.rs index c38b53b211d..1094402270b 100644 --- a/src/tests/routes/trustpub/github_configs/delete.rs +++ b/src/tests/routes/trustpub/github_configs/delete.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use crates_io_database::models::Crate; use crates_io_database::models::token::{CrateScope, EndpointScope}; use crates_io_database::models::trustpub::{GitHubConfig, NewGitHubConfig}; diff --git a/src/tests/routes/trustpub/github_configs/list.rs b/src/tests/routes/trustpub/github_configs/list.rs index 0d1b30d8cc5..1f0bd667a89 100644 --- a/src/tests/routes/trustpub/github_configs/list.rs +++ b/src/tests/routes/trustpub/github_configs/list.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use crates_io_database::models::token::{CrateScope, EndpointScope}; use crates_io_database::models::trustpub::{GitHubConfig, NewGitHubConfig}; use diesel::prelude::*; diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__happy_path-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__happy_path-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-3.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__happy_path-3.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path-3.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__happy_path-3.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__happy_path_with_environment-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__legacy_token_auth-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__legacy_token_auth-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__legacy_token_auth-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__legacy_token_auth-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__token_auth_with_trusted_publishing_scope-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__create__token_auth_with_wildcard_crate_scope-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__happy_path-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__happy_path-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__happy_path-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__happy_path-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__legacy_token_auth-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__token_auth_with_trusted_publishing_scope-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__delete__token_auth_with_wildcard_crate_scope-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__crate_with_no_configs-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__happy_path-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__happy_path-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-4.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__happy_path-4.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__happy_path-4.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__happy_path-4.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__legacy_token_auth-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__legacy_token_auth-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__legacy_token_auth-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__legacy_token_auth-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__token_auth_with_trusted_publishing_scope-2.snap diff --git a/src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap b/src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap similarity index 100% rename from src/tests/routes/trustpub/github_configs/snapshots/crates_io__tests__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap rename to src/tests/routes/trustpub/github_configs/snapshots/integration__routes__trustpub__github_configs__list__token_auth_with_wildcard_crate_scope-2.snap diff --git a/src/tests/routes/trustpub/tokens/exchange/github.rs b/src/tests/routes/trustpub/tokens/exchange/github.rs index a7f9d0a8e27..ed7ecb567f8 100644 --- a/src/tests/routes/trustpub/tokens/exchange/github.rs +++ b/src/tests/routes/trustpub/tokens/exchange/github.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{MockAnonymousUser, RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{MockAnonymousUser, RequestHelper, TestApp}; use claims::assert_ok; use crates_io_database::models::trustpub::NewGitHubConfig; use crates_io_database::schema::trustpub_tokens; diff --git a/src/tests/routes/trustpub/tokens/exchange/gitlab.rs b/src/tests/routes/trustpub/tokens/exchange/gitlab.rs index 802699049be..ee32b1e2a6c 100644 --- a/src/tests/routes/trustpub/tokens/exchange/gitlab.rs +++ b/src/tests/routes/trustpub/tokens/exchange/gitlab.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{MockAnonymousUser, RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{MockAnonymousUser, RequestHelper, TestApp}; use claims::{assert_ok, assert_some_eq}; use crates_io_database::models::trustpub::{GitLabConfig, NewGitLabConfig}; use crates_io_database::schema::{trustpub_configs_gitlab, trustpub_tokens}; diff --git a/src/tests/routes/trustpub/tokens/revoke.rs b/src/tests/routes/trustpub/tokens/revoke.rs index d16b0f53594..557d2c844cc 100644 --- a/src/tests/routes/trustpub/tokens/revoke.rs +++ b/src/tests/routes/trustpub/tokens/revoke.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{MockTokenUser, RequestHelper, TestApp}; +use crate::util::{MockTokenUser, RequestHelper, TestApp}; use chrono::{TimeDelta, Utc}; use crates_io_database::models::trustpub::NewToken; use crates_io_database::schema::trustpub_tokens; diff --git a/src/tests/routes/users/email_verification.rs b/src/tests/routes/users/email_verification.rs index f44f38cca2f..9d2108791fb 100644 --- a/src/tests/routes/users/email_verification.rs +++ b/src/tests/routes/users/email_verification.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/routes/users/read.rs b/src/tests/routes/users/read.rs index d1d7ddebef8..f1c8470f6c1 100644 --- a/src/tests/routes/users/read.rs +++ b/src/tests/routes/users/read.rs @@ -1,8 +1,8 @@ -use crate::models::NewUser; -use crate::schema::users; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::views::EncodablePublicUser; +use crate::util::{RequestHelper, TestApp}; use claims::assert_ok; +use crates_io::models::NewUser; +use crates_io::schema::users; +use crates_io::views::EncodablePublicUser; use diesel_async::RunQueryDsl; use serde::Deserialize; diff --git a/src/tests/routes/users/snapshots/crates_io__tests__routes__users__email_verification__happy_path-3.snap b/src/tests/routes/users/snapshots/integration__routes__users__email_verification__happy_path-3.snap similarity index 88% rename from src/tests/routes/users/snapshots/crates_io__tests__routes__users__email_verification__happy_path-3.snap rename to src/tests/routes/users/snapshots/integration__routes__users__email_verification__happy_path-3.snap index 4c337f7743c..33a752f40ca 100644 --- a/src/tests/routes/users/snapshots/crates_io__tests__routes__users__email_verification__happy_path-3.snap +++ b/src/tests/routes/users/snapshots/integration__routes__users__email_verification__happy_path-3.snap @@ -1,5 +1,5 @@ --- -source: src/controllers/user/email_verification.rs +source: src/tests/routes/users/email_verification.rs expression: app.emails_snapshot().await --- To: foo@example.com diff --git a/src/tests/routes/users/stats.rs b/src/tests/routes/users/stats.rs index 4b14fe4afa3..e174755a0d8 100644 --- a/src/tests/routes/users/stats.rs +++ b/src/tests/routes/users/stats.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, TestApp}; +use crate::util::{RequestHelper, TestApp}; use serde::Deserialize; #[derive(Deserialize)] @@ -8,9 +8,9 @@ struct UserStats { #[tokio::test(flavor = "multi_thread")] async fn user_total_downloads() -> anyhow::Result<()> { - use crate::schema::crate_downloads; - use crate::tests::builders::CrateBuilder; - use crate::tests::util::{RequestHelper, TestApp}; + use crate::builders::CrateBuilder; + use crate::util::{RequestHelper, TestApp}; + use crates_io::schema::crate_downloads; use diesel::prelude::*; use diesel::{QueryDsl, update}; use diesel_async::RunQueryDsl; diff --git a/src/tests/routes/users/update.rs b/src/tests/routes/users/update.rs index 884b1eddab6..92ae29fcb3f 100644 --- a/src/tests/routes/users/update.rs +++ b/src/tests/routes/users/update.rs @@ -1,4 +1,4 @@ -use crate::tests::util::{RequestHelper, Response, TestApp}; +use crate::util::{RequestHelper, Response, TestApp}; use http::StatusCode; use insta::assert_snapshot; use serde_json::json; @@ -16,10 +16,10 @@ pub trait MockEmailHelper: RequestHelper { } } -impl MockEmailHelper for crate::tests::util::MockCookieUser {} -impl MockEmailHelper for crate::tests::util::MockAnonymousUser {} +impl MockEmailHelper for crate::util::MockCookieUser {} +impl MockEmailHelper for crate::util::MockAnonymousUser {} -impl crate::tests::util::MockCookieUser { +impl crate::util::MockCookieUser { pub async fn update_email(&self, email: &str) { let model = self.as_model(); let response = self.update_email_more_control(model.id, Some(email)).await; diff --git a/src/tests/routes/users/update/publish_notifications.rs b/src/tests/routes/users/update/publish_notifications.rs index e8c731322a5..17c6714b74e 100644 --- a/src/tests/routes/users/update/publish_notifications.rs +++ b/src/tests/routes/users/update/publish_notifications.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use insta::assert_snapshot; use serde_json::json; diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap b/src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap similarity index 100% rename from src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap rename to src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap b/src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap similarity index 100% rename from src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap rename to src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap b/src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap similarity index 100% rename from src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap rename to src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap b/src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap similarity index 100% rename from src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap rename to src/tests/routes/users/update/snapshots/integration__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap diff --git a/src/tests/server.rs b/src/tests/server.rs index 17200f5efac..267596af42d 100644 --- a/src/tests/server.rs +++ b/src/tests/server.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::*; -use crate::tests::util::*; +use crate::builders::*; +use crate::util::*; use std::collections::HashSet; use ::insta::assert_json_snapshot; diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_for_revoked_token-2.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_for_revoked_token-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_for_revoked_token-2.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_for_revoked_token-2.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_for_unknown_token-2.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_for_unknown_token-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_for_unknown_token-2.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_for_unknown_token-2.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_for_unknown_trustpub_token-2.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_for_unknown_trustpub_token-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_for_unknown_trustpub_token-2.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_for_unknown_trustpub_token-2.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-2.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_token-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-2.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_token-2.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-3.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_token-3.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-3.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_token-3.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-2.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-2.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token-2.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-2.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-2.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-2.snap diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap b/src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap rename to src/tests/snapshots/integration__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap diff --git a/src/tests/snapshots/crates_io__tests__openapi__openapi_snapshot-2.snap b/src/tests/snapshots/integration__openapi__openapi_snapshot-2.snap similarity index 99% rename from src/tests/snapshots/crates_io__tests__openapi__openapi_snapshot-2.snap rename to src/tests/snapshots/integration__openapi__openapi_snapshot-2.snap index 6c7e90967b9..1fe04ce2381 100644 --- a/src/tests/snapshots/crates_io__tests__openapi__openapi_snapshot-2.snap +++ b/src/tests/snapshots/integration__openapi__openapi_snapshot-2.snap @@ -1,5 +1,5 @@ --- -source: src/openapi.rs +source: src/tests/openapi.rs expression: response.json() --- { diff --git a/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners-10.snap b/src/tests/snapshots/integration__owners__modify_multiple_owners-10.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners-10.snap rename to src/tests/snapshots/integration__owners__modify_multiple_owners-10.snap diff --git a/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners.snap b/src/tests/snapshots/integration__owners__modify_multiple_owners.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners.snap rename to src/tests/snapshots/integration__owners__modify_multiple_owners.snap diff --git a/src/tests/snapshots/crates_io__tests__owners__new_crate_owner-2.snap b/src/tests/snapshots/integration__owners__new_crate_owner-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__owners__new_crate_owner-2.snap rename to src/tests/snapshots/integration__owners__new_crate_owner-2.snap diff --git a/src/tests/snapshots/crates_io__tests__owners__new_crate_owner.snap b/src/tests/snapshots/integration__owners__new_crate_owner.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__owners__new_crate_owner.snap rename to src/tests/snapshots/integration__owners__new_crate_owner.snap diff --git a/src/tests/snapshots/crates_io__tests__read_only_mode__cannot_hit_endpoint_which_writes_db_in_read_only_mode-2.snap b/src/tests/snapshots/integration__read_only_mode__cannot_hit_endpoint_which_writes_db_in_read_only_mode-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__read_only_mode__cannot_hit_endpoint_which_writes_db_in_read_only_mode-2.snap rename to src/tests/snapshots/integration__read_only_mode__cannot_hit_endpoint_which_writes_db_in_read_only_mode-2.snap diff --git a/src/tests/snapshots/crates_io__tests__server__block_traffic_via_arbitrary_header_and_value.snap b/src/tests/snapshots/integration__server__block_traffic_via_arbitrary_header_and_value.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__server__block_traffic_via_arbitrary_header_and_value.snap rename to src/tests/snapshots/integration__server__block_traffic_via_arbitrary_header_and_value.snap diff --git a/src/tests/snapshots/crates_io__tests__server__block_traffic_via_ip.snap b/src/tests/snapshots/integration__server__block_traffic_via_ip.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__server__block_traffic_via_ip.snap rename to src/tests/snapshots/integration__server__block_traffic_via_ip.snap diff --git a/src/tests/snapshots/crates_io__tests__server__user_agent_is_required-2.snap b/src/tests/snapshots/integration__server__user_agent_is_required-2.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__server__user_agent_is_required-2.snap rename to src/tests/snapshots/integration__server__user_agent_is_required-2.snap diff --git a/src/tests/snapshots/crates_io__tests__server__user_agent_is_required.snap b/src/tests/snapshots/integration__server__user_agent_is_required.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__server__user_agent_is_required.snap rename to src/tests/snapshots/integration__server__user_agent_is_required.snap diff --git a/src/tests/snapshots/crates_io__tests__team__publish_owned.snap b/src/tests/snapshots/integration__team__publish_owned.snap similarity index 100% rename from src/tests/snapshots/crates_io__tests__team__publish_owned.snap rename to src/tests/snapshots/integration__team__publish_owned.snap diff --git a/src/tests/team.rs b/src/tests/team.rs index d0bb994724c..16a8ce10387 100644 --- a/src/tests/team.rs +++ b/src/tests/team.rs @@ -1,17 +1,17 @@ -use crate::models::{Crate, CrateOwner, NewTeam}; -use crate::tests::builders::{CrateBuilder, PublishBuilder}; -use crate::tests::{OwnerTeamsResponse, RequestHelper, TestApp, add_team_to_crate, new_team}; +use crate::builders::{CrateBuilder, PublishBuilder}; +use crate::{OwnerTeamsResponse, RequestHelper, TestApp, add_team_to_crate, new_team}; +use crates_io::models::{Crate, CrateOwner, NewTeam}; use diesel::*; use diesel_async::RunQueryDsl; use insta::assert_snapshot; -impl crate::tests::util::MockAnonymousUser { +impl crate::util::MockAnonymousUser { /// List the team owners of the specified crate. async fn crate_owner_teams( &self, krate_name: &str, - ) -> crate::tests::util::Response { + ) -> crate::util::Response { let url = format!("/api/v1/crates/{krate_name}/owner_team"); self.get(&url).await } @@ -91,7 +91,7 @@ async fn add_renamed_team() -> anyhow::Result<()> { let token = user.db_new_token("arbitrary token name").await; let owner_id = user.as_model().id; - use crate::schema::teams; + use crates_io::schema::teams; CrateBuilder::new("foo_renamed_team", owner_id) .expect_build(&mut conn) diff --git a/src/tests/token.rs b/src/tests/token.rs index 14f0ae705d8..bb895f02431 100644 --- a/src/tests/token.rs +++ b/src/tests/token.rs @@ -1,8 +1,8 @@ -use crate::tests::builders::PublishBuilder; -use crate::tests::util::MockTokenUser; -use crate::tests::{RequestHelper, TestApp}; -use crate::{models::ApiToken, views::EncodableMe}; +use crate::builders::PublishBuilder; +use crate::util::MockTokenUser; +use crate::{RequestHelper, TestApp}; use claims::{assert_none, assert_ok, assert_some}; +use crates_io::{models::ApiToken, views::EncodableMe}; use diesel::prelude::*; use diesel_async::RunQueryDsl; use insta::assert_snapshot; diff --git a/src/tests/unhealthy_database.rs b/src/tests/unhealthy_database.rs index 64f37bf336b..d9dea3475df 100644 --- a/src/tests/unhealthy_database.rs +++ b/src/tests/unhealthy_database.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::{RequestHelper, TestApp}; +use crate::builders::CrateBuilder; +use crate::util::{RequestHelper, TestApp}; use claims::{assert_ok, assert_some}; use diesel_async::AsyncPgConnection; use diesel_async::pooled_connection::deadpool::Pool; diff --git a/src/tests/user.rs b/src/tests/user.rs index 4466762da52..1f5910d3d4f 100644 --- a/src/tests/user.rs +++ b/src/tests/user.rs @@ -1,19 +1,19 @@ -use crate::controllers::session; -use crate::models::{ApiToken, Email, User}; -use crate::tests::TestApp; -use crate::tests::util::github::next_gh_id; -use crate::tests::util::{MockCookieUser, RequestHelper}; -use crate::util::gh_token_encryption::GitHubTokenEncryption; -use crate::util::token::HashedToken; +use crate::TestApp; +use crate::util::github::next_gh_id; +use crate::util::{MockCookieUser, RequestHelper}; use chrono::{DateTime, Utc}; use claims::assert_ok; +use crates_io::controllers::session; +use crates_io::models::{ApiToken, Email, User}; +use crates_io::util::gh_token_encryption::GitHubTokenEncryption; +use crates_io::util::token::HashedToken; use crates_io_github::GitHubUser; use diesel::prelude::*; use diesel_async::RunQueryDsl; use insta::assert_snapshot; use serde_json::json; -impl crate::tests::util::MockCookieUser { +impl crate::util::MockCookieUser { async fn confirm_email(&self, email_token: &str) { let url = format!("/api/v1/confirm/{email_token}"); let response = self.put::<()>(&url, &[] as &[u8]).await; @@ -120,7 +120,7 @@ async fn github_without_email_does_not_overwrite_email() -> anyhow::Result<()> { /// sign in again, that the email in crates.io will remain set to the original email used on GitHub. #[tokio::test(flavor = "multi_thread")] async fn github_with_email_does_not_overwrite_email() -> anyhow::Result<()> { - use crate::schema::emails; + use crates_io::schema::emails; let (app, _, user) = TestApp::init().with_user().await; let mut conn = app.db_conn().await; @@ -184,7 +184,7 @@ async fn test_email_get_and_put() -> anyhow::Result<()> { /// the email_verified field on user is now set to true. #[tokio::test(flavor = "multi_thread")] async fn test_confirm_user_email() -> anyhow::Result<()> { - use crate::schema::emails; + use crates_io::schema::emails; let (app, _) = TestApp::init().empty().await; let mut conn = app.db_conn().await; @@ -228,7 +228,7 @@ async fn test_confirm_user_email() -> anyhow::Result<()> { /// make the user think we've sent an email when we haven't. #[tokio::test(flavor = "multi_thread")] async fn test_existing_user_email() -> anyhow::Result<()> { - use crate::schema::emails; + use crates_io::schema::emails; use diesel::update; let (app, _) = TestApp::init().empty().await; diff --git a/src/tests/util.rs b/src/tests/util.rs index 6b6bfae932f..a074fc112ec 100644 --- a/src/tests/util.rs +++ b/src/tests/util.rs @@ -19,21 +19,21 @@ //! `MockCookieUser` and `MockTokenUser` provide an `as_model` function which returns a reference //! to the underlying database model value (`User` and `ApiToken` respectively). -use crate::models::{ApiToken, User}; -use crate::tests::{ +use crate::{ CategoryListResponse, CategoryResponse, CrateList, CrateResponse, GoodCrate, OwnerResp, OwnersResponse, VersionResponse, }; +use crates_io::models::{ApiToken, User}; use std::future::Future; use http::{Method, Request}; -use crate::models::token::{CrateScope, EndpointScope, NewApiToken}; -use crate::util::token::PlainToken; use axum::body::{Body, Bytes}; use axum::extract::connect_info::MockConnectInfo; use chrono::{DateTime, Utc}; use cookie::Cookie; +use crates_io::models::token::{CrateScope, EndpointScope, NewApiToken}; +use crates_io::util::token::PlainToken; use futures_util::FutureExt; use http::header; use secrecy::ExposeSecret; diff --git a/src/tests/util/response.rs b/src/tests/util/response.rs index 966665a10c7..3536736c556 100644 --- a/src/tests/util/response.rs +++ b/src/tests/util/response.rs @@ -1,4 +1,4 @@ -use crate::tests::util::matchers::is_success; +use crate::util::matchers::is_success; use bytes::Bytes; use claims::{assert_ok, assert_some, assert_some_eq}; use googletest::prelude::*; @@ -6,7 +6,7 @@ use serde_json::Value; use std::marker::PhantomData; use std::str::from_utf8; -use crate::rate_limiter::LimitedAction; +use crates_io::rate_limiter::LimitedAction; use derive_more::Deref; use http::{StatusCode, header}; diff --git a/src/tests/util/test_app.rs b/src/tests/util/test_app.rs index 3ed8b782c8b..5958661bfec 100644 --- a/src/tests/util/test_app.rs +++ b/src/tests/util/test_app.rs @@ -1,18 +1,18 @@ use super::{MockAnonymousUser, MockCookieUser, MockTokenUser}; -use crate::config::{ +use crate::util::chaosproxy::ChaosProxy; +use crate::util::github::MOCK_GITHUB_DATA; +use claims::assert_some; +use crates_io::config::{ self, Base, CdnLogQueueConfig, CdnLogStorageConfig, DatabasePools, DbPoolConfig, }; -use crate::middleware::cargo_compat::StatusCodeConfig; -use crate::models::NewEmail; -use crate::models::token::{CrateScope, EndpointScope}; -use crate::rate_limiter::{LimitedAction, RateLimiterConfig}; -use crate::storage::StorageConfig; -use crate::tests::util::chaosproxy::ChaosProxy; -use crate::tests::util::github::MOCK_GITHUB_DATA; -use crate::util::gh_token_encryption::GitHubTokenEncryption; -use crate::worker::{Environment, RunnerExt}; -use crate::{App, Emails, Env}; -use claims::assert_some; +use crates_io::middleware::cargo_compat::StatusCodeConfig; +use crates_io::models::NewEmail; +use crates_io::models::token::{CrateScope, EndpointScope}; +use crates_io::rate_limiter::{LimitedAction, RateLimiterConfig}; +use crates_io::storage::StorageConfig; +use crates_io::util::gh_token_encryption::GitHubTokenEncryption; +use crates_io::worker::{Environment, RunnerExt}; +use crates_io::{App, Emails, Env}; use crates_io_docs_rs::MockDocsRsClient; use crates_io_github::MockGitHubClient; use crates_io_index::testing::UpstreamIndex; @@ -48,7 +48,7 @@ struct TestAppInner { impl Drop for TestAppInner { fn drop(&mut self) { - use crate::schema::background_jobs; + use crates_io::schema::background_jobs; use diesel::prelude::*; // Avoid a double-panic if the test is already failing @@ -98,7 +98,7 @@ pub struct TestApp(Rc); impl TestApp { /// Initialize an application with an `Uploader` that panics pub fn init() -> TestAppBuilder { - crate::util::tracing::init_for_test(); + crates_io::util::tracing::init_for_test(); TestAppBuilder { config: simple_config(), @@ -132,10 +132,7 @@ impl TestApp { let email = format!("{username}@example.com"); - let user = crate::tests::new_user(username) - .insert(&mut conn) - .await - .unwrap(); + let user = crate::new_user(username).insert(&mut conn).await.unwrap(); let new_email = NewEmail::builder() .user_id(user.id) @@ -555,6 +552,6 @@ fn build_app( .build(); let app = Arc::new(app); - let router = crate::build_handler(Arc::clone(&app)); + let router = crates_io::build_handler(Arc::clone(&app)); (app, router) } diff --git a/src/tests/version.rs b/src/tests/version.rs index 7e8966a2702..a759b913b15 100644 --- a/src/tests/version.rs +++ b/src/tests/version.rs @@ -1,6 +1,6 @@ -use crate::models::Version; -use crate::tests::TestApp; -use crate::tests::builders::{CrateBuilder, VersionBuilder}; +use crate::TestApp; +use crate::builders::{CrateBuilder, VersionBuilder}; +use crates_io::models::Version; #[tokio::test(flavor = "multi_thread")] async fn record_rerendered_readme_time() -> anyhow::Result<()> { diff --git a/src/tests/worker/generate_og_image.rs b/src/tests/worker/generate_og_image.rs index 5b766de3d8f..31ac25e9cc0 100644 --- a/src/tests/worker/generate_og_image.rs +++ b/src/tests/worker/generate_og_image.rs @@ -1,5 +1,5 @@ -use crate::tests::builders::CrateBuilder; -use crate::tests::util::TestApp; +use crate::builders::CrateBuilder; +use crate::util::TestApp; use claims::{assert_err, assert_ok}; use crates_io_env_vars::var; use crates_io_worker::BackgroundJob; @@ -35,7 +35,7 @@ async fn test_generate_og_image_job() { .await; // Create and enqueue the job - let job = crate::worker::jobs::GenerateOgImage::new("test-crate".to_string()); + let job = crates_io::worker::jobs::GenerateOgImage::new("test-crate".to_string()); job.enqueue(&mut conn).await.unwrap(); // Run the background job @@ -72,7 +72,7 @@ async fn test_generate_og_image_job_nonexistent_crate() { let mut conn = app.db_conn().await; // Create and enqueue the job for a non-existent crate - let job = crate::worker::jobs::GenerateOgImage::new("nonexistent-crate".to_string()); + let job = crates_io::worker::jobs::GenerateOgImage::new("nonexistent-crate".to_string()); job.enqueue(&mut conn).await.unwrap(); // Run the background job - should complete without error diff --git a/src/tests/worker/git.rs b/src/tests/worker/git.rs index 3c555311c49..0051f2a2fdc 100644 --- a/src/tests/worker/git.rs +++ b/src/tests/worker/git.rs @@ -1,8 +1,8 @@ -use crate::models::Crate; -use crate::tests::builders::PublishBuilder; -use crate::tests::util::{RequestHelper, TestApp}; -use crate::worker::jobs; +use crate::builders::PublishBuilder; +use crate::util::{RequestHelper, TestApp}; use claims::{assert_ok, assert_ok_eq}; +use crates_io::models::Crate; +use crates_io::worker::jobs; use crates_io_worker::BackgroundJob; use diesel::prelude::*; use diesel_async::RunQueryDsl; @@ -49,7 +49,7 @@ async fn index_smoke_test() { // Delete the crate - use crate::schema::crates; + use crates_io::schema::crates; let krate: Crate = assert_ok!(Crate::by_name("serde").first(&mut conn).await); assert_ok!( diff --git a/src/tests/worker/readmes.rs b/src/tests/worker/readmes.rs index 81d091ebbbf..b30f04ab1d9 100644 --- a/src/tests/worker/readmes.rs +++ b/src/tests/worker/readmes.rs @@ -1,5 +1,5 @@ -use crate::tests::util::TestApp; -use crate::worker::jobs; +use crate::util::TestApp; +use crates_io::worker::jobs; use crates_io_worker::BackgroundJob; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crate_feed__sync_crate_feed-2.snap b/src/tests/worker/rss/snapshots/integration__worker__rss__sync_crate_feed__sync_crate_feed-2.snap similarity index 100% rename from src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crate_feed__sync_crate_feed-2.snap rename to src/tests/worker/rss/snapshots/integration__worker__rss__sync_crate_feed__sync_crate_feed-2.snap diff --git a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap b/src/tests/worker/rss/snapshots/integration__worker__rss__sync_crates_feed__sync_crates_feed-2.snap similarity index 100% rename from src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap rename to src/tests/worker/rss/snapshots/integration__worker__rss__sync_crates_feed__sync_crates_feed-2.snap diff --git a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap b/src/tests/worker/rss/snapshots/integration__worker__rss__sync_updates_feed__sync_updates_feed-2.snap similarity index 100% rename from src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap rename to src/tests/worker/rss/snapshots/integration__worker__rss__sync_updates_feed__sync_updates_feed-2.snap diff --git a/src/tests/worker/rss/sync_crate_feed.rs b/src/tests/worker/rss/sync_crate_feed.rs index c30a485db9f..c9bcf043004 100644 --- a/src/tests/worker/rss/sync_crate_feed.rs +++ b/src/tests/worker/rss/sync_crate_feed.rs @@ -1,7 +1,7 @@ -use crate::schema::{crates, versions}; -use crate::tests::util::TestApp; -use crate::worker::jobs; +use crate::util::TestApp; use chrono::DateTime; +use crates_io::schema::{crates, versions}; +use crates_io::worker::jobs; use crates_io_worker::BackgroundJob; use diesel::prelude::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; diff --git a/src/tests/worker/rss/sync_crates_feed.rs b/src/tests/worker/rss/sync_crates_feed.rs index 96a89adf921..5d821cf6d0b 100644 --- a/src/tests/worker/rss/sync_crates_feed.rs +++ b/src/tests/worker/rss/sync_crates_feed.rs @@ -1,7 +1,7 @@ -use crate::schema::crates; -use crate::tests::util::TestApp; -use crate::worker::jobs; +use crate::util::TestApp; use chrono::DateTime; +use crates_io::schema::crates; +use crates_io::worker::jobs; use crates_io_worker::BackgroundJob; use diesel::prelude::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; diff --git a/src/tests/worker/rss/sync_updates_feed.rs b/src/tests/worker/rss/sync_updates_feed.rs index 8d0ac965266..7235e3a95e3 100644 --- a/src/tests/worker/rss/sync_updates_feed.rs +++ b/src/tests/worker/rss/sync_updates_feed.rs @@ -1,7 +1,7 @@ -use crate::schema::{crates, versions}; -use crate::tests::util::TestApp; -use crate::worker::jobs; +use crate::util::TestApp; use chrono::DateTime; +use crates_io::schema::{crates, versions}; +use crates_io::worker::jobs; use crates_io_worker::BackgroundJob; use diesel::prelude::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; diff --git a/src/tests/worker/send_publish_notifications.rs b/src/tests/worker/send_publish_notifications.rs index 98dd4faef17..b8b7d1f5440 100644 --- a/src/tests/worker/send_publish_notifications.rs +++ b/src/tests/worker/send_publish_notifications.rs @@ -1,5 +1,5 @@ -use crate::tests::util::TestApp; -use crate::worker::jobs; +use crate::util::TestApp; +use crates_io::worker::jobs; use crates_io_worker::BackgroundJob; #[tokio::test(flavor = "multi_thread")] diff --git a/src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap b/src/tests/worker/snapshots/integration__worker__generate_og_image__og-image.snap similarity index 100% rename from src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap rename to src/tests/worker/snapshots/integration__worker__generate_og_image__og-image.snap diff --git a/src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap.png b/src/tests/worker/snapshots/integration__worker__generate_og_image__og-image.snap.png similarity index 100% rename from src/tests/worker/snapshots/crates_io__tests__worker__generate_og_image__og-image.snap.png rename to src/tests/worker/snapshots/integration__worker__generate_og_image__og-image.snap.png diff --git a/src/tests/worker/snapshots/crates_io__tests__worker__sync_admins__sync_admins_job.snap b/src/tests/worker/snapshots/integration__worker__sync_admins__sync_admins_job.snap similarity index 100% rename from src/tests/worker/snapshots/crates_io__tests__worker__sync_admins__sync_admins_job.snap rename to src/tests/worker/snapshots/integration__worker__sync_admins__sync_admins_job.snap diff --git a/src/tests/worker/sync_admins.rs b/src/tests/worker/sync_admins.rs index 8e700c45c51..ae83b3dff67 100644 --- a/src/tests/worker/sync_admins.rs +++ b/src/tests/worker/sync_admins.rs @@ -1,6 +1,6 @@ -use crate::schema::{emails, users}; -use crate::tests::util::TestApp; -use crate::worker::jobs::SyncAdmins; +use crate::util::TestApp; +use crates_io::schema::{emails, users}; +use crates_io::worker::jobs::SyncAdmins; use crates_io_team_repo::{MockTeamRepo, Permission, Person}; use crates_io_worker::BackgroundJob; use diesel::QueryResult; diff --git a/src/tests/worker/trustpub/delete_jtis.rs b/src/tests/worker/trustpub/delete_jtis.rs index 730d1cf1f57..3ce17fdb24f 100644 --- a/src/tests/worker/trustpub/delete_jtis.rs +++ b/src/tests/worker/trustpub/delete_jtis.rs @@ -1,6 +1,6 @@ -use crate::tests::util::TestApp; -use crate::worker::jobs::trustpub::DeleteExpiredJtis; +use crate::util::TestApp; use chrono::{TimeDelta, Utc}; +use crates_io::worker::jobs::trustpub::DeleteExpiredJtis; use crates_io_database::models::trustpub::NewUsedJti; use crates_io_database::schema::trustpub_used_jtis; use crates_io_worker::BackgroundJob; diff --git a/src/tests/worker/trustpub/delete_tokens.rs b/src/tests/worker/trustpub/delete_tokens.rs index 7934dfbb612..809f3380db2 100644 --- a/src/tests/worker/trustpub/delete_tokens.rs +++ b/src/tests/worker/trustpub/delete_tokens.rs @@ -1,6 +1,6 @@ -use crate::tests::util::TestApp; -use crate::worker::jobs::trustpub::DeleteExpiredTokens; +use crate::util::TestApp; use chrono::{TimeDelta, Utc}; +use crates_io::worker::jobs::trustpub::DeleteExpiredTokens; use crates_io_database::models::trustpub::NewToken; use crates_io_database::schema::trustpub_tokens; use crates_io_worker::BackgroundJob; diff --git a/src/tests/worker/update_default_version.rs b/src/tests/worker/update_default_version.rs index ca38a6fee90..25236238a71 100644 --- a/src/tests/worker/update_default_version.rs +++ b/src/tests/worker/update_default_version.rs @@ -1,5 +1,5 @@ -use crate::tests::util::TestApp; -use crate::worker::jobs; +use crate::util::TestApp; +use crates_io::worker::jobs; use crates_io_worker::BackgroundJob; #[tokio::test(flavor = "multi_thread")] diff --git a/src/typosquat/test_util.rs b/src/typosquat/test_util.rs index 3f6072e2b5e..f065971a81a 100644 --- a/src/typosquat/test_util.rs +++ b/src/typosquat/test_util.rs @@ -5,8 +5,8 @@ use crates_io_test_utils::github::next_gh_id; pub mod faker { use super::*; - use crate::tests::builders::CrateBuilder; use anyhow::anyhow; + use crates_io_test_utils::builders::CrateBuilder; use diesel_async::AsyncPgConnection; pub async fn crate_and_version(