Skip to content

Commit e62c4ef

Browse files
sfacklercarols10cents
authored andcommitted
Support CircleCI badges
Closes #800
1 parent f0e1de8 commit e62c4ef

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

app/components/badge-circle-ci.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Ember from 'ember';
2+
3+
export default Ember.Component.extend({
4+
tagName: 'span',
5+
classNames: ['badge'],
6+
repository: Ember.computed.alias('badge.attributes.repository'),
7+
branch: Ember.computed('badge.attributes.branch', function() {
8+
return this.get('badge.attributes.branch') || 'master';
9+
}),
10+
text: Ember.computed('branch', function() {
11+
return `Circle CI build status for the ${ this.get('branch') } branch`;
12+
})
13+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<a href="https://circleci.com/gh/{{ repository }}">
2+
<img
3+
src="https://circleci.com/gh/{{ repository }}/tree/{{ branch }}.svg?style=shield"
4+
alt="{{ text }}"
5+
title="{{ text }}" />
6+
</a>

src/badge.rs

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ pub enum Badge {
2323
repository: String,
2424
branch: Option<String>,
2525
},
26+
CircleCi {
27+
repository: String,
28+
branch: Option<String>,
29+
},
2630
IsItMaintainedIssueResolution { repository: String },
2731
IsItMaintainedOpenIssues { repository: String },
2832
Codecov {

src/tests/badge.rs

+42
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ struct BadgeRef {
2020
codecov_attributes: HashMap<String, String>,
2121
coveralls: Badge,
2222
coveralls_attributes: HashMap<String, String>,
23+
circle_ci: Badge,
24+
circle_ci_attributes: HashMap<String, String>,
2325
}
2426

2527
fn set_up() -> (Arc<App>, Crate, BadgeRef) {
@@ -96,6 +98,14 @@ fn set_up() -> (Arc<App>, Crate, BadgeRef) {
9698
badge_attributes_coveralls.insert(String::from("repository"), String::from("rust-lang/rust"));
9799
badge_attributes_coveralls.insert(String::from("service"), String::from("github"));
98100

101+
let circle_ci = Badge::CircleCi {
102+
repository: String::from("rust-lang/rust"),
103+
branch: Some(String::from("beta")),
104+
};
105+
let mut badge_attributes_circle_ci = HashMap::new();
106+
badge_attributes_circle_ci.insert(String::from("branch"), String::from("beta"));
107+
badge_attributes_circle_ci.insert(String::from("repository"), String::from("rust-lang/rust"));
108+
99109
let badges = BadgeRef {
100110
appveyor: appveyor,
101111
appveyor_attributes: badge_attributes_appveyor,
@@ -112,6 +122,8 @@ fn set_up() -> (Arc<App>, Crate, BadgeRef) {
112122
codecov_attributes: badge_attributes_codecov,
113123
coveralls: coveralls,
114124
coveralls_attributes: badge_attributes_coveralls,
125+
circle_ci: circle_ci,
126+
circle_ci_attributes: badge_attributes_circle_ci,
115127
};
116128
(app, krate, badges)
117129
}
@@ -223,6 +235,18 @@ fn update_add_coveralls() {
223235
assert_eq!(krate.badges(&conn).unwrap(), vec![test_badges.coveralls]);
224236
}
225237

238+
#[test]
239+
fn update_add_circle_ci() {
240+
// Add a CircleCI badge
241+
let (app, krate, test_badges) = set_up();
242+
let conn = app.diesel_database.get().unwrap();
243+
244+
let mut badges = HashMap::new();
245+
badges.insert(String::from("circle-ci"), test_badges.circle_ci_attributes);
246+
Badge::update_crate(&conn, &krate, Some(&badges)).unwrap();
247+
assert_eq!(krate.badges(&conn).unwrap(), vec![test_badges.circle_ci]);
248+
}
249+
226250
#[test]
227251
fn replace_badge() {
228252
// Replacing one badge with another
@@ -438,6 +462,24 @@ fn coveralls_required_keys() {
438462
assert_eq!(krate.badges(&conn).unwrap(), vec![]);
439463
}
440464

465+
#[test]
466+
fn circle_ci_required_keys() {
467+
// Add a CircleCI badge missing a required field
468+
let (app, krate, mut test_badges) = set_up();
469+
let conn = app.diesel_database.get().unwrap();
470+
471+
let mut badges = HashMap::new();
472+
473+
// Repository is a required key
474+
test_badges.circle_ci_attributes.remove("repository");
475+
badges.insert(String::from("circle-ci"), test_badges.circle_ci_attributes);
476+
477+
let invalid_badges = Badge::update_crate(&conn, &krate, Some(&badges)).unwrap();
478+
assert_eq!(invalid_badges.len(), 1);
479+
assert!(invalid_badges.contains(&"circle-ci"));
480+
assert_eq!(krate.badges(&conn).unwrap(), vec![]);
481+
}
482+
441483
#[test]
442484
fn unknown_badge() {
443485
// Add an unknown badge

0 commit comments

Comments
 (0)