Skip to content

Commit 336350f

Browse files
committed
Added badges for Is it maintained, codecov and coveralls
1 parent b41061f commit 336350f

12 files changed

+252
-4
lines changed

app/components/badge-codecov.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
service: Ember.computed('badge.attributes.service', function() {
11+
return this.get('badge.attributes.service') || 'github';
12+
}),
13+
text: Ember.computed('branch', function() {
14+
return `CodeCov coverage status for the ${ this.get('branch') } branch`;
15+
})
16+
});

app/components/badge-coveralls.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
service: Ember.computed('badge.attributes.service', function() {
11+
return this.get('badge.attributes.service') || 'github';
12+
}),
13+
text: Ember.computed('branch', function() {
14+
return `Coveralls coverage status for the ${ this.get('branch') } branch`;
15+
})
16+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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+
text: Ember.computed('badge', function() {
8+
return `Is It Maintained average time to resolve an issue`;
9+
})
10+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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+
text: Ember.computed('badge', function() {
8+
return `Is It Maintained percentage of issues still open`;
9+
})
10+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<a href="https://codecov.io/{{ service }}/{{ repository }}?branch={{ branch }}">
2+
<img
3+
src="https://codecov.io/{{ service }}/{{ repository }}/coverage.svg?branch={{ branch }}"
4+
alt="{{ text }}"
5+
title="{{ text }}" />
6+
</a>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<a href="https://coveralls.io/{{ service }}/{{ repository }}?branch={{ branch }}">
2+
<img
3+
src="https://coveralls.io/repos/{{ service }}/{{ repository }}/badge.svg?branch={{ branch }}"
4+
alt="{{ text }}"
5+
title="{{ text }}" />
6+
</a>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<a href="https://isitmaintained.com/project/{{ repository }}">
2+
<img
3+
src="https://isitmaintained.com/badge/resolution/{{ repository }}.svg"
4+
alt="{{ text }}"
5+
title="{{ text }}" />
6+
</a>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<a href="https://isitmaintained.com/project/{{ repository }}">
2+
<img
3+
src="https://isitmaintained.com/badge/open/{{ repository }}.svg"
4+
alt="{{ text }}"
5+
title="{{ text }}" />
6+
</a>

mirage/fixtures/search.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,32 @@ export default {
4040
"repository": "huonw/external_mixin"
4141
},
4242
"badge_type": "gitlab"
43+
},
44+
{
45+
"attributes": {
46+
"repository": "huonw/external_mixin"
47+
},
48+
"badge_type": "is-it-maintained-issue-resolution"
49+
},
50+
{
51+
"attributes": {
52+
"repository": "huonw/external_mixin"
53+
},
54+
"badge_type": "is-it-maintained-open-issues"
55+
},
56+
{
57+
"attributes": {
58+
"branch": "master",
59+
"repository": "huonw/external_mixin"
60+
},
61+
"badge_type": "codecov"
62+
},
63+
{
64+
"attributes": {
65+
"branch": "master",
66+
"repository": "huonw/external_mixin"
67+
},
68+
"badge_type": "coveralls"
4369
}
4470
],
4571
"versions": null

src/badge.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,22 @@ pub enum Badge {
2525
GitLab {
2626
repository: String, branch: Option<String>,
2727
},
28+
#[serde(rename = "is-it-maintained-issue-resolution")]
29+
IsItMaintainedIssueResolution {
30+
repository: String,
31+
},
32+
#[serde(rename = "is-it-maintained-open-issues")]
33+
IsItMaintainedOpenIssues {
34+
repository: String,
35+
},
36+
#[serde(rename = "codecov")]
37+
CodeCov {
38+
repository: String, branch: Option<String>, service: Option<String>,
39+
},
40+
#[serde(rename = "coveralls")]
41+
Coveralls {
42+
repository: String, branch: Option<String>, service: Option<String>,
43+
},
2844
}
2945

3046
#[derive(RustcEncodable, RustcDecodable, PartialEq, Debug, Deserialize)]
@@ -64,6 +80,10 @@ impl Badge {
6480
Badge::TravisCi {..} => "travis-ci",
6581
Badge::Appveyor {..} => "appveyor",
6682
Badge::GitLab{..} => "gitlab",
83+
Badge::IsItMaintainedIssueResolution{..} => "is-it-maintained-issue-resolution",
84+
Badge::IsItMaintainedOpenIssues{..} => "is-it-maintained-open-issues",
85+
Badge::CodeCov{..} => "codecov",
86+
Badge::Coveralls{..} => "coveralls",
6787
}
6888
}
6989

src/tests/badge.rs

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ struct BadgeRef {
1414
travis_ci_attributes: HashMap<String, String>,
1515
gitlab: Badge,
1616
gitlab_attributes: HashMap<String, String>,
17+
isitmaintained_issue_resolution: Badge,
18+
isitmaintained_issue_resolution_attributes: HashMap<String, String>,
19+
isitmaintained_open_issues: Badge,
20+
isitmaintained_open_issues_attributes: HashMap<String, String>,
21+
codecov: Badge,
22+
codecov_attributes: HashMap<String, String>,
23+
coveralls: Badge,
24+
coveralls_attributes: HashMap<String, String>,
1725
}
1826

1927
fn set_up() -> (MockRequest, Crate, BadgeRef) {
@@ -66,13 +74,67 @@ fn set_up() -> (MockRequest, Crate, BadgeRef) {
6674
String::from("rust-lang/rust")
6775
);
6876

77+
let isitmaintained_issue_resolution = Badge::IsItMaintainedIssueResolution {
78+
repository: String::from("rust-lang/rust"),
79+
};
80+
let mut badge_attributes_isitmaintained_issue_resolution = HashMap::new();
81+
badge_attributes_isitmaintained_issue_resolution.insert(
82+
String::from("repository"),
83+
String::from("rust-lang/rust")
84+
);
85+
86+
let isitmaintained_open_issues = Badge::IsItMaintainedOpenIssues {
87+
repository: String::from("rust-lang/rust"),
88+
};
89+
let mut badge_attributes_isitmaintained_open_issues = HashMap::new();
90+
badge_attributes_isitmaintained_open_issues.insert(
91+
String::from("repository"),
92+
String::from("rust-lang/rust")
93+
);
94+
95+
let codecov = Badge::CodeCov {
96+
branch: Some(String::from("beta")),
97+
repository: String::from("rust-lang/rust"),
98+
};
99+
let mut badge_attributes_codecov = HashMap::new();
100+
badge_attributes_codecov.insert(
101+
String::from("branch"),
102+
String::from("beta")
103+
);
104+
badge_attributes_codecov.insert(
105+
String::from("repository"),
106+
String::from("rust-lang/rust")
107+
);
108+
109+
let coveralls = Badge::Coveralls {
110+
branch: Some(String::from("beta")),
111+
repository: String::from("rust-lang/rust"),
112+
};
113+
let mut badge_attributes_coveralls = HashMap::new();
114+
badge_attributes_coveralls.insert(
115+
String::from("branch"),
116+
String::from("beta")
117+
);
118+
badge_attributes_coveralls.insert(
119+
String::from("repository"),
120+
String::from("rust-lang/rust")
121+
);
122+
69123
let badges = BadgeRef {
70124
appveyor: appveyor,
71125
appveyor_attributes: badge_attributes_appveyor,
72126
travis_ci: travis_ci,
73127
travis_ci_attributes: badge_attributes_travis_ci,
74128
gitlab: gitlab,
75129
gitlab_attributes: badge_attributes_gitlab,
130+
isitmaintained_issue_resolution: isitmaintained_issue_resolution,
131+
isitmaintained_issue_resolution_attributes: badge_attributes_isitmaintained_issue_resolution,
132+
isitmaintained_open_issues: isitmaintained_open_issues,
133+
isitmaintained_open_issues_attributes: badge_attributes_isitmaintained_open_issues,
134+
codecov: codecov,
135+
codecov_attributes: badge_attributes_codecov,
136+
coveralls: coveralls,
137+
coveralls_attributes: badge_attributes_coveralls,
76138
};
77139
(req, krate, badges)
78140
}
@@ -131,6 +193,62 @@ fn update_add_gitlab() {
131193
assert_eq!(krate.badges(req.tx().unwrap()).unwrap(), vec![test_badges.gitlab]);
132194
}
133195

196+
#[test]
197+
fn update_add_isitmaintained_issue_resolution() {
198+
// Add a isitmaintained_issue_resolution badge
199+
let (req, krate, test_badges) = set_up();
200+
201+
let mut badges = HashMap::new();
202+
badges.insert(
203+
String::from("is-it-maintained-issue-resolution"),
204+
test_badges.isitmaintained_issue_resolution_attributes
205+
);
206+
Badge::update_crate_old(req.tx().unwrap(), &krate, badges).unwrap();
207+
assert_eq!(krate.badges(req.tx().unwrap()).unwrap(), vec![test_badges.isitmaintained_issue_resolution]);
208+
}
209+
210+
#[test]
211+
fn update_add_isitmaintained_open_issues() {
212+
// Add a isitmaintained_open_issues badge
213+
let (req, krate, test_badges) = set_up();
214+
215+
let mut badges = HashMap::new();
216+
badges.insert(
217+
String::from("is-it-maintained-open-issues"),
218+
test_badges.isitmaintained_open_issues_attributes
219+
);
220+
Badge::update_crate_old(req.tx().unwrap(), &krate, badges).unwrap();
221+
assert_eq!(krate.badges(req.tx().unwrap()).unwrap(), vec![test_badges.isitmaintained_open_issues]);
222+
}
223+
224+
#[test]
225+
fn update_add_codecov() {
226+
// Add a codecov badge
227+
let (req, krate, test_badges) = set_up();
228+
229+
let mut badges = HashMap::new();
230+
badges.insert(
231+
String::from("codecov"),
232+
test_badges.codecov_attributes
233+
);
234+
Badge::update_crate_old(req.tx().unwrap(), &krate, badges).unwrap();
235+
assert_eq!(krate.badges(req.tx().unwrap()).unwrap(), vec![test_badges.codecov]);
236+
}
237+
238+
#[test]
239+
fn update_add_coveralls() {
240+
// Add a coveralls badge
241+
let (req, krate, test_badges) = set_up();
242+
243+
let mut badges = HashMap::new();
244+
badges.insert(
245+
String::from("coveralls"),
246+
test_badges.coveralls_attributes
247+
);
248+
Badge::update_crate_old(req.tx().unwrap(), &krate, badges).unwrap();
249+
assert_eq!(krate.badges(req.tx().unwrap()).unwrap(), vec![test_badges.coveralls]);
250+
}
251+
134252
#[test]
135253
fn replace_badge() {
136254
// Replacing one badge with another

tests/acceptance/search-test.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@ test('searching for "rust"', function(assert) {
2626

2727
findWithAssert('#crates .row:first .desc .info .badge:first a[href="https://ci.appveyor.com/project/huonw/external_mixin"]');
2828
findWithAssert('#crates .row:first .desc .info .badge:first a img[src="https://ci.appveyor.com/api/projects/status/github/huonw/external_mixin?svg=true&branch=master"]');
29-
findWithAssert('#crates .row:first .desc .info .badge:eq(1) a[href="https://gitlab.com/huonw/external_mixin/pipelines"]');
30-
findWithAssert('#crates .row:first .desc .info .badge:eq(1) a img[src="https://gitlab.com/huonw/external_mixin/badges/master/build.svg"]');
31-
findWithAssert('#crates .row:first .desc .info .badge:eq(2) a[href="https://travis-ci.org/huonw/external_mixin"]');
32-
findWithAssert('#crates .row:first .desc .info .badge:eq(2) a img[src="https://travis-ci.org/huonw/external_mixin.svg?branch=master"]');
29+
findWithAssert('#crates .row:first .desc .info .badge:eq(1) a[href="https://codecov.io/github/huonw/external_mixin?branch=master"]');
30+
findWithAssert('#crates .row:first .desc .info .badge:eq(1) a img[src="https://codecov.io/github/huonw/external_mixin/coverage.svg?branch=master"]');
31+
findWithAssert('#crates .row:first .desc .info .badge:eq(2) a[href="https://coveralls.io/github/huonw/external_mixin?branch=master"]');
32+
findWithAssert('#crates .row:first .desc .info .badge:eq(2) a img[src="https://coveralls.io/repos/github/huonw/external_mixin/badge.svg?branch=master"]');
33+
findWithAssert('#crates .row:first .desc .info .badge:eq(3) a[href="https://gitlab.com/huonw/external_mixin/pipelines"]');
34+
findWithAssert('#crates .row:first .desc .info .badge:eq(3) a img[src="https://gitlab.com/huonw/external_mixin/badges/master/build.svg"]');
35+
findWithAssert('#crates .row:first .desc .info .badge:eq(4) a[href="https://isitmaintained.com/project/huonw/external_mixin"]');
36+
findWithAssert('#crates .row:first .desc .info .badge:eq(4) a img[src="https://isitmaintained.com/badge/resolution/huonw/external_mixin.svg"]');
37+
findWithAssert('#crates .row:first .desc .info .badge:eq(5) a[href="https://isitmaintained.com/project/huonw/external_mixin"]');
38+
findWithAssert('#crates .row:first .desc .info .badge:eq(5) a img[src="https://isitmaintained.com/badge/open/huonw/external_mixin.svg"]');
39+
findWithAssert('#crates .row:first .desc .info .badge:eq(6) a[href="https://travis-ci.org/huonw/external_mixin"]');
40+
findWithAssert('#crates .row:first .desc .info .badge:eq(6) a img[src="https://travis-ci.org/huonw/external_mixin.svg?branch=master"]');
3341

3442
hasText(assert, '#crates .row:first .desc .summary', 'Yo dawg, use Rust to generate Rust, right in your Rust. (See `external_mixin` to use scripting languages.)');
3543
hasText(assert, '#crates .row:first .downloads', '477');

0 commit comments

Comments
 (0)