Skip to content

Commit 53a84fc

Browse files
committed
models/category: Simplify update_crate() argument
This allows us to use this function even if we only have an id and not a full `Crate` instance.
1 parent 1221840 commit 53a84fc

File tree

5 files changed

+22
-18
lines changed

5 files changed

+22
-18
lines changed

src/controllers/krate/publish.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult<Json<GoodCra
431431

432432
// Update all categories for this crate, collecting any invalid categories
433433
// in order to be able to return an error to the user.
434-
let unknown_categories = Category::update_crate(conn, &krate, &categories)?;
434+
let unknown_categories = Category::update_crate(conn, krate.id, &categories)?;
435435
if !unknown_categories.is_empty() {
436436
let unknown_categories = unknown_categories.join(", ");
437437
let domain = &app.config.domain_name;

src/models/category.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl Category {
4444

4545
pub fn update_crate(
4646
conn: &mut impl Conn,
47-
krate: &Crate,
47+
crate_id: i32,
4848
slugs: &[&str],
4949
) -> QueryResult<Vec<String>> {
5050
conn.transaction(|conn| {
@@ -60,14 +60,18 @@ impl Category {
6060
.iter()
6161
.map(|c| CrateCategory {
6262
category_id: c.id,
63-
crate_id: krate.id,
63+
crate_id,
6464
})
6565
.collect::<Vec<_>>();
6666

67-
delete(CrateCategory::belonging_to(krate)).execute(conn)?;
67+
delete(crates_categories::table)
68+
.filter(crates_categories::crate_id.eq(crate_id))
69+
.execute(conn)?;
70+
6871
insert_into(crates_categories::table)
6972
.values(&crate_categories)
7073
.execute(conn)?;
74+
7175
Ok(invalid_categories)
7276
})
7377
}

src/tests/builders/krate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ impl<'a> CrateBuilder<'a> {
156156
}
157157

158158
if !self.categories.is_empty() {
159-
Category::update_crate(connection, &krate, &self.categories)?;
159+
Category::update_crate(connection, krate.id, &self.categories)?;
160160
}
161161

162162
if !self.keywords.is_empty() {

src/tests/routes/categories/get.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,38 +59,38 @@ async fn update_crate() {
5959
let krate = CrateBuilder::new("foo_crate", user.id).expect_build(&mut conn);
6060

6161
// Updating with no categories has no effect
62-
Category::update_crate(&mut conn, &krate, &[]).unwrap();
62+
Category::update_crate(&mut conn, krate.id, &[]).unwrap();
6363
assert_eq!(count(&anon, "cat1").await, 0);
6464
assert_eq!(count(&anon, "category-2").await, 0);
6565

6666
// Happy path adding one category
67-
Category::update_crate(&mut conn, &krate, &["cat1"]).unwrap();
67+
Category::update_crate(&mut conn, krate.id, &["cat1"]).unwrap();
6868
assert_eq!(count(&anon, "cat1").await, 1);
6969
assert_eq!(count(&anon, "category-2").await, 0);
7070

7171
// Replacing one category with another
72-
Category::update_crate(&mut conn, &krate, &["category-2"]).unwrap();
72+
Category::update_crate(&mut conn, krate.id, &["category-2"]).unwrap();
7373
assert_eq!(count(&anon, "cat1").await, 0);
7474
assert_eq!(count(&anon, "category-2").await, 1);
7575

7676
// Removing one category
77-
Category::update_crate(&mut conn, &krate, &[]).unwrap();
77+
Category::update_crate(&mut conn, krate.id, &[]).unwrap();
7878
assert_eq!(count(&anon, "cat1").await, 0);
7979
assert_eq!(count(&anon, "category-2").await, 0);
8080

8181
// Adding 2 categories
82-
Category::update_crate(&mut conn, &krate, &["cat1", "category-2"]).unwrap();
82+
Category::update_crate(&mut conn, krate.id, &["cat1", "category-2"]).unwrap();
8383
assert_eq!(count(&anon, "cat1").await, 1);
8484
assert_eq!(count(&anon, "category-2").await, 1);
8585

8686
// Removing all categories
87-
Category::update_crate(&mut conn, &krate, &[]).unwrap();
87+
Category::update_crate(&mut conn, krate.id, &[]).unwrap();
8888
assert_eq!(count(&anon, "cat1").await, 0);
8989
assert_eq!(count(&anon, "category-2").await, 0);
9090

9191
// Attempting to add one valid category and one invalid category
9292
let invalid_categories =
93-
Category::update_crate(&mut conn, &krate, &["cat1", "catnope"]).unwrap();
93+
Category::update_crate(&mut conn, krate.id, &["cat1", "catnope"]).unwrap();
9494
assert_eq!(invalid_categories, vec!["catnope"]);
9595
assert_eq!(count(&anon, "cat1").await, 1);
9696
assert_eq!(count(&anon, "category-2").await, 0);
@@ -102,7 +102,7 @@ async fn update_crate() {
102102
assert_eq!(json.meta.total, 2);
103103

104104
// Attempting to add a category by display text; must use slug
105-
Category::update_crate(&mut conn, &krate, &["Category 2"]).unwrap();
105+
Category::update_crate(&mut conn, krate.id, &["Category 2"]).unwrap();
106106
assert_eq!(count(&anon, "cat1").await, 0);
107107
assert_eq!(count(&anon, "category-2").await, 0);
108108

@@ -111,7 +111,7 @@ async fn update_crate() {
111111
.values(new_category("cat1::bar", "cat1::bar", "bar crates"))
112112
.execute(&mut conn));
113113

114-
Category::update_crate(&mut conn, &krate, &["cat1", "cat1::bar"]).unwrap();
114+
Category::update_crate(&mut conn, krate.id, &["cat1", "cat1::bar"]).unwrap();
115115

116116
assert_eq!(count(&anon, "cat1").await, 1);
117117
assert_eq!(count(&anon, "cat1::bar").await, 1);

src/tests/routes/crates/list.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ async fn index_queries() {
163163
.execute(&mut conn)
164164
.unwrap();
165165

166-
Category::update_crate(&mut conn, &krate, &["cat1"]).unwrap();
167-
Category::update_crate(&mut conn, &krate2, &["cat1::bar"]).unwrap();
166+
Category::update_crate(&mut conn, krate.id, &["cat1"]).unwrap();
167+
Category::update_crate(&mut conn, krate2.id, &["cat1::bar"]).unwrap();
168168

169169
for cl in search_both(&anon, "category=cat1").await {
170170
assert_eq!(cl.crates.len(), 2);
@@ -870,8 +870,8 @@ async fn test_default_sort_recent() {
870870
.execute(&mut conn)
871871
.unwrap();
872872

873-
Category::update_crate(&mut conn, &green_crate, &["animal"]).unwrap();
874-
Category::update_crate(&mut conn, &potato_crate, &["animal"]).unwrap();
873+
Category::update_crate(&mut conn, green_crate.id, &["animal"]).unwrap();
874+
Category::update_crate(&mut conn, potato_crate.id, &["animal"]).unwrap();
875875

876876
// test that index for categories is sorted by recent_downloads
877877
// by default

0 commit comments

Comments
 (0)