Skip to content

Finish updating tests #1760

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jun 26, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 21 additions & 33 deletions src/tests/all.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ extern crate serde_json;

use crate::util::{Bad, RequestHelper, TestApp};
use cargo_registry::{
middleware::current_user::AuthenticationSource,
models::{Crate, CrateOwner, Dependency, NewCategory, NewTeam, NewUser, Team, User, Version},
schema::crate_owners,
util::CargoResult,
views::{EncodableCrate, EncodableKeyword, EncodableOwner, EncodableVersion, GoodCrate},
views::{
EncodableCategory, EncodableCategoryWithSubcategories, EncodableCrate, EncodableKeyword,
EncodableOwner, EncodableVersion, GoodCrate,
},
App, Config, Env, Replica, Uploader,
};
use std::{
Expand All @@ -32,7 +34,6 @@ use std::{
},
};

use conduit::Request;
use conduit_test::MockRequest;
use diesel::prelude::*;
use reqwest::{Client, Proxy};
Expand All @@ -47,26 +48,6 @@ macro_rules! t {
};
}

macro_rules! ok_resp {
($e:expr) => {{
let resp = t!($e);
if !crate::ok_resp(&resp) {
panic!("bad response: {:?}", resp.status);
}
resp
}};
}

macro_rules! bad_resp {
($e:expr) => {{
let mut resp = t!($e);
match crate::bad_resp(&mut resp) {
None => panic!("ok response: {:?}", resp.status),
Some(b) => b,
}
}};
}

mod badge;
mod builders;
mod categories;
Expand Down Expand Up @@ -110,6 +91,23 @@ pub struct OwnerTeamsResponse {
teams: Vec<EncodableOwner>,
}
#[derive(Deserialize)]
pub struct OwnersResponse {
users: Vec<EncodableOwner>,
}
#[derive(Deserialize)]
pub struct CategoryResponse {
category: EncodableCategoryWithSubcategories,
}
#[derive(Deserialize)]
pub struct CategoryListResponse {
categories: Vec<EncodableCategory>,
meta: CategoryMeta,
}
#[derive(Deserialize)]
pub struct CategoryMeta {
total: i32,
}
#[derive(Deserialize)]
pub struct OkBool {
ok: bool,
}
Expand Down Expand Up @@ -254,12 +252,6 @@ fn add_team_to_crate(t: &Team, krate: &Crate, u: &User, conn: &PgConnection) ->
Ok(())
}

fn sign_in_as(req: &mut dyn Request, user: &User) {
req.mut_extensions().insert(user.clone());
req.mut_extensions()
.insert(AuthenticationSource::SessionCookie);
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉 I'm so glad to see this go away, along with logout and the *_resp! macros

fn new_dependency(conn: &PgConnection, version: &Version, krate: &Crate) -> Dependency {
use cargo_registry::schema::dependencies::dsl::*;
use diesel::insert_into;
Expand All @@ -285,10 +277,6 @@ fn new_category<'a>(category: &'a str, slug: &'a str, description: &'a str) -> N
}
}

fn logout(req: &mut dyn Request) {
req.mut_extensions().pop::<User>();
}

#[test]
fn multiple_live_references_to_the_same_connection_can_be_checked_out() {
use std::ptr;
Expand Down
177 changes: 71 additions & 106 deletions src/tests/category.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,8 @@
use crate::{app, builders::CrateBuilder, new_category, new_user, req, RequestHelper, TestApp};
use cargo_registry::{
models::Category,
views::{EncodableCategory, EncodableCategoryWithSubcategories},
use crate::{
builders::CrateBuilder, new_category, util::MockAnonymousUser, RequestHelper, TestApp,
};
use cargo_registry::{models::Category, views::EncodableCategoryWithSubcategories};

use conduit::{Handler, Method};

#[derive(Deserialize)]
struct CategoryList {
categories: Vec<EncodableCategory>,
meta: CategoryMeta,
}
#[derive(Deserialize)]
struct CategoryMeta {
total: i32,
}
#[derive(Deserialize)]
struct GoodCategory {
category: EncodableCategory,
}
#[derive(Deserialize)]
struct CategoryWithSubcategories {
category: EncodableCategoryWithSubcategories,
Expand All @@ -27,10 +11,9 @@ struct CategoryWithSubcategories {
#[test]
fn index() {
let (app, anon) = TestApp::init().empty();
let url = "/api/v1/categories";

// List 0 categories if none exist
let json: CategoryList = anon.get(url).good();
let json = anon.show_category_list();
assert_eq!(json.categories.len(), 0);
assert_eq!(json.meta.total, 0);

Expand All @@ -45,7 +28,7 @@ fn index() {
});

// Only the top-level categories should be on the page
let json: CategoryList = anon.get(url).good();
let json = anon.show_category_list();
assert_eq!(json.categories.len(), 1);
assert_eq!(json.meta.total, 1);
assert_eq!(json.categories[0].category, "foo");
Expand Down Expand Up @@ -76,94 +59,76 @@ fn show() {
#[test]
#[allow(clippy::cognitive_complexity)]
fn update_crate() {
let (app, middle) = app();
let mut req = req(Method::Get, "/api/v1/categories/foo");
macro_rules! cnt {
($req:expr, $cat:expr) => {{
$req.with_path(&format!("/api/v1/categories/{}", $cat));
let mut response = ok_resp!(middle.call($req));
crate::json::<GoodCategory>(&mut response)
.category
.crates_cnt as usize
}};
// Convenience function to get the number of crates in a category
fn count(anon: &MockAnonymousUser, category: &str) -> usize {
let json = anon.show_category(category);
json.category.crates_cnt as usize
}

let krate = {
let conn = t!(app.diesel_database.get());
let user = t!(new_user("foo").create_or_update(&conn));
t!(new_category("cat1", "cat1", "Category 1 crates").create_or_update(&conn));
t!(new_category("Category 2", "category-2", "Category 2 crates").create_or_update(&conn));
CrateBuilder::new("foo_crate", user.id).expect_build(&conn)
};
let (app, anon, user) = TestApp::init().with_user();
let user = user.as_model();

// Updating with no categories has no effect
Category::update_crate(&app.diesel_database.get().unwrap(), &krate, &[]).unwrap();
assert_eq!(cnt!(&mut req, "cat1"), 0);
assert_eq!(cnt!(&mut req, "category-2"), 0);

// Happy path adding one category
Category::update_crate(&app.diesel_database.get().unwrap(), &krate, &["cat1"]).unwrap();
assert_eq!(cnt!(&mut req, "cat1"), 1);
assert_eq!(cnt!(&mut req, "category-2"), 0);

// Replacing one category with another
Category::update_crate(&app.diesel_database.get().unwrap(), &krate, &["category-2"]).unwrap();
assert_eq!(cnt!(&mut req, "cat1"), 0);
assert_eq!(cnt!(&mut req, "category-2"), 1);

// Removing one category
Category::update_crate(&app.diesel_database.get().unwrap(), &krate, &[]).unwrap();
assert_eq!(cnt!(&mut req, "cat1"), 0);
assert_eq!(cnt!(&mut req, "category-2"), 0);

// Adding 2 categories
Category::update_crate(
&app.diesel_database.get().unwrap(),
&krate,
&["cat1", "category-2"],
)
.unwrap();
assert_eq!(cnt!(&mut req, "cat1"), 1);
assert_eq!(cnt!(&mut req, "category-2"), 1);

// Removing all categories
Category::update_crate(&app.diesel_database.get().unwrap(), &krate, &[]).unwrap();
assert_eq!(cnt!(&mut req, "cat1"), 0);
assert_eq!(cnt!(&mut req, "category-2"), 0);

// Attempting to add one valid category and one invalid category
let invalid_categories = Category::update_crate(
&app.diesel_database.get().unwrap(),
&krate,
&["cat1", "catnope"],
)
.unwrap();
assert_eq!(invalid_categories, vec!["catnope"]);
assert_eq!(cnt!(&mut req, "cat1"), 1);
assert_eq!(cnt!(&mut req, "category-2"), 0);

// Does not add the invalid category to the category list
// (unlike the behavior of keywords)
req.with_path("/api/v1/categories");
let mut response = ok_resp!(middle.call(&mut req));
let json: CategoryList = crate::json(&mut response);
assert_eq!(json.categories.len(), 2);
assert_eq!(json.meta.total, 2);

// Attempting to add a category by display text; must use slug
Category::update_crate(&app.diesel_database.get().unwrap(), &krate, &["Category 2"]).unwrap();
assert_eq!(cnt!(&mut req, "cat1"), 0);
assert_eq!(cnt!(&mut req, "category-2"), 0);

// Add a category and its subcategory
{
let conn = t!(app.diesel_database.get());
t!(new_category("cat1::bar", "cat1::bar", "bar crates").create_or_update(&conn,));
app.db(|conn| {
t!(new_category("cat1", "cat1", "Category 1 crates").create_or_update(conn));
t!(new_category("Category 2", "category-2", "Category 2 crates").create_or_update(conn));
let krate = CrateBuilder::new("foo_crate", user.id).expect_build(&conn);

// Updating with no categories has no effect
Category::update_crate(conn, &krate, &[]).unwrap();
assert_eq!(count(&anon, "cat1"), 0);
assert_eq!(count(&anon, "category-2"), 0);

// Happy path adding one category
Category::update_crate(conn, &krate, &["cat1"]).unwrap();
assert_eq!(count(&anon, "cat1"), 1);
assert_eq!(count(&anon, "category-2"), 0);

// Replacing one category with another
Category::update_crate(conn, &krate, &["category-2"]).unwrap();
assert_eq!(count(&anon, "cat1"), 0);
assert_eq!(count(&anon, "category-2"), 1);

// Removing one category
Category::update_crate(conn, &krate, &[]).unwrap();
assert_eq!(count(&anon, "cat1"), 0);
assert_eq!(count(&anon, "category-2"), 0);

// Adding 2 categories
Category::update_crate(conn, &krate, &["cat1", "category-2"]).unwrap();
assert_eq!(count(&anon, "cat1"), 1);
assert_eq!(count(&anon, "category-2"), 1);

// Removing all categories
Category::update_crate(conn, &krate, &[]).unwrap();
assert_eq!(count(&anon, "cat1"), 0);
assert_eq!(count(&anon, "category-2"), 0);

// Attempting to add one valid category and one invalid category
let invalid_categories =
Category::update_crate(conn, &krate, &["cat1", "catnope"]).unwrap();
assert_eq!(invalid_categories, vec!["catnope"]);
assert_eq!(count(&anon, "cat1"), 1);
assert_eq!(count(&anon, "category-2"), 0);

// Does not add the invalid category to the category list
// (unlike the behavior of keywords)
let json = anon.show_category_list();
assert_eq!(json.categories.len(), 2);
assert_eq!(json.meta.total, 2);

// Attempting to add a category by display text; must use slug
Category::update_crate(conn, &krate, &["Category 2"]).unwrap();
assert_eq!(count(&anon, "cat1"), 0);
assert_eq!(count(&anon, "category-2"), 0);

// Add a category and its subcategory
t!(new_category("cat1::bar", "cat1::bar", "bar crates").create_or_update(conn));
Category::update_crate(&conn, &krate, &["cat1", "cat1::bar"]).unwrap();
}
assert_eq!(cnt!(&mut req, "cat1"), 1);
assert_eq!(cnt!(&mut req, "cat1::bar"), 1);
assert_eq!(cnt!(&mut req, "category-2"), 0);

assert_eq!(count(&anon, "cat1"), 1);
assert_eq!(count(&anon, "cat1::bar"), 1);
assert_eq!(count(&anon, "category-2"), 0);
});
}

#[test]
Expand Down
Loading