From 195a1d6abb67b68005c9db97c87c4998b1919211 Mon Sep 17 00:00:00 2001 From: Willy Aguirre Date: Wed, 31 May 2017 00:13:06 -0500 Subject: [PATCH 1/6] add new badges #704 --- src/badge.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/badge.rs b/src/badge.rs index 3f79d21b8d3..013988d4ac9 100644 --- a/src/badge.rs +++ b/src/badge.rs @@ -40,6 +40,34 @@ pub enum Badge { branch: Option, service: Option, }, + #[serde(rename = "actively-developed")] + ActivelyDeveloped { + repository: String, branch: Option, + }, + #[serde(rename = "passively-maintained")] + PassivelyMaintained { + repository: String, branch: Option, + }, + #[serde(rename = "as-is")] + AsIs { + repository: String, branch: Option, + }, + #[serde(rename = "none")] + None { + repository: String, branch: Option, + }, + #[serde(rename = "experimental")] + Experimental { + repository: String, branch: Option, + }, + #[serde(rename = "looking-for-maintainer")] + LookingForMaintainer { + repository: String, branch: Option, + }, + #[serde(rename = "deprecated")] + Deprecated { + repository: String, branch: Option, + } } #[derive(PartialEq, Debug, Serialize, Deserialize)] From d18390543d84120a460841b2e3cc941096553c38 Mon Sep 17 00:00:00 2001 From: Willy Aguirre Date: Tue, 11 Jul 2017 15:07:44 -0500 Subject: [PATCH 2/6] add new enum MaintenanceValue --- src/badge.rs | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/badge.rs b/src/badge.rs index 013988d4ac9..6468210d7ec 100644 --- a/src/badge.rs +++ b/src/badge.rs @@ -40,34 +40,33 @@ pub enum Badge { branch: Option, service: Option, }, + #[serde(rename = "maintenance")] + Maintenance { value: MaintenanceValue }, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(tag = "badge_type", content = "attributes")] +pub enum MaintenanceValue { #[serde(rename = "actively-developed")] - ActivelyDeveloped { - repository: String, branch: Option, - }, + ActivelyDeveloped, + #[serde(rename = "passively-maintained")] - PassivelyMaintained { - repository: String, branch: Option, - }, + PassivelyMaintained, + #[serde(rename = "as-is")] - AsIs { - repository: String, branch: Option, - }, + AsIs, + #[serde(rename = "none")] - None { - repository: String, branch: Option, - }, + None, + #[serde(rename = "experimental")] - Experimental { - repository: String, branch: Option, - }, + Experimental, + #[serde(rename = "looking-for-maintainer")] - LookingForMaintainer { - repository: String, branch: Option, - }, + LookingForMaintainer, + #[serde(rename = "deprecated")] - Deprecated { - repository: String, branch: Option, - } + Deprecated, } #[derive(PartialEq, Debug, Serialize, Deserialize)] From 2b5c4b6e72e344e72bfa8ce9a2625937b02cd834 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Fri, 14 Jul 2017 22:33:05 -0400 Subject: [PATCH 3/6] Add some tests for the maintenance badge enum --- src/tests/badge.rs | 75 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/src/tests/badge.rs b/src/tests/badge.rs index 794121c6335..10107f2edfb 100644 --- a/src/tests/badge.rs +++ b/src/tests/badge.rs @@ -1,5 +1,5 @@ use cargo_registry::app::App; -use cargo_registry::badge::Badge; +use cargo_registry::badge::{Badge, MaintenanceValue}; use cargo_registry::krate::Crate; use std::collections::HashMap; @@ -22,6 +22,8 @@ struct BadgeRef { coveralls_attributes: HashMap, circle_ci: Badge, circle_ci_attributes: HashMap, + maintenance: Badge, + maintenance_attributes: HashMap, } fn set_up() -> (Arc, Crate, BadgeRef) { @@ -106,6 +108,13 @@ fn set_up() -> (Arc, Crate, BadgeRef) { badge_attributes_circle_ci.insert(String::from("branch"), String::from("beta")); badge_attributes_circle_ci.insert(String::from("repository"), String::from("rust-lang/rust")); + let maintenance = Badge::Maintenance { value: MaintenanceValue::LookingForMaintainer }; + let mut maintenance_attributes = HashMap::new(); + maintenance_attributes.insert( + String::from("value"), + String::from("looking-for-maintainer"), + ); + let badges = BadgeRef { appveyor: appveyor, appveyor_attributes: badge_attributes_appveyor, @@ -124,6 +133,8 @@ fn set_up() -> (Arc, Crate, BadgeRef) { coveralls_attributes: badge_attributes_coveralls, circle_ci: circle_ci, circle_ci_attributes: badge_attributes_circle_ci, + maintenance, + maintenance_attributes, }; (app, krate, badges) } @@ -247,6 +258,21 @@ fn update_add_circle_ci() { assert_eq!(krate.badges(&conn).unwrap(), vec![test_badges.circle_ci]); } +#[test] +fn update_add_maintenance() { + // Add a maintenance badge + let (app, krate, test_badges) = set_up(); + let conn = app.diesel_database.get().unwrap(); + + let mut badges = HashMap::new(); + badges.insert( + String::from("maintenance"), + test_badges.maintenance_attributes, + ); + Badge::update_crate(&conn, &krate, Some(&badges)).unwrap(); + assert_eq!(krate.badges(&conn).unwrap(), vec![test_badges.maintenance]); +} + #[test] fn replace_badge() { // Replacing one badge with another @@ -480,6 +506,53 @@ fn circle_ci_required_keys() { assert_eq!(krate.badges(&conn).unwrap(), vec![]); } +#[test] +fn maintenance_required_keys() { + // Add a maintenance badge missing a required field + let (app, krate, mut test_badges) = set_up(); + let conn = app.diesel_database.get().unwrap(); + + let mut badges = HashMap::new(); + + // Value is a required key + test_badges.maintenance_attributes.remove("value"); + badges.insert( + String::from("maintenance"), + test_badges.maintenance_attributes, + ); + + let invalid_badges = Badge::update_crate(&conn, &krate, Some(&badges)).unwrap(); + assert_eq!(invalid_badges.len(), 1); + assert!(invalid_badges.contains(&"maintenance")); + assert_eq!(krate.badges(&conn).unwrap(), vec![]); +} + +#[test] +fn maintenance_invalid_values() { + // Add a maintenance badge with an invalid value + let (app, krate, mut test_badges) = set_up(); + let conn = app.diesel_database.get().unwrap(); + + let mut badges = HashMap::new(); + + // "totes broken" is not a recognized value + test_badges.maintenance_attributes.insert( + String::from("value"), + String::from( + "totes broken", + ), + ); + badges.insert( + String::from("maintenance"), + test_badges.maintenance_attributes, + ); + + let invalid_badges = Badge::update_crate(&conn, &krate, Some(&badges)).unwrap(); + assert_eq!(invalid_badges.len(), 1); + assert!(invalid_badges.contains(&"maintenance")); + assert_eq!(krate.badges(&conn).unwrap(), vec![]); +} + #[test] fn unknown_badge() { // Add an unknown badge From 55f54943b18c06eba9b9e1afdb68860c0da28968 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Fri, 14 Jul 2017 22:33:56 -0400 Subject: [PATCH 4/6] Remove an uneccessary rename --- src/badge.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/badge.rs b/src/badge.rs index 6468210d7ec..33c6bd5bed9 100644 --- a/src/badge.rs +++ b/src/badge.rs @@ -40,7 +40,6 @@ pub enum Badge { branch: Option, service: Option, }, - #[serde(rename = "maintenance")] Maintenance { value: MaintenanceValue }, } From b116015d877b68495d920e13d8f4503e39c83ecf Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Fri, 14 Jul 2017 22:34:33 -0400 Subject: [PATCH 5/6] Remove a serde annotation that doesn't apply This nests the data too much; serialized JSON looks like this, which has an extra value key: ``` { "badge_type": "maintenance", "attributes": { "value": { "value": "looking-for-maintainer" } } } ``` --- src/badge.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/badge.rs b/src/badge.rs index 33c6bd5bed9..4f29c8b989b 100644 --- a/src/badge.rs +++ b/src/badge.rs @@ -44,7 +44,6 @@ pub enum Badge { } #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(tag = "badge_type", content = "attributes")] pub enum MaintenanceValue { #[serde(rename = "actively-developed")] ActivelyDeveloped, From 14f1b4ca3703b1f08f7637230221c89892177b7e Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Fri, 14 Jul 2017 22:37:07 -0400 Subject: [PATCH 6/6] Refactor to an enum-wide serde rename --- src/badge.rs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/badge.rs b/src/badge.rs index 4f29c8b989b..27c2364ad86 100644 --- a/src/badge.rs +++ b/src/badge.rs @@ -44,26 +44,14 @@ pub enum Badge { } #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "kebab-case")] pub enum MaintenanceValue { - #[serde(rename = "actively-developed")] ActivelyDeveloped, - - #[serde(rename = "passively-maintained")] PassivelyMaintained, - - #[serde(rename = "as-is")] AsIs, - - #[serde(rename = "none")] None, - - #[serde(rename = "experimental")] Experimental, - - #[serde(rename = "looking-for-maintainer")] LookingForMaintainer, - - #[serde(rename = "deprecated")] Deprecated, }