aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMelody Horn / boringcactus <melody@boringcactus.com>2021-06-16 14:47:57 -0600
committerMelody Horn / boringcactus <melody@boringcactus.com>2021-06-16 14:47:57 -0600
commit3b880c0ae7963d783fb87a3389f98070e448495a (patch)
tree9523ad42279daa2f00c92b8c9a7d1025d68b5524 /tests
parent1891efa8c68424200ecf4597fc7134a289cb5b70 (diff)
downloadtosin-3b880c0ae7963d783fb87a3389f98070e448495a.tar.gz
tosin-3b880c0ae7963d783fb87a3389f98070e448495a.zip
*clears breath* extend tutorial further
Diffstat (limited to 'tests')
-rw-r--r--tests/tutorial/mod.rs84
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();
}