diff options
Diffstat (limited to 'rust')
| -rw-r--r-- | rust/migrations/2019-01-01-000000_init/up.sql | 8 | ||||
| -rw-r--r-- | rust/src/database_models.rs | 1 | ||||
| -rw-r--r-- | rust/src/database_schema.rs | 2 | ||||
| -rw-r--r-- | rust/src/editing.rs | 21 | ||||
| -rw-r--r-- | rust/tests/test_api_server_http.rs | 72 | ||||
| -rw-r--r-- | rust/tests/test_old_python_tests.rs | 2 | 
6 files changed, 43 insertions, 63 deletions
| diff --git a/rust/migrations/2019-01-01-000000_init/up.sql b/rust/migrations/2019-01-01-000000_init/up.sql index ddaa60b3..a3dd13a5 100644 --- a/rust/migrations/2019-01-01-000000_init/up.sql +++ b/rust/migrations/2019-01-01-000000_init/up.sql @@ -23,13 +23,11 @@ CREATE TABLE editor (      is_active           BOOLEAN NOT NULL DEFAULT true,      registered          TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,      auth_epoch          TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL, -    wrangler_id         UUID REFERENCES editor(id), -    active_editgroup_id UUID -- REFERENCES( editgroup(id) via ALTER below +    wrangler_id         UUID REFERENCES editor(id)  );  -- case-insensitive UNIQ index on username  CREATE UNIQUE INDEX editor_username_uniq_idx on editor(lower(username)); -CREATE INDEX active_editgroup_idx ON editor(active_editgroup_id);  CREATE INDEX editor_username_idx ON editor(username);  CREATE TABLE auth_oidc ( @@ -51,9 +49,7 @@ CREATE TABLE editgroup (      description         TEXT  ); -ALTER TABLE editor -    ADD CONSTRAINT editor_editgroupid_fkey FOREIGN KEY (active_editgroup_id) -        REFERENCES editgroup(id); +CREATE INDEX editgroup_created_idx ON editgroup(created);  CREATE TABLE changelog (      id                  BIGSERIAL PRIMARY KEY, diff --git a/rust/src/database_models.rs b/rust/src/database_models.rs index 4575aeaf..0b6de130 100644 --- a/rust/src/database_models.rs +++ b/rust/src/database_models.rs @@ -584,7 +584,6 @@ pub struct EditorRow {      pub registered: chrono::NaiveDateTime,      pub auth_epoch: chrono::NaiveDateTime,      pub wrangler_id: Option<Uuid>, -    pub active_editgroup_id: Option<Uuid>,  }  impl EditorRow { diff --git a/rust/src/database_schema.rs b/rust/src/database_schema.rs index 0c553b40..ac5acec8 100644 --- a/rust/src/database_schema.rs +++ b/rust/src/database_schema.rs @@ -114,7 +114,6 @@ table! {          registered -> Timestamptz,          auth_epoch -> Timestamptz,          wrangler_id -> Nullable<Uuid>, -        active_editgroup_id -> Nullable<Uuid>,      }  } @@ -406,6 +405,7 @@ joinable!(container_edit -> editgroup (editgroup_id));  joinable!(container_ident -> container_rev (rev_id));  joinable!(creator_edit -> editgroup (editgroup_id));  joinable!(creator_ident -> creator_rev (rev_id)); +joinable!(editgroup -> editor (editor_id));  joinable!(file_edit -> editgroup (editgroup_id));  joinable!(file_ident -> file_rev (rev_id));  joinable!(file_rev_release -> file_rev (file_rev)); diff --git a/rust/src/editing.rs b/rust/src/editing.rs index b488e489..42dd013e 100644 --- a/rust/src/editing.rs +++ b/rust/src/editing.rs @@ -45,7 +45,7 @@ pub fn make_edit_context(                  .get_result(conn)?;              FatCatId::from_uuid(&eg_row.id)          } -        (None, false) => FatCatId::from_uuid(&get_or_create_editgroup(conn, editor_id.to_uuid())?), +        (None, false) => FatCatId::from_uuid(&create_editgroup(conn, editor_id.to_uuid())?),      };      Ok(EditContext {          editor_id, @@ -86,20 +86,11 @@ pub fn update_editor_username(  }  /// This function should always be run within a transaction -pub fn get_or_create_editgroup(conn: &DbConn, editor_id: Uuid) -> Result<Uuid> { -    // check for current active -    let ed_row: EditorRow = editor::table.find(editor_id).first(conn)?; -    if let Some(current) = ed_row.active_editgroup_id { -        return Ok(current); -    } - +pub fn create_editgroup(conn: &DbConn, editor_id: Uuid) -> Result<Uuid> {      // need to insert and update      let eg_row: EditgroupRow = diesel::insert_into(editgroup::table) -        .values((editgroup::editor_id.eq(ed_row.id),)) +        .values((editgroup::editor_id.eq(editor_id),))          .get_result(conn)?; -    diesel::update(editor::table.find(ed_row.id)) -        .set(editor::active_editgroup_id.eq(eg_row.id)) -        .execute(conn)?;      Ok(eg_row.id)  } @@ -130,11 +121,5 @@ pub fn accept_editgroup(conn: &DbConn, editgroup_id: FatCatId) -> Result<Changel          .values((changelog::editgroup_id.eq(editgroup_id.to_uuid()),))          .get_result(conn)?; -    // update any editor's active editgroup -    let no_active: Option<Uuid> = None; -    diesel::update(editor::table) -        .filter(editor::active_editgroup_id.eq(editgroup_id.to_uuid())) -        .set(editor::active_editgroup_id.eq(no_active)) -        .execute(conn)?;      Ok(entry)  } diff --git a/rust/tests/test_api_server_http.rs b/rust/tests/test_api_server_http.rs index b1fc5e87..e82037f0 100644 --- a/rust/tests/test_api_server_http.rs +++ b/rust/tests/test_api_server_http.rs @@ -8,7 +8,7 @@  use diesel::prelude::*;  use fatcat::database_schema::*; -use fatcat::editing::get_or_create_editgroup; +use fatcat::editing::create_editgroup;  use fatcat::identifiers::*;  use iron::status;  use iron_test::request; @@ -533,10 +533,12 @@ fn test_post_creator() {  #[test]  fn test_post_file() {      let (headers, router, conn) = helpers::setup_http(); +    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); +    let editgroup_id = uuid2fcid(&create_editgroup(&conn, editor_id).unwrap());      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/file", +            &format!("http://localhost:9411/v0/file?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{ }"#,              &router, @@ -547,7 +549,7 @@ fn test_post_file() {      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/file", +            &format!("http://localhost:9411/v0/file?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{"size": 76543,                  "sha1": "f0000000000000008b7eb2a93e6d0440c1f3e7f8", @@ -570,13 +572,11 @@ fn test_post_file() {          None,      ); -    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap();      helpers::check_http_response(          request::post(              &format!(                  "http://localhost:9411/v0/editgroup/{}/accept", -                uuid2fcid(&editgroup_id) +                &editgroup_id              ),              headers.clone(),              "", @@ -600,10 +600,12 @@ fn test_post_file() {  #[test]  fn test_post_fileset() {      let (headers, router, conn) = helpers::setup_http(); +    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); +    let editgroup_id = uuid2fcid(&create_editgroup(&conn, editor_id).unwrap());      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/fileset", +            &format!("http://localhost:9411/v0/fileset?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{ }"#,              &router, @@ -614,7 +616,7 @@ fn test_post_fileset() {      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/fileset", +            &format!("http://localhost:9411/v0/fileset?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{"manifest": [                      {"path": "new_file.txt", "size": 12345, "sha1": "e9dd75237c94b209dc3ccd52722de6931a310ba3" }, @@ -636,13 +638,11 @@ fn test_post_fileset() {          None,      ); -    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap();      helpers::check_http_response(          request::post(              &format!(                  "http://localhost:9411/v0/editgroup/{}/accept", -                uuid2fcid(&editgroup_id) +                &editgroup_id              ),              headers.clone(),              "", @@ -657,10 +657,12 @@ fn test_post_fileset() {  #[test]  fn test_post_webcapture() {      let (headers, router, conn) = helpers::setup_http(); +    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); +    let editgroup_id = uuid2fcid(&create_editgroup(&conn, editor_id).unwrap());      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/webcapture", +            &format!("http://localhost:9411/v0/webcapture?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{ "original_url": "https://fatcat.wiki",                   "timestamp": "2018-12-28T11:11:11Z" }"#, @@ -672,7 +674,7 @@ fn test_post_webcapture() {      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/webcapture", +            &format!("http://localhost:9411/v0/webcapture?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{"original_url": "https://bnewbold.net/",                  "timestamp": "2018-12-28T05:06:07Z", @@ -700,13 +702,11 @@ fn test_post_webcapture() {          None,      ); -    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap();      helpers::check_http_response(          request::post(              &format!(                  "http://localhost:9411/v0/editgroup/{}/accept", -                uuid2fcid(&editgroup_id) +                &editgroup_id              ),              headers.clone(),              "", @@ -720,11 +720,13 @@ fn test_post_webcapture() {  #[test]  fn test_post_release() { -    let (headers, router, _conn) = helpers::setup_http(); +    let (headers, router, conn) = helpers::setup_http(); +    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); +    let editgroup_id = uuid2fcid(&create_editgroup(&conn, editor_id).unwrap());      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/release", +            &format!("http://localhost:9411/v0/release?editgroup_id={}", editgroup_id),              headers.clone(),              // TODO: target_release_id              r#"{"title": "secret minimal paper", @@ -740,7 +742,7 @@ fn test_post_release() {      // No work_id supplied (auto-created)      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/release", +            &format!("http://localhost:9411/v0/release?editgroup_id={}", editgroup_id),              headers.clone(),              // TODO: target_release_id              r#"{"title": "secret minimal paper the second", @@ -754,7 +756,7 @@ fn test_post_release() {      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/release", +            &format!("http://localhost:9411/v0/release?editgroup_id={}", editgroup_id),              headers.clone(),              // TODO: target_release_id              r#"{"title": "secret paper", @@ -797,7 +799,7 @@ fn test_post_release() {      /* XXX: doesn't fail      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/release", +            &format!("http://localhost:9411/v0/release?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{"title": "secret minimal paper the second",                  "asdf123": "lalala" @@ -847,7 +849,7 @@ fn test_update_work() {      );      let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap(); +    let editgroup_id = create_editgroup(&conn, editor_id).unwrap();      helpers::check_http_response(          request::post(              &format!( @@ -878,7 +880,7 @@ fn test_delete_work() {      );      let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap(); +    let editgroup_id = create_editgroup(&conn, editor_id).unwrap();      helpers::check_http_response(          request::post(              &format!( @@ -899,7 +901,7 @@ fn test_accept_editgroup() {      let (headers, router, conn) = helpers::setup_http();      let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap(); +    let editgroup_id = create_editgroup(&conn, editor_id).unwrap();      let c: i64 = container_ident::table          .filter(container_ident::is_live.eq(false)) @@ -916,7 +918,7 @@ fn test_accept_editgroup() {      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/container", +            &format!("http://localhost:9411/v0/container?editgroup_id={}", uuid2fcid(&editgroup_id)),              headers.clone(),              &format!(                  "{{\"name\": \"test journal 1\", \"editgroup_id\": \"{}\"}}", @@ -929,7 +931,7 @@ fn test_accept_editgroup() {      );      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/container", +            &format!("http://localhost:9411/v0/container?editgroup_id={}", uuid2fcid(&editgroup_id)),              headers.clone(),              &format!(                  "{{\"name\": \"test journal 2\", \"editgroup_id\": \"{}\"}}", @@ -1193,10 +1195,12 @@ fn test_bad_external_idents() {  #[test]  fn test_abstracts() {      let (headers, router, conn) = helpers::setup_http(); +    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); +    let editgroup_id = uuid2fcid(&create_editgroup(&conn, editor_id).unwrap());      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/release", +            &format!("http://localhost:9411/v0/release?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{"title": "some paper",                  "doi": "10.1234/iiiiiii", @@ -1218,7 +1222,7 @@ fn test_abstracts() {      // Same abstracts; checking that re-inserting works      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/release", +            &format!("http://localhost:9411/v0/release?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{"title": "some paper again",                  "abstracts": [ @@ -1236,13 +1240,11 @@ fn test_abstracts() {          None,      ); -    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap();      helpers::check_http_response(          request::post(              &format!(                  "http://localhost:9411/v0/editgroup/{}/accept", -                uuid2fcid(&editgroup_id) +                &editgroup_id              ),              headers.clone(),              "", @@ -1285,10 +1287,12 @@ fn test_abstracts() {  #[test]  fn test_contribs() {      let (headers, router, conn) = helpers::setup_http(); +    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); +    let editgroup_id = uuid2fcid(&create_editgroup(&conn, editor_id).unwrap());      helpers::check_http_response(          request::post( -            "http://localhost:9411/v0/release", +            &format!("http://localhost:9411/v0/release?editgroup_id={}", editgroup_id),              headers.clone(),              r#"{"title": "some paper",                  "doi": "10.1234/iiiiiii", @@ -1308,13 +1312,11 @@ fn test_contribs() {          None,      ); -    let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); -    let editgroup_id = get_or_create_editgroup(&conn, editor_id).unwrap();      helpers::check_http_response(          request::post(              &format!(                  "http://localhost:9411/v0/editgroup/{}/accept", -                uuid2fcid(&editgroup_id) +                &editgroup_id              ),              headers.clone(),              "", diff --git a/rust/tests/test_old_python_tests.rs b/rust/tests/test_old_python_tests.rs index 0676a604..ac9d4112 100644 --- a/rust/tests/test_old_python_tests.rs +++ b/rust/tests/test_old_python_tests.rs @@ -177,8 +177,6 @@ fn test_api_rich_create() {      };      assert_eq!(fe.release_ids.unwrap()[0], release_id.clone()); -    // had a test for active_editgroup here, but that's soon-to-be-deprecated -      server.close().unwrap()  } | 
