Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion bundler/src/permissionables/proposals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use serde::Serialize;
use sqlx::{query_as, MySqlPool};
use std::collections::HashMap;

#[derive(Debug, Serialize)]
#[derive(Debug, PartialEq, Eq, Serialize)]
pub struct Proposals(HashMap<u32, Vec<u32>>);

impl Proposals {
Expand Down Expand Up @@ -42,3 +42,29 @@ impl FromIterator<ProposalRow> for Proposals {
Self(proposals)
}
}

#[cfg(test)]
mod tests {
use super::Proposals;
use sqlx::MySqlPool;
use std::collections::HashMap;

#[sqlx::test(migrations = "tests/migrations")]
async fn fetch_empty(ispyb_pool: MySqlPool) {
let proposals = Proposals::fetch(&ispyb_pool).await.unwrap();
let expected = Proposals(HashMap::new());
assert_eq!(expected, proposals);
}

#[sqlx::test(
migrations = "tests/migrations",
fixtures(path = "../../tests/fixtures", scripts("proposal_membership"))
)]
async fn fetch_some(ispyb_pool: MySqlPool) {
let proposals = Proposals::fetch(&ispyb_pool).await.unwrap();
let mut expected = Proposals(HashMap::new());
expected.0.insert(10, vec![100, 101, 102]);
expected.0.insert(11, vec![100]);
assert_eq!(expected, proposals);
}
}
58 changes: 57 additions & 1 deletion bundler/src/permissionables/sessions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use serde::Serialize;
use sqlx::{query_as, MySqlPool};
use std::collections::HashMap;

#[derive(Debug, Serialize)]
#[derive(Debug, PartialEq, Eq, Serialize)]
pub struct Sessions(HashMap<u32, Vec<u32>>);

impl Sessions {
Expand Down Expand Up @@ -56,3 +56,59 @@ impl FromIterator<SessionRow> for Sessions {
Self(sessions)
}
}

#[cfg(test)]
mod tests {
use super::Sessions;
use sqlx::MySqlPool;
use std::collections::HashMap;

#[sqlx::test(migrations = "tests/migrations")]
async fn fetch_empty(ispyb_pool: MySqlPool) {
let sessions = Sessions::fetch(&ispyb_pool).await.unwrap();
let expected = Sessions(HashMap::new());
assert_eq!(expected, sessions);
}

#[sqlx::test(
migrations = "tests/migrations",
fixtures(path = "../../tests/fixtures", scripts("session_membership"))
)]
async fn fetch_direct(ispyb_pool: MySqlPool) {
let sessions = Sessions::fetch(&ispyb_pool).await.unwrap();
let mut expected = Sessions(HashMap::new());
expected.0.insert(10, vec![1000, 1001]);
expected.0.insert(11, vec![1000]);
assert_eq!(expected, sessions);
}

#[sqlx::test(
migrations = "tests/migrations",
fixtures(
path = "../../tests/fixtures",
scripts("proposal_membership", "beamline_sessions")
)
)]
async fn fetch_indirect(ispyb_pool: MySqlPool) {
let sessions = Sessions::fetch(&ispyb_pool).await.unwrap();
let mut expected = Sessions(HashMap::new());
expected.0.insert(10, vec![1002, 1003, 1004]);
expected.0.insert(11, vec![1002, 1003]);
assert_eq!(expected, sessions);
}

#[sqlx::test(
migrations = "tests/migrations",
fixtures(
path = "../../tests/fixtures",
scripts("session_membership", "proposal_membership", "beamline_sessions")
)
)]
async fn fetch_both(ispyb_pool: MySqlPool) {
let sessions = Sessions::fetch(&ispyb_pool).await.unwrap();
let mut expected = Sessions(HashMap::new());
expected.0.insert(10, vec![1000, 1001, 1002, 1003, 1004]);
expected.0.insert(11, vec![1000, 1002, 1003]);
assert_eq!(expected, sessions);
}
}
7 changes: 7 additions & 0 deletions bundler/tests/fixtures/beamline_sessions.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
INSERT INTO
`BLSession` (
`sessionId`,
`proposalId`,
`visit_number`
)
VALUES (1002, 100, 1), (1003, 100, 2), (1004, 101, 1);
3 changes: 3 additions & 0 deletions bundler/tests/fixtures/proposal_membership.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
INSERT INTO
`ProposalHasPerson` (`proposalId`, `personId`)
VALUES (100, 10), (101, 10), (102, 10), (100, 11);
3 changes: 3 additions & 0 deletions bundler/tests/fixtures/session_membership.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
INSERT INTO
`Session_has_Person` (`sessionId`, `personId`)
VALUES (1000, 10), (1001, 10), (1000, 11);
5 changes: 5 additions & 0 deletions bundler/tests/migrations/1_CopyISPyBTables.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
CREATE TABLE ProposalHasPerson LIKE ispyb_build.ProposalHasPerson;

CREATE TABLE BLSession LIKE ispyb_build.BLSession;

CREATE TABLE Session_has_Person LIKE ispyb_build.Session_has_Person;