1use bake::{Context, Result};
9use bake_agent_context as _;
10use bake_cargo as _;
11use bake_license as _;
12use bake_readme as _;
13use bake_releases as _;
14use bake_test_rust as _;
15
16#[bake::task(name = "cargo:after_version_bump")]
18pub fn after_version_bump(context: &mut Context, version: String) -> Result<()> {
19 context.call("license:update", &[])?;
20 context.call("releases:update", &[&format!("v{version}")])?;
21 context.call("readme:update", &[])?;
22 Ok(())
23}
24
25#[cfg(test)]
26mod tests {
27 use bake::{Arguments, Parameter, Registry, Result, Task, Value};
28
29 #[derive(Default)]
30 struct Calls(Vec<(String, Option<String>)>);
31
32 fn record(context: &mut bake::Context, name: &str, value: Option<String>) -> Result<Value> {
33 context
34 .get_mut::<Calls>()
35 .expect("the test records calls")
36 .0
37 .push((name.to_owned(), value));
38 Ok(Value::Null)
39 }
40
41 fn update_license(context: &mut bake::Context, _: &Arguments) -> Result<Value> {
42 record(context, "license:update", None)
43 }
44
45 fn update_releases(context: &mut bake::Context, arguments: &Arguments) -> Result<Value> {
46 record(
47 context,
48 "releases:update",
49 Some(arguments.required::<String>("version")?),
50 )
51 }
52
53 fn update_readme(context: &mut bake::Context, _: &Arguments) -> Result<Value> {
54 record(context, "readme:update", None)
55 }
56
57 #[test]
58 fn refreshes_project_files_in_order_for_the_requested_version() {
59 let mut registry = Registry::discover().unwrap();
60 registry
61 .replace(
62 "license:update",
63 Task::new("license:update", "", vec![], update_license),
64 )
65 .unwrap();
66 registry
67 .replace(
68 "releases:update",
69 Task::new(
70 "releases:update",
71 "",
72 vec![Parameter::new::<String>("version")],
73 update_releases,
74 ),
75 )
76 .unwrap();
77 registry
78 .replace(
79 "readme:update",
80 Task::new("readme:update", "", vec![], update_readme),
81 )
82 .unwrap();
83
84 let mut context = registry.context(".");
85 context.insert(Calls::default());
86
87 super::after_version_bump(&mut context, "0.3.0".to_owned()).unwrap();
88
89 assert_eq!(
90 context.get::<Calls>().unwrap().0,
91 [
92 ("license:update".to_owned(), None),
93 ("releases:update".to_owned(), Some("v0.3.0".to_owned())),
94 ("readme:update".to_owned(), None),
95 ]
96 );
97 }
98
99 #[test]
100 fn registers_the_project_version_bump_hook() {
101 let registry = Registry::discover().unwrap();
102 assert!(
103 registry
104 .tasks()
105 .any(|task| task.name() == "cargo:after_version_bump")
106 );
107 }
108}