Warning: Failed to determine module path for test `absolute_links_dont_get_resolved`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] This may indicate a bug in Necessist. Consider opening an issue at: https://github.com/trailofbits/necessist/issues Silence this warning with: --allow module-path-unknown Warning: Failed to determine module path for test `code_block_with_mermaid_highlighting`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `code_block_with_syntax_highlighting`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `code_block_with_syntax_highlighting_even_if_annot_has_no_run`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `empty_text`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `header_has_tags`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `image_alignment`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `manual_anchor_is_sanitized`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `relative_links`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `rustdoc_links`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `tables_with_rowspan_and_colspan`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_alignment`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_to_html_renders_markdown`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_to_html_renders_other_things`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_complex_footnotes`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_fancy_single_quotes`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_footnote`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_forbidden_class_attribute`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_iframe_tag`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_inline_javascript`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_kbd_tag`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_script_tag`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `text_with_unknown_tag`: [Failed to determine relative path of source file "$DIR/crates_io_markdown/lib.rs"] Warning: Failed to determine module path for test `test_write_crate`: [Failed to determine relative path of source file "$DIR/crates_io_index/ser.rs"] Warning: Failed to determine module path for test `test_write_crates`: [Failed to determine relative path of source file "$DIR/crates_io_index/ser.rs"] $DIR/crates_io_tarball/src/lib.rs: `assert_none!(tarball_info.vcs_info);` $DIR/crates_io_tarball/src/lib.rs: `want.sort();` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/Cargo.toml", b"[package]\nname = \"foo\"\nversion = \"0.0.1\"\n", )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/Cargo.toml", b"[package]\nname = \"foo\"\nversion = \"0.0.1\"\n", )` $DIR/crates_io_tarball/src/lib.rs: `.add_file("foo-0.0.1/.cargo_vcs_info.json", br#"{"unknown": "field"}"#)` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/Cargo.toml", b"[package]\nname = \"foo\"\nversion = \"0.0.1\"\n", )` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/.cargo_vcs_info.json", br#"{"path_in_vcs": "path/in/vcs"}"#, )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] name = "foo" version = "0.0.1" rust-version = "1.59" readme = "README.md" repository = "https://github.com/foo/bar" "#, )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [project] name = "foo" version = "0.0.1" rust-version = "1.23" "#, )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] name = "foo" version = "0.0.1" "#, )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] name = "foo" version = "0.0.1" readme = false "#, )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( "foo-0.0.1/cargo.toml", br#" [package] name = "foo" version = "0.0.1" repository = "https://github.com/foo/bar" "#, )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.add_file( &format!("foo-0.0.1/{file}"), br#" [package] name = "foo" version = "0.0.1" repository = "https://github.com/foo/bar" "#, )` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.fold(TarballBuilder::new(), |builder, file| { builder.add_file( &format!("foo-0.0.1/{file}"), br#" [package] name = "foo" version = "0.0.1" repository = "https://github.com/foo/bar" "#, ) })` $DIR/crates_io_tarball/src/lib.rs: `.build()` $DIR/crates_io_tarball/src/lib.rs: `.into_iter()` $DIR/crates_io_tarball/src/lib.rs: `.map(|file| PathBuf::from("foo-0.0.1").join(file))` $DIR/crates_io_tarball/src/lib.rs: `.join(file)` $DIR/crates_io_tarball/src/lib.rs: `.collect()` $DIR/crates_io_tarball/src/lib.rs: `.sort()` $DIR/src/admin/render_readmes.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] name = "foo" version = "0.0.1" readme = "README.md" "#, )` $DIR/src/admin/render_readmes.rs: `.add_file("foo-0.0.1/README.md", b"readme")` $DIR/src/admin/render_readmes.rs: `.build_unzipped()` $DIR/src/admin/render_readmes.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] "#, )` $DIR/src/admin/render_readmes.rs: `.build_unzipped()` $DIR/src/admin/render_readmes.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] name = "foo" version = "0.0.1" "#, )` $DIR/src/admin/render_readmes.rs: `.add_file("foo-0.0.1/README.md", b"readme")` $DIR/src/admin/render_readmes.rs: `.build_unzipped()` $DIR/src/admin/render_readmes.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] name = "foo" version = "0.0.1" readme = "README.md" repository = "https://github.com/foo/foo" "#, )` $DIR/src/admin/render_readmes.rs: `.add_file("foo-0.0.1/README.md", b"readme [link](./Other.md)")` $DIR/src/admin/render_readmes.rs: `.build_unzipped()` $DIR/src/admin/render_readmes.rs: `.add_file( "foo-0.0.1/Cargo.toml", br#" [package] name = "foo" version = "0.0.1" readme = "docs/README.md" repository = "https://github.com/foo/foo" "#, )` $DIR/src/admin/render_readmes.rs: `.add_file( "foo-0.0.1/docs/README.md", b"docs/readme [link](./Other.md)", )` $DIR/src/admin/render_readmes.rs: `.build_unzipped()` $DIR/src/auth.rs: `.with_endpoint_scope(EndpointScope::PublishNew)` $DIR/src/auth.rs: `.for_crate("tokio-console")` $DIR/src/auth.rs: `.with_endpoint_scope(EndpointScope::PublishUpdate)` $DIR/src/auth.rs: `.for_crate("tokio-console")` $DIR/src/auth.rs: `.with_endpoint_scope(EndpointScope::Yank)` $DIR/src/auth.rs: `.for_crate("tokio-console")` $DIR/src/auth.rs: `.with_endpoint_scope(EndpointScope::ChangeOwners)` $DIR/src/auth.rs: `.for_crate("tokio-console")` $DIR/src/config/server.rs: `assert_ok_eq!( parse_cidr_block("127.0.0.1/24"), "127.0.0.1/24".parse::().unwrap() );` $DIR/src/config/server.rs: `assert_ok_eq!( parse_cidr_block("2002::1234:abcd:ffff:c0a8:101/64"), "2002::1234:abcd:ffff:c0a8:101/64" .parse::() .unwrap() );` $DIR/src/config/server.rs: `.collect::>()` $DIR/src/config/server.rs: `.collect::>()` $DIR/src/controllers/helpers/pagination.rs: `assert_error("page=", "cannot parse integer from empty string");` $DIR/src/controllers/helpers/pagination.rs: `assert_error("page=not_a_number", "invalid digit found in string");` $DIR/src/controllers/helpers/pagination.rs: `assert_error("page=1.0", "invalid digit found in string");` $DIR/src/controllers/helpers/pagination.rs: `assert_error("page=0", "page indexing starts from 1, page 0 is invalid");` $DIR/src/controllers/helpers/pagination.rs: `assert_error("per_page=", "cannot parse integer from empty string");` $DIR/src/controllers/helpers/pagination.rs: `assert_error("per_page=not_a_number", "invalid digit found in string");` $DIR/src/controllers/helpers/pagination.rs: `assert_error("per_page=1.0", "invalid digit found in string");` $DIR/src/controllers/helpers/pagination.rs: `assert_error("per_page=101", "cannot request more than 100 items");` $DIR/src/controllers/helpers/pagination.rs: `assert_pagination_error( PaginationOptions::builder(), "seek=OTg", "?seek= is not supported for this request", );` $DIR/src/controllers/helpers/pagination.rs: `assert_ok_eq!(raw.decode::(), 98);` $DIR/src/controllers/helpers/pagination.rs: `assert_pagination_error( PaginationOptions::builder(), "page=1&seek=OTg", "providing both ?page= and ?seek= is unsupported", );` $DIR/src/controllers/helpers/pagination.rs: `assert_ok_eq!(encode_seek(98), "OTg");` $DIR/src/controllers/helpers/pagination.rs: `assert_ok_eq!(encode_seek(("foo", 42)), "WyJmb28iLDQyXQ");` $DIR/src/controllers/helpers/pagination.rs: `assert_ok_eq!(decode_seek::(&encode_seek(98).unwrap()), 98);` $DIR/src/controllers/helpers/pagination.rs: `.gather(&mock(""))` $DIR/src/controllers/helpers/pagination.rs: `.gather(&mock("page=5"))` $DIR/src/controllers/helpers/pagination.rs: `.gather(&mock("per_page=5"))` $DIR/src/controllers/helpers/pagination.rs: `.enable_seek(true)` $DIR/src/controllers/helpers/pagination.rs: `.gather(&mock("seek=OTg"))` $DIR/src/controllers/helpers/pagination.rs: `.enable_seek(true)` $DIR/src/controllers/helpers/pagination.rs: `.enable_pages(false)` $DIR/src/controllers/user/session.rs: `.into()` $DIR/src/controllers/user/session.rs: `.into()` $DIR/src/controllers/user/session.rs: `.into()` $DIR/src/downloads_counter.rs: `counter.increment(v1);` $DIR/src/downloads_counter.rs: `counter.increment(v2);` $DIR/src/downloads_counter.rs: `state.assert_downloads_count(conn, v1, 10);` $DIR/src/downloads_counter.rs: `state.assert_downloads_count(conn, v2, 5);` $DIR/src/downloads_counter.rs: `v2 = state.new_version(conn);` $DIR/src/downloads_counter.rs: `counter.increment(v1);` $DIR/src/downloads_counter.rs: `counter.increment(v2);` $DIR/src/downloads_counter.rs: `pending -= 10;` $DIR/src/downloads_counter.rs: `state.assert_downloads_count(conn, v1, 10);` $DIR/src/downloads_counter.rs: `pending -= 5;` $DIR/src/downloads_counter.rs: `state.assert_downloads_count(conn, v1, 10);` $DIR/src/downloads_counter.rs: `.new_version(conn)` $DIR/src/downloads_counter.rs: `.new_version(conn)` $DIR/src/downloads_counter.rs: `.new_version(conn)` $DIR/src/downloads_counter.rs: `.increment(v1)` $DIR/src/downloads_counter.rs: `.increment(v2)` $DIR/src/downloads_counter.rs: `.persist_all_shards_with_conn(conn)` $DIR/src/downloads_counter.rs: `.assert_downloads_count(conn, v1, 10)` $DIR/src/downloads_counter.rs: `.assert_downloads_count(conn, v2, 5)` $DIR/src/downloads_counter.rs: `.new_version(conn)` $DIR/src/downloads_counter.rs: `.inner.determine_map(&v1)` $DIR/src/downloads_counter.rs: `.new_version(conn)` $DIR/src/downloads_counter.rs: `.inner.determine_map(&v2)` $DIR/src/downloads_counter.rs: `.new_version(conn)` $DIR/src/downloads_counter.rs: `.inner.determine_map(&v2)` $DIR/src/downloads_counter.rs: `.increment(v1)` $DIR/src/downloads_counter.rs: `.increment(v2)` $DIR/src/downloads_counter.rs: `.shards_count()` $DIR/src/downloads_counter.rs: `.persist_next_shard_with_conn(conn)` $DIR/src/downloads_counter.rs: `.assert_downloads_count(conn, v1, 10)` $DIR/src/downloads_counter.rs: `.assert_downloads_count(conn, v1, 10)` $DIR/src/downloads_counter.rs: `.determine_map(&v1)` $DIR/src/downloads_counter.rs: `.determine_map(&v2)` $DIR/src/downloads_counter.rs: `.determine_map(&v1)` $DIR/src/downloads_counter.rs: `.determine_map(&v2)` $DIR/src/licenses.rs: `assert_ok!(parse_license_expr("MIT"));` $DIR/src/licenses.rs: `assert_ok!(parse_license_expr("MIT OR Apache-2.0"));` $DIR/src/licenses.rs: `assert_ok!(parse_license_expr("MIT/Apache-2.0"));` $DIR/src/licenses.rs: `assert_ok!(parse_license_expr("MIT AND Apache-2.0"));` $DIR/src/licenses.rs: `assert_ok!(parse_license_expr("MIT OR (Apache-2.0 AND MIT)"));` $DIR/src/licenses.rs: `assert_ok!(parse_license_expr("GPL-3.0+"));` $DIR/src/metrics/log_encoder.rs: `registry.register(Box::new(counter.clone()))?;` $DIR/src/metrics/log_encoder.rs: `counter.inc_by(42);` $DIR/src/metrics/log_encoder.rs: `registry.register(Box::new(gauge.clone()))?;` $DIR/src/metrics/log_encoder.rs: `gauge.set(42);` $DIR/src/metrics/log_encoder.rs: `registry.register(Box::new(histogram.clone()))?;` $DIR/src/metrics/log_encoder.rs: `histogram.observe(value);` $DIR/src/metrics/log_encoder.rs: `value += 0.001;` $DIR/src/metrics/log_encoder.rs: `registry.register(Box::new(gauge_vec.clone()))?;` $DIR/src/metrics/log_encoder.rs: `gauge_vec.with_label_values(&["foo", "1"]).set(42);` $DIR/src/metrics/log_encoder.rs: `gauge_vec.with_label_values(&["bar", "2"]).set(98);` $DIR/src/metrics/log_encoder.rs: `registry.register(Box::new(gauge))?;` $DIR/src/metrics/log_encoder.rs: `LogEncoder::new().encode(®istry.gather(), &mut output)?;` $DIR/src/metrics/log_encoder.rs: `.register(Box::new(counter.clone()))` $DIR/src/metrics/log_encoder.rs: `.inc_by(42)` $DIR/src/metrics/log_encoder.rs: `.register(Box::new(gauge.clone()))` $DIR/src/metrics/log_encoder.rs: `.set(42)` $DIR/src/metrics/log_encoder.rs: `.register(Box::new(histogram.clone()))` $DIR/src/metrics/log_encoder.rs: `.observe(value)` $DIR/src/metrics/log_encoder.rs: `.register(Box::new(gauge_vec.clone()))` $DIR/src/metrics/log_encoder.rs: `.with_label_values(&["foo", "1"])` $DIR/src/metrics/log_encoder.rs: `.set(42)` $DIR/src/metrics/log_encoder.rs: `.with_label_values(&["bar", "2"])` $DIR/src/metrics/log_encoder.rs: `.set(98)` $DIR/src/metrics/log_encoder.rs: `.register(Box::new(gauge))` $DIR/src/metrics/log_encoder.rs: `.encode(®istry.gather(), &mut output)` $DIR/src/metrics/log_encoder.rs: `.gather()` $DIR/src/metrics/log_encoder.rs: `.collect::>()` $DIR/src/metrics/log_encoder.rs: `.collect::>()` $DIR/src/middleware/normalize_path.rs: `normalize_path_inner(&mut req);` $DIR/src/middleware/normalize_path.rs: `normalize_path_inner(&mut req);` $DIR/src/middleware/normalize_path.rs: `normalize_path_inner(&mut req);` $DIR/src/middleware/normalize_path.rs: `.body(())` $DIR/src/middleware/normalize_path.rs: `.body(())` $DIR/src/middleware/normalize_path.rs: `.body(())` $DIR/src/models/category.rs: `insert_into(categories) .values(&vec![ (category.eq("Cat 2"), slug.eq("cat2")), (category.eq("Cat 1"), slug.eq("cat1")), (category.eq("Cat 1::sub"), slug.eq("cat1::sub")), ]) .execute(conn) .unwrap();` $DIR/src/models/category.rs: `insert_into(categories) .values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(0)), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(2)), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(1)), ]) .execute(conn) .unwrap();` $DIR/src/models/category.rs: `insert_into(categories) .values(&vec![ (category.eq("Cat 1"), slug.eq("cat1")), (category.eq("Cat 2"), slug.eq("cat2")), ]) .execute(conn) .unwrap();` $DIR/src/models/category.rs: `insert_into(categories) .values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(1)), ( category.eq("Cat 1::sub"), slug.eq("cat1::sub"), crates_cnt.eq(2), ), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(3)), ( category.eq("Cat 2::Sub 1"), slug.eq("cat2::sub1"), crates_cnt.eq(4), ), ( category.eq("Cat 2::Sub 2"), slug.eq("cat2::sub2"), crates_cnt.eq(5), ), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(6)), ]) .execute(conn) .unwrap();` $DIR/src/models/category.rs: `insert_into(categories) .values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(1)), ( category.eq("Cat 1::sub"), slug.eq("cat1::sub"), crates_cnt.eq(2), ), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(3)), ( category.eq("Cat 2::Sub 1"), slug.eq("cat2::sub1"), crates_cnt.eq(4), ), ( category.eq("Cat 2::Sub 2"), slug.eq("cat2::sub2"), crates_cnt.eq(5), ), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(6)), ]) .execute(conn) .unwrap();` $DIR/src/models/category.rs: `insert_into(categories) .values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(1)), ( category.eq("Cat 1::sub1"), slug.eq("cat1::sub1"), crates_cnt.eq(2), ), ( category.eq("Cat 1::sub2"), slug.eq("cat1::sub2"), crates_cnt.eq(2), ), ( category.eq("Cat 1::sub1::subsub1"), slug.eq("cat1::sub1::subsub1"), crates_cnt.eq(2), ), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(3)), ( category.eq("Cat 2::Sub 1"), slug.eq("cat2::sub1"), crates_cnt.eq(4), ), ( category.eq("Cat 2::Sub 2"), slug.eq("cat2::sub2"), crates_cnt.eq(5), ), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(200)), ]) .execute(conn) .unwrap();` $DIR/src/models/category.rs: `.values(&vec![ (category.eq("Cat 2"), slug.eq("cat2")), (category.eq("Cat 1"), slug.eq("cat1")), (category.eq("Cat 1::sub"), slug.eq("cat1::sub")), ])` $DIR/src/models/category.rs: `.execute(conn)` $DIR/src/models/category.rs: `.into_iter()` $DIR/src/models/category.rs: `.map(|c| c.category)` $DIR/src/models/category.rs: `.collect::>()` $DIR/src/models/category.rs: `.values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(0)), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(2)), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(1)), ])` $DIR/src/models/category.rs: `.execute(conn)` $DIR/src/models/category.rs: `.into_iter()` $DIR/src/models/category.rs: `.map(|c| c.category)` $DIR/src/models/category.rs: `.collect::>()` $DIR/src/models/category.rs: `.values(&vec![ (category.eq("Cat 1"), slug.eq("cat1")), (category.eq("Cat 2"), slug.eq("cat2")), ])` $DIR/src/models/category.rs: `.execute(conn)` $DIR/src/models/category.rs: `.into_iter()` $DIR/src/models/category.rs: `.map(|c| c.category)` $DIR/src/models/category.rs: `.collect::>()` $DIR/src/models/category.rs: `.into_iter()` $DIR/src/models/category.rs: `.map(|c| c.category)` $DIR/src/models/category.rs: `.collect::>()` $DIR/src/models/category.rs: `.values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(1)), ( category.eq("Cat 1::sub"), slug.eq("cat1::sub"), crates_cnt.eq(2), ), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(3)), ( category.eq("Cat 2::Sub 1"), slug.eq("cat2::sub1"), crates_cnt.eq(4), ), ( category.eq("Cat 2::Sub 2"), slug.eq("cat2::sub2"), crates_cnt.eq(5), ), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(6)), ])` $DIR/src/models/category.rs: `.execute(conn)` $DIR/src/models/category.rs: `.into_iter()` $DIR/src/models/category.rs: `.map(|c| (c.category, c.crates_cnt))` $DIR/src/models/category.rs: `.collect::>()` $DIR/src/models/category.rs: `.values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(1)), ( category.eq("Cat 1::sub"), slug.eq("cat1::sub"), crates_cnt.eq(2), ), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(3)), ( category.eq("Cat 2::Sub 1"), slug.eq("cat2::sub1"), crates_cnt.eq(4), ), ( category.eq("Cat 2::Sub 2"), slug.eq("cat2::sub2"), crates_cnt.eq(5), ), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(6)), ])` $DIR/src/models/category.rs: `.execute(conn)` $DIR/src/models/category.rs: `.into_iter()` $DIR/src/models/category.rs: `.map(|c| (c.category, c.crates_cnt))` $DIR/src/models/category.rs: `.collect::>()` $DIR/src/models/category.rs: `.into_iter()` $DIR/src/models/category.rs: `.map(|c| (c.category, c.crates_cnt))` $DIR/src/models/category.rs: `.collect::>()` $DIR/src/models/category.rs: `.values(&vec![ (category.eq("Cat 1"), slug.eq("cat1"), crates_cnt.eq(1)), ( category.eq("Cat 1::sub1"), slug.eq("cat1::sub1"), crates_cnt.eq(2), ), ( category.eq("Cat 1::sub2"), slug.eq("cat1::sub2"), crates_cnt.eq(2), ), ( category.eq("Cat 1::sub1::subsub1"), slug.eq("cat1::sub1::subsub1"), crates_cnt.eq(2), ), (category.eq("Cat 2"), slug.eq("cat2"), crates_cnt.eq(3)), ( category.eq("Cat 2::Sub 1"), slug.eq("cat2::sub1"), crates_cnt.eq(4), ), ( category.eq("Cat 2::Sub 2"), slug.eq("cat2::sub2"), crates_cnt.eq(5), ), (category.eq("Cat 3"), slug.eq("cat3"), crates_cnt.eq(200)), ])` $DIR/src/models/category.rs: `.execute(conn)` $DIR/src/models/category.rs: `.first(conn)` $DIR/src/models/category.rs: `.subcategories(conn)` $DIR/src/models/category.rs: `.parent_categories(conn)` $DIR/src/models/keyword.rs: `diesel::insert_into(keywords::table) .values(keywords::keyword.eq("NO")) .execute(conn) .unwrap();` $DIR/src/models/keyword.rs: `.values(keywords::keyword.eq("NO"))` $DIR/src/models/keyword.rs: `.eq("NO")` $DIR/src/models/keyword.rs: `.execute(conn)` $DIR/src/models/token/scopes.rs: `assert(EndpointScope::ChangeOwners, "\"change-owners\"");` $DIR/src/models/token/scopes.rs: `assert(EndpointScope::PublishNew, "\"publish-new\"");` $DIR/src/models/token/scopes.rs: `assert(EndpointScope::PublishUpdate, "\"publish-update\"");` $DIR/src/models/token/scopes.rs: `assert("foo", "\"foo\"");` $DIR/src/models/token/scopes.rs: `assert("foo*", "\"foo*\"");` $DIR/src/models/token/scopes.rs: `assert("f*", "\"f*\"");` $DIR/src/models/token/scopes.rs: `assert("*", "\"*\"");` $DIR/src/models/token/scopes.rs: `assert("foo-bar", "\"foo-bar\"");` $DIR/src/models/token/scopes.rs: `assert("foo_bar", "\"foo_bar\"");` $DIR/src/models/token/scopes.rs: `assert_ok!(CrateScope::try_from("foo"));` $DIR/src/models/token/scopes.rs: `assert_ok!(CrateScope::try_from("foo*"));` $DIR/src/models/token/scopes.rs: `assert_ok!(CrateScope::try_from("f*"));` $DIR/src/models/token/scopes.rs: `assert_ok!(CrateScope::try_from("*"));` $DIR/src/models/token/scopes.rs: `assert_err!(CrateScope::try_from("te*st"));` $DIR/src/models/token/scopes.rs: `assert_ok!(CrateScope::try_from("foo-bar"));` $DIR/src/models/token/scopes.rs: `assert_ok!(CrateScope::try_from("foo_bar"));` $DIR/src/models/token/scopes.rs: `assert_err!(CrateScope::try_from(""));` $DIR/src/models/token.rs: `assert_some!(json .as_str() .find(r#""created_at":"2017-01-06T14:23:11+00:00""#));` $DIR/src/models/token.rs: `.and_hms_opt(14, 23, 11)` $DIR/src/models/token.rs: `.and_hms_opt(14, 23, 12)` $DIR/src/rate_limiter.rs: `rate_limiter.insert( *action, RateLimiterConfig { rate: Duration::from_secs(action.default_rate_seconds()), burst: action.default_burst(), }, );` $DIR/src/rate_limiter.rs: `last_refill_times.push(bucket.last_refill);` $DIR/src/rate_limiter.rs: `expected_last_refill_times.push(publish_time);` $DIR/src/rate_limiter.rs: `last_refill_times.push(bucket.last_refill);` $DIR/src/rate_limiter.rs: `expected_last_refill_times.push(publish_time);` $DIR/src/rate_limiter.rs: `last_refill_times.push(bucket.last_refill);` $DIR/src/rate_limiter.rs: `expected_last_refill_times.push(publish_time);` $DIR/src/rate_limiter.rs: `config.insert( LimitedAction::PublishNew, RateLimiterConfig { rate: Duration::from_secs(1), burst: 10, }, );` $DIR/src/rate_limiter.rs: `config.insert( LimitedAction::YankUnyank, RateLimiterConfig { rate: Duration::from_secs(1), burst: 20, }, );` $DIR/src/rate_limiter.rs: `diesel::insert_into(publish_rate_overrides::table) .values(( publish_rate_overrides::user_id.eq(user_id), publish_rate_overrides::action.eq(LimitedAction::PublishNew), publish_rate_overrides::burst.eq(20), )) .execute(conn)?;` $DIR/src/rate_limiter.rs: `diesel::insert_into(publish_rate_overrides::table) .values(( publish_rate_overrides::user_id.eq(user_id), publish_rate_overrides::action.eq(LimitedAction::PublishNew), publish_rate_overrides::burst.eq(20), publish_rate_overrides::expires_at.eq(now + chrono::Duration::days(30)), )) .execute(conn)?;` $DIR/src/rate_limiter.rs: `diesel::update(publish_rate_overrides::table) .set(publish_rate_overrides::expires_at.eq(now - chrono::Duration::days(30))) .filter(publish_rate_overrides::user_id.eq(user_id)) .execute(conn)?;` $DIR/src/rate_limiter.rs: `config.insert( action, RateLimiterConfig { rate: Duration::from_secs(1), burst: 10, }, );` $DIR/src/rate_limiter.rs: `diesel::insert_into(publish_rate_overrides::table) .values(( publish_rate_overrides::user_id.eq(user_id), publish_rate_overrides::action.eq(LimitedAction::PublishNew), publish_rate_overrides::burst.eq(20), )) .execute(conn)?;` $DIR/src/rate_limiter.rs: `.insert( *action, RateLimiterConfig { rate: Duration::from_secs(action.default_rate_seconds()), burst: action.default_burst(), }, )` $DIR/src/rate_limiter.rs: `.default_rate_seconds()` $DIR/src/rate_limiter.rs: `.default_burst()` $DIR/src/rate_limiter.rs: `.take_token(user_id, action, publish_time, conn)` $DIR/src/rate_limiter.rs: `.push(bucket.last_refill)` $DIR/src/rate_limiter.rs: `.push(publish_time)` $DIR/src/rate_limiter.rs: `.take_token(user_id, action, publish_time, conn)` $DIR/src/rate_limiter.rs: `.push(bucket.last_refill)` $DIR/src/rate_limiter.rs: `.push(publish_time)` $DIR/src/rate_limiter.rs: `.take_token(user_id, action, publish_time, conn)` $DIR/src/rate_limiter.rs: `.push(bucket.last_refill)` $DIR/src/rate_limiter.rs: `.push(publish_time)` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token( new_user(conn, "user1")?, LimitedAction::PublishNew, now, conn, )` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token( new_user(conn, "user2")?, LimitedAction::PublishNew, now, conn, )` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, refill_time, conn)` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, refill_time, conn)` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token( user_id, LimitedAction::PublishNew, now + chrono::Duration::milliseconds(250), conn, )` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, refill_time, conn)` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, refill_time, conn)` $DIR/src/rate_limiter.rs: `.insert( LimitedAction::PublishNew, RateLimiterConfig { rate: Duration::from_secs(1), burst: 10, }, )` $DIR/src/rate_limiter.rs: `.insert( LimitedAction::YankUnyank, RateLimiterConfig { rate: Duration::from_secs(1), burst: 20, }, )` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.values(( publish_rate_overrides::user_id.eq(user_id), publish_rate_overrides::action.eq(LimitedAction::PublishNew), publish_rate_overrides::burst.eq(20), ))` $DIR/src/rate_limiter.rs: `.eq(user_id)` $DIR/src/rate_limiter.rs: `.eq(LimitedAction::PublishNew)` $DIR/src/rate_limiter.rs: `.eq(20)` $DIR/src/rate_limiter.rs: `.execute(conn)` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.take_token(other_user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.create()` $DIR/src/rate_limiter.rs: `.values(( publish_rate_overrides::user_id.eq(user_id), publish_rate_overrides::action.eq(LimitedAction::PublishNew), publish_rate_overrides::burst.eq(20), publish_rate_overrides::expires_at.eq(now + chrono::Duration::days(30)), ))` $DIR/src/rate_limiter.rs: `.eq(user_id)` $DIR/src/rate_limiter.rs: `.eq(LimitedAction::PublishNew)` $DIR/src/rate_limiter.rs: `.eq(20)` $DIR/src/rate_limiter.rs: `.eq(now + chrono::Duration::days(30))` $DIR/src/rate_limiter.rs: `.execute(conn)` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.take_token(other_user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.set(publish_rate_overrides::expires_at.eq(now - chrono::Duration::days(30)))` $DIR/src/rate_limiter.rs: `.eq(now - chrono::Duration::days(30))` $DIR/src/rate_limiter.rs: `.filter(publish_rate_overrides::user_id.eq(user_id))` $DIR/src/rate_limiter.rs: `.eq(user_id)` $DIR/src/rate_limiter.rs: `.execute(conn)` $DIR/src/rate_limiter.rs: `.take_token(user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.take_token(other_user_id, LimitedAction::PublishNew, now, conn)` $DIR/src/rate_limiter.rs: `.insert( action, RateLimiterConfig { rate: Duration::from_secs(1), burst: 10, }, )` $DIR/src/rate_limiter.rs: `.values(( publish_rate_overrides::user_id.eq(user_id), publish_rate_overrides::action.eq(LimitedAction::PublishNew), publish_rate_overrides::burst.eq(20), ))` $DIR/src/rate_limiter.rs: `.eq(user_id)` $DIR/src/rate_limiter.rs: `.eq(LimitedAction::PublishNew)` $DIR/src/rate_limiter.rs: `.eq(20)` $DIR/src/rate_limiter.rs: `.execute(conn)` $DIR/src/router.rs: `.parse::()` $DIR/src/router.rs: `.map_err(|err| err.chain(internal("middle error")))` $DIR/src/router.rs: `.chain(internal("middle error"))` $DIR/src/router.rs: `.map_err(|err| err.chain(bad_request("outer user facing error")))` $DIR/src/router.rs: `.chain(bad_request("outer user facing error"))` $DIR/src/router.rs: `.into_response()` $DIR/src/storage.rs: `config.cdn_prefix = Some("static.crates.io".to_string());` $DIR/src/storage.rs: `.delete_all_crate_files("foo")` $DIR/src/storage.rs: `.delete_all_readmes("foo")` $DIR/src/storage.rs: `.delete_crate_file("foo", "1.2.3")` $DIR/src/storage.rs: `.delete_readme("foo", "1.2.3")` $DIR/src/storage.rs: `.upload_crate_file("foo", "1.2.3", Bytes::new())` $DIR/src/storage.rs: `.upload_crate_file("foo", "2.0.0+foo", Bytes::new())` $DIR/src/storage.rs: `.upload_readme("foo", "1.2.3", bytes.clone())` $DIR/src/storage.rs: `.upload_readme("foo", "2.0.0+foo", bytes)` $DIR/src/storage.rs: `.sync_index("foo", Some(content))` $DIR/src/storage.rs: `.sync_index("foo", None)` $DIR/src/storage.rs: `.upload_db_dump(target, file.path())` $DIR/src/storage.rs: `.path()` $DIR/src/swirl/runner.rs: `runner.get_single_job(dummy_sender(), move |job, _| { fetch_barrier.0.wait(); // Tell thread 2 it can lock its job assert_eq!(first_job_id, job.id); return_barrier.0.wait(); // Wait for thread 2 to lock its job Ok(()) });` $DIR/src/swirl/runner.rs: `fetch_barrier.0.wait();` $DIR/src/swirl/runner.rs: `return_barrier.0.wait();` $DIR/src/swirl/runner.rs: `fetch_barrier2.0.wait();` $DIR/src/swirl/runner.rs: `runner.get_single_job(dummy_sender(), move |job, _| { assert_eq!(second_job_id, job.id); return_barrier2.0.wait(); // Tell thread 1 it can unlock its job Ok(()) });` $DIR/src/swirl/runner.rs: `return_barrier2.0.wait();` $DIR/src/swirl/runner.rs: `create_dummy_job(&runner);` $DIR/src/swirl/runner.rs: `runner.get_single_job(dummy_sender(), |_, _| Ok(()));` $DIR/src/swirl/runner.rs: `runner.wait_for_jobs().unwrap();` $DIR/src/swirl/runner.rs: `create_dummy_job(&runner);` $DIR/src/swirl/runner.rs: `runner.get_single_job(dummy_sender(), move |_, state| { state.conn.transaction(|_| { barrier.0.wait(); // The job should go back into the queue after a panic panic!(); }) });` $DIR/src/swirl/runner.rs: `barrier.0.wait();` $DIR/src/swirl/runner.rs: `barrier2.0.wait();` $DIR/src/swirl/runner.rs: `runner.get_single_job(dummy_sender(), |_, _| panic!());` $DIR/src/swirl/runner.rs: `runner.wait_for_jobs().unwrap();` $DIR/src/swirl/runner.rs: `.get_single_job(dummy_sender(), move |job, _| { fetch_barrier.0.wait(); // Tell thread 2 it can lock its job assert_eq!(first_job_id, job.id); return_barrier.0.wait(); // Wait for thread 2 to lock its job Ok(()) })` $DIR/src/swirl/runner.rs: `.wait()` $DIR/src/swirl/runner.rs: `.wait()` $DIR/src/swirl/runner.rs: `.wait()` $DIR/src/swirl/runner.rs: `.get_single_job(dummy_sender(), move |job, _| { assert_eq!(second_job_id, job.id); return_barrier2.0.wait(); // Tell thread 1 it can unlock its job Ok(()) })` $DIR/src/swirl/runner.rs: `.wait()` $DIR/src/swirl/runner.rs: `.wait_for_jobs()` $DIR/src/swirl/runner.rs: `.get_single_job(dummy_sender(), |_, _| Ok(()))` $DIR/src/swirl/runner.rs: `.wait_for_jobs()` $DIR/src/swirl/runner.rs: `.count()` $DIR/src/swirl/runner.rs: `.get_result(&mut *runner.connection().unwrap())` $DIR/src/swirl/runner.rs: `.connection()` $DIR/src/swirl/runner.rs: `.get_single_job(dummy_sender(), move |_, state| { state.conn.transaction(|_| { barrier.0.wait(); // The job should go back into the queue after a panic panic!(); }) })` $DIR/src/swirl/runner.rs: `.wait()` $DIR/src/swirl/runner.rs: `.connection()` $DIR/src/swirl/runner.rs: `.wait()` $DIR/src/swirl/runner.rs: `.select(id)` $DIR/src/swirl/runner.rs: `.filter(retries.eq(0))` $DIR/src/swirl/runner.rs: `.eq(0)` $DIR/src/swirl/runner.rs: `.for_update()` $DIR/src/swirl/runner.rs: `.load::(conn)` $DIR/src/swirl/runner.rs: `.select(id)` $DIR/src/swirl/runner.rs: `.for_update()` $DIR/src/swirl/runner.rs: `.load::(conn)` $DIR/src/swirl/runner.rs: `.wait_for_jobs()` $DIR/src/swirl/runner.rs: `.get_single_job(dummy_sender(), |_, _| panic!())` $DIR/src/swirl/runner.rs: `.wait_for_jobs()` $DIR/src/swirl/runner.rs: `.find(job_id)` $DIR/src/swirl/runner.rs: `.select(retries)` $DIR/src/swirl/runner.rs: `.for_update()` $DIR/src/swirl/runner.rs: `.first::(&mut *runner.connection().unwrap())` $DIR/src/swirl/runner.rs: `.connection()` $DIR/src/tests/account_lock.rs: `lock_account(&app, user.as_model().id, None);` $DIR/src/tests/account_lock.rs: `lock_account(&app, user.as_model().id, Some(until));` $DIR/src/tests/account_lock.rs: `lock_account(&app, user.as_model().id, Some(until));` $DIR/src/tests/account_lock.rs: `.with_user()` $DIR/src/tests/account_lock.rs: `.as_model()` $DIR/src/tests/account_lock.rs: `.get::<()>(URL)` $DIR/src/tests/account_lock.rs: `.naive_utc()` $DIR/src/tests/account_lock.rs: `.with_user()` $DIR/src/tests/account_lock.rs: `.as_model()` $DIR/src/tests/account_lock.rs: `.format("%Y-%m-%d at %H:%M:%S UTC")` $DIR/src/tests/account_lock.rs: `.get::<()>(URL)` $DIR/src/tests/account_lock.rs: `.naive_utc()` $DIR/src/tests/account_lock.rs: `.with_user()` $DIR/src/tests/account_lock.rs: `.as_model()` $DIR/src/tests/account_lock.rs: `.get::(URL)` $DIR/src/tests/all.rs: `.empty()` $DIR/src/tests/all.rs: `.as_inner()` $DIR/src/tests/all.rs: `.db_write()` $DIR/src/tests/all.rs: `.db_write()` $DIR/src/tests/authentication.rs: `request.header(header::AUTHORIZATION, "cio1tkfake-token");` $DIR/src/tests/authentication.rs: `request.header(header::COOKIE, &cookie);` $DIR/src/tests/authentication.rs: `.empty()` $DIR/src/tests/authentication.rs: `.get(URL)` $DIR/src/tests/authentication.rs: `.empty()` $DIR/src/tests/authentication.rs: `.request_builder(Method::GET, URL)` $DIR/src/tests/authentication.rs: `.header(header::AUTHORIZATION, "cio1tkfake-token")` $DIR/src/tests/authentication.rs: `.run(request)` $DIR/src/tests/authentication.rs: `.empty()` $DIR/src/tests/authentication.rs: `.as_inner()` $DIR/src/tests/authentication.rs: `.session_key()` $DIR/src/tests/authentication.rs: `.request_builder(Method::GET, URL)` $DIR/src/tests/authentication.rs: `.header(header::COOKIE, &cookie)` $DIR/src/tests/authentication.rs: `.run::<()>(request)` $DIR/src/tests/blocked_routes.rs: `config.blocked_routes.clear();` $DIR/src/tests/blocked_routes.rs: `app.db(|conn| { CrateBuilder::new("foo", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); });` $DIR/src/tests/blocked_routes.rs: `CrateBuilder::new("foo", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/blocked_routes.rs: `config.blocked_routes.clear();` $DIR/src/tests/blocked_routes.rs: `config .blocked_routes .insert("/api/v1/crates/:crate_id/:version/download".into());` $DIR/src/tests/blocked_routes.rs: `app.db(|conn| { CrateBuilder::new("foo", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); });` $DIR/src/tests/blocked_routes.rs: `CrateBuilder::new("foo", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/blocked_routes.rs: `.with_config(|config| { config.blocked_routes.clear(); })` $DIR/src/tests/blocked_routes.rs: `.blocked_routes.clear()` $DIR/src/tests/blocked_routes.rs: `.with_user()` $DIR/src/tests/blocked_routes.rs: `.db(|conn| { CrateBuilder::new("foo", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); })` $DIR/src/tests/blocked_routes.rs: `.as_model()` $DIR/src/tests/blocked_routes.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/blocked_routes.rs: `.expect_build(conn)` $DIR/src/tests/blocked_routes.rs: `.get::<()>("/api/v1/crates/foo/1.0.0/download")` $DIR/src/tests/blocked_routes.rs: `.status()` $DIR/src/tests/blocked_routes.rs: `.with_config(|config| { config.blocked_routes.clear(); config .blocked_routes .insert("/api/v1/crates/:crate_id/:version/download".into()); })` $DIR/src/tests/blocked_routes.rs: `.blocked_routes.clear()` $DIR/src/tests/blocked_routes.rs: `.blocked_routes .insert("/api/v1/crates/:crate_id/:version/download".into())` $DIR/src/tests/blocked_routes.rs: `.into()` $DIR/src/tests/blocked_routes.rs: `.with_user()` $DIR/src/tests/blocked_routes.rs: `.db(|conn| { CrateBuilder::new("foo", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); })` $DIR/src/tests/blocked_routes.rs: `.as_model()` $DIR/src/tests/blocked_routes.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/blocked_routes.rs: `.expect_build(conn)` $DIR/src/tests/blocked_routes.rs: `.get::<()>("/api/v1/crates/foo/1.0.0/download")` $DIR/src/tests/blocked_routes.rs: `.status()` $DIR/src/tests/categories.rs: `::crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, conn).unwrap();` $DIR/src/tests/categories.rs: `::crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, conn).unwrap();` $DIR/src/tests/categories.rs: `::crates_io::boot::categories::sync_with_connection(ALGORITHMS, conn).unwrap();` $DIR/src/tests/categories.rs: `::crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_SUCH, conn).unwrap();` $DIR/src/tests/categories.rs: `::crates_io::boot::categories::sync_with_connection(ALGORITHMS_AND_ANOTHER, conn).unwrap();` $DIR/src/tests/dump_db.rs: `crates_io::util::tracing::init_for_test();` $DIR/src/tests/dump_db.rs: `directory.populate(&database_url).unwrap();` $DIR/src/tests/dump_db.rs: `.populate(&database_url)` $DIR/src/tests/dump_db.rs: `.export_dir.join("import.sql")` $DIR/src/tests/dump_db.rs: `.database_url()` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); });` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let hashed_token = HashedToken::hash("some_token"); diesel::update(api_tokens::table) .set(api_tokens::token.eq(hashed_token)) .execute(conn) .unwrap(); });` $DIR/src/tests/github_secret_scanning.rs: `diesel::update(api_tokens::table) .set(api_tokens::token.eq(hashed_token)) .execute(conn) .unwrap();` $DIR/src/tests/github_secret_scanning.rs: `*request.body_mut() = GITHUB_ALERT.into();` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER);` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE);` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 0); let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(true)) .load(conn)); assert_eq!(tokens.len(), 1); });` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); });` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let hashed_token = HashedToken::hash("some_token"); diesel::update(api_tokens::table) .set(( api_tokens::token.eq(hashed_token), api_tokens::revoked.eq(true), )) .execute(conn) .unwrap(); });` $DIR/src/tests/github_secret_scanning.rs: `diesel::update(api_tokens::table) .set(( api_tokens::token.eq(hashed_token), api_tokens::revoked.eq(true), )) .execute(conn) .unwrap();` $DIR/src/tests/github_secret_scanning.rs: `*request.body_mut() = GITHUB_ALERT.into();` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER);` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE);` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 0); let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(true)) .load(conn)); assert_eq!(tokens.len(), 1); });` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); });` $DIR/src/tests/github_secret_scanning.rs: `*request.body_mut() = GITHUB_ALERT.into();` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER);` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE);` $DIR/src/tests/github_secret_scanning.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); });` $DIR/src/tests/github_secret_scanning.rs: `*request.body_mut() = GITHUB_ALERT.into();` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER);` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE);` $DIR/src/tests/github_secret_scanning.rs: `*request.body_mut() = GITHUB_ALERT.into();` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER);` $DIR/src/tests/github_secret_scanning.rs: `*request.body_mut() = GITHUB_ALERT.into();` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER);` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-SIGNATURE", "bad signature");` $DIR/src/tests/github_secret_scanning.rs: `*request.body_mut() = GITHUB_ALERT.into();` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER);` $DIR/src/tests/github_secret_scanning.rs: `request.header("GITHUB-PUBLIC-KEY-SIGNATURE", "YmFkIHNpZ25hdHVyZQ==");` $DIR/src/tests/github_secret_scanning.rs: `.with_token()` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); })` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let hashed_token = HashedToken::hash("some_token"); diesel::update(api_tokens::table) .set(api_tokens::token.eq(hashed_token)) .execute(conn) .unwrap(); })` $DIR/src/tests/github_secret_scanning.rs: `.set(api_tokens::token.eq(hashed_token))` $DIR/src/tests/github_secret_scanning.rs: `.eq(hashed_token)` $DIR/src/tests/github_secret_scanning.rs: `.execute(conn)` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.body_mut()` $DIR/src/tests/github_secret_scanning.rs: `.into()` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER)` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE)` $DIR/src/tests/github_secret_scanning.rs: `.run::>(request)` $DIR/src/tests/github_secret_scanning.rs: `.good()` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 0); let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(true)) .load(conn)); assert_eq!(tokens.len(), 1); })` $DIR/src/tests/github_secret_scanning.rs: `.with_token()` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); })` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let hashed_token = HashedToken::hash("some_token"); diesel::update(api_tokens::table) .set(( api_tokens::token.eq(hashed_token), api_tokens::revoked.eq(true), )) .execute(conn) .unwrap(); })` $DIR/src/tests/github_secret_scanning.rs: `.set(( api_tokens::token.eq(hashed_token), api_tokens::revoked.eq(true), ))` $DIR/src/tests/github_secret_scanning.rs: `.eq(hashed_token)` $DIR/src/tests/github_secret_scanning.rs: `.eq(true)` $DIR/src/tests/github_secret_scanning.rs: `.execute(conn)` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.body_mut()` $DIR/src/tests/github_secret_scanning.rs: `.into()` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER)` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE)` $DIR/src/tests/github_secret_scanning.rs: `.run::>(request)` $DIR/src/tests/github_secret_scanning.rs: `.good()` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 0); let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(true)) .load(conn)); assert_eq!(tokens.len(), 1); })` $DIR/src/tests/github_secret_scanning.rs: `.with_token()` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); })` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.body_mut()` $DIR/src/tests/github_secret_scanning.rs: `.into()` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER)` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE)` $DIR/src/tests/github_secret_scanning.rs: `.run::>(request)` $DIR/src/tests/github_secret_scanning.rs: `.good()` $DIR/src/tests/github_secret_scanning.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); })` $DIR/src/tests/github_secret_scanning.rs: `.empty()` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.run::<()>(request)` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.body_mut()` $DIR/src/tests/github_secret_scanning.rs: `.into()` $DIR/src/tests/github_secret_scanning.rs: `.run::<()>(request)` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER)` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-SIGNATURE", GITHUB_PUBLIC_KEY_SIGNATURE)` $DIR/src/tests/github_secret_scanning.rs: `.run::<()>(request)` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.body_mut()` $DIR/src/tests/github_secret_scanning.rs: `.into()` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER)` $DIR/src/tests/github_secret_scanning.rs: `.run::<()>(request)` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.body_mut()` $DIR/src/tests/github_secret_scanning.rs: `.into()` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER)` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-SIGNATURE", "bad signature")` $DIR/src/tests/github_secret_scanning.rs: `.run::<()>(request)` $DIR/src/tests/github_secret_scanning.rs: `.post_request(URL)` $DIR/src/tests/github_secret_scanning.rs: `.body_mut()` $DIR/src/tests/github_secret_scanning.rs: `.into()` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-IDENTIFIER", GITHUB_PUBLIC_KEY_IDENTIFIER)` $DIR/src/tests/github_secret_scanning.rs: `.header("GITHUB-PUBLIC-KEY-SIGNATURE", "YmFkIHNpZ25hdHVyZQ==")` $DIR/src/tests/github_secret_scanning.rs: `.run::<()>(request)` $DIR/src/tests/krate/following.rs: `app.db(|conn| { CrateBuilder::new("foo_following", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/following.rs: `CrateBuilder::new("foo_following", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/following.rs: `follow();` $DIR/src/tests/krate/following.rs: `follow();` $DIR/src/tests/krate/following.rs: `unfollow();` $DIR/src/tests/krate/following.rs: `unfollow();` $DIR/src/tests/krate/following.rs: `app.db(|conn| { CrateBuilder::new(crate_to_follow, api_token.user_id).expect_build(conn); CrateBuilder::new(crate_not_followed, api_token.user_id).expect_build(conn); });` $DIR/src/tests/krate/following.rs: `CrateBuilder::new(crate_to_follow, api_token.user_id).expect_build(conn);` $DIR/src/tests/krate/following.rs: `CrateBuilder::new(crate_not_followed, api_token.user_id).expect_build(conn);` $DIR/src/tests/krate/following.rs: `follow(crate_to_follow);` $DIR/src/tests/krate/following.rs: `.with_user()` $DIR/src/tests/krate/following.rs: `.db(|conn| { CrateBuilder::new("foo_following", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/following.rs: `.as_model()` $DIR/src/tests/krate/following.rs: `.expect_build(conn)` $DIR/src/tests/krate/following.rs: `.get::("/api/v1/crates/foo_following/following")` $DIR/src/tests/krate/following.rs: `.with_token()` $DIR/src/tests/krate/following.rs: `.as_model()` $DIR/src/tests/krate/following.rs: `.db(|conn| { CrateBuilder::new(crate_to_follow, api_token.user_id).expect_build(conn); CrateBuilder::new(crate_not_followed, api_token.user_id).expect_build(conn); })` $DIR/src/tests/krate/following.rs: `.expect_build(conn)` $DIR/src/tests/krate/following.rs: `.expect_build(conn)` $DIR/src/tests/krate/following.rs: `.get::(&format!("/api/v1/crates/{crate_name}/following"))` $DIR/src/tests/krate/following.rs: `.search("following=1")` $DIR/src/tests/krate/publish/audit_action.rs: `app.db(|conn| assert!(VersionOwnerAction::all(conn).unwrap().is_empty()));` $DIR/src/tests/krate/publish/audit_action.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/audit_action.rs: `.with_token()` $DIR/src/tests/krate/publish/audit_action.rs: `.db(|conn| assert!(VersionOwnerAction::all(conn).unwrap().is_empty()))` $DIR/src/tests/krate/publish/audit_action.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/audit_action.rs: `.good()` $DIR/src/tests/krate/publish/audit_action.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/krate/publish/auth.rs: `app.db(|conn| { diesel::update(api_tokens::table) .set(api_tokens::token.eq(b"bad" as &[u8])) .execute(conn) .unwrap(); });` $DIR/src/tests/krate/publish/auth.rs: `diesel::update(api_tokens::table) .set(api_tokens::token.eq(b"bad" as &[u8])) .execute(conn) .unwrap();` $DIR/src/tests/krate/publish/auth.rs: `app.db(|conn| { // Create the foo_wrong crate with one user CrateBuilder::new("foo_wrong", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/auth.rs: `CrateBuilder::new("foo_wrong", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/auth.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/auth.rs: `.with_token()` $DIR/src/tests/krate/publish/auth.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/auth.rs: `.db(|conn| { diesel::update(api_tokens::table) .set(api_tokens::token.eq(b"bad" as &[u8])) .execute(conn) .unwrap(); })` $DIR/src/tests/krate/publish/auth.rs: `.set(api_tokens::token.eq(b"bad" as &[u8]))` $DIR/src/tests/krate/publish/auth.rs: `.eq(b"bad" as &[u8])` $DIR/src/tests/krate/publish/auth.rs: `.execute(conn)` $DIR/src/tests/krate/publish/auth.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/auth.rs: `.with_user()` $DIR/src/tests/krate/publish/auth.rs: `.db(|conn| { // Create the foo_wrong crate with one user CrateBuilder::new("foo_wrong", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/auth.rs: `.as_model()` $DIR/src/tests/krate/publish/auth.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/auth.rs: `.db_new_user("another")` $DIR/src/tests/krate/publish/auth.rs: `.db_new_token("bar")` $DIR/src/tests/krate/publish/auth.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/basics.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/basics.rs: `assert_json_snapshot!(crates);` $DIR/src/tests/krate/publish/basics.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/basics.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/basics.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/basics.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/basics.rs: `assert_json_snapshot!(crates);` $DIR/src/tests/krate/publish/basics.rs: `app.db(|conn| { // Insert a crate directly into the database and then we'll try to publish the same version CrateBuilder::new("foo_dupe", user.as_model().id) .version("1.0.0") .expect_build(conn); });` $DIR/src/tests/krate/publish/basics.rs: `CrateBuilder::new("foo_dupe", user.as_model().id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/krate/publish/basics.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/basics.rs: `.with_user()` $DIR/src/tests/krate/publish/basics.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/basics.rs: `.crates_from_index_head("foo_new")` $DIR/src/tests/krate/publish/basics.rs: `.select(versions_published_by::email)` $DIR/src/tests/krate/publish/basics.rs: `.first(conn)` $DIR/src/tests/krate/publish/basics.rs: `.with_token()` $DIR/src/tests/krate/publish/basics.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/basics.rs: `.with_token()` $DIR/src/tests/krate/publish/basics.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/basics.rs: `.with_token()` $DIR/src/tests/krate/publish/basics.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/basics.rs: `.good()` $DIR/src/tests/krate/publish/basics.rs: `.description("2.0.0 description")` $DIR/src/tests/krate/publish/basics.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/basics.rs: `.crates_from_index_head("foo_twice")` $DIR/src/tests/krate/publish/basics.rs: `.with_token()` $DIR/src/tests/krate/publish/basics.rs: `.db(|conn| { // Insert a crate directly into the database and then we'll try to publish the same version CrateBuilder::new("foo_dupe", user.as_model().id) .version("1.0.0") .expect_build(conn); })` $DIR/src/tests/krate/publish/basics.rs: `.as_model()` $DIR/src/tests/krate/publish/basics.rs: `.version("1.0.0")` $DIR/src/tests/krate/publish/basics.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/basics.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/categories.rs: `app.db(|conn| { new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap(); });` $DIR/src/tests/krate/publish/categories.rs: `new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap();` $DIR/src/tests/krate/publish/categories.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/categories.rs: `.with_token()` $DIR/src/tests/krate/publish/categories.rs: `.db(|conn| { new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap(); })` $DIR/src/tests/krate/publish/categories.rs: `.create_or_update(conn)` $DIR/src/tests/krate/publish/categories.rs: `.category("cat1")` $DIR/src/tests/krate/publish/categories.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/categories.rs: `.with_token()` $DIR/src/tests/krate/publish/categories.rs: `.category("bar")` $DIR/src/tests/krate/publish/categories.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/categories.rs: `.with_token()` $DIR/src/tests/krate/publish/categories.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0") .category("one") .category("two") .category("three") .category("four") .category("five") .category("six"), )` $DIR/src/tests/krate/publish/categories.rs: `.category("one")` $DIR/src/tests/krate/publish/categories.rs: `.category("two")` $DIR/src/tests/krate/publish/categories.rs: `.category("three")` $DIR/src/tests/krate/publish/categories.rs: `.category("four")` $DIR/src/tests/krate/publish/categories.rs: `.category("five")` $DIR/src/tests/krate/publish/categories.rs: `.category("six")` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { // Insert a crate directly into the database so that new-krate can depend on it CrateBuilder::new("package-name", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("package-name", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { // Insert a crate directly into the database so that new-krate can depend on it CrateBuilder::new("package-name", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("package-name", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { // Insert a crate directly into the database so that new-krate can depend on it CrateBuilder::new("package-name", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("package-name", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { // Insert a crate directly into the database so that new_dep can depend on it // The name choice of `foo-dep` is important! It has the property of // name != canon_crate_name(name) and is a regression test for // https://github.com/rust-lang/crates.io/issues/651 CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { // Insert a crate directly into the database so that new_dep can depend on it // The name choice of `foo-dep` is important! It has the property of // name != canon_crate_name(name) and is a regression test for // https://github.com/rust-lang/crates.io/issues/651 CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { // Insert a crate directly into the database so that new_wild can depend on it CrateBuilder::new("foo_wild", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("foo_wild", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `app.db(|conn| { // Insert crates directly into the database so that two-deps can depend on it CrateBuilder::new("dep-a", user.as_model().id).expect_build(conn); CrateBuilder::new("dep-b", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("dep-a", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `CrateBuilder::new("dep-b", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/dependencies.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/dependencies.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0").dependency(DependencyBuilder::new("🦀")), )` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(DependencyBuilder::new("🦀"))` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { // Insert a crate directly into the database so that new-krate can depend on it CrateBuilder::new("package-name", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.rename("my-name")` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.good()` $DIR/src/tests/krate/publish/dependencies.rs: `.crates_from_index_head("new-krate")` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { // Insert a crate directly into the database so that new-krate can depend on it CrateBuilder::new("package-name", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate( PublishBuilder::new("new-krate", "1.0.0") .dependency(DependencyBuilder::new("package-name").rename("💩")), )` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(DependencyBuilder::new("package-name").rename("💩"))` $DIR/src/tests/krate/publish/dependencies.rs: `.rename("💩")` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { // Insert a crate directly into the database so that new-krate can depend on it CrateBuilder::new("package-name", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.rename("_my-name")` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.good()` $DIR/src/tests/krate/publish/dependencies.rs: `.crates_from_index_head("new-krate")` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { // Insert a crate directly into the database so that new_dep can depend on it // The name choice of `foo-dep` is important! It has the property of // name != canon_crate_name(name) and is a regression test for // https://github.com/rust-lang/crates.io/issues/651 CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.version_req("1.0.0")` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.good()` $DIR/src/tests/krate/publish/dependencies.rs: `.get::("/api/v1/crates/new_dep/1.0.0/dependencies")` $DIR/src/tests/krate/publish/dependencies.rs: `.good()` $DIR/src/tests/krate/publish/dependencies.rs: `.crates_from_index_head("new_dep")` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { // Insert a crate directly into the database so that new_dep can depend on it // The name choice of `foo-dep` is important! It has the property of // name != canon_crate_name(name) and is a regression test for // https://github.com/rust-lang/crates.io/issues/651 CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.version_req("broken")` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { CrateBuilder::new("foo-dep", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.registry("")` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.registry("https://server.example/path/to/registry")` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { // Insert a crate directly into the database so that new_wild can depend on it CrateBuilder::new("foo_wild", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.version_req("*")` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.db(|conn| { // Insert crates directly into the database so that two-deps can depend on it CrateBuilder::new("dep-a", user.as_model().id).expect_build(conn); CrateBuilder::new("dep-b", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.as_model()` $DIR/src/tests/krate/publish/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dep_b)` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(dep_a)` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/dependencies.rs: `.good()` $DIR/src/tests/krate/publish/dependencies.rs: `.crates_from_index_head("two-deps")` $DIR/src/tests/krate/publish/dependencies.rs: `.with_token()` $DIR/src/tests/krate/publish/dependencies.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0") .dependency(DependencyBuilder::new("bar").add_feature("🍺")), )` $DIR/src/tests/krate/publish/dependencies.rs: `.dependency(DependencyBuilder::new("bar").add_feature("🍺"))` $DIR/src/tests/krate/publish/dependencies.rs: `.add_feature("🍺")` $DIR/src/tests/krate/publish/emails.rs: `app.db(|conn| { delete(emails::table).execute(conn).unwrap(); });` $DIR/src/tests/krate/publish/emails.rs: `delete(emails::table).execute(conn).unwrap();` $DIR/src/tests/krate/publish/emails.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/emails.rs: `app.db(|conn| { update(emails::table) .set((emails::verified.eq(false),)) .execute(conn) .unwrap(); });` $DIR/src/tests/krate/publish/emails.rs: `update(emails::table) .set((emails::verified.eq(false),)) .execute(conn) .unwrap();` $DIR/src/tests/krate/publish/emails.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/emails.rs: `.with_token()` $DIR/src/tests/krate/publish/emails.rs: `.db(|conn| { delete(emails::table).execute(conn).unwrap(); })` $DIR/src/tests/krate/publish/emails.rs: `.execute(conn)` $DIR/src/tests/krate/publish/emails.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/emails.rs: `.with_token()` $DIR/src/tests/krate/publish/emails.rs: `.db(|conn| { update(emails::table) .set((emails::verified.eq(false),)) .execute(conn) .unwrap(); })` $DIR/src/tests/krate/publish/emails.rs: `.set((emails::verified.eq(false),))` $DIR/src/tests/krate/publish/emails.rs: `.eq(false)` $DIR/src/tests/krate/publish/emails.rs: `.execute(conn)` $DIR/src/tests/krate/publish/emails.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/features.rs: `app.db(|conn| { // Insert a crate directly into the database so that foo_new can depend on it CrateBuilder::new("bar", user.as_model().id).expect_build(conn); });` $DIR/src/tests/krate/publish/features.rs: `CrateBuilder::new("bar", user.as_model().id).expect_build(conn);` $DIR/src/tests/krate/publish/features.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/features.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/features.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/features.rs: `.with_token()` $DIR/src/tests/krate/publish/features.rs: `.db(|conn| { // Insert a crate directly into the database so that foo_new can depend on it CrateBuilder::new("bar", user.as_model().id).expect_build(conn); })` $DIR/src/tests/krate/publish/features.rs: `.as_model()` $DIR/src/tests/krate/publish/features.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/features.rs: `.dependency(dependency)` $DIR/src/tests/krate/publish/features.rs: `.feature("new_feat", &["dep:bar", "bar?/feat"])` $DIR/src/tests/krate/publish/features.rs: `.feature("old_feat", &[])` $DIR/src/tests/krate/publish/features.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/features.rs: `.good()` $DIR/src/tests/krate/publish/features.rs: `.crates_from_index_head("foo")` $DIR/src/tests/krate/publish/features.rs: `.with_token()` $DIR/src/tests/krate/publish/features.rs: `.feature("~foo", &[])` $DIR/src/tests/krate/publish/features.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/features.rs: `.with_token()` $DIR/src/tests/krate/publish/features.rs: `.feature("foo", &["!bar"])` $DIR/src/tests/krate/publish/features.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/git.rs: `app.upstream_index().create_empty_commit().unwrap();` $DIR/src/tests/krate/publish/git.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/git.rs: `.with_token()` $DIR/src/tests/krate/publish/git.rs: `.upstream_index()` $DIR/src/tests/krate/publish/git.rs: `.create_empty_commit()` $DIR/src/tests/krate/publish/git.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/git.rs: `.good()` $DIR/src/tests/krate/publish/inheritance.rs: `.with_token()` $DIR/src/tests/krate/publish/inheritance.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0") .custom_manifest("[package]\nname = \"foo\"\nversion.workspace = true\n"), )` $DIR/src/tests/krate/publish/inheritance.rs: `.custom_manifest("[package]\nname = \"foo\"\nversion.workspace = true\n")` $DIR/src/tests/krate/publish/inheritance.rs: `.with_token()` $DIR/src/tests/krate/publish/inheritance.rs: `.publish_crate(PublishBuilder::new("foo", "1.0.0").custom_manifest( "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n\n[dependencies]\nserde.workspace = true\n", ))` $DIR/src/tests/krate/publish/inheritance.rs: `.custom_manifest( "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n\n[dependencies]\nserde.workspace = true\n", )` $DIR/src/tests/krate/publish/keywords.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/keywords.rs: `.with_token()` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("c++")` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("crates-io_index")` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("1password")` $DIR/src/tests/krate/publish/keywords.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/keywords.rs: `.with_token()` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("super-long-keyword-name-oh-no")` $DIR/src/tests/krate/publish/keywords.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("?@?%")` $DIR/src/tests/krate/publish/keywords.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("áccênts")` $DIR/src/tests/krate/publish/keywords.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/keywords.rs: `.with_token()` $DIR/src/tests/krate/publish/keywords.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0") .keyword("one") .keyword("two") .keyword("three") .keyword("four") .keyword("five") .keyword("six"), )` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("one")` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("two")` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("three")` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("four")` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("five")` $DIR/src/tests/krate/publish/keywords.rs: `.keyword("six")` $DIR/src/tests/krate/publish/manifest.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate(PublishBuilder::new("foo", "1.0.0").custom_manifest( r#"[package] name = "foo" version = "1.0.0" description = "description" license = "MIT" rust-version = "1.69" readme = false"#, ))` $DIR/src/tests/krate/publish/manifest.rs: `.custom_manifest( r#"[package] name = "foo" version = "1.0.0" description = "description" license = "MIT" rust-version = "1.69" readme = false"#, )` $DIR/src/tests/krate/publish/manifest.rs: `.get::<()>("/api/v1/crates/foo/1.0.0")` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate(PublishBuilder::new("foo", "1.0.0").no_manifest())` $DIR/src/tests/krate/publish/manifest.rs: `.no_manifest()` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0") .add_file( "foo-1.0.0/CARGO.TOML", "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n", ) .no_manifest(), )` $DIR/src/tests/krate/publish/manifest.rs: `.add_file( "foo-1.0.0/CARGO.TOML", "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n", )` $DIR/src/tests/krate/publish/manifest.rs: `.no_manifest()` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0") .add_file( "foo-1.0.0/Cargo.toml", "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n", ) .add_file( "foo-1.0.0/cargo.toml", "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n", ) .no_manifest(), )` $DIR/src/tests/krate/publish/manifest.rs: `.add_file( "foo-1.0.0/Cargo.toml", "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n", )` $DIR/src/tests/krate/publish/manifest.rs: `.add_file( "foo-1.0.0/cargo.toml", "[package]\nname = \"foo\"\nversion = \"1.0.0\"\n", )` $DIR/src/tests/krate/publish/manifest.rs: `.no_manifest()` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate(PublishBuilder::new("foo", "1.0.0").custom_manifest(""))` $DIR/src/tests/krate/publish/manifest.rs: `.custom_manifest("")` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0").custom_manifest("[package]\nversion = \"1.0.0\""), )` $DIR/src/tests/krate/publish/manifest.rs: `.custom_manifest("[package]\nversion = \"1.0.0\"")` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0").custom_manifest("[package]\nname = \"foo\""), )` $DIR/src/tests/krate/publish/manifest.rs: `.custom_manifest("[package]\nname = \"foo\"")` $DIR/src/tests/krate/publish/manifest.rs: `.with_token()` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate(PublishBuilder::new("foo", "1.0.0").custom_manifest( "[package]\nname = \"foo\"\nversion = \"1.0.0\"\ndescription = \"description\"\nlicense = \"MIT\"\nrust-version = \"\"\n", ))` $DIR/src/tests/krate/publish/manifest.rs: `.custom_manifest( "[package]\nname = \"foo\"\nversion = \"1.0.0\"\ndescription = \"description\"\nlicense = \"MIT\"\nrust-version = \"\"\n", )` $DIR/src/tests/krate/publish/manifest.rs: `.publish_crate(PublishBuilder::new("foo", "1.0.0").custom_manifest( "[package]\nname = \"foo\"\nversion = \"1.0.0\"\ndescription = \"description\"\nlicense = \"MIT\"\nrust-version = \"1.0.0-beta.2\"\n", ))` $DIR/src/tests/krate/publish/manifest.rs: `.custom_manifest( "[package]\nname = \"foo\"\nversion = \"1.0.0\"\ndescription = \"description\"\nlicense = \"MIT\"\nrust-version = \"1.0.0-beta.2\"\n", )` $DIR/src/tests/krate/publish/max_size.rs: `config.max_upload_size = max_upload_size;` $DIR/src/tests/krate/publish/max_size.rs: `config.max_unpack_size = max_upload_size;` $DIR/src/tests/krate/publish/max_size.rs: `assert_ok!(header.set_path("foo-1.1.0/Cargo.toml"));` $DIR/src/tests/krate/publish/max_size.rs: `header.set_size(data.len() as u64);` $DIR/src/tests/krate/publish/max_size.rs: `header.set_cksum();` $DIR/src/tests/krate/publish/max_size.rs: `assert_ok!(builder.as_mut().append(&header, data));` $DIR/src/tests/krate/publish/max_size.rs: `assert_ok!(header.set_path("foo-1.1.0/big-file.txt"));` $DIR/src/tests/krate/publish/max_size.rs: `header.set_size(data.len() as u64);` $DIR/src/tests/krate/publish/max_size.rs: `header.set_cksum();` $DIR/src/tests/krate/publish/max_size.rs: `assert_ok!(builder.as_mut().append(&header, data));` $DIR/src/tests/krate/publish/max_size.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/max_size.rs: `config.max_upload_size = max_upload_size;` $DIR/src/tests/krate/publish/max_size.rs: `config.max_unpack_size = max_upload_size;` $DIR/src/tests/krate/publish/max_size.rs: `assert_ok!(header.set_path("foo-1.1.0/Cargo.toml"));` $DIR/src/tests/krate/publish/max_size.rs: `header.set_size(data.len() as u64);` $DIR/src/tests/krate/publish/max_size.rs: `header.set_cksum();` $DIR/src/tests/krate/publish/max_size.rs: `assert_ok!(builder.as_mut().append(&header, data));` $DIR/src/tests/krate/publish/max_size.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/max_size.rs: `config.max_upload_size = 3000;` $DIR/src/tests/krate/publish/max_size.rs: `config.max_unpack_size = 2000;` $DIR/src/tests/krate/publish/max_size.rs: `io::repeat(0).take(len).read_to_end(&mut body).unwrap();` $DIR/src/tests/krate/publish/max_size.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/max_size.rs: `config.max_upload_size = 3000;` $DIR/src/tests/krate/publish/max_size.rs: `config.max_unpack_size = 2000;` $DIR/src/tests/krate/publish/max_size.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/max_size.rs: `app.db(|conn| { CrateBuilder::new("foo_whitelist", user.as_model().id) .max_upload_size(2_000_000) .expect_build(conn); });` $DIR/src/tests/krate/publish/max_size.rs: `CrateBuilder::new("foo_whitelist", user.as_model().id) .max_upload_size(2_000_000) .expect_build(conn);` $DIR/src/tests/krate/publish/max_size.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/max_size.rs: `.with_config(|config| { config.max_upload_size = max_upload_size; config.max_unpack_size = max_upload_size; })` $DIR/src/tests/krate/publish/max_size.rs: `.with_token()` $DIR/src/tests/krate/publish/max_size.rs: `.set_size(data.len() as u64)` $DIR/src/tests/krate/publish/max_size.rs: `.len()` $DIR/src/tests/krate/publish/max_size.rs: `.set_cksum()` $DIR/src/tests/krate/publish/max_size.rs: `.set_size(data.len() as u64)` $DIR/src/tests/krate/publish/max_size.rs: `.len()` $DIR/src/tests/krate/publish/max_size.rs: `.set_cksum()` $DIR/src/tests/krate/publish/max_size.rs: `.build()` $DIR/src/tests/krate/publish/max_size.rs: `.publish_crate(body)` $DIR/src/tests/krate/publish/max_size.rs: `.with_config(|config| { config.max_upload_size = max_upload_size; config.max_unpack_size = max_upload_size; })` $DIR/src/tests/krate/publish/max_size.rs: `.with_token()` $DIR/src/tests/krate/publish/max_size.rs: `.set_size(data.len() as u64)` $DIR/src/tests/krate/publish/max_size.rs: `.len()` $DIR/src/tests/krate/publish/max_size.rs: `.set_cksum()` $DIR/src/tests/krate/publish/max_size.rs: `.build()` $DIR/src/tests/krate/publish/max_size.rs: `.publish_crate(body)` $DIR/src/tests/krate/publish/max_size.rs: `.with_config(|config| { config.max_upload_size = 3000; config.max_unpack_size = 2000; })` $DIR/src/tests/krate/publish/max_size.rs: `.with_token()` $DIR/src/tests/krate/publish/max_size.rs: `.take(len)` $DIR/src/tests/krate/publish/max_size.rs: `.read_to_end(&mut body)` $DIR/src/tests/krate/publish/max_size.rs: `.add_file("foo-1.1.0/a", body)` $DIR/src/tests/krate/publish/max_size.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/max_size.rs: `.with_config(|config| { config.max_upload_size = 3000; config.max_unpack_size = 2000; })` $DIR/src/tests/krate/publish/max_size.rs: `.with_user()` $DIR/src/tests/krate/publish/max_size.rs: `.add_file("foo_big-1.0.0/big", &[b'a'; 2000] as &[_])` $DIR/src/tests/krate/publish/max_size.rs: `.publish_crate(builder)` $DIR/src/tests/krate/publish/max_size.rs: `.with_token()` $DIR/src/tests/krate/publish/max_size.rs: `.db(|conn| { CrateBuilder::new("foo_whitelist", user.as_model().id) .max_upload_size(2_000_000) .expect_build(conn); })` $DIR/src/tests/krate/publish/max_size.rs: `.as_model()` $DIR/src/tests/krate/publish/max_size.rs: `.max_upload_size(2_000_000)` $DIR/src/tests/krate/publish/max_size.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/max_size.rs: `.add_file("foo_whitelist-1.1.0/big", &[b'a'; 2000] as &[_])` $DIR/src/tests/krate/publish/max_size.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/max_size.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `app.db(|conn| { // Ratelimit bucket should next refill in about a year let far_future = Utc::now().naive_utc() + Duration::from_secs(60 * 60 * 24 * 365); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::PublishNew), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(far_future), )) .execute(conn) .expect("Failed to set fake ratelimit") });` $DIR/src/tests/krate/publish/rate_limit.rs: `token .publish_crate(crate_to_publish) .assert_rate_limited(LimitedAction::PublishNew);` $DIR/src/tests/krate/publish/rate_limit.rs: `app.db(|conn| { // Ratelimit bucket should next refill right now! let just_now = Utc::now().naive_utc() - Duration::from_millis(500); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::PublishNew), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(just_now), )) .execute(conn) .expect("Failed to set fake ratelimit") });` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `app.db(|conn| { // Add an override so our user gets *2* new tokens (expires, y'know, sometime) diesel::insert_into(publish_rate_overrides::table) .values(( publish_rate_overrides::user_id.eq(token.as_model().user_id), publish_rate_overrides::burst.eq(2), publish_rate_overrides::expires_at.eq(None::), publish_rate_overrides::action.eq(LimitedAction::PublishNew), )) .execute(conn) .expect("Failed to add ratelimit override") });` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `token .publish_crate(crate_to_publish) .assert_rate_limited(LimitedAction::PublishNew);` $DIR/src/tests/krate/publish/rate_limit.rs: `app.db(|conn| { // Add an override so our user gets *2* new tokens (expires, y'know, sometime) let just_now = Utc::now().naive_utc() - Duration::from_secs(1); diesel::insert_into(publish_rate_overrides::table) .values(( publish_rate_overrides::user_id.eq(token.as_model().user_id), publish_rate_overrides::burst.eq(2), publish_rate_overrides::expires_at.eq(just_now), publish_rate_overrides::action.eq(LimitedAction::PublishNew), )) .execute(conn) .expect("Failed to add ratelimit override") });` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `token .publish_crate(crate_to_publish) .assert_rate_limited(LimitedAction::PublishNew);` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `token .publish_crate(crate_to_publish) .assert_rate_limited(LimitedAction::PublishUpdate);` $DIR/src/tests/krate/publish/rate_limit.rs: `thread::sleep(Duration::from_millis(500));` $DIR/src/tests/krate/publish/rate_limit.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_rate_limit(LimitedAction::PublishNew, Duration::from_millis(500), 1)` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_token()` $DIR/src/tests/krate/publish/rate_limit.rs: `.db(|conn| { // Ratelimit bucket should next refill in about a year let far_future = Utc::now().naive_utc() + Duration::from_secs(60 * 60 * 24 * 365); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::PublishNew), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(far_future), )) .execute(conn) .expect("Failed to set fake ratelimit") })` $DIR/src/tests/krate/publish/rate_limit.rs: `.naive_utc()` $DIR/src/tests/krate/publish/rate_limit.rs: `.values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::PublishNew), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(far_future), ))` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(token.as_model().user_id)` $DIR/src/tests/krate/publish/rate_limit.rs: `.as_model()` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(LimitedAction::PublishNew)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(0)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(far_future)` $DIR/src/tests/krate/publish/rate_limit.rs: `.execute(conn)` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.assert_rate_limited(LimitedAction::PublishNew)` $DIR/src/tests/krate/publish/rate_limit.rs: `.get::<()>("/api/v1/crates/rate_limited")` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_rate_limit(LimitedAction::PublishNew, Duration::from_millis(500), 1)` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_token()` $DIR/src/tests/krate/publish/rate_limit.rs: `.db(|conn| { // Ratelimit bucket should next refill right now! let just_now = Utc::now().naive_utc() - Duration::from_millis(500); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::PublishNew), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(just_now), )) .execute(conn) .expect("Failed to set fake ratelimit") })` $DIR/src/tests/krate/publish/rate_limit.rs: `.naive_utc()` $DIR/src/tests/krate/publish/rate_limit.rs: `.values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::PublishNew), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(just_now), ))` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(token.as_model().user_id)` $DIR/src/tests/krate/publish/rate_limit.rs: `.as_model()` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(LimitedAction::PublishNew)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(0)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(just_now)` $DIR/src/tests/krate/publish/rate_limit.rs: `.execute(conn)` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited")` $DIR/src/tests/krate/publish/rate_limit.rs: `// Most people get 1 new token every 1 day .with_rate_limit( LimitedAction::PublishNew, Duration::from_secs(60 * 60 * 24), 1, )` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_token()` $DIR/src/tests/krate/publish/rate_limit.rs: `.db(|conn| { // Add an override so our user gets *2* new tokens (expires, y'know, sometime) diesel::insert_into(publish_rate_overrides::table) .values(( publish_rate_overrides::user_id.eq(token.as_model().user_id), publish_rate_overrides::burst.eq(2), publish_rate_overrides::expires_at.eq(None::), publish_rate_overrides::action.eq(LimitedAction::PublishNew), )) .execute(conn) .expect("Failed to add ratelimit override") })` $DIR/src/tests/krate/publish/rate_limit.rs: `.values(( publish_rate_overrides::user_id.eq(token.as_model().user_id), publish_rate_overrides::burst.eq(2), publish_rate_overrides::expires_at.eq(None::), publish_rate_overrides::action.eq(LimitedAction::PublishNew), ))` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(token.as_model().user_id)` $DIR/src/tests/krate/publish/rate_limit.rs: `.as_model()` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(2)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(None::)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(LimitedAction::PublishNew)` $DIR/src/tests/krate/publish/rate_limit.rs: `.execute(conn)` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited1")` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited2")` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.assert_rate_limited(LimitedAction::PublishNew)` $DIR/src/tests/krate/publish/rate_limit.rs: `.get::<()>("/api/v1/crates/rate_limited3")` $DIR/src/tests/krate/publish/rate_limit.rs: `// Most people get 1 new token every 1 day .with_rate_limit( LimitedAction::PublishNew, Duration::from_secs(60 * 60 * 24), 1, )` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_token()` $DIR/src/tests/krate/publish/rate_limit.rs: `.db(|conn| { // Add an override so our user gets *2* new tokens (expires, y'know, sometime) let just_now = Utc::now().naive_utc() - Duration::from_secs(1); diesel::insert_into(publish_rate_overrides::table) .values(( publish_rate_overrides::user_id.eq(token.as_model().user_id), publish_rate_overrides::burst.eq(2), publish_rate_overrides::expires_at.eq(just_now), publish_rate_overrides::action.eq(LimitedAction::PublishNew), )) .execute(conn) .expect("Failed to add ratelimit override") })` $DIR/src/tests/krate/publish/rate_limit.rs: `.naive_utc()` $DIR/src/tests/krate/publish/rate_limit.rs: `.values(( publish_rate_overrides::user_id.eq(token.as_model().user_id), publish_rate_overrides::burst.eq(2), publish_rate_overrides::expires_at.eq(just_now), publish_rate_overrides::action.eq(LimitedAction::PublishNew), ))` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(token.as_model().user_id)` $DIR/src/tests/krate/publish/rate_limit.rs: `.as_model()` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(2)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(just_now)` $DIR/src/tests/krate/publish/rate_limit.rs: `.eq(LimitedAction::PublishNew)` $DIR/src/tests/krate/publish/rate_limit.rs: `.execute(conn)` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited1")` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.assert_rate_limited(LimitedAction::PublishNew)` $DIR/src/tests/krate/publish/rate_limit.rs: `.get::<()>("/api/v1/crates/rate_limited2")` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_rate_limit(LimitedAction::PublishNew, Duration::from_secs(60 * 60), 1)` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_token()` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(new_version)` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_rate_limit(LimitedAction::PublishUpdate, Duration::from_millis(500), 1)` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_token()` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited1")` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited1")` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.assert_rate_limited(LimitedAction::PublishUpdate)` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited1")` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.good()` $DIR/src/tests/krate/publish/rate_limit.rs: `.show_crate("rate_limited1")` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_rate_limit( LimitedAction::PublishUpdate, Duration::from_secs(60 * 60), 1, )` $DIR/src/tests/krate/publish/rate_limit.rs: `.with_token()` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/rate_limit.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/readme.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/readme.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/readme.rs: `assert_json_snapshot!(response.into_json(), { ".crate.created_at" => "[datetime]", ".crate.updated_at" => "[datetime]", });` $DIR/src/tests/krate/publish/readme.rs: `app.db(|conn| { CrateBuilder::new("docscrate", user.id) .version("0.2.0") .expect_build(conn); });` $DIR/src/tests/krate/publish/readme.rs: `CrateBuilder::new("docscrate", user.id) .version("0.2.0") .expect_build(conn);` $DIR/src/tests/krate/publish/readme.rs: `.with_token()` $DIR/src/tests/krate/publish/readme.rs: `.readme("hello world")` $DIR/src/tests/krate/publish/readme.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/readme.rs: `.with_token()` $DIR/src/tests/krate/publish/readme.rs: `.readme("")` $DIR/src/tests/krate/publish/readme.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/readme.rs: `.with_token()` $DIR/src/tests/krate/publish/readme.rs: `.readme("hello world")` $DIR/src/tests/krate/publish/readme.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/readme.rs: `.with_token()` $DIR/src/tests/krate/publish/readme.rs: `.as_model()` $DIR/src/tests/krate/publish/readme.rs: `.db(|conn| { CrateBuilder::new("docscrate", user.id) .version("0.2.0") .expect_build(conn); })` $DIR/src/tests/krate/publish/readme.rs: `.version("0.2.0")` $DIR/src/tests/krate/publish/readme.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/readme.rs: `.show_crate("docscrate")` $DIR/src/tests/krate/publish/readme.rs: `.documentation("http://foo.rs")` $DIR/src/tests/krate/publish/readme.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/readme.rs: `.good()` $DIR/src/tests/krate/publish/readme.rs: `.show_crate("docscrate")` $DIR/src/tests/krate/publish/readme.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/readme.rs: `.good()` $DIR/src/tests/krate/publish/readme.rs: `.show_crate("docscrate")` $DIR/src/tests/krate/publish/similar_names.rs: `app.db(|conn| { CrateBuilder::new("Foo_similar", user.as_model().id) .version("1.0.0") .expect_build(conn); });` $DIR/src/tests/krate/publish/similar_names.rs: `CrateBuilder::new("Foo_similar", user.as_model().id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/krate/publish/similar_names.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/similar_names.rs: `app.db(|conn| { CrateBuilder::new("foo_bar_hyphen", user.as_model().id) .version("1.0.0") .expect_build(conn); });` $DIR/src/tests/krate/publish/similar_names.rs: `CrateBuilder::new("foo_bar_hyphen", user.as_model().id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/krate/publish/similar_names.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/similar_names.rs: `app.db(|conn| { CrateBuilder::new("foo-bar-underscore", user.as_model().id) .version("1.0.0") .expect_build(conn); });` $DIR/src/tests/krate/publish/similar_names.rs: `CrateBuilder::new("foo-bar-underscore", user.as_model().id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/krate/publish/similar_names.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/similar_names.rs: `.with_token()` $DIR/src/tests/krate/publish/similar_names.rs: `.db(|conn| { CrateBuilder::new("Foo_similar", user.as_model().id) .version("1.0.0") .expect_build(conn); })` $DIR/src/tests/krate/publish/similar_names.rs: `.as_model()` $DIR/src/tests/krate/publish/similar_names.rs: `.version("1.0.0")` $DIR/src/tests/krate/publish/similar_names.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/similar_names.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/similar_names.rs: `.with_token()` $DIR/src/tests/krate/publish/similar_names.rs: `.db(|conn| { CrateBuilder::new("foo_bar_hyphen", user.as_model().id) .version("1.0.0") .expect_build(conn); })` $DIR/src/tests/krate/publish/similar_names.rs: `.as_model()` $DIR/src/tests/krate/publish/similar_names.rs: `.version("1.0.0")` $DIR/src/tests/krate/publish/similar_names.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/similar_names.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/similar_names.rs: `.with_token()` $DIR/src/tests/krate/publish/similar_names.rs: `.db(|conn| { CrateBuilder::new("foo-bar-underscore", user.as_model().id) .version("1.0.0") .expect_build(conn); })` $DIR/src/tests/krate/publish/similar_names.rs: `.as_model()` $DIR/src/tests/krate/publish/similar_names.rs: `.version("1.0.0")` $DIR/src/tests/krate/publish/similar_names.rs: `.expect_build(conn)` $DIR/src/tests/krate/publish/similar_names.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/tarball.rs: `assert_ok!(header.set_path("foo-1.1.0/bar"));` $DIR/src/tests/krate/publish/tarball.rs: `header.set_size(0);` $DIR/src/tests/krate/publish/tarball.rs: `header.set_entry_type(tar::EntryType::hard_link());` $DIR/src/tests/krate/publish/tarball.rs: `assert_ok!(header.set_link_name("foo-1.1.0/another"));` $DIR/src/tests/krate/publish/tarball.rs: `header.set_cksum();` $DIR/src/tests/krate/publish/tarball.rs: `assert_ok!(builder.as_mut().append(&header, &[][..]));` $DIR/src/tests/krate/publish/tarball.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/tarball.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/tarball.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/tarball.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/tarball.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/tarball.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/tarball.rs: `.with_user()` $DIR/src/tests/krate/publish/tarball.rs: `.add_file("foo-1.0.0/a", "")` $DIR/src/tests/krate/publish/tarball.rs: `.add_file("bar-1.0.0/a", "")` $DIR/src/tests/krate/publish/tarball.rs: `.publish_crate(builder)` $DIR/src/tests/krate/publish/tarball.rs: `.with_token()` $DIR/src/tests/krate/publish/tarball.rs: `.set_size(0)` $DIR/src/tests/krate/publish/tarball.rs: `.set_entry_type(tar::EntryType::hard_link())` $DIR/src/tests/krate/publish/tarball.rs: `.set_cksum()` $DIR/src/tests/krate/publish/tarball.rs: `.build()` $DIR/src/tests/krate/publish/tarball.rs: `.publish_crate(body)` $DIR/src/tests/krate/publish/tarball.rs: `.with_user()` $DIR/src/tests/krate/publish/tarball.rs: `.publish_crate(&[] as &[u8])` $DIR/src/tests/krate/publish/tarball.rs: `.with_token()` $DIR/src/tests/krate/publish/tarball.rs: `.publish_crate(&[0u8, 0] as &[u8])` $DIR/src/tests/krate/publish/tarball.rs: `.with_token()` $DIR/src/tests/krate/publish/tarball.rs: `.publish_crate(&[100u8, 0, 0, 0, 0] as &[u8])` $DIR/src/tests/krate/publish/tarball.rs: `.with_token()` $DIR/src/tests/krate/publish/tarball.rs: `.publish_crate(&[2, 0, 0, 0, b'{', b'}', 0, 0] as &[u8])` $DIR/src/tests/krate/publish/tarball.rs: `.with_token()` $DIR/src/tests/krate/publish/tarball.rs: `.publish_crate(&[2, 0, 0, 0, b'{', b'}', 100, 0, 0, 0, 0] as &[u8])` $DIR/src/tests/krate/publish/timestamps.rs: `user.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/timestamps.rs: `app.db(|conn| { diesel::update(crates::table) .set(crates::updated_at.eq(crates::updated_at - 1.hour())) .execute(conn) .unwrap(); });` $DIR/src/tests/krate/publish/timestamps.rs: `diesel::update(crates::table) .set(crates::updated_at.eq(crates::updated_at - 1.hour())) .execute(conn) .unwrap();` $DIR/src/tests/krate/publish/timestamps.rs: `user.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/publish/timestamps.rs: `.with_user()` $DIR/src/tests/krate/publish/timestamps.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/timestamps.rs: `.good()` $DIR/src/tests/krate/publish/timestamps.rs: `.db(|conn| { diesel::update(crates::table) .set(crates::updated_at.eq(crates::updated_at - 1.hour())) .execute(conn) .unwrap(); })` $DIR/src/tests/krate/publish/timestamps.rs: `.set(crates::updated_at.eq(crates::updated_at - 1.hour()))` $DIR/src/tests/krate/publish/timestamps.rs: `.eq(crates::updated_at - 1.hour())` $DIR/src/tests/krate/publish/timestamps.rs: `.hour()` $DIR/src/tests/krate/publish/timestamps.rs: `.execute(conn)` $DIR/src/tests/krate/publish/timestamps.rs: `.show_crate("foo_versions_updated_at")` $DIR/src/tests/krate/publish/timestamps.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/timestamps.rs: `.good()` $DIR/src/tests/krate/publish/timestamps.rs: `.show_crate("foo_versions_updated_at")` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `bad_name("");` $DIR/src/tests/krate/publish/validation.rs: `bad_name("foo bar");` $DIR/src/tests/krate/publish/validation.rs: `bad_name(&"a".repeat(MAX_NAME_LENGTH + 1));` $DIR/src/tests/krate/publish/validation.rs: `bad_name("snow☃");` $DIR/src/tests/krate/publish/validation.rs: `bad_name("áccênts");` $DIR/src/tests/krate/publish/validation.rs: `bad_name("std");` $DIR/src/tests/krate/publish/validation.rs: `bad_name("STD");` $DIR/src/tests/krate/publish/validation.rs: `bad_name("compiler-rt");` $DIR/src/tests/krate/publish/validation.rs: `bad_name("compiler_rt");` $DIR/src/tests/krate/publish/validation.rs: `bad_name("coMpiLer_Rt");` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `assert_json_snapshot!(response.into_json());` $DIR/src/tests/krate/publish/validation.rs: `.with_token()` $DIR/src/tests/krate/publish/validation.rs: `.build()` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate(body)` $DIR/src/tests/krate/publish/validation.rs: `.with_token()` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/validation.rs: `.repeat(MAX_NAME_LENGTH + 1)` $DIR/src/tests/krate/publish/validation.rs: `.with_token()` $DIR/src/tests/krate/publish/validation.rs: `.build()` $DIR/src/tests/krate/publish/validation.rs: `.replace(r#""vers":"1.0.0""#, r#""vers":"broken""#)` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate(body)` $DIR/src/tests/krate/publish/validation.rs: `.with_token()` $DIR/src/tests/krate/publish/validation.rs: `.unset_license()` $DIR/src/tests/krate/publish/validation.rs: `.unset_description()` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/validation.rs: `.unset_description()` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/validation.rs: `.unset_license()` $DIR/src/tests/krate/publish/validation.rs: `.license_file("foo")` $DIR/src/tests/krate/publish/validation.rs: `.unset_description()` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/publish/validation.rs: `.with_token()` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate(PublishBuilder::new("foo", "1.0.0").license("MIT AND foobar"))` $DIR/src/tests/krate/publish/validation.rs: `.license("MIT AND foobar")` $DIR/src/tests/krate/publish/validation.rs: `.with_token()` $DIR/src/tests/krate/publish/validation.rs: `.publish_crate( PublishBuilder::new("foo", "1.0.0").documentation("javascript:alert('boom')"), )` $DIR/src/tests/krate/publish/validation.rs: `.documentation("javascript:alert('boom')")` $DIR/src/tests/krate/versions.rs: `app.db(|conn| { CrateBuilder::new("foo_versions", user.id) .version("0.5.1") .version(VersionBuilder::new("1.0.0").rust_version("1.64")) .version("0.5.0") .expect_build(conn); // Make version 1.0.0 mimic a version published before we started recording who published // versions let none: Option = None; update(versions::table) .filter(versions::num.eq("1.0.0")) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); });` $DIR/src/tests/krate/versions.rs: `CrateBuilder::new("foo_versions", user.id) .version("0.5.1") .version(VersionBuilder::new("1.0.0").rust_version("1.64")) .version("0.5.0") .expect_build(conn);` $DIR/src/tests/krate/versions.rs: `update(versions::table) .filter(versions::num.eq("1.0.0")) .set(versions::published_by.eq(none)) .execute(conn) .unwrap();` $DIR/src/tests/krate/versions.rs: `assert_some_eq!(&json.versions[0].rust_version, "1.64");` $DIR/src/tests/krate/versions.rs: `assert_none!(&json.versions[0].published_by);` $DIR/src/tests/krate/versions.rs: `.with_user()` $DIR/src/tests/krate/versions.rs: `.as_model()` $DIR/src/tests/krate/versions.rs: `.db(|conn| { CrateBuilder::new("foo_versions", user.id) .version("0.5.1") .version(VersionBuilder::new("1.0.0").rust_version("1.64")) .version("0.5.0") .expect_build(conn); // Make version 1.0.0 mimic a version published before we started recording who published // versions let none: Option = None; update(versions::table) .filter(versions::num.eq("1.0.0")) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); })` $DIR/src/tests/krate/versions.rs: `.version("0.5.1")` $DIR/src/tests/krate/versions.rs: `.version(VersionBuilder::new("1.0.0").rust_version("1.64"))` $DIR/src/tests/krate/versions.rs: `.rust_version("1.64")` $DIR/src/tests/krate/versions.rs: `.version("0.5.0")` $DIR/src/tests/krate/versions.rs: `.expect_build(conn)` $DIR/src/tests/krate/versions.rs: `.filter(versions::num.eq("1.0.0"))` $DIR/src/tests/krate/versions.rs: `.eq("1.0.0")` $DIR/src/tests/krate/versions.rs: `.set(versions::published_by.eq(none))` $DIR/src/tests/krate/versions.rs: `.eq(none)` $DIR/src/tests/krate/versions.rs: `.execute(conn)` $DIR/src/tests/krate/versions.rs: `.get("/api/v1/crates/foo_versions/versions")` $DIR/src/tests/krate/versions.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/yanking.rs: `assert_some_eq!(crates[0].yanked, false);` $DIR/src/tests/krate/yanking.rs: `token.yank("fyk", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `assert_some_eq!(crates[0].yanked, true);` $DIR/src/tests/krate/yanking.rs: `token.unyank("fyk", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `assert_some_eq!(crates[0].yanked, false);` $DIR/src/tests/krate/yanking.rs: `cookie.yank("fyk", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `assert_some_eq!(crates[0].yanked, true);` $DIR/src/tests/krate/yanking.rs: `cookie.unyank("fyk", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `assert_some_eq!(crates[0].yanked, false);` $DIR/src/tests/krate/yanking.rs: `app.db(|conn| { // Ratelimit bucket should next refill in about a year let far_future = Utc::now().naive_utc() + Duration::from_secs(60 * 60 * 24 * 365); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::YankUnyank), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(far_future), )) .execute(conn) .expect("Failed to set fake ratelimit") });` $DIR/src/tests/krate/yanking.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/yanking.rs: `token .yank("yankable", "1.0.0") .assert_rate_limited(LimitedAction::YankUnyank);` $DIR/src/tests/krate/yanking.rs: `app.db(|conn| { // Ratelimit bucket should next refill right now! let just_now = Utc::now().naive_utc() - Duration::from_millis(500); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::YankUnyank), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(just_now), )) .execute(conn) .expect("Failed to set fake ratelimit") });` $DIR/src/tests/krate/yanking.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/yanking.rs: `check_yanked(&app, false);` $DIR/src/tests/krate/yanking.rs: `token.yank("yankable", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/yanking.rs: `token.yank("fyk_max", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.unyank("fyk_max", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.yank("fyk_max", "2.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.yank("fyk_max", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.unyank("fyk_max", "2.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.unyank("fyk_max", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/krate/yanking.rs: `token.yank("fyk_max", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `token.unyank("fyk_max", "1.0.0").good();` $DIR/src/tests/krate/yanking.rs: `.with_token()` $DIR/src/tests/krate/yanking.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.crates_from_index_head("fyk")` $DIR/src/tests/krate/yanking.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.yank("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.crates_from_index_head("fyk")` $DIR/src/tests/krate/yanking.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.unyank("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.crates_from_index_head("fyk")` $DIR/src/tests/krate/yanking.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.yank("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.crates_from_index_head("fyk")` $DIR/src/tests/krate/yanking.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.unyank("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.crates_from_index_head("fyk")` $DIR/src/tests/krate/yanking.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.with_rate_limit(LimitedAction::YankUnyank, Duration::from_millis(500), 1)` $DIR/src/tests/krate/yanking.rs: `.with_token()` $DIR/src/tests/krate/yanking.rs: `.db(|conn| { // Ratelimit bucket should next refill in about a year let far_future = Utc::now().naive_utc() + Duration::from_secs(60 * 60 * 24 * 365); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::YankUnyank), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(far_future), )) .execute(conn) .expect("Failed to set fake ratelimit") })` $DIR/src/tests/krate/yanking.rs: `.naive_utc()` $DIR/src/tests/krate/yanking.rs: `.values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::YankUnyank), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(far_future), ))` $DIR/src/tests/krate/yanking.rs: `.eq(token.as_model().user_id)` $DIR/src/tests/krate/yanking.rs: `.as_model()` $DIR/src/tests/krate/yanking.rs: `.eq(LimitedAction::YankUnyank)` $DIR/src/tests/krate/yanking.rs: `.eq(0)` $DIR/src/tests/krate/yanking.rs: `.eq(far_future)` $DIR/src/tests/krate/yanking.rs: `.execute(conn)` $DIR/src/tests/krate/yanking.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.yank("yankable", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.assert_rate_limited(LimitedAction::YankUnyank)` $DIR/src/tests/krate/yanking.rs: `.with_rate_limit(LimitedAction::YankUnyank, Duration::from_millis(500), 1)` $DIR/src/tests/krate/yanking.rs: `.with_token()` $DIR/src/tests/krate/yanking.rs: `.db(|conn| { // Ratelimit bucket should next refill right now! let just_now = Utc::now().naive_utc() - Duration::from_millis(500); diesel::insert_into(publish_limit_buckets::table) .values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::YankUnyank), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(just_now), )) .execute(conn) .expect("Failed to set fake ratelimit") })` $DIR/src/tests/krate/yanking.rs: `.naive_utc()` $DIR/src/tests/krate/yanking.rs: `.values(( publish_limit_buckets::user_id.eq(token.as_model().user_id), publish_limit_buckets::action.eq(LimitedAction::YankUnyank), publish_limit_buckets::tokens.eq(0), publish_limit_buckets::last_refill.eq(just_now), ))` $DIR/src/tests/krate/yanking.rs: `.eq(token.as_model().user_id)` $DIR/src/tests/krate/yanking.rs: `.as_model()` $DIR/src/tests/krate/yanking.rs: `.eq(LimitedAction::YankUnyank)` $DIR/src/tests/krate/yanking.rs: `.eq(0)` $DIR/src/tests/krate/yanking.rs: `.eq(just_now)` $DIR/src/tests/krate/yanking.rs: `.execute(conn)` $DIR/src/tests/krate/yanking.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.yank("yankable", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.with_token()` $DIR/src/tests/krate/yanking.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.yank("fyk_max", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.unyank("fyk_max", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.yank("fyk_max", "2.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.yank("fyk_max", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.unyank("fyk_max", "2.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.unyank("fyk_max", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.with_token()` $DIR/src/tests/krate/yanking.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.yank("fyk_max", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/krate/yanking.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.unyank("fyk_max", "1.0.0")` $DIR/src/tests/krate/yanking.rs: `.good()` $DIR/src/tests/krate/yanking.rs: `.show_crate("fyk_max")` $DIR/src/tests/middleware/head.rs: `.empty()` $DIR/src/tests/middleware/head.rs: `.request_builder(Method::HEAD, "/api/v1/summary")` $DIR/src/tests/middleware/head.rs: `.run::<()>(req)` $DIR/src/tests/middleware/head.rs: `.empty()` $DIR/src/tests/middleware/head.rs: `.request_builder(Method::HEAD, "/unknown")` $DIR/src/tests/middleware/head.rs: `.run::<()>(req)` $DIR/src/tests/models/krate.rs: `assert_json_snapshot!(metadata);` $DIR/src/tests/models/krate.rs: `assert_json_snapshot!(metadata);` $DIR/src/tests/models/krate.rs: `.with_user()` $DIR/src/tests/models/krate.rs: `.as_model()` $DIR/src/tests/models/krate.rs: `.checked_sub_days(Days::new(14))` $DIR/src/tests/models/krate.rs: `.naive_utc()` $DIR/src/tests/models/krate.rs: `.checked_sub_days(Days::new(7))` $DIR/src/tests/models/krate.rs: `.naive_utc()` $DIR/src/tests/models/krate.rs: `.version(VersionBuilder::new("0.1.0"))` $DIR/src/tests/models/krate.rs: `.expect_build(conn)` $DIR/src/tests/models/krate.rs: `.index_metadata(conn)` $DIR/src/tests/models/krate.rs: `.version( VersionBuilder::new("1.0.0-beta.1") .created_at(created_at_1) .yanked(true), )` $DIR/src/tests/models/krate.rs: `.created_at(created_at_1)` $DIR/src/tests/models/krate.rs: `.yanked(true)` $DIR/src/tests/models/krate.rs: `.version(VersionBuilder::new("1.0.0").created_at(created_at_1))` $DIR/src/tests/models/krate.rs: `.created_at(created_at_1)` $DIR/src/tests/models/krate.rs: `.version( VersionBuilder::new("2.0.0") .created_at(created_at_2) .dependency(&fooo, None), )` $DIR/src/tests/models/krate.rs: `.created_at(created_at_2)` $DIR/src/tests/models/krate.rs: `.dependency(&fooo, None)` $DIR/src/tests/models/krate.rs: `.version(VersionBuilder::new("1.0.1").checksum("0123456789abcdef"))` $DIR/src/tests/models/krate.rs: `.checksum("0123456789abcdef")` $DIR/src/tests/models/krate.rs: `.expect_build(conn)` $DIR/src/tests/models/krate.rs: `.index_metadata(conn)` $DIR/src/tests/not_found_error.rs: `.empty()` $DIR/src/tests/not_found_error.rs: `.get::<()>("/does-not-exist")` $DIR/src/tests/not_found_error.rs: `.empty()` $DIR/src/tests/not_found_error.rs: `.get::<()>("/api/v1/does-not-exist")` $DIR/src/tests/owners.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/owners.rs: `token.add_user_owner("foo_owner", "BAR");` $DIR/src/tests/owners.rs: `user2.accept_ownership_invitation("foo_owner", krate.id);` $DIR/src/tests/owners.rs: `create_and_add_owner(&app, &token, "secondowner", &krate);` $DIR/src/tests/owners.rs: `user2.accept_ownership_invitation(&krate.name, krate.id);` $DIR/src/tests/owners.rs: `user3.accept_ownership_invitation(&krate.name, krate.id);` $DIR/src/tests/owners.rs: `app.db_new_user("invited_user");` $DIR/src/tests/owners.rs: `app.db(|conn| CrateBuilder::new("crate_name", owner.as_model().user_id).expect_build(conn));` $DIR/src/tests/owners.rs: `app.db_new_user("invited_user");` $DIR/src/tests/owners.rs: `expire_invitation(&app, krate.id);` $DIR/src/tests/owners.rs: `add_team_to_crate(&t, &krate, user, conn).unwrap();` $DIR/src/tests/owners.rs: `add_team_to_crate(&t, &krate, user, conn).unwrap();` $DIR/src/tests/owners.rs: `app.db(|conn| { let krate = CrateBuilder::new("foo_my_packages", user.id).expect_build(conn); krate.owner_remove(conn, &user.gh_login).unwrap(); });` $DIR/src/tests/owners.rs: `krate.owner_remove(conn, &user.gh_login).unwrap();` $DIR/src/tests/owners.rs: `token.add_user_owner("invited_crate", "invited_user");` $DIR/src/tests/owners.rs: `token.add_user_owner("invited_crate_1", "invited_user");` $DIR/src/tests/owners.rs: `token.add_user_owner("invited_crate_2", "invited_user");` $DIR/src/tests/owners.rs: `expire_invitation(&app, krate1.id);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner("accept_invitation", "user_bar");` $DIR/src/tests/owners.rs: `invited_user.accept_ownership_invitation(&krate.name, krate.id);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner("decline_invitation", "user_bar");` $DIR/src/tests/owners.rs: `invited_user.decline_ownership_invitation(&krate.name, krate.id);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner("accept_invitation", "user_bar");` $DIR/src/tests/owners.rs: `anon.accept_ownership_invitation_by_token(&invite_token);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner("demo_crate", "demo_user");` $DIR/src/tests/owners.rs: `expire_invitation(&app, krate.id);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner("demo_crate", "demo_user");` $DIR/src/tests/owners.rs: `expire_invitation(&app, krate.id);` $DIR/src/tests/owners.rs: `invited_user.decline_ownership_invitation(&krate.name, krate.id);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner("demo_crate", "demo_user");` $DIR/src/tests/owners.rs: `expire_invitation(&app, krate.id);` $DIR/src/tests/owners.rs: `app.db(|conn| { NewUser { gh_id: -1, gh_login: invited_gh_login, name: None, gh_avatar: None, gh_access_token: Cow::Borrowed("some random token"), } .create_or_update(None, &app.as_inner().emails, conn) .unwrap(); CrateBuilder::new(krate_name, owner.id).expect_build(conn); });` $DIR/src/tests/owners.rs: `NewUser { gh_id: -1, gh_login: invited_gh_login, name: None, gh_avatar: None, gh_access_token: Cow::Borrowed("some random token"), } .create_or_update(None, &app.as_inner().emails, conn) .unwrap();` $DIR/src/tests/owners.rs: `CrateBuilder::new(krate_name, owner.id).expect_build(conn);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner(krate_name, "user_bar");` $DIR/src/tests/owners.rs: `app.db_new_user(invited_gh_login);` $DIR/src/tests/owners.rs: `app.db(|conn| { CrateBuilder::new(krate_name, owner.id).expect_build(conn); });` $DIR/src/tests/owners.rs: `CrateBuilder::new(krate_name, owner.id).expect_build(conn);` $DIR/src/tests/owners.rs: `owner_token.add_user_owner(krate_name, "user_bar");` $DIR/src/tests/owners.rs: `token.add_user_owner("crate_1", "user_1");` $DIR/src/tests/owners.rs: `token.add_user_owner("crate_1", "user_2");` $DIR/src/tests/owners.rs: `token.add_user_owner("crate_2", "user_1");` $DIR/src/tests/owners.rs: `token.add_user_owner("crate_1", "invited_user");` $DIR/src/tests/owners.rs: `token.add_user_owner("crate_2", "invited_user");` $DIR/src/tests/owners.rs: `expire_invitation(&app, crate1.id);` $DIR/src/tests/owners.rs: `token.add_user_owner("crate_1", "invited_user");` $DIR/src/tests/owners.rs: `token.add_user_owner("crate_2", "invited_user");` $DIR/src/tests/owners.rs: `app.db(|conn| { CrateBuilder::new("crate_1", owner.as_model().id).expect_build(conn); CrateBuilder::new("crate_2", other_user.as_model().id).expect_build(conn); });` $DIR/src/tests/owners.rs: `CrateBuilder::new("crate_1", owner.as_model().id).expect_build(conn);` $DIR/src/tests/owners.rs: `CrateBuilder::new("crate_2", other_user.as_model().id).expect_build(conn);` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/owners.rs: `.good()` $DIR/src/tests/owners.rs: `.db_new_user("Bar")` $DIR/src/tests/owners.rs: `.add_user_owner("foo_owner", "BAR")` $DIR/src/tests/owners.rs: `.db(|conn| Crate::by_name("foo_owner").first(conn).unwrap())` $DIR/src/tests/owners.rs: `.first(conn)` $DIR/src/tests/owners.rs: `.accept_ownership_invitation("foo_owner", krate.id)` $DIR/src/tests/owners.rs: `.search_by_user_id(user2.as_model().id)` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_token("bar_token")` $DIR/src/tests/owners.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("owners_selfremove", user.as_model().id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.remove_named_owner("owners_selfremove", username)` $DIR/src/tests/owners.rs: `.remove_named_owner("owners_selfremove", username)` $DIR/src/tests/owners.rs: `.remove_named_owner("owners_selfremove", username)` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("owners_multiple", user.as_model().id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.remove_named_owners("owners_multiple", &[username, "user2", "user3"])` $DIR/src/tests/owners.rs: `.remove_named_owners("owners_multiple", &["user2", "user3"])` $DIR/src/tests/owners.rs: `.add_named_owners("owners_multiple", &["user2", username])` $DIR/src/tests/owners.rs: `.add_named_owners("owners_multiple", &["user2", "user3"])` $DIR/src/tests/owners.rs: `.accept_ownership_invitation(&krate.name, krate.id)` $DIR/src/tests/owners.rs: `.accept_ownership_invitation(&krate.name, krate.id)` $DIR/src/tests/owners.rs: `.with_user()` $DIR/src/tests/owners.rs: `.db_new_user("user-2")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("foo_crate", cookie.as_model().id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.put::<()>(&url, body)` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db_new_user("user-2")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("foo_crate", token.as_model().user_id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.put::<()>(&url, body)` $DIR/src/tests/owners.rs: `.with_scoped_token(None, Some(vec![EndpointScope::ChangeOwners]))` $DIR/src/tests/owners.rs: `.db_new_user("user-2")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("foo_crate", token.as_model().user_id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.put::<()>(&url, body)` $DIR/src/tests/owners.rs: `.with_scoped_token(crate_scopes, endpoint_scopes)` $DIR/src/tests/owners.rs: `.db_new_user("user-2")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("foo_crate", token.as_model().user_id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.put::<()>(&url, body)` $DIR/src/tests/owners.rs: `.with_scoped_token(crate_scopes, endpoint_scopes)` $DIR/src/tests/owners.rs: `.db_new_user("user-2")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("foo_crate", token.as_model().user_id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.put::<()>(&url, body)` $DIR/src/tests/owners.rs: `.with_scoped_token(None, Some(vec![EndpointScope::PublishUpdate]))` $DIR/src/tests/owners.rs: `.db_new_user("user-2")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("foo_crate", token.as_model().user_id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.put::<()>(&url, body)` $DIR/src/tests/owners.rs: `.with_user()` $DIR/src/tests/owners.rs: `.db_new_user("user-2")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("foo_crate", cookie.as_model().id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.put::<()>(&url, body)` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db_new_user("invited_user")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("crate_name", owner.as_model().user_id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_named_owner("crate_name", "invited_user")` $DIR/src/tests/owners.rs: `.add_named_owner("crate_name", "invited_user")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db_new_user("invited_user")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("crate_name", owner.as_model().user_id).expect_build(conn))` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_named_owner("crate_name", "invited_user")` $DIR/src/tests/owners.rs: `.add_named_owner("crate_name", "invited_user")` $DIR/src/tests/owners.rs: `.with_user()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| { let t = new_team("team_foo").create_or_update(conn).unwrap(); let krate = CrateBuilder::new("foo", user.id).expect_build(conn); add_team_to_crate(&t, &krate, user, conn).unwrap(); (krate, t) })` $DIR/src/tests/owners.rs: `.create_or_update(conn)` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.db_new_user("user_bar")` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("bar", user2.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.search_by_user_id(user2.id)` $DIR/src/tests/owners.rs: `.search(&query)` $DIR/src/tests/owners.rs: `.with_user()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| { let t = new_team("github:test_org:team_sloth") .create_or_update(conn) .unwrap(); let krate = CrateBuilder::new("best_crate", user.id).expect_build(conn); add_team_to_crate(&t, &krate, user, conn).unwrap(); t })` $DIR/src/tests/owners.rs: `.create_or_update(conn)` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.get("/api/v1/crates/best_crate/owner_team")` $DIR/src/tests/owners.rs: `.good()` $DIR/src/tests/owners.rs: `.get("/api/v1/crates/best_crate/owner_user")` $DIR/src/tests/owners.rs: `.good()` $DIR/src/tests/owners.rs: `.with_user()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| { let krate = CrateBuilder::new("foo_my_packages", user.id).expect_build(conn); krate.owner_remove(conn, &user.gh_login).unwrap(); })` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.owner_remove(conn, &user.gh_login)` $DIR/src/tests/owners.rs: `.get("/api/v1/crates/foo_my_packages/owner_user")` $DIR/src/tests/owners.rs: `.good()` $DIR/src/tests/owners.rs: `.with_user()` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.get("/api/v1/me/crate_owner_invitations")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("invited_crate", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.db_new_user("invited_user")` $DIR/src/tests/owners.rs: `.add_user_owner("invited_crate", "invited_user")` $DIR/src/tests/owners.rs: `.get::<()>("/api/v1/me/crate_owner_invitations")` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user("invited_user")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("invited_crate_1", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("invited_crate_2", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("invited_crate_1", "invited_user")` $DIR/src/tests/owners.rs: `.add_user_owner("invited_crate_2", "invited_user")` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user("user_bar")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("accept_invitation", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("accept_invitation", "user_bar")` $DIR/src/tests/owners.rs: `.accept_ownership_invitation(&krate.name, krate.id)` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.show_crate_owners("accept_invitation")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user("user_bar")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("decline_invitation", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("decline_invitation", "user_bar")` $DIR/src/tests/owners.rs: `.decline_ownership_invitation(&krate.name, krate.id)` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.show_crate_owners("decline_invitation")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user("user_bar")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("accept_invitation", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("accept_invitation", "user_bar")` $DIR/src/tests/owners.rs: `.as_inner()` $DIR/src/tests/owners.rs: `.accept_ownership_invitation_by_token(&invite_token)` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.show_crate_owners("accept_invitation")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user("demo_user")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("demo_crate", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("demo_crate", "demo_user")` $DIR/src/tests/owners.rs: `.try_accept_ownership_invitation::<()>(&krate.name, krate.id)` $DIR/src/tests/owners.rs: `.show_crate_owners("demo_crate")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user("demo_user")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("demo_crate", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("demo_crate", "demo_user")` $DIR/src/tests/owners.rs: `.decline_ownership_invitation(&krate.name, krate.id)` $DIR/src/tests/owners.rs: `.show_crate_owners("demo_crate")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user("demo_user")` $DIR/src/tests/owners.rs: `.db(|conn| CrateBuilder::new("demo_crate", owner.id).expect_build(conn))` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("demo_crate", "demo_user")` $DIR/src/tests/owners.rs: `.as_inner()` $DIR/src/tests/owners.rs: `.try_accept_ownership_invitation_by_token::<()>(&invite_token)` $DIR/src/tests/owners.rs: `.show_crate_owners("demo_crate")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db(|conn| { NewUser { gh_id: -1, gh_login: invited_gh_login, name: None, gh_avatar: None, gh_access_token: Cow::Borrowed("some random token"), } .create_or_update(None, &app.as_inner().emails, conn) .unwrap(); CrateBuilder::new(krate_name, owner.id).expect_build(conn); })` $DIR/src/tests/owners.rs: `.create_or_update(None, &app.as_inner().emails, conn)` $DIR/src/tests/owners.rs: `.as_inner()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.db_new_user(invited_gh_login)` $DIR/src/tests/owners.rs: `.add_user_owner(krate_name, "user_bar")` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.db_new_user(invited_gh_login)` $DIR/src/tests/owners.rs: `.db_new_user(invited_gh_login)` $DIR/src/tests/owners.rs: `.db(|conn| { CrateBuilder::new(krate_name, owner.id).expect_build(conn); })` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner(krate_name, "user_bar")` $DIR/src/tests/owners.rs: `.list_invitations()` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db(|conn| { ( CrateBuilder::new("crate_1", owner.as_model().id).expect_build(conn), CrateBuilder::new("crate_2", owner.as_model().id).expect_build(conn), ) })` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.db_new_user("user_1")` $DIR/src/tests/owners.rs: `.db_new_user("user_2")` $DIR/src/tests/owners.rs: `.add_user_owner("crate_1", "user_1")` $DIR/src/tests/owners.rs: `.add_user_owner("crate_1", "user_2")` $DIR/src/tests/owners.rs: `.add_user_owner("crate_2", "user_1")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db_new_user("invited_user")` $DIR/src/tests/owners.rs: `.db(|conn| { ( CrateBuilder::new("crate_1", owner.as_model().id).expect_build(conn), CrateBuilder::new("crate_2", owner.as_model().id).expect_build(conn), ) })` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("crate_1", "invited_user")` $DIR/src/tests/owners.rs: `.add_user_owner("crate_2", "invited_user")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db_new_user("invited_user")` $DIR/src/tests/owners.rs: `.db(|conn| { ( CrateBuilder::new("crate_1", owner.as_model().id).expect_build(conn), CrateBuilder::new("crate_2", owner.as_model().id).expect_build(conn), ) })` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.add_user_owner("crate_1", "invited_user")` $DIR/src/tests/owners.rs: `.add_user_owner("crate_2", "invited_user")` $DIR/src/tests/owners.rs: `.trim_start_matches('?')` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.get::<()>("/api/private/crate_owner_invitations")` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db_new_user("other")` $DIR/src/tests/owners.rs: `.get_with_query::<()>( "/api/private/crate_owner_invitations", &format!("invitee_id={}", owner.as_model().id), )` $DIR/src/tests/owners.rs: `.get_with_query::<()>( "/api/private/crate_owner_invitations", &format!("invitee_id={}", other_user.as_model().id), )` $DIR/src/tests/owners.rs: `.with_token()` $DIR/src/tests/owners.rs: `.db_new_user("other")` $DIR/src/tests/owners.rs: `.db(|conn| { CrateBuilder::new("crate_1", owner.as_model().id).expect_build(conn); CrateBuilder::new("crate_2", other_user.as_model().id).expect_build(conn); })` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.as_model()` $DIR/src/tests/owners.rs: `.expect_build(conn)` $DIR/src/tests/owners.rs: `.get_with_query::<()>("/api/private/crate_owner_invitations", "crate_name=crate_1")` $DIR/src/tests/owners.rs: `.get_with_query::<()>("/api/private/crate_owner_invitations", "crate_name=crate_2")` $DIR/src/tests/pagination.rs: `config.max_allowed_page_offset = 1;` $DIR/src/tests/pagination.rs: `config.page_offset_cidr_blocklist = vec!["127.0.0.1/24".parse::().unwrap()];` $DIR/src/tests/pagination.rs: `app.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); });` $DIR/src/tests/pagination.rs: `CrateBuilder::new("pagination_links_1", user.id).expect_build(conn);` $DIR/src/tests/pagination.rs: `CrateBuilder::new("pagination_links_2", user.id).expect_build(conn);` $DIR/src/tests/pagination.rs: `CrateBuilder::new("pagination_links_3", user.id).expect_build(conn);` $DIR/src/tests/pagination.rs: `.with_config(|config| { config.max_allowed_page_offset = 1; config.page_offset_cidr_blocklist = vec!["127.0.0.1/24".parse::().unwrap()]; })` $DIR/src/tests/pagination.rs: `.with_user()` $DIR/src/tests/pagination.rs: `.as_model()` $DIR/src/tests/pagination.rs: `.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); })` $DIR/src/tests/pagination.rs: `.expect_build(conn)` $DIR/src/tests/pagination.rs: `.expect_build(conn)` $DIR/src/tests/pagination.rs: `.expect_build(conn)` $DIR/src/tests/pagination.rs: `.get_with_query::<()>("/api/v1/crates", "page=2&per_page=1")` $DIR/src/tests/read_only_mode.rs: `app.db(set_read_only).unwrap();` $DIR/src/tests/read_only_mode.rs: `app.db(|conn| { CrateBuilder::new("foo_yank_read_only", user.as_model().id) .version("1.0.0") .expect_build(conn); set_read_only(conn).unwrap(); });` $DIR/src/tests/read_only_mode.rs: `CrateBuilder::new("foo_yank_read_only", user.as_model().id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/read_only_mode.rs: `set_read_only(conn).unwrap();` $DIR/src/tests/read_only_mode.rs: `diesel::sql_query("ROLLBACK TO test_post_readonly") .execute(conn) .unwrap();` $DIR/src/tests/read_only_mode.rs: `app.db(|conn| { CrateBuilder::new("foo_download_read_only", user.as_model().id) .version("1.0.0") .expect_build(conn); set_read_only(conn).unwrap(); });` $DIR/src/tests/read_only_mode.rs: `CrateBuilder::new("foo_download_read_only", user.as_model().id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/read_only_mode.rs: `set_read_only(conn).unwrap();` $DIR/src/tests/read_only_mode.rs: `assert_ok_eq!(dl_count, None);` $DIR/src/tests/read_only_mode.rs: `.empty()` $DIR/src/tests/read_only_mode.rs: `.db(set_read_only)` $DIR/src/tests/read_only_mode.rs: `.get::<()>("/api/v1/crates")` $DIR/src/tests/read_only_mode.rs: `.with_token()` $DIR/src/tests/read_only_mode.rs: `.db(|conn| { CrateBuilder::new("foo_yank_read_only", user.as_model().id) .version("1.0.0") .expect_build(conn); set_read_only(conn).unwrap(); })` $DIR/src/tests/read_only_mode.rs: `.as_model()` $DIR/src/tests/read_only_mode.rs: `.version("1.0.0")` $DIR/src/tests/read_only_mode.rs: `.expect_build(conn)` $DIR/src/tests/read_only_mode.rs: `.delete::<()>("/api/v1/crates/foo_yank_read_only/1.0.0/yank")` $DIR/src/tests/read_only_mode.rs: `.execute(conn)` $DIR/src/tests/read_only_mode.rs: `.with_user()` $DIR/src/tests/read_only_mode.rs: `.db(|conn| { CrateBuilder::new("foo_download_read_only", user.as_model().id) .version("1.0.0") .expect_build(conn); set_read_only(conn).unwrap(); })` $DIR/src/tests/read_only_mode.rs: `.as_model()` $DIR/src/tests/read_only_mode.rs: `.version("1.0.0")` $DIR/src/tests/read_only_mode.rs: `.expect_build(conn)` $DIR/src/tests/read_only_mode.rs: `.get::<()>("/api/v1/crates/foo_download_read_only/1.0.0/download")` $DIR/src/tests/read_only_mode.rs: `.select(sum(downloads))` $DIR/src/tests/read_only_mode.rs: `.get_result(conn)` $DIR/src/tests/routes/categories/get.rs: `anon.get(url).assert_not_found();` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| { assert_ok!(new_category("Foo Bar", "foo-bar", "Foo Bar crates").create_or_update(conn)); assert_ok!( new_category("Foo Bar::Baz", "foo-bar::baz", "Baz crates").create_or_update(conn) ); });` $DIR/src/tests/routes/categories/get.rs: `assert_ok!(new_category("Foo Bar", "foo-bar", "Foo Bar crates").create_or_update(conn));` $DIR/src/tests/routes/categories/get.rs: `assert_ok!( new_category("Foo Bar::Baz", "foo-bar::baz", "Baz crates").create_or_update(conn) );` $DIR/src/tests/routes/categories/get.rs: `assert_ok!(new_category("cat1", "cat1", "Category 1 crates").create_or_update(conn));` $DIR/src/tests/routes/categories/get.rs: `assert_ok!( new_category("Category 2", "category-2", "Category 2 crates").create_or_update(conn) );` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| Category::update_crate(conn, &krate, &[]).unwrap());` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| Category::update_crate(conn, &krate, &["cat1"]).unwrap());` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| Category::update_crate(conn, &krate, &["category-2"]).unwrap());` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| Category::update_crate(conn, &krate, &[]).unwrap());` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| Category::update_crate(conn, &krate, &["cat1", "category-2"]).unwrap());` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| Category::update_crate(conn, &krate, &[]).unwrap());` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| { let invalid_categories = Category::update_crate(conn, &krate, &["cat1", "catnope"]).unwrap(); assert_eq!(invalid_categories, vec!["catnope"]); });` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| Category::update_crate(conn, &krate, &["Category 2"]).unwrap());` $DIR/src/tests/routes/categories/get.rs: `app.db(|conn| { assert_ok!(new_category("cat1::bar", "cat1::bar", "bar crates").create_or_update(conn)); Category::update_crate(conn, &krate, &["cat1", "cat1::bar"]).unwrap(); });` $DIR/src/tests/routes/categories/get.rs: `assert_ok!(new_category("cat1::bar", "cat1::bar", "bar crates").create_or_update(conn));` $DIR/src/tests/routes/categories/get.rs: `Category::update_crate(conn, &krate, &["cat1", "cat1::bar"]).unwrap();` $DIR/src/tests/routes/categories/get.rs: `.empty()` $DIR/src/tests/routes/categories/get.rs: `.get(url)` $DIR/src/tests/routes/categories/get.rs: `.assert_not_found()` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| { assert_ok!(new_category("Foo Bar", "foo-bar", "Foo Bar crates").create_or_update(conn)); assert_ok!( new_category("Foo Bar::Baz", "foo-bar::baz", "Baz crates").create_or_update(conn) ); })` $DIR/src/tests/routes/categories/get.rs: `.get(url)` $DIR/src/tests/routes/categories/get.rs: `.good()` $DIR/src/tests/routes/categories/get.rs: `.with_user()` $DIR/src/tests/routes/categories/get.rs: `.as_model()` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| { assert_ok!(new_category("cat1", "cat1", "Category 1 crates").create_or_update(conn)); assert_ok!( new_category("Category 2", "category-2", "Category 2 crates").create_or_update(conn) ); CrateBuilder::new("foo_crate", user.id).expect_build(conn) })` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| Category::update_crate(conn, &krate, &[]).unwrap())` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| Category::update_crate(conn, &krate, &["cat1"]).unwrap())` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| Category::update_crate(conn, &krate, &["category-2"]).unwrap())` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| Category::update_crate(conn, &krate, &[]).unwrap())` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| Category::update_crate(conn, &krate, &["cat1", "category-2"]).unwrap())` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| Category::update_crate(conn, &krate, &[]).unwrap())` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| { let invalid_categories = Category::update_crate(conn, &krate, &["cat1", "catnope"]).unwrap(); assert_eq!(invalid_categories, vec!["catnope"]); })` $DIR/src/tests/routes/categories/get.rs: `.show_category_list()` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| Category::update_crate(conn, &krate, &["Category 2"]).unwrap())` $DIR/src/tests/routes/categories/get.rs: `.db(|conn| { assert_ok!(new_category("cat1::bar", "cat1::bar", "bar crates").create_or_update(conn)); Category::update_crate(conn, &krate, &["cat1", "cat1::bar"]).unwrap(); })` $DIR/src/tests/routes/categories/list.rs: `assert_json_snapshot!(json);` $DIR/src/tests/routes/categories/list.rs: `app.db(|conn| { new_category("foo", "foo", "Foo crates") .create_or_update(conn) .unwrap(); new_category("foo::bar", "foo::bar", "Bar crates") .create_or_update(conn) .unwrap(); });` $DIR/src/tests/routes/categories/list.rs: `new_category("foo", "foo", "Foo crates") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/categories/list.rs: `new_category("foo::bar", "foo::bar", "Bar crates") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/categories/list.rs: `.empty()` $DIR/src/tests/routes/categories/list.rs: `.get("/api/v1/categories")` $DIR/src/tests/routes/categories/list.rs: `.good()` $DIR/src/tests/routes/categories/list.rs: `.db(|conn| { new_category("foo", "foo", "Foo crates") .create_or_update(conn) .unwrap(); new_category("foo::bar", "foo::bar", "Bar crates") .create_or_update(conn) .unwrap(); })` $DIR/src/tests/routes/categories/list.rs: `.create_or_update(conn)` $DIR/src/tests/routes/categories/list.rs: `.create_or_update(conn)` $DIR/src/tests/routes/categories/list.rs: `.get("/api/v1/categories")` $DIR/src/tests/routes/categories/list.rs: `.good()` $DIR/src/tests/routes/category_slugs/list.rs: `app.db(|conn| { new_category("Foo", "foo", "For crates that foo") .create_or_update(conn) .unwrap(); new_category("Bar", "bar", "For crates that bar") .create_or_update(conn) .unwrap(); });` $DIR/src/tests/routes/category_slugs/list.rs: `new_category("Foo", "foo", "For crates that foo") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/category_slugs/list.rs: `new_category("Bar", "bar", "For crates that bar") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/category_slugs/list.rs: `.empty()` $DIR/src/tests/routes/category_slugs/list.rs: `.db(|conn| { new_category("Foo", "foo", "For crates that foo") .create_or_update(conn) .unwrap(); new_category("Bar", "bar", "For crates that bar") .create_or_update(conn) .unwrap(); })` $DIR/src/tests/routes/category_slugs/list.rs: `.create_or_update(conn)` $DIR/src/tests/routes/category_slugs/list.rs: `.create_or_update(conn)` $DIR/src/tests/routes/category_slugs/list.rs: `.get("/api/v1/category_slugs")` $DIR/src/tests/routes/category_slugs/list.rs: `.good()` $DIR/src/tests/routes/crates/downloads.rs: `app.db(|conn| { CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); });` $DIR/src/tests/routes/crates/downloads.rs: `CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/routes/crates/downloads.rs: `download("foo_download/1.0.0");` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "foo_download/1.0.0", None, 0);` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "foo_download", None, 0);` $DIR/src/tests/routes/crates/downloads.rs: `persist_downloads_count(&app);` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "foo_download/1.0.0", None, 1);` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "foo_download", None, 1);` $DIR/src/tests/routes/crates/downloads.rs: `download("FOO_DOWNLOAD/1.0.0");` $DIR/src/tests/routes/crates/downloads.rs: `persist_downloads_count(&app);` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "FOO_DOWNLOAD/1.0.0", None, 2);` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "FOO_DOWNLOAD", None, 2);` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "FOO_DOWNLOAD/1.0.0", Some(&query), 0);` $DIR/src/tests/routes/crates/downloads.rs: `assert_dl_count(&anon, "FOO_DOWNLOAD/1.0.0", Some(&query), 2);` $DIR/src/tests/routes/crates/downloads.rs: `.with_user()` $DIR/src/tests/routes/crates/downloads.rs: `.as_model()` $DIR/src/tests/routes/crates/downloads.rs: `.db(|conn| { CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); })` $DIR/src/tests/routes/crates/downloads.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/downloads.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/downloads.rs: `.get::<()>(&url)` $DIR/src/tests/routes/crates/downloads.rs: `.date_naive()` $DIR/src/tests/routes/crates/downloads.rs: `.format("%F")` $DIR/src/tests/routes/crates/downloads.rs: `.date_naive()` $DIR/src/tests/routes/crates/downloads.rs: `.format("%F")` $DIR/src/tests/routes/crates/following.rs: `app.db(|conn| { CrateBuilder::new(a_crate, api_token.user_id).expect_build(conn); });` $DIR/src/tests/routes/crates/following.rs: `CrateBuilder::new(a_crate, api_token.user_id).expect_build(conn);` $DIR/src/tests/routes/crates/following.rs: `.with_user()` $DIR/src/tests/routes/crates/following.rs: `.get("/api/v1/crates/foo_following/following")` $DIR/src/tests/routes/crates/following.rs: `.with_token()` $DIR/src/tests/routes/crates/following.rs: `.as_model()` $DIR/src/tests/routes/crates/following.rs: `.db(|conn| { CrateBuilder::new(a_crate, api_token.user_id).expect_build(conn); })` $DIR/src/tests/routes/crates/following.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/following.rs: `.get(&format!("/api/v1/crates/{a_crate}/following"))` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("foo", user.id) .keyword("kw3") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("two-keywords", user.id) .keyword("kw1") .keyword("kw3") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap(); new_category("Category 1::Ba'r", "cat1::bar", "Ba'r crates") .create_or_update(conn) .unwrap(); Category::update_crate(conn, &krate, &["cat1"]).unwrap(); Category::update_crate(conn, &krate2, &["cat1::bar"]).unwrap(); });` $DIR/src/tests/routes/crates/list.rs: `new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `new_category("Category 1::Ba'r", "cat1::bar", "Ba'r crates") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `Category::update_crate(conn, &krate, &["cat1"]).unwrap();` $DIR/src/tests/routes/crates/list.rs: `Category::update_crate(conn, &krate2, &["cat1::bar"]).unwrap();` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("which", user.id).expect_build(conn); CrateBuilder::new("should_be_excluded", user.id) .readme("crate which does things") .expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("which", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("should_be_excluded", user.id) .readme("crate which does things") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("foo_exact", user.id) .description("bar_exact baz_exact") .expect_build(conn); CrateBuilder::new("bar-exact", user.id) .description("foo_exact baz_exact foo-exact baz_exact") .expect_build(conn); CrateBuilder::new("baz_exact", user.id) .description("foo-exact bar_exact foo-exact bar_exact foo_exact bar_exact") .expect_build(conn); CrateBuilder::new("other_exact", user.id) .description("other_exact") .expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("foo_exact", user.id) .description("bar_exact baz_exact") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("bar-exact", user.id) .description("foo_exact baz_exact foo-exact baz_exact") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("baz_exact", user.id) .description("foo-exact bar_exact foo-exact bar_exact foo_exact bar_exact") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("other_exact", user.id) .description("other_exact") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { let krate1 = CrateBuilder::new("foo_sort", user.id) .description("bar_sort baz_sort const") .downloads(50) .recent_downloads(50) .expect_build(conn); let krate2 = CrateBuilder::new("bar_sort", user.id) .description("foo_sort baz_sort foo_sort baz_sort const") .downloads(3333) .recent_downloads(0) .expect_build(conn); let krate3 = CrateBuilder::new("baz_sort", user.id) .description("foo_sort bar_sort foo_sort bar_sort foo_sort bar_sort const") .downloads(100_000) .recent_downloads(10) .expect_build(conn); let krate4 = CrateBuilder::new("other_sort", user.id) .description("other_sort const") .downloads(999_999) .expect_build(conn); // Set the created at column for each crate update(&krate1) .set(crates::created_at.eq(now - 4.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::created_at.eq(now - 1.weeks())) .execute(conn) .unwrap(); update(&krate3) .set(crates::created_at.eq(now - 2.weeks())) .execute(conn) .unwrap(); update(&krate4) .set(crates::created_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); // Set the updated at column for each crate update(&krate1) .set(crates::updated_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::updated_at.eq(now - 5.days())) .execute(conn) .unwrap(); update(&krate3) .set(crates::updated_at.eq(now - 10.seconds())) .execute(conn) .unwrap(); update(&krate4) .set(crates::updated_at.eq(now)) .execute(conn) .unwrap(); });` $DIR/src/tests/routes/crates/list.rs: `update(&krate1) .set(crates::created_at.eq(now - 4.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate2) .set(crates::created_at.eq(now - 1.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate3) .set(crates::created_at.eq(now - 2.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate4) .set(crates::created_at.eq(now - 3.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate1) .set(crates::updated_at.eq(now - 3.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate2) .set(crates::updated_at.eq(now - 5.days())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate3) .set(crates::updated_at.eq(now - 10.seconds())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate4) .set(crates::updated_at.eq(now)) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { let krate1 = CrateBuilder::new("foo_sort", user.id) .description("bar_sort baz_sort const") .downloads(50) .recent_downloads(50) .expect_build(conn); let krate2 = CrateBuilder::new("bar_sort", user.id) .description("foo_sort baz_sort foo_sort baz_sort const") .downloads(3333) .recent_downloads(0) .expect_build(conn); let krate3 = CrateBuilder::new("baz_sort", user.id) .description("foo_sort bar_sort foo_sort bar_sort foo_sort bar_sort const") .downloads(100_000) .recent_downloads(10) .expect_build(conn); let krate4 = CrateBuilder::new("other_sort", user.id) .description("other_sort const") .downloads(999_999) .expect_build(conn); // Set the created at column for each crate update(&krate1) .set(crates::created_at.eq(now - 4.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::created_at.eq(now - 1.weeks())) .execute(conn) .unwrap(); update(&krate3) .set(crates::created_at.eq(now - 2.weeks())) .execute(conn) .unwrap(); update(&krate4) .set(crates::created_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); // Set the updated at column for each crate update(&krate1) .set(crates::updated_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::updated_at.eq(now - 5.days())) .execute(conn) .unwrap(); update(&krate3) .set(crates::updated_at.eq(now - 10.seconds())) .execute(conn) .unwrap(); update(&krate4) .set(crates::updated_at.eq(now)) .execute(conn) .unwrap(); });` $DIR/src/tests/routes/crates/list.rs: `update(&krate1) .set(crates::created_at.eq(now - 4.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate2) .set(crates::created_at.eq(now - 1.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate3) .set(crates::created_at.eq(now - 2.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate4) .set(crates::created_at.eq(now - 3.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate1) .set(crates::updated_at.eq(now - 3.weeks())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate2) .set(crates::updated_at.eq(now - 5.days())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate3) .set(crates::updated_at.eq(now - 10.seconds())) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `update(&krate4) .set(crates::updated_at.eq(now)) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("foo", user.id).expect_build(conn); CrateBuilder::new("bar", user.id).expect_build(conn); CrateBuilder::new("baz", user.id).expect_build(conn); CrateBuilder::new("other", user.id).expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("foo", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("bar", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("baz", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("other", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("unyanked", user.id) .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("2.0.0")) .expect_build(conn); CrateBuilder::new("newest_yanked", user.id) .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("2.0.0").yanked(true)) .expect_build(conn); CrateBuilder::new("oldest_yanked", user.id) .version(VersionBuilder::new("1.0.0").yanked(true)) .version(VersionBuilder::new("2.0.0")) .expect_build(conn); CrateBuilder::new("all_yanked", user.id) .version(VersionBuilder::new("1.0.0").yanked(true)) .version(VersionBuilder::new("2.0.0").yanked(true)) .expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("unyanked", user.id) .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("2.0.0")) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("newest_yanked", user.id) .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("2.0.0").yanked(true)) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("oldest_yanked", user.id) .version(VersionBuilder::new("1.0.0").yanked(true)) .version(VersionBuilder::new("2.0.0")) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("all_yanked", user.id) .version(VersionBuilder::new("1.0.0").yanked(true)) .version(VersionBuilder::new("2.0.0").yanked(true)) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("foo_yanked_version", user.id) .description("foo") .version("1.0.0") .version(VersionBuilder::new("1.1.0").yanked(true)) .expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("foo_yanked_version", user.id) .description("foo") .version("1.0.0") .version(VersionBuilder::new("1.1.0").yanked(true)) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("foo", user.id) .description("foo") .version("0.3.0") .version("1.0.0") .version(VersionBuilder::new("1.1.0").yanked(true)) .version("2.0.0-beta.1") .version("0.3.1") .expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("foo", user.id) .description("foo") .version("0.3.0") .version("1.0.0") .version(VersionBuilder::new("1.1.0").yanked(true)) .version("2.0.0-beta.1") .version("0.3.1") .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { // More than 90 days ago CrateBuilder::new("green_ball", user.id) .description("For fetching") .downloads(10) .recent_downloads(0) .expect_build(conn); CrateBuilder::new("sweet_potato_snack", user.id) .description("For when better than usual") .downloads(5) .recent_downloads(2) .expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("green_ball", user.id) .description("For fetching") .downloads(10) .recent_downloads(0) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("sweet_potato_snack", user.id) .description("For when better than usual") .downloads(5) .recent_downloads(2) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { // More than 90 days ago CrateBuilder::new("green_ball", user.id) .description("For fetching") .downloads(0) .recent_downloads(0) .expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("green_ball", user.id) .description("For fetching") .downloads(0) .recent_downloads(0) .expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { new_category("Animal", "animal", "animal crates") .create_or_update(conn) .unwrap(); Category::update_crate(conn, &green_crate, &["animal"]).unwrap(); Category::update_crate(conn, &potato_crate, &["animal"]).unwrap(); });` $DIR/src/tests/routes/crates/list.rs: `new_category("Animal", "animal", "animal crates") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/crates/list.rs: `Category::update_crate(conn, &green_crate, &["animal"]).unwrap();` $DIR/src/tests/routes/crates/list.rs: `Category::update_crate(conn, &potato_crate, &["animal"]).unwrap();` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_1", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_2", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_3", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_1", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_2", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_3", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `calls += 1;` $DIR/src/tests/routes/crates/list.rs: `results.append( &mut resp .crates .iter() .map(|res| res.name.clone()) .collect::>(), );` $DIR/src/tests/routes/crates/list.rs: `url = Some(new_url);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_1", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_2", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_3", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_1", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_2", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("pagination_links_3", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { CrateBuilder::new("foo_my_packages", id).expect_build(conn); });` $DIR/src/tests/routes/crates/list.rs: `CrateBuilder::new("foo_my_packages", id).expect_build(conn);` $DIR/src/tests/routes/crates/list.rs: `app.db(|conn| { let krate = CrateBuilder::new("foo_my_packages", user.id).expect_build(conn); krate.owner_remove(conn, "foo").unwrap(); });` $DIR/src/tests/routes/crates/list.rs: `krate.owner_remove(conn, "foo").unwrap();` $DIR/src/tests/routes/crates/list.rs: `.empty()` $DIR/src/tests/routes/crates/list.rs: `.search("")` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { let u = new_user("foo") .create_or_update(None, &app.as_inner().emails, conn) .unwrap(); CrateBuilder::new("fooindex", u.id).expect_build(conn) })` $DIR/src/tests/routes/crates/list.rs: `.create_or_update(None, &app.as_inner().emails, conn)` $DIR/src/tests/routes/crates/list.rs: `.as_inner()` $DIR/src/tests/routes/crates/list.rs: `.search("")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { let krate = CrateBuilder::new("foo_index_queries", user.id) .readme("readme") .description("description") .keyword("kw1") .expect_build(conn); let krate2 = CrateBuilder::new("BAR_INDEX_QUERIES", user.id) .keyword("KW1") .expect_build(conn); CrateBuilder::new("foo", user.id) .keyword("kw3") .expect_build(conn); CrateBuilder::new("two-keywords", user.id) .keyword("kw1") .keyword("kw3") .expect_build(conn); (krate, krate2) })` $DIR/src/tests/routes/crates/list.rs: `.readme("readme")` $DIR/src/tests/routes/crates/list.rs: `.description("description")` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.keyword("KW1")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw3")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw3")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap(); new_category("Category 1::Ba'r", "cat1::bar", "Ba'r crates") .create_or_update(conn) .unwrap(); Category::update_crate(conn, &krate, &["cat1"]).unwrap(); Category::update_crate(conn, &krate2, &["cat1::bar"]).unwrap(); })` $DIR/src/tests/routes/crates/list.rs: `.create_or_update(conn)` $DIR/src/tests/routes/crates/list.rs: `.create_or_update(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("category=cat1")` $DIR/src/tests/routes/crates/list.rs: `.search("category=cat1::bar")` $DIR/src/tests/routes/crates/list.rs: `.search("keyword=cat2")` $DIR/src/tests/routes/crates/list.rs: `.search("q=readme&category=cat1")` $DIR/src/tests/routes/crates/list.rs: `.search("keyword=kw1&category=cat1")` $DIR/src/tests/routes/crates/list.rs: `.search("keyword=kw3&category=cat1")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("which", user.id).expect_build(conn); CrateBuilder::new("should_be_excluded", user.id) .readme("crate which does things") .expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.readme("crate which does things")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("q=which")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("foo_exact", user.id) .description("bar_exact baz_exact") .expect_build(conn); CrateBuilder::new("bar-exact", user.id) .description("foo_exact baz_exact foo-exact baz_exact") .expect_build(conn); CrateBuilder::new("baz_exact", user.id) .description("foo-exact bar_exact foo-exact bar_exact foo_exact bar_exact") .expect_build(conn); CrateBuilder::new("other_exact", user.id) .description("other_exact") .expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.description("bar_exact baz_exact")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("foo_exact baz_exact foo-exact baz_exact")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("foo-exact bar_exact foo-exact bar_exact foo_exact bar_exact")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("other_exact")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("q=foo-exact")` $DIR/src/tests/routes/crates/list.rs: `.search("q=bar_exact")` $DIR/src/tests/routes/crates/list.rs: `.search("q=baz_exact")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { let krate1 = CrateBuilder::new("foo_sort", user.id) .description("bar_sort baz_sort const") .downloads(50) .recent_downloads(50) .expect_build(conn); let krate2 = CrateBuilder::new("bar_sort", user.id) .description("foo_sort baz_sort foo_sort baz_sort const") .downloads(3333) .recent_downloads(0) .expect_build(conn); let krate3 = CrateBuilder::new("baz_sort", user.id) .description("foo_sort bar_sort foo_sort bar_sort foo_sort bar_sort const") .downloads(100_000) .recent_downloads(10) .expect_build(conn); let krate4 = CrateBuilder::new("other_sort", user.id) .description("other_sort const") .downloads(999_999) .expect_build(conn); // Set the created at column for each crate update(&krate1) .set(crates::created_at.eq(now - 4.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::created_at.eq(now - 1.weeks())) .execute(conn) .unwrap(); update(&krate3) .set(crates::created_at.eq(now - 2.weeks())) .execute(conn) .unwrap(); update(&krate4) .set(crates::created_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); // Set the updated at column for each crate update(&krate1) .set(crates::updated_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::updated_at.eq(now - 5.days())) .execute(conn) .unwrap(); update(&krate3) .set(crates::updated_at.eq(now - 10.seconds())) .execute(conn) .unwrap(); update(&krate4) .set(crates::updated_at.eq(now)) .execute(conn) .unwrap(); })` $DIR/src/tests/routes/crates/list.rs: `.description("bar_sort baz_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(50)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(50)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("foo_sort baz_sort foo_sort baz_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(3333)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(0)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("foo_sort bar_sort foo_sort bar_sort foo_sort bar_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(100_000)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(10)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("other_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(999_999)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 4.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 4.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 1.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 1.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 2.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 2.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 3.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 3.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now - 3.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 3.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now - 5.days()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 5.days())` $DIR/src/tests/routes/crates/list.rs: `.days()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now - 10.seconds()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 10.seconds())` $DIR/src/tests/routes/crates/list.rs: `.seconds()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now))` $DIR/src/tests/routes/crates/list.rs: `.eq(now)` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("sort=downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("sort=recent-downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("sort=recent-updates")` $DIR/src/tests/routes/crates/list.rs: `.search("sort=new")` $DIR/src/tests/routes/crates/list.rs: `.search("sort=recent-downloads")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { let krate1 = CrateBuilder::new("foo_sort", user.id) .description("bar_sort baz_sort const") .downloads(50) .recent_downloads(50) .expect_build(conn); let krate2 = CrateBuilder::new("bar_sort", user.id) .description("foo_sort baz_sort foo_sort baz_sort const") .downloads(3333) .recent_downloads(0) .expect_build(conn); let krate3 = CrateBuilder::new("baz_sort", user.id) .description("foo_sort bar_sort foo_sort bar_sort foo_sort bar_sort const") .downloads(100_000) .recent_downloads(10) .expect_build(conn); let krate4 = CrateBuilder::new("other_sort", user.id) .description("other_sort const") .downloads(999_999) .expect_build(conn); // Set the created at column for each crate update(&krate1) .set(crates::created_at.eq(now - 4.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::created_at.eq(now - 1.weeks())) .execute(conn) .unwrap(); update(&krate3) .set(crates::created_at.eq(now - 2.weeks())) .execute(conn) .unwrap(); update(&krate4) .set(crates::created_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); // Set the updated at column for each crate update(&krate1) .set(crates::updated_at.eq(now - 3.weeks())) .execute(conn) .unwrap(); update(&krate2) .set(crates::updated_at.eq(now - 5.days())) .execute(conn) .unwrap(); update(&krate3) .set(crates::updated_at.eq(now - 10.seconds())) .execute(conn) .unwrap(); update(&krate4) .set(crates::updated_at.eq(now)) .execute(conn) .unwrap(); })` $DIR/src/tests/routes/crates/list.rs: `.description("bar_sort baz_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(50)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(50)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("foo_sort baz_sort foo_sort baz_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(3333)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(0)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("foo_sort bar_sort foo_sort bar_sort foo_sort bar_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(100_000)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(10)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("other_sort const")` $DIR/src/tests/routes/crates/list.rs: `.downloads(999_999)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 4.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 4.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 1.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 1.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 2.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 2.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::created_at.eq(now - 3.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 3.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now - 3.weeks()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 3.weeks())` $DIR/src/tests/routes/crates/list.rs: `.weeks()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now - 5.days()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 5.days())` $DIR/src/tests/routes/crates/list.rs: `.days()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now - 10.seconds()))` $DIR/src/tests/routes/crates/list.rs: `.eq(now - 10.seconds())` $DIR/src/tests/routes/crates/list.rs: `.seconds()` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.set(crates::updated_at.eq(now))` $DIR/src/tests/routes/crates/list.rs: `.eq(now)` $DIR/src/tests/routes/crates/list.rs: `.execute(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("q=foo_sort&sort=downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("q=bar_sort&sort=downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("q=baz_sort&sort=downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("q=const&sort=downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("q=bar_sort&sort=recent-downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("sort=recent-downloads")` $DIR/src/tests/routes/crates/list.rs: `.search("q=bar_sort&sort=recent-updates")` $DIR/src/tests/routes/crates/list.rs: `.search("q=bar_sort&sort=new")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("foo", user.id).expect_build(conn); CrateBuilder::new("bar", user.id).expect_build(conn); CrateBuilder::new("baz", user.id).expect_build(conn); CrateBuilder::new("other", user.id).expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("ids%5B%5D=foo&ids%5B%5D=bar&ids%5B%5D=baz&ids%5B%5D=baz&ids%5B%5D=unknown")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { // exact match should be first let one = CrateBuilder::new("temp", user.id) .readme("readme") .description("description") .keyword("kw1") .expect_build(conn); // temp_udp should match second because of _ let two = CrateBuilder::new("temp_utp", user.id) .readme("readme") .description("description") .keyword("kw1") .expect_build(conn); // evalrs should match 3rd because of readme let three = CrateBuilder::new("evalrs", user.id) .readme("evalrs_temp evalrs_temp evalrs_temp") .description("description") .keyword("kw1") .expect_build(conn); // tempfile should appear 4th let four = CrateBuilder::new("tempfile", user.id) .readme("readme") .description("description") .keyword("kw1") .expect_build(conn); vec![one, two, three, four] })` $DIR/src/tests/routes/crates/list.rs: `.readme("readme")` $DIR/src/tests/routes/crates/list.rs: `.description("description")` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.readme("readme")` $DIR/src/tests/routes/crates/list.rs: `.description("description")` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.readme("evalrs_temp evalrs_temp evalrs_temp")` $DIR/src/tests/routes/crates/list.rs: `.description("description")` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.readme("readme")` $DIR/src/tests/routes/crates/list.rs: `.description("description")` $DIR/src/tests/routes/crates/list.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("q=temp")` $DIR/src/tests/routes/crates/list.rs: `.zip(ordered)` $DIR/src/tests/routes/crates/list.rs: `.search("q=te")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("unyanked", user.id) .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("2.0.0")) .expect_build(conn); CrateBuilder::new("newest_yanked", user.id) .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("2.0.0").yanked(true)) .expect_build(conn); CrateBuilder::new("oldest_yanked", user.id) .version(VersionBuilder::new("1.0.0").yanked(true)) .version(VersionBuilder::new("2.0.0")) .expect_build(conn); CrateBuilder::new("all_yanked", user.id) .version(VersionBuilder::new("1.0.0").yanked(true)) .version(VersionBuilder::new("2.0.0").yanked(true)) .expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("2.0.0"))` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("2.0.0").yanked(true))` $DIR/src/tests/routes/crates/list.rs: `.yanked(true)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("1.0.0").yanked(true))` $DIR/src/tests/routes/crates/list.rs: `.yanked(true)` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("2.0.0"))` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("1.0.0").yanked(true))` $DIR/src/tests/routes/crates/list.rs: `.yanked(true)` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("2.0.0").yanked(true))` $DIR/src/tests/routes/crates/list.rs: `.yanked(true)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("include_yanked=yes&sort=alphabetical")` $DIR/src/tests/routes/crates/list.rs: `.search("include_yanked=no&sort=alphabetical")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("foo_yanked_version", user.id) .description("foo") .version("1.0.0") .version(VersionBuilder::new("1.1.0").yanked(true)) .expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.description("foo")` $DIR/src/tests/routes/crates/list.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("1.1.0").yanked(true))` $DIR/src/tests/routes/crates/list.rs: `.yanked(true)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("q=foo")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("foo", user.id) .description("foo") .version("0.3.0") .version("1.0.0") .version(VersionBuilder::new("1.1.0").yanked(true)) .version("2.0.0-beta.1") .version("0.3.1") .expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.description("foo")` $DIR/src/tests/routes/crates/list.rs: `.version("0.3.0")` $DIR/src/tests/routes/crates/list.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/list.rs: `.version(VersionBuilder::new("1.1.0").yanked(true))` $DIR/src/tests/routes/crates/list.rs: `.yanked(true)` $DIR/src/tests/routes/crates/list.rs: `.version("2.0.0-beta.1")` $DIR/src/tests/routes/crates/list.rs: `.version("0.3.1")` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("q=foo")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { // More than 90 days ago CrateBuilder::new("green_ball", user.id) .description("For fetching") .downloads(10) .recent_downloads(0) .expect_build(conn); CrateBuilder::new("sweet_potato_snack", user.id) .description("For when better than usual") .downloads(5) .recent_downloads(2) .expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.description("For fetching")` $DIR/src/tests/routes/crates/list.rs: `.downloads(10)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(0)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("For when better than usual")` $DIR/src/tests/routes/crates/list.rs: `.downloads(5)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(2)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("sort=recent-downloads")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { // More than 90 days ago CrateBuilder::new("green_ball", user.id) .description("For fetching") .downloads(0) .recent_downloads(0) .expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.description("For fetching")` $DIR/src/tests/routes/crates/list.rs: `.downloads(0)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(0)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("sort=recent-downloads")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { // More than 90 days ago let green_crate = CrateBuilder::new("green_ball", user.id) .description("For fetching") .keyword("dog") .downloads(10) .recent_downloads(10) .expect_build(conn); let potato_crate = CrateBuilder::new("sweet_potato_snack", user.id) .description("For when better than usual") .keyword("dog") .downloads(20) .recent_downloads(0) .expect_build(conn); (green_crate, potato_crate) })` $DIR/src/tests/routes/crates/list.rs: `.description("For fetching")` $DIR/src/tests/routes/crates/list.rs: `.keyword("dog")` $DIR/src/tests/routes/crates/list.rs: `.downloads(10)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(10)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.description("For when better than usual")` $DIR/src/tests/routes/crates/list.rs: `.keyword("dog")` $DIR/src/tests/routes/crates/list.rs: `.downloads(20)` $DIR/src/tests/routes/crates/list.rs: `.recent_downloads(0)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("keyword=dog")` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { new_category("Animal", "animal", "animal crates") .create_or_update(conn) .unwrap(); Category::update_crate(conn, &green_crate, &["animal"]).unwrap(); Category::update_crate(conn, &potato_crate, &["animal"]).unwrap(); })` $DIR/src/tests/routes/crates/list.rs: `.create_or_update(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("category=animal")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("letter=p&per_page=1")` $DIR/src/tests/routes/crates/list.rs: `.search("letter=p&page=2&per_page=1")` $DIR/src/tests/routes/crates/list.rs: `.search("letter=p&page=3&per_page=1")` $DIR/src/tests/routes/crates/list.rs: `.search("letter=p&page=4&per_page=1")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.take()` $DIR/src/tests/routes/crates/list.rs: `.search(current_url.trim_start_matches('?'))` $DIR/src/tests/routes/crates/list.rs: `.trim_start_matches('?')` $DIR/src/tests/routes/crates/list.rs: `.append( &mut resp .crates .iter() .map(|res| res.name.clone()) .collect::>(), )` $DIR/src/tests/routes/crates/list.rs: `.map(|res| res.name.clone())` $DIR/src/tests/routes/crates/list.rs: `.collect::>()` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search("per_page=1")` $DIR/src/tests/routes/crates/list.rs: `.search("page=2&per_page=1")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("pagination_links_1", user.id).expect_build(conn); CrateBuilder::new("pagination_links_2", user.id).expect_build(conn); CrateBuilder::new("pagination_links_3", user.id).expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.get_with_query::<()>("/api/v1/crates", "page=1&per_page=100%22%EF%BC%8Cexception")` $DIR/src/tests/routes/crates/list.rs: `.get_with_query::<()>("/api/v1/crates", "page=100%22%EF%BC%8Cexception&per_page=1")` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { CrateBuilder::new("foo_my_packages", id).expect_build(conn); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.search_by_user_id(id)` $DIR/src/tests/routes/crates/list.rs: `.with_user()` $DIR/src/tests/routes/crates/list.rs: `.as_model()` $DIR/src/tests/routes/crates/list.rs: `.db(|conn| { let krate = CrateBuilder::new("foo_my_packages", user.id).expect_build(conn); krate.owner_remove(conn, "foo").unwrap(); })` $DIR/src/tests/routes/crates/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/list.rs: `.owner_remove(conn, "foo")` $DIR/src/tests/routes/crates/list.rs: `.search_by_user_id(user.id)` $DIR/src/tests/routes/crates/new.rs: `user.publish_crate(crate_to_publish).good();` $DIR/src/tests/routes/crates/new.rs: `.with_user()` $DIR/src/tests/routes/crates/new.rs: `.as_inner()` $DIR/src/tests/routes/crates/new.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/routes/crates/new.rs: `.good()` $DIR/src/tests/routes/crates/new.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/routes/crates/new.rs: `.into_json()` $DIR/src/tests/routes/crates/owners/add.rs: `app.db(|conn| { CrateBuilder::new("guacamole", owner.as_model().id).expect_build(conn); });` $DIR/src/tests/routes/crates/owners/add.rs: `CrateBuilder::new("guacamole", owner.as_model().id).expect_build(conn);` $DIR/src/tests/routes/crates/owners/add.rs: `.with_user()` $DIR/src/tests/routes/crates/owners/add.rs: `.db_new_user("cilantro")` $DIR/src/tests/routes/crates/owners/add.rs: `.db(|conn| { CrateBuilder::new("guacamole", owner.as_model().id).expect_build(conn); })` $DIR/src/tests/routes/crates/owners/add.rs: `.as_model()` $DIR/src/tests/routes/crates/owners/add.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/owners/add.rs: `.put("/api/v1/crates/guacamole/owners", body.unwrap())` $DIR/src/tests/routes/crates/owners/add.rs: `.good()` $DIR/src/tests/routes/crates/read.rs: `update(versions::table) .filter(versions::num.eq("1.0.0")) .set(versions::published_by.eq(none)) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/read.rs: `assert_none!(&versions[0].published_by);` $DIR/src/tests/routes/crates/read.rs: `update(versions::table) .filter(versions::num.eq("1.0.0")) .set(versions::published_by.eq(none)) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/read.rs: `user.publish_crate(crate_to_publish).good();` $DIR/src/tests/routes/crates/read.rs: `user.publish_crate(crate_to_publish).good();` $DIR/src/tests/routes/crates/read.rs: `app.db(|conn| { CrateBuilder::new("foo_bad_doc_url", user.id) .documentation("http://rust-ci.org/foo/foo_bad_doc_url/doc/foo_bad_doc_url/") .expect_build(conn) });` $DIR/src/tests/routes/crates/read.rs: `.with_user()` $DIR/src/tests/routes/crates/read.rs: `.as_model()` $DIR/src/tests/routes/crates/read.rs: `.db(|conn| { use crates_io::schema::versions; use diesel::{update, ExpressionMethods}; let krate = CrateBuilder::new("foo_show", user.id) .description("description") .documentation("https://example.com") .homepage("http://example.com") .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("0.5.0")) .version(VersionBuilder::new("0.5.1")) .keyword("kw1") .downloads(20) .recent_downloads(10) .expect_build(conn); // Make version 1.0.0 mimic a version published before we started recording who published // versions let none: Option = None; update(versions::table) .filter(versions::num.eq("1.0.0")) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); krate })` $DIR/src/tests/routes/crates/read.rs: `.description("description")` $DIR/src/tests/routes/crates/read.rs: `.documentation("https://example.com")` $DIR/src/tests/routes/crates/read.rs: `.homepage("http://example.com")` $DIR/src/tests/routes/crates/read.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/read.rs: `.version(VersionBuilder::new("0.5.0"))` $DIR/src/tests/routes/crates/read.rs: `.version(VersionBuilder::new("0.5.1"))` $DIR/src/tests/routes/crates/read.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/read.rs: `.downloads(20)` $DIR/src/tests/routes/crates/read.rs: `.recent_downloads(10)` $DIR/src/tests/routes/crates/read.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/read.rs: `.filter(versions::num.eq("1.0.0"))` $DIR/src/tests/routes/crates/read.rs: `.eq("1.0.0")` $DIR/src/tests/routes/crates/read.rs: `.set(versions::published_by.eq(none))` $DIR/src/tests/routes/crates/read.rs: `.eq(none)` $DIR/src/tests/routes/crates/read.rs: `.execute(conn)` $DIR/src/tests/routes/crates/read.rs: `.show_crate("foo_show")` $DIR/src/tests/routes/crates/read.rs: `.with_user()` $DIR/src/tests/routes/crates/read.rs: `.as_model()` $DIR/src/tests/routes/crates/read.rs: `.db(|conn| { use crates_io::schema::versions; use diesel::{update, ExpressionMethods}; let krate = CrateBuilder::new("foo_show_minimal", user.id) .description("description") .documentation("https://example.com") .homepage("http://example.com") .version(VersionBuilder::new("1.0.0")) .version(VersionBuilder::new("0.5.0")) .version(VersionBuilder::new("0.5.1")) .keyword("kw1") .downloads(20) .recent_downloads(10) .expect_build(conn); // Make version 1.0.0 mimic a version published before we started recording who published // versions let none: Option = None; update(versions::table) .filter(versions::num.eq("1.0.0")) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); krate })` $DIR/src/tests/routes/crates/read.rs: `.description("description")` $DIR/src/tests/routes/crates/read.rs: `.documentation("https://example.com")` $DIR/src/tests/routes/crates/read.rs: `.homepage("http://example.com")` $DIR/src/tests/routes/crates/read.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/read.rs: `.version(VersionBuilder::new("0.5.0"))` $DIR/src/tests/routes/crates/read.rs: `.version(VersionBuilder::new("0.5.1"))` $DIR/src/tests/routes/crates/read.rs: `.keyword("kw1")` $DIR/src/tests/routes/crates/read.rs: `.downloads(20)` $DIR/src/tests/routes/crates/read.rs: `.recent_downloads(10)` $DIR/src/tests/routes/crates/read.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/read.rs: `.filter(versions::num.eq("1.0.0"))` $DIR/src/tests/routes/crates/read.rs: `.eq("1.0.0")` $DIR/src/tests/routes/crates/read.rs: `.set(versions::published_by.eq(none))` $DIR/src/tests/routes/crates/read.rs: `.eq(none)` $DIR/src/tests/routes/crates/read.rs: `.execute(conn)` $DIR/src/tests/routes/crates/read.rs: `.show_crate_minimal("foo_show_minimal")` $DIR/src/tests/routes/crates/read.rs: `.with_user()` $DIR/src/tests/routes/crates/read.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/routes/crates/read.rs: `.good()` $DIR/src/tests/routes/crates/read.rs: `.add_file("foo_version_size-2.0.0/big", "a")` $DIR/src/tests/routes/crates/read.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/routes/crates/read.rs: `.good()` $DIR/src/tests/routes/crates/read.rs: `.show_crate("foo_version_size")` $DIR/src/tests/routes/crates/read.rs: `.find(|v| v.num == "1.0.0")` $DIR/src/tests/routes/crates/read.rs: `.find(|v| v.num == "2.0.0")` $DIR/src/tests/routes/crates/read.rs: `.with_user()` $DIR/src/tests/routes/crates/read.rs: `.as_model()` $DIR/src/tests/routes/crates/read.rs: `.db(|conn| { CrateBuilder::new("foo_bad_doc_url", user.id) .documentation("http://rust-ci.org/foo/foo_bad_doc_url/doc/foo_bad_doc_url/") .expect_build(conn) })` $DIR/src/tests/routes/crates/read.rs: `.documentation("http://rust-ci.org/foo/foo_bad_doc_url/doc/foo_bad_doc_url/")` $DIR/src/tests/routes/crates/read.rs: `.show_crate("foo_bad_doc_url")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { let c1 = CrateBuilder::new("c1", user.id).expect_build(conn); CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version( VersionBuilder::new("1.1.0") .dependency(&c1, None) .dependency(&c1, Some("foo")), ) .expect_build(conn); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version( VersionBuilder::new("1.1.0") .dependency(&c1, None) .dependency(&c1, Some("foo")), ) .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.1.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version("1.0.0") .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c2", user.id) .version("1.0.0") .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version("2.0.0") .expect_build(conn); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version("2.0.0") .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version("1.1.0-pre") .expect_build(conn); CrateBuilder::new("c3", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version("1.1.0-pre") .expect_build(conn); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c2", user.id) .version("1.1.0-pre") .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c3", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version("1.1.0-pre") .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version("1.0.0") .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c2", user.id) .version("1.0.0") .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { use crates_io::schema::versions; use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl}; diesel::update(versions::table.filter(versions::num.eq("2.0.0"))) .set(versions::yanked.eq(true)) .execute(conn) .unwrap(); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `diesel::update(versions::table.filter(versions::num.eq("2.0.0"))) .set(versions::yanked.eq(true)) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { use crates_io::schema::versions; use diesel::{update, ExpressionMethods, RunQueryDsl}; let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn); // Make c2's version (and,incidentally, c1's, but that doesn't matter) mimic a version // published before we started recording who published versions let none: Option = None; update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); // c3's version will have the published by info recorded CrateBuilder::new("c3", user.id) .version(VersionBuilder::new("3.0.0").dependency(&c1, None)) .expect_build(conn); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c3", user.id) .version(VersionBuilder::new("3.0.0").dependency(&c1, None)) .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `assert_none!(&c2_version.published_by);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `app.db(|conn| { let c1 = CrateBuilder::new("c1", user.id).expect_build(conn); // The crate that depends on c1... CrateBuilder::new("c2", user.id) // ...has a patch version at the limits of what the semver crate supports .version(VersionBuilder::new(&large_but_valid_version_number).dependency(&c1, None)) .expect_build(conn); });` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `CrateBuilder::new("c2", user.id) // ...has a patch version at the limits of what the semver crate supports .version(VersionBuilder::new(&large_but_valid_version_number).dependency(&c1, None)) .expect_build(conn);` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { let c1 = CrateBuilder::new("c1", user.id).expect_build(conn); CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version( VersionBuilder::new("1.1.0") .dependency(&c1, None) .dependency(&c1, Some("foo")), ) .expect_build(conn); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version(VersionBuilder::new("1.0.0").dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version( VersionBuilder::new("1.1.0") .dependency(&c1, None) .dependency(&c1, Some("foo")), )` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, Some("foo"))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c2")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.1.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version("1.0.0") .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.1.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version(VersionBuilder::new("2.0.0").dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version("2.0.0") .expect_build(conn); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version(VersionBuilder::new("1.0.0").dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("2.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version("1.1.0-pre") .expect_build(conn); CrateBuilder::new("c3", user.id) .version(VersionBuilder::new("1.0.0").dependency(&c1, None)) .version("1.1.0-pre") .expect_build(conn); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.1.0-pre")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version(VersionBuilder::new("1.0.0").dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.1.0-pre")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version("1.0.0") .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version(VersionBuilder::new("2.0.0").dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { use crates_io::schema::versions; use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl}; diesel::update(versions::table.filter(versions::num.eq("2.0.0"))) .set(versions::yanked.eq(true)) .execute(conn) .unwrap(); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.filter(versions::num.eq("2.0.0"))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.eq("2.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.set(versions::yanked.eq(true))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.eq(true)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.execute(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { use crates_io::schema::versions; use diesel::{update, ExpressionMethods, RunQueryDsl}; let c1 = CrateBuilder::new("c1", user.id) .version("1.0.0") .expect_build(conn); CrateBuilder::new("c2", user.id) .version(VersionBuilder::new("2.0.0").dependency(&c1, None)) .expect_build(conn); // Make c2's version (and,incidentally, c1's, but that doesn't matter) mimic a version // published before we started recording who published versions let none: Option = None; update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); // c3's version will have the published by info recorded CrateBuilder::new("c3", user.id) .version(VersionBuilder::new("3.0.0").dependency(&c1, None)) .expect_build(conn); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version(VersionBuilder::new("2.0.0").dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.set(versions::published_by.eq(none))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.eq(none)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.execute(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.version(VersionBuilder::new("3.0.0").dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.find(|v| v.krate == "c2")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.find(|v| v.krate == "c3")` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.db(|conn| { let c1 = CrateBuilder::new("c1", user.id).expect_build(conn); // The crate that depends on c1... CrateBuilder::new("c2", user.id) // ...has a patch version at the limits of what the semver crate supports .version(VersionBuilder::new(&large_but_valid_version_number).dependency(&c1, None)) .expect_build(conn); })` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `// ...has a patch version at the limits of what the semver crate supports .version(VersionBuilder::new(&large_but_valid_version_number).dependency(&c1, None))` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.dependency(&c1, None)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/reverse_dependencies.rs: `.reverse_dependencies("c1")` $DIR/src/tests/routes/crates/versions/authors.rs: `app.db(|conn| { CrateBuilder::new("foo_authors", user.id) .version("1.0.0") .expect_build(conn); });` $DIR/src/tests/routes/crates/versions/authors.rs: `CrateBuilder::new("foo_authors", user.id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/routes/crates/versions/authors.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/authors.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/authors.rs: `.db(|conn| { CrateBuilder::new("foo_authors", user.id) .version("1.0.0") .expect_build(conn); })` $DIR/src/tests/routes/crates/versions/authors.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/versions/authors.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/authors.rs: `.get("/api/v1/crates/foo_authors/1.0.0/authors")` $DIR/src/tests/routes/crates/versions/authors.rs: `.good()` $DIR/src/tests/routes/crates/versions/authors.rs: `.as_object()` $DIR/src/tests/routes/crates/versions/dependencies.rs: `app.db(|conn| { let c1 = CrateBuilder::new("foo_deps", user.id).expect_build(conn); let c2 = CrateBuilder::new("bar_deps", user.id).expect_build(conn); VersionBuilder::new("1.0.0") .dependency(&c2, None) .expect_build(c1.id, user.id, conn); });` $DIR/src/tests/routes/crates/versions/dependencies.rs: `VersionBuilder::new("1.0.0") .dependency(&c2, None) .expect_build(c1.id, user.id, conn);` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.db(|conn| { let c1 = CrateBuilder::new("foo_deps", user.id).expect_build(conn); let c2 = CrateBuilder::new("bar_deps", user.id).expect_build(conn); VersionBuilder::new("1.0.0") .dependency(&c2, None) .expect_build(c1.id, user.id, conn); })` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.dependency(&c2, None)` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.expect_build(c1.id, user.id, conn)` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.get("/api/v1/crates/foo_deps/1.0.0/dependencies")` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.good()` $DIR/src/tests/routes/crates/versions/dependencies.rs: `.get::<()>("/api/v1/crates/foo_deps/1.0.2/dependencies")` $DIR/src/tests/routes/crates/versions/download.rs: `app.db(|conn| { CrateBuilder::new("foo_bad", user.id).expect_build(conn); });` $DIR/src/tests/routes/crates/versions/download.rs: `CrateBuilder::new("foo_bad", user.id).expect_build(conn);` $DIR/src/tests/routes/crates/versions/download.rs: `app.db(|conn| { CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); });` $DIR/src/tests/routes/crates/versions/download.rs: `CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/routes/crates/versions/download.rs: `config.force_unconditional_redirects = true;` $DIR/src/tests/routes/crates/versions/download.rs: `app.db(|conn| { CrateBuilder::new("foo-download", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); });` $DIR/src/tests/routes/crates/versions/download.rs: `CrateBuilder::new("foo-download", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/routes/crates/versions/download.rs: `anon.get::<()>("/api/v1/crates/foo-download/1.0.0/download") .assert_redirect_ends_with("/crates/foo-download/foo-download-1.0.0.crate");` $DIR/src/tests/routes/crates/versions/download.rs: `anon.get::<()>("/api/v1/crates/Foo_downloaD/1.0.0/download") .assert_redirect_ends_with("/crates/Foo_downloaD/Foo_downloaD-1.0.0.crate");` $DIR/src/tests/routes/crates/versions/download.rs: `anon.get::<()>("/api/v1/crates/foo-download/2.0.0/download") .assert_redirect_ends_with("/crates/foo-download/foo-download-2.0.0.crate");` $DIR/src/tests/routes/crates/versions/download.rs: `app.db(|conn| { CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); });` $DIR/src/tests/routes/crates/versions/download.rs: `CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/routes/crates/versions/download.rs: `anon.get::<()>("/api/v1/crates/foo_download/1.0.0/download") .assert_redirect_ends_with("/crates/foo_download/foo_download-1.0.0.crate");` $DIR/src/tests/routes/crates/versions/download.rs: `app.db(|conn| { diesel::update(crates.filter(name.eq("foo_download"))) .set(name.eq("other")) .execute(conn) .unwrap(); });` $DIR/src/tests/routes/crates/versions/download.rs: `diesel::update(crates.filter(name.eq("foo_download"))) .set(name.eq("other")) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/versions/download.rs: `anon.get::<()>("/api/v1/crates/foo_download/1.0.0/download") .assert_redirect_ends_with("/crates/foo_download/foo_download-1.0.0.crate");` $DIR/src/tests/routes/crates/versions/download.rs: `downloads::persist_downloads_count(&app);` $DIR/src/tests/routes/crates/versions/download.rs: `app.db(|conn| { CrateBuilder::new("foo", user.id) .version(VersionBuilder::new("1.0.0+bar")) .expect_build(conn); });` $DIR/src/tests/routes/crates/versions/download.rs: `CrateBuilder::new("foo", user.id) .version(VersionBuilder::new("1.0.0+bar")) .expect_build(conn);` $DIR/src/tests/routes/crates/versions/download.rs: `anon.get::<()>("/api/v1/crates/foo/1.0.0+bar/download") .assert_redirect_ends_with("/crates/foo/foo-1.0.0%2Bbar.crate");` $DIR/src/tests/routes/crates/versions/download.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/download.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/download.rs: `.db(|conn| { CrateBuilder::new("foo_bad", user.id).expect_build(conn); })` $DIR/src/tests/routes/crates/versions/download.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/download.rs: `.get("/api/v1/crates/foo_bad/0.1.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/download.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/download.rs: `.db(|conn| { CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); })` $DIR/src/tests/routes/crates/versions/download.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/versions/download.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/foo-download/1.0.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.with_config(|config| { config.force_unconditional_redirects = true; })` $DIR/src/tests/routes/crates/versions/download.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/download.rs: `.db(|conn| { CrateBuilder::new("foo-download", user.as_model().id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); })` $DIR/src/tests/routes/crates/versions/download.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/download.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/versions/download.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/foo-download/1.0.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.assert_redirect_ends_with("/crates/foo-download/foo-download-1.0.0.crate")` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/Foo_downloaD/1.0.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.assert_redirect_ends_with("/crates/Foo_downloaD/Foo_downloaD-1.0.0.crate")` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/foo-download/2.0.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.assert_redirect_ends_with("/crates/foo-download/foo-download-2.0.0.crate")` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/bar-download/1.0.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/download.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/download.rs: `.db(|conn| { CrateBuilder::new("foo_download", user.id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); })` $DIR/src/tests/routes/crates/versions/download.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/crates/versions/download.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/foo_download/1.0.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.assert_redirect_ends_with("/crates/foo_download/foo_download-1.0.0.crate")` $DIR/src/tests/routes/crates/versions/download.rs: `.db(|conn| { diesel::update(crates.filter(name.eq("foo_download"))) .set(name.eq("other")) .execute(conn) .unwrap(); })` $DIR/src/tests/routes/crates/versions/download.rs: `.filter(name.eq("foo_download"))` $DIR/src/tests/routes/crates/versions/download.rs: `.eq("foo_download")` $DIR/src/tests/routes/crates/versions/download.rs: `.set(name.eq("other"))` $DIR/src/tests/routes/crates/versions/download.rs: `.eq("other")` $DIR/src/tests/routes/crates/versions/download.rs: `.execute(conn)` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/foo_download/1.0.0/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.assert_redirect_ends_with("/crates/foo_download/foo_download-1.0.0.crate")` $DIR/src/tests/routes/crates/versions/download.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/download.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/download.rs: `.db(|conn| { CrateBuilder::new("foo", user.id) .version(VersionBuilder::new("1.0.0+bar")) .expect_build(conn); })` $DIR/src/tests/routes/crates/versions/download.rs: `.version(VersionBuilder::new("1.0.0+bar"))` $DIR/src/tests/routes/crates/versions/download.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/foo/1.0.0+bar/download")` $DIR/src/tests/routes/crates/versions/download.rs: `.assert_redirect_ends_with("/crates/foo/foo-1.0.0%2Bbar.crate")` $DIR/src/tests/routes/crates/versions/download.rs: `.get::<()>("/api/v1/crates/foo/1.0.0+bar/readme")` $DIR/src/tests/routes/crates/versions/read.rs: `update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap();` $DIR/src/tests/routes/crates/versions/read.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/read.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/read.rs: `.db(|conn| { let krate = CrateBuilder::new("foo_vers_show", user.id).expect_build(conn); VersionBuilder::new("2.0.0") .size(1234) .checksum("c241cd77c3723ccf1aa453f169ee60c0a888344da504bee0142adb859092acb4") .rust_version("1.64") .expect_build(krate.id, user.id, conn) })` $DIR/src/tests/routes/crates/versions/read.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/read.rs: `.size(1234)` $DIR/src/tests/routes/crates/versions/read.rs: `.checksum("c241cd77c3723ccf1aa453f169ee60c0a888344da504bee0142adb859092acb4")` $DIR/src/tests/routes/crates/versions/read.rs: `.rust_version("1.64")` $DIR/src/tests/routes/crates/versions/read.rs: `.get(url)` $DIR/src/tests/routes/crates/versions/read.rs: `.good()` $DIR/src/tests/routes/crates/versions/read.rs: `.with_user()` $DIR/src/tests/routes/crates/versions/read.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/read.rs: `.db(|conn| { let krate = CrateBuilder::new("foo_vers_show_no_pb", user.id).expect_build(conn); let version = VersionBuilder::new("1.0.0").expect_build(krate.id, user.id, conn); // Mimic a version published before we started recording who published versions let none: Option = None; update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); version })` $DIR/src/tests/routes/crates/versions/read.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/read.rs: `.expect_build(krate.id, user.id, conn)` $DIR/src/tests/routes/crates/versions/read.rs: `.set(versions::published_by.eq(none))` $DIR/src/tests/routes/crates/versions/read.rs: `.eq(none)` $DIR/src/tests/routes/crates/versions/read.rs: `.execute(conn)` $DIR/src/tests/routes/crates/versions/read.rs: `.get(url)` $DIR/src/tests/routes/crates/versions/read.rs: `.good()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `app.db(|conn| { CrateBuilder::new("foo_not", another_user.id) .version("1.0.0") .expect_build(conn); });` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `CrateBuilder::new("foo_not", another_user.id) .version("1.0.0") .expect_build(conn);` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `token.yank("fyk", "1.0.0").good();` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `token.publish_crate(crate_to_publish).good();` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `token.yank("fyk", "1.0.0").good();` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `token.unyank("fyk", "1.0.0").good();` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.with_token()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_user("bar")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.as_model()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db(|conn| { CrateBuilder::new("foo_not", another_user.id) .version("1.0.0") .expect_build(conn); })` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.version("1.0.0")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.expect_build(conn)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank("foo_not", "1.0.0")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.with_token()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.good()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank("fyk", "1.0.0")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.good()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.with_token()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.good()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank("fyk", "1.0.0")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.good()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank("fyk", "1.0.0")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.good()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.show_version("fyk", "1.0.0")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_token("test-token")` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token("test-token", None, None, Some(expired_at.naive_utc()))` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.naive_utc()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token("test-token", None, None, Some(expired_at.naive_utc()))` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.naive_utc()` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token("test-token", None, Some(vec![EndpointScope::Yank]), None)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token( "test-token", None, Some(vec![EndpointScope::PublishUpdate]), None, )` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token( "test-token", Some(vec![CrateScope::try_from(CRATE_NAME).unwrap()]), None, None, )` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token( "test-token", Some(vec![CrateScope::try_from(wildcard).unwrap()]), None, None, )` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token( "test-token", Some(vec![CrateScope::try_from("foo").unwrap()]), None, None, )` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.db_new_scoped_token( "test-token", Some(vec![CrateScope::try_from("foo*").unwrap()]), None, None, )` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.yank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/crates/versions/yank_unyank.rs: `.unyank(CRATE_NAME, CRATE_VERSION)` $DIR/src/tests/routes/keywords/list.rs: `app.db(|conn| { Keyword::find_or_create_all(conn, &["foo"]).unwrap(); });` $DIR/src/tests/routes/keywords/list.rs: `Keyword::find_or_create_all(conn, &["foo"]).unwrap();` $DIR/src/tests/routes/keywords/list.rs: `.empty()` $DIR/src/tests/routes/keywords/list.rs: `.get(url)` $DIR/src/tests/routes/keywords/list.rs: `.good()` $DIR/src/tests/routes/keywords/list.rs: `.db(|conn| { Keyword::find_or_create_all(conn, &["foo"]).unwrap(); })` $DIR/src/tests/routes/keywords/list.rs: `.get(url)` $DIR/src/tests/routes/keywords/list.rs: `.good()` $DIR/src/tests/routes/keywords/read.rs: `anon.get(url).assert_not_found();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::find_or_create_all(conn, &["foo"]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::find_or_create_all(conn, &["foo"]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `anon.get(url).assert_not_found();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::find_or_create_all(conn, &["UPPER"]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::find_or_create_all(conn, &["UPPER"]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `Keyword::find_or_create_all(conn, &["kw1", "kw2"]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::update_crate(conn, &krate, &[]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::update_crate(conn, &krate, &[]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::update_crate(conn, &krate, &["kw1"]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::update_crate(conn, &krate, &["kw1"]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::update_crate(conn, &krate, &["kw2"]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::update_crate(conn, &krate, &["kw2"]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::update_crate(conn, &krate, &[]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::update_crate(conn, &krate, &[]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::update_crate(conn, &krate, &["kw1", "kw2"]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::update_crate(conn, &krate, &["kw1", "kw2"]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `app.db(|conn| { Keyword::update_crate(conn, &krate, &[]).unwrap(); });` $DIR/src/tests/routes/keywords/read.rs: `Keyword::update_crate(conn, &krate, &[]).unwrap();` $DIR/src/tests/routes/keywords/read.rs: `.empty()` $DIR/src/tests/routes/keywords/read.rs: `.get(url)` $DIR/src/tests/routes/keywords/read.rs: `.assert_not_found()` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::find_or_create_all(conn, &["foo"]).unwrap(); })` $DIR/src/tests/routes/keywords/read.rs: `.get(url)` $DIR/src/tests/routes/keywords/read.rs: `.good()` $DIR/src/tests/routes/keywords/read.rs: `.empty()` $DIR/src/tests/routes/keywords/read.rs: `.get(url)` $DIR/src/tests/routes/keywords/read.rs: `.assert_not_found()` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::find_or_create_all(conn, &["UPPER"]).unwrap(); })` $DIR/src/tests/routes/keywords/read.rs: `.get(url)` $DIR/src/tests/routes/keywords/read.rs: `.good()` $DIR/src/tests/routes/keywords/read.rs: `.with_user()` $DIR/src/tests/routes/keywords/read.rs: `.as_model()` $DIR/src/tests/routes/keywords/read.rs: `.get(&format!("/api/v1/keywords/{kw}"))` $DIR/src/tests/routes/keywords/read.rs: `.good()` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::find_or_create_all(conn, &["kw1", "kw2"]).unwrap(); CrateBuilder::new("fookey", user.id).expect_build(conn) })` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::update_crate(conn, &krate, &[]).unwrap(); })` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::update_crate(conn, &krate, &["kw1"]).unwrap(); })` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::update_crate(conn, &krate, &["kw2"]).unwrap(); })` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::update_crate(conn, &krate, &[]).unwrap(); })` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::update_crate(conn, &krate, &["kw1", "kw2"]).unwrap(); })` $DIR/src/tests/routes/keywords/read.rs: `.db(|conn| { Keyword::update_crate(conn, &krate, &[]).unwrap(); })` $DIR/src/tests/routes/me/email_notifications.rs: `user.update_email_notifications(vec![EmailNotificationsUpdate { id: a_id, email_notifications: false, }]);` $DIR/src/tests/routes/me/email_notifications.rs: `user.update_email_notifications(vec![EmailNotificationsUpdate { id: b_id, email_notifications: false, }]);` $DIR/src/tests/routes/me/email_notifications.rs: `user.update_email_notifications(vec![ EmailNotificationsUpdate { id: a_id, email_notifications: true, }, EmailNotificationsUpdate { id: b_id, email_notifications: true, }, ]);` $DIR/src/tests/routes/me/email_notifications.rs: `user.update_email_notifications(vec![EmailNotificationsUpdate { id: not_my_crate.id, email_notifications: false, }]);` $DIR/src/tests/routes/me/email_notifications.rs: `.with_user()` $DIR/src/tests/routes/me/email_notifications.rs: `.db(|conn| { vec![ CrateBuilder::new("test_package", user.as_model().id).expect_build(conn), CrateBuilder::new("another_package", user.as_model().id).expect_build(conn), ] })` $DIR/src/tests/routes/me/email_notifications.rs: `.get(0)` $DIR/src/tests/routes/me/email_notifications.rs: `.get(1)` $DIR/src/tests/routes/me/email_notifications.rs: `.update_email_notifications(vec![EmailNotificationsUpdate { id: a_id, email_notifications: false, }])` $DIR/src/tests/routes/me/email_notifications.rs: `.show_me()` $DIR/src/tests/routes/me/email_notifications.rs: `.update_email_notifications(vec![EmailNotificationsUpdate { id: b_id, email_notifications: false, }])` $DIR/src/tests/routes/me/email_notifications.rs: `.show_me()` $DIR/src/tests/routes/me/email_notifications.rs: `.update_email_notifications(vec![ EmailNotificationsUpdate { id: a_id, email_notifications: true, }, EmailNotificationsUpdate { id: b_id, email_notifications: true, }, ])` $DIR/src/tests/routes/me/email_notifications.rs: `.show_me()` $DIR/src/tests/routes/me/email_notifications.rs: `.with_user()` $DIR/src/tests/routes/me/email_notifications.rs: `.db(|conn| { let u = new_user("arbitrary_username") .create_or_update(None, &app.as_inner().emails, conn) .unwrap(); CrateBuilder::new("test_package", u.id).expect_build(conn) })` $DIR/src/tests/routes/me/email_notifications.rs: `.create_or_update(None, &app.as_inner().emails, conn)` $DIR/src/tests/routes/me/email_notifications.rs: `.as_inner()` $DIR/src/tests/routes/me/email_notifications.rs: `.update_email_notifications(vec![EmailNotificationsUpdate { id: not_my_crate.id, email_notifications: false, }])` $DIR/src/tests/routes/me/email_notifications.rs: `.db(|conn| { crate_owners::table .select(crate_owners::email_notifications) .filter(crate_owners::crate_id.eq(not_my_crate.id)) .first(conn) })` $DIR/src/tests/routes/me/email_notifications.rs: `.select(crate_owners::email_notifications)` $DIR/src/tests/routes/me/email_notifications.rs: `.filter(crate_owners::crate_id.eq(not_my_crate.id))` $DIR/src/tests/routes/me/email_notifications.rs: `.eq(not_my_crate.id)` $DIR/src/tests/routes/me/get.rs: `anon.get(url).assert_forbidden();` $DIR/src/tests/routes/me/get.rs: `app.db(|conn| { CrateBuilder::new("foo_my_packages", user.as_model().id).expect_build(conn); assert_eq!(json.user.email, user.as_model().email(conn).unwrap()); });` $DIR/src/tests/routes/me/get.rs: `CrateBuilder::new("foo_my_packages", user.as_model().id).expect_build(conn);` $DIR/src/tests/routes/me/get.rs: `app.db(|conn| { let krate = CrateBuilder::new("foo_my_packages", user_model.id).expect_build(conn); krate.owner_remove(conn, &user_model.gh_login).unwrap(); });` $DIR/src/tests/routes/me/get.rs: `krate.owner_remove(conn, &user_model.gh_login).unwrap();` $DIR/src/tests/routes/me/get.rs: `.empty()` $DIR/src/tests/routes/me/get.rs: `.get(url)` $DIR/src/tests/routes/me/get.rs: `.assert_forbidden()` $DIR/src/tests/routes/me/get.rs: `.db_new_user("foo")` $DIR/src/tests/routes/me/get.rs: `.show_me()` $DIR/src/tests/routes/me/get.rs: `.db(|conn| { CrateBuilder::new("foo_my_packages", user.as_model().id).expect_build(conn); assert_eq!(json.user.email, user.as_model().email(conn).unwrap()); })` $DIR/src/tests/routes/me/get.rs: `.as_model()` $DIR/src/tests/routes/me/get.rs: `.expect_build(conn)` $DIR/src/tests/routes/me/get.rs: `.show_me()` $DIR/src/tests/routes/me/get.rs: `.with_user()` $DIR/src/tests/routes/me/get.rs: `.as_model()` $DIR/src/tests/routes/me/get.rs: `.db(|conn| { let krate = CrateBuilder::new("foo_my_packages", user_model.id).expect_build(conn); krate.owner_remove(conn, &user_model.gh_login).unwrap(); })` $DIR/src/tests/routes/me/get.rs: `.expect_build(conn)` $DIR/src/tests/routes/me/get.rs: `.owner_remove(conn, &user_model.gh_login)` $DIR/src/tests/routes/me/get.rs: `.show_me()` $DIR/src/tests/routes/me/tokens/create.rs: `app.db(|conn| { for i in 0..1000 { assert_ok!(ApiToken::insert(conn, id, &format!("token {i}"))); } });` $DIR/src/tests/routes/me/tokens/create.rs: `assert_ok!(ApiToken::insert(conn, id, &format!("token {i}")));` $DIR/src/tests/routes/me/tokens/create.rs: `assert_json_snapshot!(response.into_json(), { ".api_token.id" => insta::any_id_redaction(), ".api_token.created_at" => "[datetime]", ".api_token.last_used_at" => "[datetime]", ".api_token.token" => insta::api_token_redaction(), });` $DIR/src/tests/routes/me/tokens/create.rs: `assert_json_snapshot!(response.into_json(), { ".api_token.id" => insta::any_id_redaction(), ".api_token.created_at" => "[datetime]", ".api_token.last_used_at" => "[datetime]", ".api_token.token" => insta::api_token_redaction(), });` $DIR/src/tests/routes/me/tokens/create.rs: `assert_json_snapshot!(response.into_json(), { ".api_token.id" => insta::any_id_redaction(), ".api_token.created_at" => "[datetime]", ".api_token.last_used_at" => "[datetime]", ".api_token.token" => insta::api_token_redaction(), });` $DIR/src/tests/routes/me/tokens/create.rs: `.empty()` $DIR/src/tests/routes/me/tokens/create.rs: `.put("/api/v1/me/tokens", NEW_BAR)` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", invalid)` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", empty_name)` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.as_model()` $DIR/src/tests/routes/me/tokens/create.rs: `.db(|conn| { for i in 0..1000 { assert_ok!(ApiToken::insert(conn, id, &format!("token {i}"))); } })` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", NEW_BAR)` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", NEW_BAR)` $DIR/src/tests/routes/me/tokens/create.rs: `.db(|conn| { assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .load(conn)) })` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put("/api/v1/me/tokens", NEW_BAR)` $DIR/src/tests/routes/me/tokens/create.rs: `.good()` $DIR/src/tests/routes/me/tokens/create.rs: `.put("/api/v1/me/tokens", NEW_BAR)` $DIR/src/tests/routes/me/tokens/create.rs: `.good()` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put("/api/v1/me/tokens", NEW_BAR)` $DIR/src/tests/routes/me/tokens/create.rs: `.good()` $DIR/src/tests/routes/me/tokens/create.rs: `.db_new_user("bar")` $DIR/src/tests/routes/me/tokens/create.rs: `.put("/api/v1/me/tokens", NEW_BAR)` $DIR/src/tests/routes/me/tokens/create.rs: `.good()` $DIR/src/tests/routes/me/tokens/create.rs: `.with_token()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>( "/api/v1/me/tokens", br#"{ "api_token": { "name": "baz" } }"# as &[u8], )` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", serde_json::to_vec(&json).unwrap())` $DIR/src/tests/routes/me/tokens/create.rs: `.db(|conn| { assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .load(conn)) })` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", serde_json::to_vec(&json).unwrap())` $DIR/src/tests/routes/me/tokens/create.rs: `.db(|conn| { assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .load(conn)) })` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", serde_json::to_vec(&json).unwrap())` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", serde_json::to_vec(&json).unwrap())` $DIR/src/tests/routes/me/tokens/create.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/create.rs: `.put::<()>("/api/v1/me/tokens", serde_json::to_vec(&json).unwrap())` $DIR/src/tests/routes/me/tokens/delete.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); });` $DIR/src/tests/routes/me/tokens/delete.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/delete.rs: `.delete("/api/v1/me/tokens/5")` $DIR/src/tests/routes/me/tokens/delete.rs: `.good()` $DIR/src/tests/routes/me/tokens/delete.rs: `.with_token()` $DIR/src/tests/routes/me/tokens/delete.rs: `.as_model()` $DIR/src/tests/routes/me/tokens/delete.rs: `.as_model()` $DIR/src/tests/routes/me/tokens/delete.rs: `.db_new_user("baz")` $DIR/src/tests/routes/me/tokens/delete.rs: `.delete(&format!("/api/v1/me/tokens/{}", token.id))` $DIR/src/tests/routes/me/tokens/delete.rs: `.good()` $DIR/src/tests/routes/me/tokens/delete.rs: `.with_token()` $DIR/src/tests/routes/me/tokens/delete.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); })` $DIR/src/tests/routes/me/tokens/delete.rs: `.delete(&format!("/api/v1/me/tokens/{}", token.as_model().id))` $DIR/src/tests/routes/me/tokens/delete.rs: `.good()` $DIR/src/tests/routes/me/tokens/delete.rs: `.as_model()` $DIR/src/tests/routes/me/tokens/delete.rs: `.filter(api_tokens::revoked.eq(false))` $DIR/src/tests/routes/me/tokens/delete.rs: `.eq(false)` $DIR/src/tests/routes/me/tokens/delete.rs: `.count()` $DIR/src/tests/routes/me/tokens/delete.rs: `.get_result(conn)` $DIR/src/tests/routes/me/tokens/delete_current.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); });` $DIR/src/tests/routes/me/tokens/delete_current.rs: `app.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); });` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.with_token()` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); })` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.delete::<()>("/api/v1/tokens/current")` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.empty()` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.delete::<()>("/api/v1/tokens/current")` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.with_token()` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.db(|conn| { let tokens: Vec = assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .filter(api_tokens::revoked.eq(false)) .load(conn)); assert_eq!(tokens.len(), 1); assert_eq!(tokens[0].name, token.as_model().name); })` $DIR/src/tests/routes/me/tokens/delete_current.rs: `.delete::<()>("/api/v1/tokens/current")` $DIR/src/tests/routes/me/tokens/list.rs: `app.db(|conn| { vec![ assert_ok!(ApiToken::insert(conn, id, "bar")), assert_ok!(ApiToken::insert_with_scopes( conn, id, "baz", Some(vec![ CrateScope::try_from("serde").unwrap(), CrateScope::try_from("serde-*").unwrap() ]), Some(vec![EndpointScope::PublishUpdate]), None )), assert_ok!(ApiToken::insert_with_scopes( conn, id, "qux", None, None, Some((Utc::now() - Duration::days(1)).naive_utc()), )), ] });` $DIR/src/tests/routes/me/tokens/list.rs: `app.db(|conn| { vec![ assert_ok!(ApiToken::insert(conn, id, "bar")), assert_ok!(ApiToken::insert_with_scopes( conn, id, "ancient", Some(vec![ CrateScope::try_from("serde").unwrap(), CrateScope::try_from("serde-*").unwrap() ]), Some(vec![EndpointScope::PublishUpdate]), Some((Utc::now() - Duration::days(31)).naive_utc()), )), assert_ok!(ApiToken::insert_with_scopes( conn, id, "recent", None, None, Some((Utc::now() - Duration::days(1)).naive_utc()), )), ] });` $DIR/src/tests/routes/me/tokens/list.rs: `assert_response_tokens_contain_name(response_tokens, "bar");` $DIR/src/tests/routes/me/tokens/list.rs: `assert_response_tokens_contain_name(response_tokens, "bar");` $DIR/src/tests/routes/me/tokens/list.rs: `assert_response_tokens_contain_name(response_tokens, "ancient");` $DIR/src/tests/routes/me/tokens/list.rs: `.empty()` $DIR/src/tests/routes/me/tokens/list.rs: `.get("/api/v1/me/tokens")` $DIR/src/tests/routes/me/tokens/list.rs: `.with_token()` $DIR/src/tests/routes/me/tokens/list.rs: `.get("/api/v1/me/tokens")` $DIR/src/tests/routes/me/tokens/list.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/list.rs: `.get::<()>("/api/v1/me/tokens")` $DIR/src/tests/routes/me/tokens/list.rs: `.into_json()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_array()` $DIR/src/tests/routes/me/tokens/list.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_model()` $DIR/src/tests/routes/me/tokens/list.rs: `.db(|conn| { vec![ assert_ok!(ApiToken::insert(conn, id, "bar")), assert_ok!(ApiToken::insert_with_scopes( conn, id, "baz", Some(vec![ CrateScope::try_from("serde").unwrap(), CrateScope::try_from("serde-*").unwrap() ]), Some(vec![EndpointScope::PublishUpdate]), None )), assert_ok!(ApiToken::insert_with_scopes( conn, id, "qux", None, None, Some((Utc::now() - Duration::days(1)).naive_utc()), )), ] })` $DIR/src/tests/routes/me/tokens/list.rs: `.get::<()>("/api/v1/me/tokens")` $DIR/src/tests/routes/me/tokens/list.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_model()` $DIR/src/tests/routes/me/tokens/list.rs: `.db(|conn| { vec![ assert_ok!(ApiToken::insert(conn, id, "bar")), assert_ok!(ApiToken::insert_with_scopes( conn, id, "ancient", Some(vec![ CrateScope::try_from("serde").unwrap(), CrateScope::try_from("serde-*").unwrap() ]), Some(vec![EndpointScope::PublishUpdate]), Some((Utc::now() - Duration::days(31)).naive_utc()), )), assert_ok!(ApiToken::insert_with_scopes( conn, id, "recent", None, None, Some((Utc::now() - Duration::days(1)).naive_utc()), )), ] })` $DIR/src/tests/routes/me/tokens/list.rs: `.get::<()>("/api/v1/me/tokens?expired_days=30")` $DIR/src/tests/routes/me/tokens/list.rs: `.into_json()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_array()` $DIR/src/tests/routes/me/tokens/list.rs: `.get::<()>("/api/v1/me/tokens?expired_days=60")` $DIR/src/tests/routes/me/tokens/list.rs: `.into_json()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_array()` $DIR/src/tests/routes/me/tokens/list.rs: `.with_user()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_model()` $DIR/src/tests/routes/me/tokens/list.rs: `.db(|conn| { vec![ assert_ok!(ApiToken::insert(conn, id, "bar")), assert_ok!(ApiToken::insert(conn, id, "baz")), ] })` $DIR/src/tests/routes/me/tokens/list.rs: `.get::<()>("/api/v1/me/tokens")` $DIR/src/tests/routes/me/tokens/list.rs: `.into_json()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_array()` $DIR/src/tests/routes/me/tokens/list.rs: `.delete::<()>(&format!("/api/v1/me/tokens/{}", tokens[0].model.id))` $DIR/src/tests/routes/me/tokens/list.rs: `.get::<()>("/api/v1/me/tokens")` $DIR/src/tests/routes/me/tokens/list.rs: `.into_json()` $DIR/src/tests/routes/me/tokens/list.rs: `.as_array()` $DIR/src/tests/routes/me/updates.rs: `app.db(|conn| { CrateBuilder::new("foo_fighters", user_id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); // Make foo_fighters's version mimic a version published before we started recording who // published versions let none: Option = None; update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); CrateBuilder::new("bar_fighters", user_id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); });` $DIR/src/tests/routes/me/updates.rs: `CrateBuilder::new("foo_fighters", user_id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/routes/me/updates.rs: `update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap();` $DIR/src/tests/routes/me/updates.rs: `CrateBuilder::new("bar_fighters", user_id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn);` $DIR/src/tests/routes/me/updates.rs: `user.put::("/api/v1/crates/foo_fighters/follow", b"" as &[u8]) .good();` $DIR/src/tests/routes/me/updates.rs: `user.put::("/api/v1/crates/bar_fighters/follow", b"" as &[u8]) .good();` $DIR/src/tests/routes/me/updates.rs: `assert_none!(&foo_version.published_by);` $DIR/src/tests/routes/me/updates.rs: `user.delete::("/api/v1/crates/bar_fighters/follow") .good();` $DIR/src/tests/routes/me/updates.rs: `.with_token()` $DIR/src/tests/routes/me/updates.rs: `.get("/api/v1/me/updates")` $DIR/src/tests/routes/me/updates.rs: `.with_user()` $DIR/src/tests/routes/me/updates.rs: `.as_model()` $DIR/src/tests/routes/me/updates.rs: `.db(|conn| { CrateBuilder::new("foo_fighters", user_id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); // Make foo_fighters's version mimic a version published before we started recording who // published versions let none: Option = None; update(versions::table) .set(versions::published_by.eq(none)) .execute(conn) .unwrap(); CrateBuilder::new("bar_fighters", user_id) .version(VersionBuilder::new("1.0.0")) .expect_build(conn); })` $DIR/src/tests/routes/me/updates.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/me/updates.rs: `.expect_build(conn)` $DIR/src/tests/routes/me/updates.rs: `.set(versions::published_by.eq(none))` $DIR/src/tests/routes/me/updates.rs: `.eq(none)` $DIR/src/tests/routes/me/updates.rs: `.execute(conn)` $DIR/src/tests/routes/me/updates.rs: `.version(VersionBuilder::new("1.0.0"))` $DIR/src/tests/routes/me/updates.rs: `.expect_build(conn)` $DIR/src/tests/routes/me/updates.rs: `.get("/api/v1/me/updates")` $DIR/src/tests/routes/me/updates.rs: `.good()` $DIR/src/tests/routes/me/updates.rs: `.put::("/api/v1/crates/foo_fighters/follow", b"" as &[u8])` $DIR/src/tests/routes/me/updates.rs: `.good()` $DIR/src/tests/routes/me/updates.rs: `.put::("/api/v1/crates/bar_fighters/follow", b"" as &[u8])` $DIR/src/tests/routes/me/updates.rs: `.good()` $DIR/src/tests/routes/me/updates.rs: `.get("/api/v1/me/updates")` $DIR/src/tests/routes/me/updates.rs: `.good()` $DIR/src/tests/routes/me/updates.rs: `.find(|v| v.krate == "foo_fighters")` $DIR/src/tests/routes/me/updates.rs: `.find(|v| v.krate == "bar_fighters")` $DIR/src/tests/routes/me/updates.rs: `.get_with_query("/api/v1/me/updates", "per_page=1")` $DIR/src/tests/routes/me/updates.rs: `.good()` $DIR/src/tests/routes/me/updates.rs: `.delete::("/api/v1/crates/bar_fighters/follow")` $DIR/src/tests/routes/me/updates.rs: `.good()` $DIR/src/tests/routes/me/updates.rs: `.get_with_query("/api/v1/me/updates", "page=2&per_page=1")` $DIR/src/tests/routes/me/updates.rs: `.good()` $DIR/src/tests/routes/me/updates.rs: `.get_with_query::<()>("/api/v1/me/updates", "page=0")` $DIR/src/tests/routes/metrics.rs: `.with_config(|config| config.metrics_authorization_token = Some("foobar".into()))` $DIR/src/tests/routes/metrics.rs: `.into()` $DIR/src/tests/routes/metrics.rs: `.empty()` $DIR/src/tests/routes/metrics.rs: `.with_config(|config| config.metrics_authorization_token = Some("secret".into()))` $DIR/src/tests/routes/metrics.rs: `.into()` $DIR/src/tests/routes/metrics.rs: `.empty()` $DIR/src/tests/routes/metrics.rs: `.with_config(|config| config.metrics_authorization_token = None)` $DIR/src/tests/routes/metrics.rs: `.empty()` $DIR/src/tests/routes/session/authorize.rs: `.empty()` $DIR/src/tests/routes/session/authorize.rs: `.get::<()>("/api/private/session/authorize")` $DIR/src/tests/routes/session/begin.rs: `.empty()` $DIR/src/tests/routes/session/begin.rs: `.get("/api/private/session/begin")` $DIR/src/tests/routes/session/begin.rs: `.good()` $DIR/src/tests/routes/summary.rs: `app.db(|conn| { let now_ = Utc::now().naive_utc(); let now_plus_two = now_ + chrono::Duration::seconds(2); new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap(); CrateBuilder::new("some_downloads", user.id) .version(VersionBuilder::new("0.1.0")) .description("description") .keyword("popular") .category("cat1") .downloads(20) .recent_downloads(10) .expect_build(conn); CrateBuilder::new("most_recent_downloads", user.id) .version(VersionBuilder::new("0.2.0")) .keyword("popular") .category("cat1") .downloads(5000) .recent_downloads(50) .expect_build(conn); CrateBuilder::new("just_updated", user.id) .version(VersionBuilder::new("0.1.0")) .version(VersionBuilder::new("0.1.2")) // update 'just_updated' krate. Others won't appear because updated_at == created_at. .updated_at(now_) .expect_build(conn); CrateBuilder::new("just_updated_patch", user.id) .version(VersionBuilder::new("0.1.0")) .version(VersionBuilder::new("0.2.0")) // Add a patch version be newer than the other versions, including the higher one. .version(VersionBuilder::new("0.1.1").created_at(now_plus_two)) .updated_at(now_plus_two) .expect_build(conn); CrateBuilder::new("with_downloads", user.id) .version(VersionBuilder::new("0.3.0")) .keyword("popular") .downloads(1000) .expect_build(conn); // set total_downloads global value for `num_downloads` prop update(metadata::table) .set(metadata::total_downloads.eq(6000)) .execute(conn) .unwrap(); });` $DIR/src/tests/routes/summary.rs: `new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap();` $DIR/src/tests/routes/summary.rs: `CrateBuilder::new("some_downloads", user.id) .version(VersionBuilder::new("0.1.0")) .description("description") .keyword("popular") .category("cat1") .downloads(20) .recent_downloads(10) .expect_build(conn);` $DIR/src/tests/routes/summary.rs: `CrateBuilder::new("most_recent_downloads", user.id) .version(VersionBuilder::new("0.2.0")) .keyword("popular") .category("cat1") .downloads(5000) .recent_downloads(50) .expect_build(conn);` $DIR/src/tests/routes/summary.rs: `CrateBuilder::new("just_updated", user.id) .version(VersionBuilder::new("0.1.0")) .version(VersionBuilder::new("0.1.2")) // update 'just_updated' krate. Others won't appear because updated_at == created_at. .updated_at(now_) .expect_build(conn);` $DIR/src/tests/routes/summary.rs: `CrateBuilder::new("just_updated_patch", user.id) .version(VersionBuilder::new("0.1.0")) .version(VersionBuilder::new("0.2.0")) // Add a patch version be newer than the other versions, including the higher one. .version(VersionBuilder::new("0.1.1").created_at(now_plus_two)) .updated_at(now_plus_two) .expect_build(conn);` $DIR/src/tests/routes/summary.rs: `CrateBuilder::new("with_downloads", user.id) .version(VersionBuilder::new("0.3.0")) .keyword("popular") .downloads(1000) .expect_build(conn);` $DIR/src/tests/routes/summary.rs: `update(metadata::table) .set(metadata::total_downloads.eq(6000)) .execute(conn) .unwrap();` $DIR/src/tests/routes/summary.rs: `config.excluded_crate_names = vec![ "most_recent_downloads".into(), // make sure no error occurs with a crate name that doesn't exist and that the name // matches are exact, not substrings "downloads".into(), ];` $DIR/src/tests/routes/summary.rs: `app.db(|conn| { CrateBuilder::new("some_downloads", user.id) .version(VersionBuilder::new("0.1.0")) .description("description") .keyword("popular") .category("cat1") .downloads(20) .recent_downloads(10) .expect_build(conn); CrateBuilder::new("most_recent_downloads", user.id) .version(VersionBuilder::new("0.2.0")) .keyword("popular") .category("cat1") .downloads(5000) .recent_downloads(50) .expect_build(conn); });` $DIR/src/tests/routes/summary.rs: `CrateBuilder::new("some_downloads", user.id) .version(VersionBuilder::new("0.1.0")) .description("description") .keyword("popular") .category("cat1") .downloads(20) .recent_downloads(10) .expect_build(conn);` $DIR/src/tests/routes/summary.rs: `CrateBuilder::new("most_recent_downloads", user.id) .version(VersionBuilder::new("0.2.0")) .keyword("popular") .category("cat1") .downloads(5000) .recent_downloads(50) .expect_build(conn);` $DIR/src/tests/routes/summary.rs: `.empty()` $DIR/src/tests/routes/summary.rs: `.get::("/api/v1/summary")` $DIR/src/tests/routes/summary.rs: `.with_user()` $DIR/src/tests/routes/summary.rs: `.as_model()` $DIR/src/tests/routes/summary.rs: `.db(|conn| { let now_ = Utc::now().naive_utc(); let now_plus_two = now_ + chrono::Duration::seconds(2); new_category("Category 1", "cat1", "Category 1 crates") .create_or_update(conn) .unwrap(); CrateBuilder::new("some_downloads", user.id) .version(VersionBuilder::new("0.1.0")) .description("description") .keyword("popular") .category("cat1") .downloads(20) .recent_downloads(10) .expect_build(conn); CrateBuilder::new("most_recent_downloads", user.id) .version(VersionBuilder::new("0.2.0")) .keyword("popular") .category("cat1") .downloads(5000) .recent_downloads(50) .expect_build(conn); CrateBuilder::new("just_updated", user.id) .version(VersionBuilder::new("0.1.0")) .version(VersionBuilder::new("0.1.2")) // update 'just_updated' krate. Others won't appear because updated_at == created_at. .updated_at(now_) .expect_build(conn); CrateBuilder::new("just_updated_patch", user.id) .version(VersionBuilder::new("0.1.0")) .version(VersionBuilder::new("0.2.0")) // Add a patch version be newer than the other versions, including the higher one. .version(VersionBuilder::new("0.1.1").created_at(now_plus_two)) .updated_at(now_plus_two) .expect_build(conn); CrateBuilder::new("with_downloads", user.id) .version(VersionBuilder::new("0.3.0")) .keyword("popular") .downloads(1000) .expect_build(conn); // set total_downloads global value for `num_downloads` prop update(metadata::table) .set(metadata::total_downloads.eq(6000)) .execute(conn) .unwrap(); })` $DIR/src/tests/routes/summary.rs: `.naive_utc()` $DIR/src/tests/routes/summary.rs: `.create_or_update(conn)` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.1.0"))` $DIR/src/tests/routes/summary.rs: `.description("description")` $DIR/src/tests/routes/summary.rs: `.keyword("popular")` $DIR/src/tests/routes/summary.rs: `.category("cat1")` $DIR/src/tests/routes/summary.rs: `.downloads(20)` $DIR/src/tests/routes/summary.rs: `.recent_downloads(10)` $DIR/src/tests/routes/summary.rs: `.expect_build(conn)` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.2.0"))` $DIR/src/tests/routes/summary.rs: `.keyword("popular")` $DIR/src/tests/routes/summary.rs: `.category("cat1")` $DIR/src/tests/routes/summary.rs: `.downloads(5000)` $DIR/src/tests/routes/summary.rs: `.recent_downloads(50)` $DIR/src/tests/routes/summary.rs: `.expect_build(conn)` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.1.0"))` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.1.2"))` $DIR/src/tests/routes/summary.rs: `// update 'just_updated' krate. Others won't appear because updated_at == created_at. .updated_at(now_)` $DIR/src/tests/routes/summary.rs: `.expect_build(conn)` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.1.0"))` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.2.0"))` $DIR/src/tests/routes/summary.rs: `// Add a patch version be newer than the other versions, including the higher one. .version(VersionBuilder::new("0.1.1").created_at(now_plus_two))` $DIR/src/tests/routes/summary.rs: `.created_at(now_plus_two)` $DIR/src/tests/routes/summary.rs: `.updated_at(now_plus_two)` $DIR/src/tests/routes/summary.rs: `.expect_build(conn)` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.3.0"))` $DIR/src/tests/routes/summary.rs: `.keyword("popular")` $DIR/src/tests/routes/summary.rs: `.downloads(1000)` $DIR/src/tests/routes/summary.rs: `.expect_build(conn)` $DIR/src/tests/routes/summary.rs: `.set(metadata::total_downloads.eq(6000))` $DIR/src/tests/routes/summary.rs: `.eq(6000)` $DIR/src/tests/routes/summary.rs: `.execute(conn)` $DIR/src/tests/routes/summary.rs: `.get("/api/v1/summary")` $DIR/src/tests/routes/summary.rs: `.good()` $DIR/src/tests/routes/summary.rs: `.with_config(|config| { config.excluded_crate_names = vec![ "most_recent_downloads".into(), // make sure no error occurs with a crate name that doesn't exist and that the name // matches are exact, not substrings "downloads".into(), ]; })` $DIR/src/tests/routes/summary.rs: `.with_user()` $DIR/src/tests/routes/summary.rs: `.as_model()` $DIR/src/tests/routes/summary.rs: `.db(|conn| { CrateBuilder::new("some_downloads", user.id) .version(VersionBuilder::new("0.1.0")) .description("description") .keyword("popular") .category("cat1") .downloads(20) .recent_downloads(10) .expect_build(conn); CrateBuilder::new("most_recent_downloads", user.id) .version(VersionBuilder::new("0.2.0")) .keyword("popular") .category("cat1") .downloads(5000) .recent_downloads(50) .expect_build(conn); })` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.1.0"))` $DIR/src/tests/routes/summary.rs: `.description("description")` $DIR/src/tests/routes/summary.rs: `.keyword("popular")` $DIR/src/tests/routes/summary.rs: `.category("cat1")` $DIR/src/tests/routes/summary.rs: `.downloads(20)` $DIR/src/tests/routes/summary.rs: `.recent_downloads(10)` $DIR/src/tests/routes/summary.rs: `.expect_build(conn)` $DIR/src/tests/routes/summary.rs: `.version(VersionBuilder::new("0.2.0"))` $DIR/src/tests/routes/summary.rs: `.keyword("popular")` $DIR/src/tests/routes/summary.rs: `.category("cat1")` $DIR/src/tests/routes/summary.rs: `.downloads(5000)` $DIR/src/tests/routes/summary.rs: `.recent_downloads(50)` $DIR/src/tests/routes/summary.rs: `.expect_build(conn)` $DIR/src/tests/routes/summary.rs: `.get("/api/v1/summary")` $DIR/src/tests/routes/summary.rs: `.good()` $DIR/src/tests/routes/users/read.rs: `app.db_new_user("Bar");` $DIR/src/tests/routes/users/read.rs: `app.db(|conn| { // Please do not delete or modify the setup of this test in order to get it to pass. // This setup mimics how GitHub works. If someone abandons a GitHub account, the username is // available for anyone to take. We need to support having multiple user accounts // with the same gh_login in crates.io. `gh_id` is stable across renames, so that field // should be used for uniquely identifying GitHub accounts whenever possible. For the // crates.io/user/:username pages, the best we can do is show the last crates.io account // created with that username. assert_ok!(NewUser::new( 1, "foobar", Some("I was first then deleted my github account"), None, "bar" ) .create_or_update(None, &app.as_inner().emails, conn)); assert_ok!(NewUser::new( 2, "FOOBAR", Some("I was second, I took the foobar username on github"), None, "bar" ) .create_or_update(None, &app.as_inner().emails, conn)); });` $DIR/src/tests/routes/users/read.rs: `assert_ok!(NewUser::new( 1, "foobar", Some("I was first then deleted my github account"), None, "bar" ) .create_or_update(None, &app.as_inner().emails, conn));` $DIR/src/tests/routes/users/read.rs: `assert_ok!(NewUser::new( 2, "FOOBAR", Some("I was second, I took the foobar username on github"), None, "bar" ) .create_or_update(None, &app.as_inner().emails, conn));` $DIR/src/tests/routes/users/read.rs: `.with_user()` $DIR/src/tests/routes/users/read.rs: `.db_new_user("Bar")` $DIR/src/tests/routes/users/read.rs: `.get("/api/v1/users/foo")` $DIR/src/tests/routes/users/read.rs: `.good()` $DIR/src/tests/routes/users/read.rs: `.get("/api/v1/users/bAr")` $DIR/src/tests/routes/users/read.rs: `.good()` $DIR/src/tests/routes/users/read.rs: `.empty()` $DIR/src/tests/routes/users/read.rs: `.db(|conn| { // Please do not delete or modify the setup of this test in order to get it to pass. // This setup mimics how GitHub works. If someone abandons a GitHub account, the username is // available for anyone to take. We need to support having multiple user accounts // with the same gh_login in crates.io. `gh_id` is stable across renames, so that field // should be used for uniquely identifying GitHub accounts whenever possible. For the // crates.io/user/:username pages, the best we can do is show the last crates.io account // created with that username. assert_ok!(NewUser::new( 1, "foobar", Some("I was first then deleted my github account"), None, "bar" ) .create_or_update(None, &app.as_inner().emails, conn)); assert_ok!(NewUser::new( 2, "FOOBAR", Some("I was second, I took the foobar username on github"), None, "bar" ) .create_or_update(None, &app.as_inner().emails, conn)); })` $DIR/src/tests/routes/users/read.rs: `.get("/api/v1/users/fOObAr")` $DIR/src/tests/routes/users/read.rs: `.good()` $DIR/src/tests/routes/users/stats.rs: `app.db(|conn| { let mut krate = CrateBuilder::new("foo_krate1", user.id).expect_build(conn); krate.downloads = 10; update(&krate).set(&krate).execute(conn).unwrap(); let mut krate2 = CrateBuilder::new("foo_krate2", user.id).expect_build(conn); krate2.downloads = 20; update(&krate2).set(&krate2).execute(conn).unwrap(); let mut another_krate = CrateBuilder::new("bar_krate1", another_user.id).expect_build(conn); another_krate.downloads = 2; update(&another_krate) .set(&another_krate) .execute(conn) .unwrap(); let mut no_longer_my_krate = CrateBuilder::new("nacho", user.id).expect_build(conn); no_longer_my_krate.downloads = 5; update(&no_longer_my_krate) .set(&no_longer_my_krate) .execute(conn) .unwrap(); no_longer_my_krate .owner_remove(conn, &user.gh_login) .unwrap(); });` $DIR/src/tests/routes/users/stats.rs: `krate.downloads = 10;` $DIR/src/tests/routes/users/stats.rs: `update(&krate).set(&krate).execute(conn).unwrap();` $DIR/src/tests/routes/users/stats.rs: `krate2.downloads = 20;` $DIR/src/tests/routes/users/stats.rs: `update(&krate2).set(&krate2).execute(conn).unwrap();` $DIR/src/tests/routes/users/stats.rs: `another_krate.downloads = 2;` $DIR/src/tests/routes/users/stats.rs: `update(&another_krate) .set(&another_krate) .execute(conn) .unwrap();` $DIR/src/tests/routes/users/stats.rs: `no_longer_my_krate.downloads = 5;` $DIR/src/tests/routes/users/stats.rs: `update(&no_longer_my_krate) .set(&no_longer_my_krate) .execute(conn) .unwrap();` $DIR/src/tests/routes/users/stats.rs: `no_longer_my_krate .owner_remove(conn, &user.gh_login) .unwrap();` $DIR/src/tests/routes/users/stats.rs: `.with_user()` $DIR/src/tests/routes/users/stats.rs: `.as_model()` $DIR/src/tests/routes/users/stats.rs: `.db_new_user("bar")` $DIR/src/tests/routes/users/stats.rs: `.as_model()` $DIR/src/tests/routes/users/stats.rs: `.db(|conn| { let mut krate = CrateBuilder::new("foo_krate1", user.id).expect_build(conn); krate.downloads = 10; update(&krate).set(&krate).execute(conn).unwrap(); let mut krate2 = CrateBuilder::new("foo_krate2", user.id).expect_build(conn); krate2.downloads = 20; update(&krate2).set(&krate2).execute(conn).unwrap(); let mut another_krate = CrateBuilder::new("bar_krate1", another_user.id).expect_build(conn); another_krate.downloads = 2; update(&another_krate) .set(&another_krate) .execute(conn) .unwrap(); let mut no_longer_my_krate = CrateBuilder::new("nacho", user.id).expect_build(conn); no_longer_my_krate.downloads = 5; update(&no_longer_my_krate) .set(&no_longer_my_krate) .execute(conn) .unwrap(); no_longer_my_krate .owner_remove(conn, &user.gh_login) .unwrap(); })` $DIR/src/tests/routes/users/stats.rs: `.expect_build(conn)` $DIR/src/tests/routes/users/stats.rs: `.set(&krate)` $DIR/src/tests/routes/users/stats.rs: `.execute(conn)` $DIR/src/tests/routes/users/stats.rs: `.expect_build(conn)` $DIR/src/tests/routes/users/stats.rs: `.set(&krate2)` $DIR/src/tests/routes/users/stats.rs: `.execute(conn)` $DIR/src/tests/routes/users/stats.rs: `.expect_build(conn)` $DIR/src/tests/routes/users/stats.rs: `.set(&another_krate)` $DIR/src/tests/routes/users/stats.rs: `.execute(conn)` $DIR/src/tests/routes/users/stats.rs: `.expect_build(conn)` $DIR/src/tests/routes/users/stats.rs: `.set(&no_longer_my_krate)` $DIR/src/tests/routes/users/stats.rs: `.execute(conn)` $DIR/src/tests/routes/users/stats.rs: `.owner_remove(conn, &user.gh_login)` $DIR/src/tests/routes/users/stats.rs: `.get(&url)` $DIR/src/tests/routes/users/stats.rs: `.good()` $DIR/src/tests/routes/users/stats.rs: `.with_user()` $DIR/src/tests/routes/users/stats.rs: `.as_model()` $DIR/src/tests/routes/users/stats.rs: `.get(&url)` $DIR/src/tests/routes/users/stats.rs: `.good()` $DIR/src/tests/routes/users/update.rs: `.with_user()` $DIR/src/tests/routes/users/update.rs: `.as_model()` $DIR/src/tests/routes/users/update.rs: `.update_email_more_control(model.id, Some(""))` $DIR/src/tests/routes/users/update.rs: `.update_email_more_control(model.id, None)` $DIR/src/tests/routes/users/update.rs: `.with_user()` $DIR/src/tests/routes/users/update.rs: `.db_new_user("not_me")` $DIR/src/tests/routes/users/update.rs: `.as_model()` $DIR/src/tests/routes/users/update.rs: `.update_email_more_control( another_user_model.id, Some("pineapple@pineapples.pineapple"), )` $DIR/src/tests/routes/users/update.rs: `.update_email_more_control( another_user_model.id, Some("pineapple@pineapples.pineapple"), )` $DIR/src/tests/routes/versions/list.rs: `assert_json_snapshot!(json);` $DIR/src/tests/routes/versions/list.rs: `CrateBuilder::new("foo_vers_index", user.id) .version(VersionBuilder::new("2.0.0").license(Some("MIT"))) .version(VersionBuilder::new("2.0.1").license(Some("MIT/Apache-2.0"))) .expect_build(conn);` $DIR/src/tests/routes/versions/list.rs: `.with_user()` $DIR/src/tests/routes/versions/list.rs: `.as_model()` $DIR/src/tests/routes/versions/list.rs: `.get(url)` $DIR/src/tests/routes/versions/list.rs: `.good()` $DIR/src/tests/routes/versions/list.rs: `.db(|conn| { CrateBuilder::new("foo_vers_index", user.id) .version(VersionBuilder::new("2.0.0").license(Some("MIT"))) .version(VersionBuilder::new("2.0.1").license(Some("MIT/Apache-2.0"))) .expect_build(conn); let ids: Vec = versions::table.select(versions::id).load(conn).unwrap(); (ids[0], ids[1]) })` $DIR/src/tests/routes/versions/list.rs: `.version(VersionBuilder::new("2.0.0").license(Some("MIT")))` $DIR/src/tests/routes/versions/list.rs: `.license(Some("MIT"))` $DIR/src/tests/routes/versions/list.rs: `.version(VersionBuilder::new("2.0.1").license(Some("MIT/Apache-2.0")))` $DIR/src/tests/routes/versions/list.rs: `.license(Some("MIT/Apache-2.0"))` $DIR/src/tests/routes/versions/list.rs: `.expect_build(conn)` $DIR/src/tests/routes/versions/list.rs: `.select(versions::id)` $DIR/src/tests/routes/versions/list.rs: `.load(conn)` $DIR/src/tests/routes/versions/list.rs: `.get_with_query(url, &query)` $DIR/src/tests/routes/versions/list.rs: `.good()` $DIR/src/tests/routes/versions/read.rs: `.with_user()` $DIR/src/tests/routes/versions/read.rs: `.as_model()` $DIR/src/tests/routes/versions/read.rs: `.db(|conn| { let krate = CrateBuilder::new("foo_vers_show_id", user.id).expect_build(conn); VersionBuilder::new("2.0.0") .size(1234) .expect_build(krate.id, user.id, conn) })` $DIR/src/tests/routes/versions/read.rs: `.expect_build(conn)` $DIR/src/tests/routes/versions/read.rs: `.size(1234)` $DIR/src/tests/routes/versions/read.rs: `.get(&url)` $DIR/src/tests/routes/versions/read.rs: `.good()` $DIR/src/tests/schema_details.rs: `.definition.contains("ON DELETE CASCADE")` $DIR/src/tests/schema_details.rs: `.definition.contains("ON DELETE CASCADE")` $DIR/src/tests/server.rs: `req.header(header::USER_AGENT, "");` $DIR/src/tests/server.rs: `app.db(|conn| { CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn); });` $DIR/src/tests/server.rs: `CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn);` $DIR/src/tests/server.rs: `req.header(header::USER_AGENT, "");` $DIR/src/tests/server.rs: `config.blocked_traffic = vec![("Never-Given".into(), vec!["1".into()])];` $DIR/src/tests/server.rs: `app.db(|conn| { CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn); });` $DIR/src/tests/server.rs: `CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn);` $DIR/src/tests/server.rs: `req.header(header::USER_AGENT, "");` $DIR/src/tests/server.rs: `config.blocked_traffic = vec![("User-Agent".into(), vec!["1".into(), "2".into()])];` $DIR/src/tests/server.rs: `app.db(|conn| { CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn); });` $DIR/src/tests/server.rs: `CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn);` $DIR/src/tests/server.rs: `req.header(header::USER_AGENT, "1");` $DIR/src/tests/server.rs: `req.header("x-request-id", "abcd");` $DIR/src/tests/server.rs: `assert_display_snapshot!(resp.into_text());` $DIR/src/tests/server.rs: `req.header( header::USER_AGENT, "1value-must-match-exactly-this-is-allowed", );` $DIR/src/tests/server.rs: `.empty()` $DIR/src/tests/server.rs: `.request_builder(Method::GET, "/api/v1/crates")` $DIR/src/tests/server.rs: `.header(header::USER_AGENT, "")` $DIR/src/tests/server.rs: `.run::<()>(req)` $DIR/src/tests/server.rs: `.with_user()` $DIR/src/tests/server.rs: `.db(|conn| { CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn); })` $DIR/src/tests/server.rs: `.as_model()` $DIR/src/tests/server.rs: `.expect_build(conn)` $DIR/src/tests/server.rs: `.request_builder(Method::GET, "/api/v1/crates/dl_no_ua/0.99.0/download")` $DIR/src/tests/server.rs: `.header(header::USER_AGENT, "")` $DIR/src/tests/server.rs: `.run::<()>(req)` $DIR/src/tests/server.rs: `.with_config(|config| { config.blocked_traffic = vec![("Never-Given".into(), vec!["1".into()])]; })` $DIR/src/tests/server.rs: `.with_user()` $DIR/src/tests/server.rs: `.db(|conn| { CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn); })` $DIR/src/tests/server.rs: `.as_model()` $DIR/src/tests/server.rs: `.expect_build(conn)` $DIR/src/tests/server.rs: `.request_builder(Method::GET, "/api/v1/crates/dl_no_ua/0.99.0/download")` $DIR/src/tests/server.rs: `.header(header::USER_AGENT, "")` $DIR/src/tests/server.rs: `.run::<()>(req)` $DIR/src/tests/server.rs: `.with_config(|config| { config.blocked_traffic = vec![("User-Agent".into(), vec!["1".into(), "2".into()])]; })` $DIR/src/tests/server.rs: `.with_user()` $DIR/src/tests/server.rs: `.db(|conn| { CrateBuilder::new("dl_no_ua", user.as_model().id).expect_build(conn); })` $DIR/src/tests/server.rs: `.as_model()` $DIR/src/tests/server.rs: `.expect_build(conn)` $DIR/src/tests/server.rs: `.request_builder(Method::GET, "/api/v1/crates/dl_no_ua/0.99.0/download")` $DIR/src/tests/server.rs: `.header(header::USER_AGENT, "1")` $DIR/src/tests/server.rs: `.header("x-request-id", "abcd")` $DIR/src/tests/server.rs: `.run::<()>(req)` $DIR/src/tests/server.rs: `.request_builder(Method::GET, "/api/v1/crates/dl_no_ua/0.99.0/download")` $DIR/src/tests/server.rs: `.header( header::USER_AGENT, "1value-must-match-exactly-this-is-allowed", )` $DIR/src/tests/server.rs: `.run::<()>(req)` $DIR/src/tests/server_binary.rs: `initialize_dummy_crate(&mut server_bin.db().unwrap());` $DIR/src/tests/server_binary.rs: `initialize_dummy_crate(&mut server_bin.db().unwrap());` $DIR/src/tests/server_binary.rs: `server_bin.chaosproxy.break_networking();` $DIR/src/tests/server_binary.rs: `.db()` $DIR/src/tests/server_binary.rs: `.start()` $DIR/src/tests/server_binary.rs: `.get("api/v1/crates/FOO/1.0.0/download")` $DIR/src/tests/server_binary.rs: `.db()` $DIR/src/tests/server_binary.rs: `.chaosproxy.break_networking()` $DIR/src/tests/server_binary.rs: `.start()` $DIR/src/tests/server_binary.rs: `.get("api/v1/crates/FOO/1.0.0/download")` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_not_github", user.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_not_github", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_weird_name", user.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_weird_name", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_one_colon", user.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_one_colon", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_add_nonexistent", user.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_add_nonexistent", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `app.db(|conn| { use crates_io::schema::teams::dsl::*; CrateBuilder::new("foo_renamed_team", owner_id).expect_build(conn); // create team with same ID and different name compared to http mock // used for `add_named_owner` NewTeam::new( "github:test-org:old-core", // different team name 1000, // same org ID 2001, // same team id as `core` team None, None, ) .create_or_update(conn) .unwrap(); assert_eq!(teams.count().get_result::(conn).unwrap(), 1); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_renamed_team", owner_id).expect_build(conn);` $DIR/src/tests/team.rs: `NewTeam::new( "github:test-org:old-core", // different team name 1000, // same org ID 2001, // same team id as `core` team None, None, ) .create_or_update(conn) .unwrap();` $DIR/src/tests/team.rs: `token .add_named_owner("foo_renamed_team", "github:test-org:core") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_mixed_case", user.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_mixed_case", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token .add_named_owner("foo_mixed_case", "github:Test-Org:Core") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { let krate: Crate = Crate::by_name("foo_mixed_case").first(conn).unwrap(); let owners = krate.owners(conn).unwrap(); assert_eq!(owners.len(), 2); let owner = &owners[1]; assert_eq!(owner.login(), owner.login().to_lowercase()); });` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_org_owner", user.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_org_owner", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token .add_named_owner("foo_org_owner", "github:test-org:core") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { let krate: Crate = Crate::by_name("foo_org_owner").first(conn).unwrap(); let owners = krate.owners(conn).unwrap(); assert_eq!(owners.len(), 2); let owner = &owners[1]; assert_eq!(owner.login(), owner.login().to_lowercase()); });` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_team_non_member", user.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_team_non_member", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_remove_team", user_on_both_teams.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_remove_team", user_on_both_teams.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token_on_both_teams .add_named_owner("foo_remove_team", "github:test-org:core") .good();` $DIR/src/tests/team.rs: `token_on_both_teams .remove_named_owner("foo_remove_team", "github:test-org:core") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_remove_team_owner", user_on_both_teams.as_model().id) .expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_remove_team_owner", user_on_both_teams.as_model().id) .expect_build(conn);` $DIR/src/tests/team.rs: `token_on_both_teams .add_named_owner("foo_remove_team_owner", "github:test-org:all") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_remove_nonexistent", user.as_model().id).expect_build(conn); insert_into(teams::table) .values(( teams::login.eq("github:test-org:this-does-not-exist"), teams::github_id.eq(5678), )) .execute(conn) .expect("couldn't insert nonexistent team") });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_remove_nonexistent", user.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_not_owned", user_on_both_teams.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_not_owned", user_on_both_teams.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token_on_both_teams .add_named_owner("foo_not_owned", "github:test-org:core") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_not_owned", user_on_both_teams.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_not_owned", user_on_both_teams.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token_on_both_teams .add_named_owner("foo_not_owned", "github:test-org:core") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_team_owned", user_on_both_teams.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_team_owned", user_on_both_teams.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token_on_both_teams .add_named_owner("foo_team_owned", "github:test-org:all") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_add_owner", user_on_both_teams.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_add_owner", user_on_both_teams.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token_on_both_teams .add_named_owner("foo_add_owner", "github:test-org:all") .good();` $DIR/src/tests/team.rs: `app.db(|conn| { CrateBuilder::new("foo_add_owner", user_on_both_teams.as_model().id).expect_build(conn); });` $DIR/src/tests/team.rs: `CrateBuilder::new("foo_add_owner", user_on_both_teams.as_model().id).expect_build(conn);` $DIR/src/tests/team.rs: `token_on_both_teams .add_named_owner("foo_add_owner", "github:test-org:all") .good();` $DIR/src/tests/team.rs: `add_team_to_crate(&t, &krate, user, conn).unwrap();` $DIR/src/tests/team.rs: `add_team_to_crate(&t, &krate, user, conn).unwrap();` $DIR/src/tests/team.rs: `krate.owner_remove(conn, &t.login).unwrap();` $DIR/src/tests/team.rs: `.with_token()` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_not_github", user.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_not_github", "dropbox:foo:foo")` $DIR/src/tests/team.rs: `.with_token()` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_weird_name", user.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_weird_name", "github:foo/../bar:wut")` $DIR/src/tests/team.rs: `.with_token()` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_one_colon", user.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_one_colon", "github:foo")` $DIR/src/tests/team.rs: `.with_token()` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_add_nonexistent", user.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_add_nonexistent", "github:test-org:this-does-not-exist")` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.db(|conn| { use crates_io::schema::teams::dsl::*; CrateBuilder::new("foo_renamed_team", owner_id).expect_build(conn); // create team with same ID and different name compared to http mock // used for `add_named_owner` NewTeam::new( "github:test-org:old-core", // different team name 1000, // same org ID 2001, // same team id as `core` team None, None, ) .create_or_update(conn) .unwrap(); assert_eq!(teams.count().get_result::(conn).unwrap(), 1); })` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.create_or_update(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_renamed_team", "github:test-org:core")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.crate_owner_teams("foo_renamed_team")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_mixed_case", user.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_mixed_case", "github:Test-Org:Core")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db(|conn| { let krate: Crate = Crate::by_name("foo_mixed_case").first(conn).unwrap(); let owners = krate.owners(conn).unwrap(); assert_eq!(owners.len(), 2); let owner = &owners[1]; assert_eq!(owner.login(), owner.login().to_lowercase()); })` $DIR/src/tests/team.rs: `.first(conn)` $DIR/src/tests/team.rs: `.owners(conn)` $DIR/src/tests/team.rs: `.crate_owner_teams("foo_mixed_case")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-org-owner")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_org_owner", user.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_org_owner", "github:test-org:core")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db(|conn| { let krate: Crate = Crate::by_name("foo_org_owner").first(conn).unwrap(); let owners = krate.owners(conn).unwrap(); assert_eq!(owners.len(), 2); let owner = &owners[1]; assert_eq!(owner.login(), owner.login().to_lowercase()); })` $DIR/src/tests/team.rs: `.first(conn)` $DIR/src/tests/team.rs: `.owners(conn)` $DIR/src/tests/team.rs: `.crate_owner_teams("foo_org_owner")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-one-team")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_team_non_member", user.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_team_non_member", "github:test-org:core")` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user(username)` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_remove_team", user_on_both_teams.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_remove_team", "github:test-org:core")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.remove_named_owner("foo_remove_team", username)` $DIR/src/tests/team.rs: `.remove_named_owner("foo_remove_team", "github:test-org:core")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db_new_user("user-one-team")` $DIR/src/tests/team.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_remove_team_owner", user_on_both_teams.as_model().id) .expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_remove_team_owner", "github:test-org:all")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db_new_user("user-one-team")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.remove_named_owner("foo_remove_team_owner", "github:test-org:all")` $DIR/src/tests/team.rs: `.db_new_user("user-org-owner")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.remove_named_owner("foo_remove_team_owner", "github:test-org:all")` $DIR/src/tests/team.rs: `.with_token()` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_remove_nonexistent", user.as_model().id).expect_build(conn); insert_into(teams::table) .values(( teams::login.eq("github:test-org:this-does-not-exist"), teams::github_id.eq(5678), )) .execute(conn) .expect("couldn't insert nonexistent team") })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.values(( teams::login.eq("github:test-org:this-does-not-exist"), teams::github_id.eq(5678), ))` $DIR/src/tests/team.rs: `.eq("github:test-org:this-does-not-exist")` $DIR/src/tests/team.rs: `.eq(5678)` $DIR/src/tests/team.rs: `.execute(conn)` $DIR/src/tests/team.rs: `.remove_named_owner( "foo_remove_nonexistent", "github:test-org:this-does-not-exist", )` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_not_owned", user_on_both_teams.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_not_owned", "github:test-org:core")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db_new_user("user-one-team")` $DIR/src/tests/team.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_not_owned", user_on_both_teams.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_not_owned", "github:test-org:core")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db_new_user("user-org-owner")` $DIR/src/tests/team.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_team_owned", user_on_both_teams.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_team_owned", "github:test-org:all")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db_new_user("user-one-team")` $DIR/src/tests/team.rs: `.publish_crate(crate_to_publish)` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_add_owner", user_on_both_teams.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_add_owner", "github:test-org:all")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db_new_user("user-org-owner")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.add_named_owner("foo_add_owner", "arbitrary_username")` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.db(|conn| { CrateBuilder::new("foo_add_owner", user_on_both_teams.as_model().id).expect_build(conn); })` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.add_named_owner("foo_add_owner", "github:test-org:all")` $DIR/src/tests/team.rs: `.good()` $DIR/src/tests/team.rs: `.db_new_user("user-one-team")` $DIR/src/tests/team.rs: `.db_new_token("arbitrary token name")` $DIR/src/tests/team.rs: `.add_named_owner("foo_add_owner", "arbitrary_username")` $DIR/src/tests/team.rs: `.with_user()` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.db(|conn| { let t = new_team("github:test-org:team") .create_or_update(conn) .unwrap(); let krate = CrateBuilder::new("foo", user.id).expect_build(conn); add_team_to_crate(&t, &krate, user, conn).unwrap(); t })` $DIR/src/tests/team.rs: `.create_or_update(conn)` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.search(&format!("team_id={}", team.id))` $DIR/src/tests/team.rs: `.empty()` $DIR/src/tests/team.rs: `.db_new_user("user-all-teams")` $DIR/src/tests/team.rs: `.as_model()` $DIR/src/tests/team.rs: `.db(|conn| { let t = NewTeam::new("github:test-org:core", 1000, 2001, None, None) .create_or_update(conn) .unwrap(); let krate = CrateBuilder::new("foo", user.id).expect_build(conn); add_team_to_crate(&t, &krate, user, conn).unwrap(); krate.owner_remove(conn, &t.login).unwrap(); t })` $DIR/src/tests/team.rs: `.create_or_update(conn)` $DIR/src/tests/team.rs: `.expect_build(conn)` $DIR/src/tests/team.rs: `.owner_remove(conn, &t.login)` $DIR/src/tests/team.rs: `.search(&format!("team_id={}", team.id))` $DIR/src/tests/token.rs: `anon.get(url).assert_forbidden();` $DIR/src/tests/token.rs: `user.get::(url).good();` $DIR/src/tests/token.rs: `assert_none!(token.as_model().last_used_at);` $DIR/src/tests/token.rs: `token.search("following=1");` $DIR/src/tests/token.rs: `request.header(header::AUTHORIZATION, "oldtoken");` $DIR/src/tests/token.rs: `.with_token()` $DIR/src/tests/token.rs: `.get(url)` $DIR/src/tests/token.rs: `.assert_forbidden()` $DIR/src/tests/token.rs: `.get::(url)` $DIR/src/tests/token.rs: `.good()` $DIR/src/tests/token.rs: `.search("following=1")` $DIR/src/tests/token.rs: `.db(|conn| { assert_ok!(ApiToken::belonging_to(user.as_model()) .select(ApiToken::as_select()) .first(conn)) })` $DIR/src/tests/token.rs: `.empty()` $DIR/src/tests/token.rs: `.get_request(url)` $DIR/src/tests/token.rs: `.header(header::AUTHORIZATION, "oldtoken")` $DIR/src/tests/token.rs: `.run::<()>(request)` $DIR/src/tests/unhealthy_database.rs: `app.db(|conn| { CrateBuilder::new("crate_name", owner.as_model().user_id) .version("1.0.0") .expect_build(conn) });` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().break_networking();` $DIR/src/tests/unhealthy_database.rs: `assert_unconditional_redirects(&anon);` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().restore_networking();` $DIR/src/tests/unhealthy_database.rs: `app.as_inner() .primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT) .expect("the database did not return healthy");` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().break_networking();` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().restore_networking();` $DIR/src/tests/unhealthy_database.rs: `app.as_inner() .primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT) .expect("the database did not return healthy");` $DIR/src/tests/unhealthy_database.rs: `app.db_new_user("foo");` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().break_networking();` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().restore_networking();` $DIR/src/tests/unhealthy_database.rs: `app.db_new_user("foo");` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().break_networking();` $DIR/src/tests/unhealthy_database.rs: `app.replica_db_chaosproxy().break_networking();` $DIR/src/tests/unhealthy_database.rs: `app.replica_db_chaosproxy().restore_networking();` $DIR/src/tests/unhealthy_database.rs: `app.as_inner() .read_only_replica_database .as_ref() .expect("no replica database configured") .wait_until_healthy(DB_HEALTHY_TIMEOUT) .expect("the database did not return healthy");` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().restore_networking();` $DIR/src/tests/unhealthy_database.rs: `app.db_new_user("foo");` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().break_networking();` $DIR/src/tests/unhealthy_database.rs: `app.replica_db_chaosproxy().break_networking();` $DIR/src/tests/unhealthy_database.rs: `app.primary_db_chaosproxy().restore_networking();` $DIR/src/tests/unhealthy_database.rs: `app.as_inner() .primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT) .expect("the database did not return healthy");` $DIR/src/tests/unhealthy_database.rs: `.with_database(TestDatabase::SlowRealPool { replica: false })` $DIR/src/tests/unhealthy_database.rs: `.with_token()` $DIR/src/tests/unhealthy_database.rs: `.db(|conn| { CrateBuilder::new("crate_name", owner.as_model().user_id) .version("1.0.0") .expect_build(conn) })` $DIR/src/tests/unhealthy_database.rs: `.as_model()` $DIR/src/tests/unhealthy_database.rs: `.version("1.0.0")` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.break_networking()` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.restore_networking()` $DIR/src/tests/unhealthy_database.rs: `.as_inner()` $DIR/src/tests/unhealthy_database.rs: `.primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT)` $DIR/src/tests/unhealthy_database.rs: `.with_database(TestDatabase::SlowRealPool { replica: false })` $DIR/src/tests/unhealthy_database.rs: `.empty()` $DIR/src/tests/unhealthy_database.rs: `.get::<()>("/api/v1/summary")` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.break_networking()` $DIR/src/tests/unhealthy_database.rs: `.get::<()>("/api/v1/summary")` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.restore_networking()` $DIR/src/tests/unhealthy_database.rs: `.as_inner()` $DIR/src/tests/unhealthy_database.rs: `.primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT)` $DIR/src/tests/unhealthy_database.rs: `.get::<()>("/api/v1/summary")` $DIR/src/tests/unhealthy_database.rs: `.with_database(TestDatabase::SlowRealPool { replica: true })` $DIR/src/tests/unhealthy_database.rs: `.with_user()` $DIR/src/tests/unhealthy_database.rs: `.db_new_user("foo")` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.break_networking()` $DIR/src/tests/unhealthy_database.rs: `.get::<()>(URL)` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.restore_networking()` $DIR/src/tests/unhealthy_database.rs: `.as_inner()` $DIR/src/tests/unhealthy_database.rs: `.primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT)` $DIR/src/tests/unhealthy_database.rs: `.with_database(TestDatabase::SlowRealPool { replica: true })` $DIR/src/tests/unhealthy_database.rs: `.with_user()` $DIR/src/tests/unhealthy_database.rs: `.db_new_user("foo")` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.break_networking()` $DIR/src/tests/unhealthy_database.rs: `.replica_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.break_networking()` $DIR/src/tests/unhealthy_database.rs: `.get::<()>(URL)` $DIR/src/tests/unhealthy_database.rs: `.replica_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.restore_networking()` $DIR/src/tests/unhealthy_database.rs: `.as_inner()` $DIR/src/tests/unhealthy_database.rs: `.wait_until_healthy(DB_HEALTHY_TIMEOUT)` $DIR/src/tests/unhealthy_database.rs: `.get::<()>(URL)` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.restore_networking()` $DIR/src/tests/unhealthy_database.rs: `.as_inner()` $DIR/src/tests/unhealthy_database.rs: `.primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT)` $DIR/src/tests/unhealthy_database.rs: `.with_database(TestDatabase::SlowRealPool { replica: true })` $DIR/src/tests/unhealthy_database.rs: `.with_user()` $DIR/src/tests/unhealthy_database.rs: `.db_new_user("foo")` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.break_networking()` $DIR/src/tests/unhealthy_database.rs: `.replica_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.break_networking()` $DIR/src/tests/unhealthy_database.rs: `.get::<()>(URL)` $DIR/src/tests/unhealthy_database.rs: `.primary_db_chaosproxy()` $DIR/src/tests/unhealthy_database.rs: `.restore_networking()` $DIR/src/tests/unhealthy_database.rs: `.as_inner()` $DIR/src/tests/unhealthy_database.rs: `.primary_database .wait_until_healthy(DB_HEALTHY_TIMEOUT)` $DIR/src/tests/unhealthy_database.rs: `.get::<()>(URL)` $DIR/src/tests/user.rs: `assert_ok!( NewUser::new(gh_id, "bar", None, None, "bar_token").create_or_update( None, &app.as_inner().emails, conn ) );` $DIR/src/tests/user.rs: `user_without_github_email.update_email("apricot@apricots.apricot");` $DIR/src/tests/user.rs: `user.update_email("mango@mangos.mango");` $DIR/src/tests/user.rs: `user.confirm_email(&email_token);` $DIR/src/tests/user.rs: `update(Email::belonging_to(&u)) // Users created before we added verification will have // `NULL` in the `token_generated_at` column. .set(emails::token_generated_at.eq(None::)) .execute(conn) .unwrap();` $DIR/src/tests/user.rs: `.with_token()` $DIR/src/tests/user.rs: `.as_model()` $DIR/src/tests/user.rs: `.plaintext()` $DIR/src/tests/user.rs: `.db(|conn| { // Reuse gh_id but use new gh_login and gh_access_token assert_ok!( NewUser::new(gh_id, "bar", None, None, "bar_token").create_or_update( None, &app.as_inner().emails, conn ) ); // Use the original API token to find the now updated user assert_ok!(User::find_by_api_token(conn, token.expose_secret())) })` $DIR/src/tests/user.rs: `.empty()` $DIR/src/tests/user.rs: `.db(|conn| { let u = new_user("arbitrary_username"); let u = u .create_or_update(None, &app.as_inner().emails, conn) .unwrap(); MockCookieUser::new(&app, u) })` $DIR/src/tests/user.rs: `.create_or_update(None, &app.as_inner().emails, conn)` $DIR/src/tests/user.rs: `.as_inner()` $DIR/src/tests/user.rs: `.as_model()` $DIR/src/tests/user.rs: `.show_me()` $DIR/src/tests/user.rs: `.update_email("apricot@apricots.apricot")` $DIR/src/tests/user.rs: `.db(|conn| { let u = NewUser { // Use the same github ID to link to the existing account gh_id: user_without_github_email_model.gh_id, // new_user uses a None email; the rest of the fields are arbitrary ..new_user("arbitrary_username") }; let u = u .create_or_update(None, &app.as_inner().emails, conn) .unwrap(); MockCookieUser::new(&app, u) })` $DIR/src/tests/user.rs: `.create_or_update(None, &app.as_inner().emails, conn)` $DIR/src/tests/user.rs: `.as_inner()` $DIR/src/tests/user.rs: `.show_me()` $DIR/src/tests/user.rs: `.with_user()` $DIR/src/tests/user.rs: `.as_model()` $DIR/src/tests/user.rs: `.db(|conn| { Email::belonging_to(model) .select(emails::email) .first(conn) .unwrap() })` $DIR/src/tests/user.rs: `.select(emails::email)` $DIR/src/tests/user.rs: `.first(conn)` $DIR/src/tests/user.rs: `.db(|conn| { let u = NewUser { // Use the same github ID to link to the existing account gh_id: model.gh_id, // the rest of the fields are arbitrary ..new_user("arbitrary_username") }; let u = u .create_or_update(Some(new_github_email), &app.as_inner().emails, conn) .unwrap(); MockCookieUser::new(&app, u) })` $DIR/src/tests/user.rs: `.create_or_update(Some(new_github_email), &app.as_inner().emails, conn)` $DIR/src/tests/user.rs: `.as_inner()` $DIR/src/tests/user.rs: `.show_me()` $DIR/src/tests/user.rs: `.with_user()` $DIR/src/tests/user.rs: `.show_me()` $DIR/src/tests/user.rs: `.update_email("mango@mangos.mango")` $DIR/src/tests/user.rs: `.show_me()` $DIR/src/tests/user.rs: `.empty()` $DIR/src/tests/user.rs: `.db(|conn| { let u = NewUser { ..new_user("arbitrary_username") }; let u = u .create_or_update(Some(email), &app.as_inner().emails, conn) .unwrap(); MockCookieUser::new(&app, u) })` $DIR/src/tests/user.rs: `.create_or_update(Some(email), &app.as_inner().emails, conn)` $DIR/src/tests/user.rs: `.as_inner()` $DIR/src/tests/user.rs: `.as_model()` $DIR/src/tests/user.rs: `.db(|conn| { Email::belonging_to(user_model) .select(emails::token) .first(conn) .unwrap() })` $DIR/src/tests/user.rs: `.select(emails::token)` $DIR/src/tests/user.rs: `.first(conn)` $DIR/src/tests/user.rs: `.confirm_email(&email_token)` $DIR/src/tests/user.rs: `.show_me()` $DIR/src/tests/user.rs: `.empty()` $DIR/src/tests/user.rs: `.db(|conn| { let u = NewUser { ..new_user("arbitrary_username") }; let u = u .create_or_update(Some(email), &app.as_inner().emails, conn) .unwrap(); update(Email::belonging_to(&u)) // Users created before we added verification will have // `NULL` in the `token_generated_at` column. .set(emails::token_generated_at.eq(None::)) .execute(conn) .unwrap(); MockCookieUser::new(&app, u) })` $DIR/src/tests/user.rs: `.create_or_update(Some(email), &app.as_inner().emails, conn)` $DIR/src/tests/user.rs: `.as_inner()` $DIR/src/tests/user.rs: `// Users created before we added verification will have // `NULL` in the `token_generated_at` column. .set(emails::token_generated_at.eq(None::))` $DIR/src/tests/user.rs: `.eq(None::)` $DIR/src/tests/user.rs: `.execute(conn)` $DIR/src/tests/user.rs: `.show_me()` $DIR/src/tests/util/mock_request.rs: `*req.body_mut() = Bytes::from_static(b"Hello world");` $DIR/src/tests/util/mock_request.rs: `req.header(header::USER_AGENT, "lulz");` $DIR/src/tests/util/mock_request.rs: `req.header(header::DNT, "1");` $DIR/src/tests/util/mock_request.rs: `.body_mut()` $DIR/src/tests/util/mock_request.rs: `.header(header::USER_AGENT, "lulz")` $DIR/src/tests/util/mock_request.rs: `.header(header::DNT, "1")` $DIR/src/tests/version.rs: `Version::record_readme_rendering(version.id, conn).unwrap();` $DIR/src/tests/version.rs: `Version::record_readme_rendering(version.id, conn).unwrap();` $DIR/src/tests/version.rs: `.with_user()` $DIR/src/tests/version.rs: `.as_model()` $DIR/src/tests/version.rs: `.expect_build(conn)` $DIR/src/tests/version.rs: `.expect_build(c.id, user.id, conn)` $DIR/src/tests/worker/git.rs: `assert_ok_eq!(upstream.list_commits(), vec!["Initial Commit"]);` $DIR/src/tests/worker/git.rs: `app.run_pending_background_jobs();` $DIR/src/tests/worker/git.rs: `assert_ok_eq!( upstream.list_commits(), vec!["Initial Commit", "Create crate `serde`"] );` $DIR/src/tests/worker/git.rs: `assert_ok_eq!(upstream.crate_exists("serde"), true);` $DIR/src/tests/worker/git.rs: `app.run_pending_background_jobs();` $DIR/src/tests/worker/git.rs: `assert_ok_eq!( upstream.list_commits(), vec![ "Initial Commit", "Create crate `serde`", "Update crate `serde`", ] );` $DIR/src/tests/worker/git.rs: `assert_ok_eq!(upstream.crate_exists("serde"), true);` $DIR/src/tests/worker/git.rs: `app.db(|conn| { use crates_io::schema::crates; let krate: Crate = assert_ok!(Crate::by_name("serde").first(conn)); assert_ok!(diesel::delete(crates::table.find(krate.id)).execute(conn)); assert_ok!(Job::enqueue_sync_to_index("serde", conn)); });` $DIR/src/tests/worker/git.rs: `assert_ok!(diesel::delete(crates::table.find(krate.id)).execute(conn));` $DIR/src/tests/worker/git.rs: `assert_ok!(Job::enqueue_sync_to_index("serde", conn));` $DIR/src/tests/worker/git.rs: `app.run_pending_background_jobs();` $DIR/src/tests/worker/git.rs: `assert_ok_eq!( upstream.list_commits(), vec![ "Initial Commit", "Create crate `serde`", "Update crate `serde`", "Delete crate `serde`", ] );` $DIR/src/tests/worker/git.rs: `.with_token()` $DIR/src/tests/worker/git.rs: `.upstream_index()` $DIR/src/tests/worker/git.rs: `.body()` $DIR/src/tests/worker/git.rs: `.put::<()>("/api/v1/crates/new", body)` $DIR/src/tests/worker/git.rs: `.run_pending_background_jobs()` $DIR/src/tests/worker/git.rs: `.delete::<()>("/api/v1/crates/serde/1.0.0/yank")` $DIR/src/tests/worker/git.rs: `.run_pending_background_jobs()` $DIR/src/tests/worker/git.rs: `.db(|conn| { use crates_io::schema::crates; let krate: Crate = assert_ok!(Crate::by_name("serde").first(conn)); assert_ok!(diesel::delete(crates::table.find(krate.id)).execute(conn)); assert_ok!(Job::enqueue_sync_to_index("serde", conn)); })` $DIR/src/tests/worker/git.rs: `.run_pending_background_jobs()` $DIR/src/util/bytes_request.rs: `quit_tx.send(()).unwrap();` $DIR/src/util/bytes_request.rs: `server.await.unwrap().unwrap();` $DIR/src/util/bytes_request.rs: `.send_data(vec![0; ACTUAL_BODY_SIZE].into())` $DIR/src/util/bytes_request.rs: `.into()` $DIR/src/util/bytes_request.rs: `.body(body)` $DIR/src/util/bytes_request.rs: `.request(req)` $DIR/src/util/bytes_request.rs: `.send(())` $DIR/src/util/token.rs: `.expose_secret()` $DIR/src/views.rs: `assert_some!(json .as_str() .find(r#""updated_at":"2017-01-06T14:23:11+00:00""#));` $DIR/src/views.rs: `assert_some!(json .as_str() .find(r#""created_at":"2017-01-06T14:23:12+00:00""#));` $DIR/src/views.rs: `assert_some!(json .as_str() .find(r#""updated_at":"2017-01-06T14:23:11+00:00""#));` $DIR/src/views.rs: `assert_some!(json .as_str() .find(r#""created_at":"2017-01-06T14:23:11+00:00""#));` $DIR/src/views.rs: `.and_hms_opt(14, 23, 11)` $DIR/src/views.rs: `.and_hms_opt(14, 23, 11)` $DIR/src/views.rs: `.and_hms_opt(14, 23, 11)` $DIR/src/views.rs: `.and_hms_opt(14, 23, 11)` $DIR/src/views.rs: `.and_hms_opt(14, 23, 12)` $DIR/src/views.rs: `.and_hms_opt(14, 23, 11)` $DIR/src/views.rs: `.and_hms_opt(14, 23, 12)` $DIR/src/views.rs: `.and_hms_opt(14, 23, 11)` $DIR/src/views.rs: `.and_hms_opt(16, 30, 00)` $DIR/src/worker/dump_db/configuration.rs: `tables.insert("a".to_owned(), table_config_with_deps(&["b", "c"]));` $DIR/src/worker/dump_db/configuration.rs: `tables.insert("b".to_owned(), table_config_with_deps(&["c", "d"]));` $DIR/src/worker/dump_db/configuration.rs: `tables.insert("c".to_owned(), table_config_with_deps(&["d"]));` $DIR/src/worker/dump_db/configuration.rs: `config.0.insert("d".to_owned(), table_config_with_deps(&[]));` $DIR/src/worker/dump_db/configuration.rs: `tables.insert("a".to_owned(), table_config_with_deps(&["b"]));` $DIR/src/worker/dump_db/configuration.rs: `tables.insert("b".to_owned(), table_config_with_deps(&["a"]));` $DIR/src/worker/dump_db/configuration.rs: `.insert("a".to_owned(), table_config_with_deps(&["b", "c"]))` $DIR/src/worker/dump_db/configuration.rs: `.insert("b".to_owned(), table_config_with_deps(&["c", "d"]))` $DIR/src/worker/dump_db/configuration.rs: `.insert("c".to_owned(), table_config_with_deps(&["d"]))` $DIR/src/worker/dump_db/configuration.rs: `.insert("d".to_owned(), table_config_with_deps(&[]))` $DIR/src/worker/dump_db/configuration.rs: `.insert("a".to_owned(), table_config_with_deps(&["b"]))` $DIR/src/worker/dump_db/configuration.rs: `.insert("b".to_owned(), table_config_with_deps(&["a"]))` $DIR/src/worker/dump_db/gen_scripts.rs: `errors.push(format!( "No visibility information for columns {table_name}.{column_name}." ));` $DIR/src/worker/dump_db/gen_scripts.rs: `errors.push(format!( "Column {table_name}.{column_name} does not exist in the database." ));` $DIR/src/worker/dump_db/gen_scripts.rs: `.flat_map(|(table, config)| { config.columns.keys().map(|column| Column { table_name: table.clone(), column_name: column.clone(), }) })` $DIR/src/worker/dump_db/gen_scripts.rs: `.columns.keys()` $DIR/src/worker/dump_db/gen_scripts.rs: `.collect()` $DIR/src/worker/dump_db/gen_scripts.rs: `.difference(&vis_columns)` $DIR/src/worker/dump_db/gen_scripts.rs: `.push(format!( "No visibility information for columns {table_name}.{column_name}." ))` $DIR/src/worker/dump_db/gen_scripts.rs: `.difference(&db_columns)` $DIR/src/worker/dump_db/gen_scripts.rs: `.push(format!( "Column {table_name}.{column_name} does not exist in the database." ))` $DIR/src/worker/dump_db.rs: `fs::create_dir(&p).unwrap();` $DIR/src/worker/dump_db.rs: `fs::write(p.join("README.md"), "# crates.io Database Dump\n").unwrap();` $DIR/src/worker/dump_db.rs: `fs::create_dir(p.join("data")).unwrap();` $DIR/src/worker/dump_db.rs: `fs::write(p.join("data").join("crates.csv"), "").unwrap();` $DIR/src/worker/dump_db.rs: `fs::write(p.join("data").join("crate_owners.csv"), "").unwrap();` $DIR/src/worker/dump_db.rs: `fs::write(p.join("data").join("users.csv"), "").unwrap();` $DIR/src/worker/dump_db.rs: `.prefix("DumpTarball")` $DIR/src/worker/dump_db.rs: `.tempdir()` $DIR/src/worker/dump_db.rs: `.path()` $DIR/src/worker/dump_db.rs: `.join("0000-00-00")` $DIR/src/worker/dump_db.rs: `.join("README.md")` $DIR/src/worker/dump_db.rs: `.join("data")` $DIR/src/worker/dump_db.rs: `.join("data")` $DIR/src/worker/dump_db.rs: `.join("crates.csv")` $DIR/src/worker/dump_db.rs: `.join("data")` $DIR/src/worker/dump_db.rs: `.join("crate_owners.csv")` $DIR/src/worker/dump_db.rs: `.join("data")` $DIR/src/worker/dump_db.rs: `.join("users.csv")` $DIR/src/worker/dump_db.rs: `.entries()` $DIR/src/worker/dump_db.rs: `.enumerate()` $DIR/src/worker/update_downloads.rs: `insert_into(version_downloads::table) .values(version_downloads::version_id.eq(version.id)) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `insert_into(version_downloads::table) .values(( version_downloads::version_id.eq(version.id), version_downloads::date.eq(date(now - 1.day())), version_downloads::processed.eq(true), )) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `super::update(conn).unwrap();` $DIR/src/worker/update_downloads.rs: `super::update(conn).unwrap();` $DIR/src/worker/update_downloads.rs: `insert_into(version_downloads::table) .values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(2), version_downloads::date.eq(date(now - 2.days())), version_downloads::processed.eq(false), )) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `super::update(conn).unwrap();` $DIR/src/worker/update_downloads.rs: `insert_into(version_downloads::table) .values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(2), version_downloads::date.eq(date(now)), version_downloads::processed.eq(false), )) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `super::update(conn).unwrap();` $DIR/src/worker/update_downloads.rs: `update(versions::table) .set(versions::updated_at.eq(now - 2.hours())) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `update(crates::table) .set(crates::updated_at.eq(now - 2.hours())) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `insert_into(version_downloads::table) .values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(1), version_downloads::date.eq(date(now)), version_downloads::processed.eq(false), )) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `insert_into(version_downloads::table) .values(( version_downloads::version_id.eq(version.id), version_downloads::date.eq(date(now - 1.day())), )) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `super::update(conn).unwrap();` $DIR/src/worker/update_downloads.rs: `super::update(conn).unwrap();` $DIR/src/worker/update_downloads.rs: `update(versions::table) .set(versions::updated_at.eq(now - 2.days())) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `update(crates::table) .set(crates::updated_at.eq(now - 2.days())) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `insert_into(version_downloads::table) .values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(2), version_downloads::date.eq(date(now - 2.days())), version_downloads::processed.eq(false), )) .execute(conn) .unwrap();` $DIR/src/worker/update_downloads.rs: `super::update(conn).unwrap();` $DIR/src/worker/update_downloads.rs: `.values(version_downloads::version_id.eq(version.id))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.values(( version_downloads::version_id.eq(version.id), version_downloads::date.eq(date(now - 1.day())), version_downloads::processed.eq(true), ))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.eq(date(now - 1.day()))` $DIR/src/worker/update_downloads.rs: `.day()` $DIR/src/worker/update_downloads.rs: `.eq(true)` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.find(version.id)` $DIR/src/worker/update_downloads.rs: `.select(versions::downloads)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.find(krate.id)` $DIR/src/worker/update_downloads.rs: `.select(crates::downloads)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.find(version.id)` $DIR/src/worker/update_downloads.rs: `.select(versions::downloads)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(2), version_downloads::date.eq(date(now - 2.days())), version_downloads::processed.eq(false), ))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.eq(2)` $DIR/src/worker/update_downloads.rs: `.eq(2)` $DIR/src/worker/update_downloads.rs: `.eq(date(now - 2.days()))` $DIR/src/worker/update_downloads.rs: `.days()` $DIR/src/worker/update_downloads.rs: `.eq(false)` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.filter(version_downloads::version_id.eq(version.id))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.select(version_downloads::processed)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(2), version_downloads::date.eq(date(now)), version_downloads::processed.eq(false), ))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.eq(2)` $DIR/src/worker/update_downloads.rs: `.eq(2)` $DIR/src/worker/update_downloads.rs: `.eq(date(now))` $DIR/src/worker/update_downloads.rs: `.eq(false)` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.filter(version_downloads::version_id.eq(version.id))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.select(version_downloads::processed)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.set(versions::updated_at.eq(now - 2.hours()))` $DIR/src/worker/update_downloads.rs: `.eq(now - 2.hours())` $DIR/src/worker/update_downloads.rs: `.hours()` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.set(crates::updated_at.eq(now - 2.hours()))` $DIR/src/worker/update_downloads.rs: `.eq(now - 2.hours())` $DIR/src/worker/update_downloads.rs: `.hours()` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(1), version_downloads::date.eq(date(now)), version_downloads::processed.eq(false), ))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.eq(2)` $DIR/src/worker/update_downloads.rs: `.eq(1)` $DIR/src/worker/update_downloads.rs: `.eq(date(now))` $DIR/src/worker/update_downloads.rs: `.eq(false)` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.values(( version_downloads::version_id.eq(version.id), version_downloads::date.eq(date(now - 1.day())), ))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.eq(date(now - 1.day()))` $DIR/src/worker/update_downloads.rs: `.day()` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.find(version.id)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.filter(crates::id.eq(krate.id))` $DIR/src/worker/update_downloads.rs: `.eq(krate.id)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.find(version.id)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.filter(crates::id.eq(krate.id))` $DIR/src/worker/update_downloads.rs: `.eq(krate.id)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.find(version.id)` $DIR/src/worker/update_downloads.rs: `.first(conn)` $DIR/src/worker/update_downloads.rs: `.set(versions::updated_at.eq(now - 2.days()))` $DIR/src/worker/update_downloads.rs: `.eq(now - 2.days())` $DIR/src/worker/update_downloads.rs: `.days()` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.set(crates::updated_at.eq(now - 2.days()))` $DIR/src/worker/update_downloads.rs: `.eq(now - 2.days())` $DIR/src/worker/update_downloads.rs: `.days()` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.values(( version_downloads::version_id.eq(version.id), version_downloads::downloads.eq(2), version_downloads::counted.eq(2), version_downloads::date.eq(date(now - 2.days())), version_downloads::processed.eq(false), ))` $DIR/src/worker/update_downloads.rs: `.eq(version.id)` $DIR/src/worker/update_downloads.rs: `.eq(2)` $DIR/src/worker/update_downloads.rs: `.eq(2)` $DIR/src/worker/update_downloads.rs: `.eq(date(now - 2.days()))` $DIR/src/worker/update_downloads.rs: `.days()` $DIR/src/worker/update_downloads.rs: `.eq(false)` $DIR/src/worker/update_downloads.rs: `.execute(conn)` $DIR/src/worker/update_downloads.rs: `.select(versions::updated_at.ne(now - 2.days()))` $DIR/src/worker/update_downloads.rs: `.ne(now - 2.days())` $DIR/src/worker/update_downloads.rs: `.days()` $DIR/src/worker/update_downloads.rs: `.get_result(conn)` $DIR/src/worker/update_downloads.rs: `.select(crates::updated_at.ne(now - 2.days()))` $DIR/src/worker/update_downloads.rs: `.ne(now - 2.days())` $DIR/src/worker/update_downloads.rs: `.days()` $DIR/src/worker/update_downloads.rs: `.get_result(conn)`