Skip to content

Commit 41af1be

Browse files
Fix default feature flags enabled count
1 parent 8f6921e commit 41af1be

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

src/web/features.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ impl FeaturesPage {
116116
pub(crate) fn use_direct_platform_links(&self) -> bool {
117117
true
118118
}
119+
120+
pub(crate) fn nb_enabled_default_features(&self) -> usize {
121+
self.default_features
122+
.iter()
123+
.filter(|f| !f.starts_with("dep:") && *f != "default" && !f.contains('/'))
124+
.count()
125+
}
119126
}
120127

121128
pub(crate) async fn build_features_handler(
@@ -231,6 +238,7 @@ fn get_sorted_features(raw_features: Vec<DbFeature>) -> (Vec<Feature>, HashSet<S
231238
mod tests {
232239
use super::*;
233240
use crate::test::{AxumResponseTestExt, AxumRouterTestExt, async_wrapper};
241+
use kuchikiki::traits::TendrilSink;
234242
use reqwest::StatusCode;
235243

236244
#[test]
@@ -461,4 +469,46 @@ mod tests {
461469
Ok(())
462470
});
463471
}
472+
473+
// This test ensures that the count of feature flags is correct, in particular the count of
474+
// features enabled by default.
475+
#[test]
476+
fn test_features_count() {
477+
async_wrapper(|env| async move {
478+
let features = vec![
479+
(
480+
"default".to_owned(),
481+
vec![
482+
"bla".to_owned(),
483+
"dep:what".to_owned(),
484+
"whatever/wut".to_owned(),
485+
],
486+
),
487+
("bla".to_owned(), vec![]),
488+
("blob".to_owned(), vec![]),
489+
];
490+
env.fake_release()
491+
.await
492+
.name("foo")
493+
.version("0.1.0")
494+
.features(features.into_iter().collect::<HashMap<_, _>>())
495+
.create()
496+
.await?;
497+
498+
let web = env.web_app().await;
499+
500+
let page = kuchikiki::parse_html()
501+
.one(web.get("/crate/foo/0.1.0/features").await?.text().await?);
502+
let text = page.select_first("#main > p").unwrap().text_contents();
503+
// It should only contain one feature enabled by default since the others are either
504+
// enabling a dependency (`dep:what`) or enabling a feature from a dependency
505+
// (`whatever/wut`).
506+
assert_eq!(
507+
text,
508+
"This version has 3 feature flags, 1 of them enabled by default."
509+
);
510+
511+
Ok(())
512+
});
513+
}
464514
}

templates/crate/features.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
</li>
4040
{%- endfor %}
4141
{%- endif -%}
42-
{%- else %}
42+
{%- else -%}
4343
<li class="pure-menu-item">
4444
<span class="documented-info">
4545
Feature flags are not available for this release because the build failed before we could retrieve them,
@@ -65,7 +65,7 @@ <h1>{{ metadata.name }}</h1>
6565
{%- if features.is_empty() -%}
6666
<p data-id="empty-features">This release does not have any feature flags.</p>
6767
{%- else -%}
68-
<p>This version has <b>{{ features.len() }}</b> feature flags, <b data-id="default-feature-len">{{ default_features.len() }}</b> of them enabled by <b>default</b>.</p>
68+
<p>This version has <b>{{ features.len() }}</b> feature flags, <b data-id="default-feature-len">{{ nb_enabled_default_features() }}</b> of them enabled by <b>default</b>.</p>
6969
{%- for feature in features -%}
7070
{%- let is_default = feature.name != "default" && is_default_feature(feature.name) -%}
7171
<h3 id="{{ feature.name }}">{{ feature.name }}{%- if is_default %} (default){%- endif -%}</h3>
@@ -93,7 +93,7 @@ <h3 id="{{ feature.name }}">{{ feature.name }}{%- if is_default %} (default){%-
9393
/<a href="/crate/{{ dependency }}/{{ version }}/features#{{ feature }}">
9494
{{- feature -}}
9595
</a>
96-
{% endmatch %}
96+
{%- endmatch %}
9797
{%- if is_default %} <span class="is-default-feature">(default)</span>{%- endif -%}
9898
</li>
9999
{%- endfor -%}

0 commit comments

Comments
 (0)