From a7c8fc7c5578ad7c7007cd4acb562ffe449aa389 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Wed, 10 Jul 2019 20:35:31 -0400 Subject: [PATCH] Support Cirrus CI badges Upstream API: https://cirrus-ci.org/guide/writing-tasks/#embedded-badges Modeled after https://github.com/rust-lang/crates.io/pull/807. --- app/components/badge-cirrus-ci.js | 15 ++++++++ app/templates/components/badge-cirrus-ci.hbs | 6 +++ src/models/badge.rs | 4 ++ src/tests/badge.rs | 40 ++++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 app/components/badge-cirrus-ci.js create mode 100644 app/templates/components/badge-cirrus-ci.hbs diff --git a/app/components/badge-cirrus-ci.js b/app/components/badge-cirrus-ci.js new file mode 100644 index 00000000000..62a3db4e328 --- /dev/null +++ b/app/components/badge-cirrus-ci.js @@ -0,0 +1,15 @@ +import { computed } from '@ember/object'; +import { alias } from '@ember/object/computed'; +import Component from '@ember/component'; + +export default Component.extend({ + tagName: 'span', + classNames: ['badge'], + repository: alias('badge.attributes.repository'), + branch: computed('badge.attributes.branch', function() { + return encodeURIComponent(this.get('badge.attributes.branch') || 'master'); + }), + text: computed('branch', function() { + return `Cirrus CI build status for the ${this.branch} branch`; + }), +}); diff --git a/app/templates/components/badge-cirrus-ci.hbs b/app/templates/components/badge-cirrus-ci.hbs new file mode 100644 index 00000000000..67a23242528 --- /dev/null +++ b/app/templates/components/badge-cirrus-ci.hbs @@ -0,0 +1,6 @@ + + {{ text }} + diff --git a/src/models/badge.rs b/src/models/badge.rs index ca93ed34345..7c91cad7921 100644 --- a/src/models/badge.rs +++ b/src/models/badge.rs @@ -48,6 +48,10 @@ pub enum Badge { repository: String, branch: Option, }, + CirrusCi { + repository: String, + branch: Option, + }, IsItMaintainedIssueResolution { repository: String, }, diff --git a/src/tests/badge.rs b/src/tests/badge.rs index c81f691ff56..7814d51b5b2 100644 --- a/src/tests/badge.rs +++ b/src/tests/badge.rs @@ -21,6 +21,8 @@ struct BadgeRef { coveralls_attributes: HashMap, circle_ci: Badge, circle_ci_attributes: HashMap, + cirrus_ci: Badge, + cirrus_ci_attributes: HashMap, maintenance: Badge, maintenance_attributes: HashMap, } @@ -134,6 +136,14 @@ fn set_up() -> (BadgeTestCrate, 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 cirrus_ci = Badge::CirrusCi { + repository: String::from("rust-lang/rust"), + branch: Some(String::from("beta")), + }; + let mut badge_attributes_cirrus_ci = HashMap::new(); + badge_attributes_cirrus_ci.insert(String::from("branch"), String::from("beta")); + badge_attributes_cirrus_ci.insert(String::from("repository"), String::from("rust-lang/rust")); + let maintenance = Badge::Maintenance { status: MaintenanceStatus::LookingForMaintainer, }; @@ -163,6 +173,8 @@ fn set_up() -> (BadgeTestCrate, BadgeRef) { coveralls_attributes: badge_attributes_coveralls, circle_ci, circle_ci_attributes: badge_attributes_circle_ci, + cirrus_ci, + cirrus_ci_attributes: badge_attributes_cirrus_ci, maintenance, maintenance_attributes, }; @@ -290,6 +302,17 @@ fn update_add_circle_ci() { assert_eq!(krate.badges(), vec![test_badges.circle_ci]); } +#[test] +fn update_add_cirrus_ci() { + // Add a Cirrus CI badge + let (krate, test_badges) = set_up(); + + let mut badges = HashMap::new(); + badges.insert(String::from("cirrus-ci"), test_badges.cirrus_ci_attributes); + krate.update(&badges); + assert_eq!(krate.badges(), vec![test_badges.cirrus_ci]); +} + #[test] fn update_add_maintenance() { // Add a maintenance badge @@ -547,6 +570,23 @@ fn circle_ci_required_keys() { assert_eq!(krate.badges(), vec![]); } +#[test] +fn cirrus_ci_required_keys() { + // Add a Cirrus CI badge missing a required field + let (krate, mut test_badges) = set_up(); + + let mut badges = HashMap::new(); + + // Repository is a required key + test_badges.cirrus_ci_attributes.remove("repository"); + badges.insert(String::from("cirrus-ci"), test_badges.cirrus_ci_attributes); + + let invalid_badges = krate.update(&badges); + assert_eq!(invalid_badges.len(), 1); + assert_eq!(invalid_badges.first().unwrap(), "cirrus-ci"); + assert_eq!(krate.badges(), vec![]); +} + #[test] fn maintenance_required_keys() { // Add a maintenance badge missing a required field