Skip to content

Commit 8613e5f

Browse files
committed
tests/publish/dependencies: Add invalid_feature_name() test
1 parent 8add309 commit 8613e5f

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

src/tests/builders/dependency.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
use crates_io::views::krate_publish as u;
2+
use crates_io::views::krate_publish::EncodableFeature;
23

34
/// A builder for constructing a dependency of another crate.
45
pub struct DependencyBuilder {
56
explicit_name_in_toml: Option<u::EncodableDependencyName>,
67
name: String,
8+
features: Vec<String>,
79
registry: Option<String>,
810
version_req: u::EncodableCrateVersionReq,
911
}
@@ -14,6 +16,7 @@ impl DependencyBuilder {
1416
DependencyBuilder {
1517
explicit_name_in_toml: None,
1618
name: name.to_string(),
19+
features: vec![],
1720
registry: None,
1821
version_req: u::EncodableCrateVersionReq("> 0".to_string()),
1922
}
@@ -42,14 +45,25 @@ impl DependencyBuilder {
4245
self
4346
}
4447

48+
pub fn add_feature<T: Into<String>>(mut self, feature: T) -> Self {
49+
self.features.push(feature.into());
50+
self
51+
}
52+
4553
/// Consume this builder to create a `u::CrateDependency`. If the dependent crate doesn't
4654
/// already exist, publishing a crate with this dependency will fail.
4755
pub fn build(self) -> u::EncodableCrateDependency {
56+
let features = self
57+
.features
58+
.into_iter()
59+
.map(|d| EncodableFeature(d))
60+
.collect();
61+
4862
u::EncodableCrateDependency {
4963
name: u::EncodableCrateName(self.name),
5064
optional: false,
5165
default_features: true,
52-
features: Vec::new(),
66+
features,
5367
version_req: self.version_req,
5468
target: None,
5569
kind: None,

src/tests/krate/publish/dependencies.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,3 +223,16 @@ fn new_krate_sorts_deps() {
223223
let crates = app.crates_from_index_head("two-deps");
224224
assert_json_snapshot!(crates);
225225
}
226+
227+
#[test]
228+
fn invalid_feature_name() {
229+
let (app, _, _, token) = TestApp::full().with_token();
230+
231+
let response = token.publish_crate(
232+
PublishBuilder::new("foo", "1.0.0")
233+
.dependency(DependencyBuilder::new("bar").add_feature("🍺")),
234+
);
235+
assert_eq!(response.status(), StatusCode::OK);
236+
assert_json_snapshot!(response.into_json());
237+
assert!(app.stored_files().is_empty());
238+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
source: src/tests/krate/publish/dependencies.rs
3+
expression: response.into_json()
4+
---
5+
{
6+
"errors": [
7+
{
8+
"detail": "invalid upload request: invalid value: string \"🍺\", expected a valid feature name at line 1 column 111"
9+
}
10+
]
11+
}

0 commit comments

Comments
 (0)