Skip to content

Commit 902515f

Browse files
committed
frontend: Distinguish between empty and null features
Show different page for empty feature flags and null feature flags.
1 parent 2df55ef commit 902515f

File tree

3 files changed

+39
-15
lines changed

3 files changed

+39
-15
lines changed

src/test/fakes.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -210,12 +210,8 @@ impl<'a> FakeRelease<'a> {
210210
self
211211
}
212212

213-
pub(crate) fn features(mut self, opt_features: Option<HashMap<String, Vec<String>>>) -> Self {
214-
if let Some(features) = opt_features {
215-
self.package.features = features;
216-
} else {
217-
self.package.features = HashMap::new();
218-
}
213+
pub(crate) fn features(mut self, features: HashMap<String, Vec<String>>) -> Self {
214+
self.package.features = features;
219215
self
220216
}
221217

src/web/crate_details.rs

+28-6
Original file line numberDiff line numberDiff line change
@@ -751,8 +751,7 @@ mod tests {
751751
env.fake_release()
752752
.name("library")
753753
.version("0.1.0")
754-
.binary(false)
755-
.features(None)
754+
.features(HashMap::new())
756755
.create()?;
757756

758757
let page = kuchiki::parse_html().one(
@@ -776,8 +775,7 @@ mod tests {
776775
env.fake_release()
777776
.name("library")
778777
.version("0.1.0")
779-
.binary(false)
780-
.features(Some(features))
778+
.features(features)
781779
.create()?;
782780

783781
let page = kuchiki::parse_html().one(
@@ -801,8 +799,7 @@ mod tests {
801799
env.fake_release()
802800
.name("library")
803801
.version("0.1.0")
804-
.binary(false)
805-
.features(Some(features))
802+
.features(features)
806803
.create()?;
807804

808805
let page = kuchiki::parse_html().one(
@@ -819,4 +816,29 @@ mod tests {
819816
Ok(())
820817
});
821818
}
819+
820+
#[test]
821+
fn feature_flags_report_null() {
822+
wrapper(|env| {
823+
let id = env
824+
.fake_release()
825+
.name("library")
826+
.version("0.1.0")
827+
.features(HashMap::new())
828+
.create()?;
829+
830+
env.db()
831+
.conn()
832+
.query("UPDATE releases SET features = NULL WHERE id = $1", &[&id])?;
833+
834+
let page = kuchiki::parse_html().one(
835+
env.frontend()
836+
.get("/crate/library/0.1.0/features")
837+
.send()?
838+
.text()?,
839+
);
840+
assert!(page.select_first(r#"p[data-id="null-features"]"#).is_ok());
841+
Ok(())
842+
});
843+
}
822844
}

templates/crate/features.html

+9-3
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,13 @@
3434
</a>
3535
</li>
3636
{%- endfor -%}
37+
{%- elif metadata.features is iterable -%}
38+
<li class="pure-menu-item">
39+
<span style="font-size: 13px;">This release does not have any feature flags.</span>
40+
</li>
3741
{%- else -%}
3842
<li class="pure-menu-item">
39-
<span style="font-size: 13px;">Feature flags are not available for this version.</span>
43+
<span style="font-size: 13px;">Feature flags data are not available for this release.</span>
4044
</li>
4145
{%- endif -%}
4246
</ul>
@@ -52,7 +56,7 @@ <h1>{{ metadata.name }}</h1>
5256
{%- else -%}
5357
0
5458
{%- endif -%}
55-
</b> of them being enabled by <b>default</b>.</p>
59+
</b> of them enabled by <b>default</b>.</p>
5660
{%- for feature in metadata.features -%}
5761
<h3 id="{{ feature.name }}">{{ feature.name }}</h3>
5862
<ul class="pure-menu-list">
@@ -67,8 +71,10 @@ <h3 id="{{ feature.name }}">{{ feature.name }}</h3>
6771
{%- endif -%}
6872
</ul>
6973
{%- endfor -%}
74+
{%- elif metadata.features is iterable -%}
75+
<p data-id="empty-features">This release does not have any feature flags.</p>
7076
{%- else -%}
71-
<p data-id="empty-features">Feature flags are not available for this release.</p>
77+
<p data-id="null-features">Feature flags data are not available for this release.</p>
7278
{%- endif -%}
7379
</div>
7480
</div>

0 commit comments

Comments
 (0)