diff options
author | Melody Horn / boringcactus <melody@boringcactus.com> | 2021-06-16 14:47:57 -0600 |
---|---|---|
committer | Melody Horn / boringcactus <melody@boringcactus.com> | 2021-06-16 14:47:57 -0600 |
commit | 3b880c0ae7963d783fb87a3389f98070e448495a (patch) | |
tree | 9523ad42279daa2f00c92b8c9a7d1025d68b5524 /tests/tutorial | |
parent | 1891efa8c68424200ecf4597fc7134a289cb5b70 (diff) | |
download | tosin-3b880c0ae7963d783fb87a3389f98070e448495a.tar.gz tosin-3b880c0ae7963d783fb87a3389f98070e448495a.zip |
*clears breath* extend tutorial further
Diffstat (limited to 'tests/tutorial')
-rw-r--r-- | tests/tutorial/mod.rs | 84 |
1 files changed, 83 insertions, 1 deletions
diff --git a/tests/tutorial/mod.rs b/tests/tutorial/mod.rs index a9eb76f..0bd626e 100644 --- a/tests/tutorial/mod.rs +++ b/tests/tutorial/mod.rs @@ -161,7 +161,7 @@ tosin::main!(urls(), settings()); // vibe check let test_tutorial1 = Path::new("src"); let example_tutorial1 = Path::new(PROJECT_DIR).join("examples/tutorial01"); - for file in &["main.rs", "polls/mod.rs", "polls/urls.rs", "polls/views.rs"] { + for file in &["main.rs", "polls/mod.rs", "polls/migrations/mod.rs", "polls/models.rs", "polls/urls.rs", "polls/views.rs"] { let test_path = test_tutorial1.join(file); let test_file = fs::read_to_string(test_path).unwrap(); let example_path = example_tutorial1.join(file); @@ -206,4 +206,86 @@ tosin::main!(urls(), settings()); .status() .unwrap() .check(); + + // update Cargo.toml + fs::write("Cargo.toml", r#" +[package] +name = "tutorial" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +time = "0.2.27" +tosin = { path = "/home/cactus/Documents/tosin" } + "#).unwrap(); + + // update polls/models.rs + fs::write("src/polls/models.rs", r#" +use tosin::db::models::{Model, Id}; + +#[derive(Model)] +pub struct Question { + id: Option<Id>, + #[model(max_length=200)] + question_text: String, + /// date published + pub_date: time::PrimitiveDateTime, +} + +#[derive(Model)] +pub struct Choice { + id: Option<Id>, + #[model(Question, on_delete=Cascade)] + question: Id, + #[model(max_length=200)] + choice_text: String, + #[model(default = 0)] + votes: usize, +} + "#).unwrap(); + + // update main.rs + fs::write("src/main.rs", r#" +use tosin::Settings; +use tosin::contrib::admin; +use tosin::db::backend::Connectable; +use tosin::urls::{UrlMap, url_map}; + +mod polls; + +fn urls() -> UrlMap { + url_map! { + "polls" / ..polls::urls(), + "admin" / ..admin::site::urls(), + } +} + +fn settings() -> Settings<impl Connectable> { + Settings { + installed_apps: &[ + &polls::APP, + &admin::APP, + ], + ..Settings::default() + } +} + +tosin::main!(urls(), settings()); + "#).unwrap(); + + // cargo run make-migrations polls + Command::new(CARGO) + .args(&["run", "make-migrations", "polls"]) + .status() + .unwrap() + .check(); + + // cargo run migrate + Command::new(CARGO) + .args(&["run", "migrate"]) + .status() + .unwrap() + .check(); } |