diff options
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();  }  |