Skip to content

Commit

Permalink
Don't enforce english requirement for all (#191)
Browse files Browse the repository at this point in the history
  • Loading branch information
benny-n authored Feb 17, 2023
1 parent 227fdf1 commit d57a26a
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 21 deletions.
6 changes: 3 additions & 3 deletions packages/server/src/core/degree_status/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ impl DegreeStatus {
pub struct DegreeStatusHandler<'a> {
degree_status: &'a mut DegreeStatus,
course_banks: Vec<CourseBank>,
catalog: Catalog,
catalog: &'a Catalog,
courses: HashMap<CourseId, Course>,
credit_overflow_map: HashMap<String, f32>,
missing_credit_map: HashMap<String, f32>,
Expand Down Expand Up @@ -109,7 +109,7 @@ impl DegreeStatus {
DegreeStatusHandler {
degree_status: self,
course_banks,
catalog,
catalog: &catalog,
courses,
credit_overflow_map: HashMap::new(),
missing_credit_map: HashMap::new(),
Expand All @@ -118,6 +118,6 @@ impl DegreeStatus {
.compute_status();

// process the data after degree status computation
self.postprocess();
self.postprocess(&catalog);
}
}
17 changes: 13 additions & 4 deletions packages/server/src/core/degree_status/postprocessing.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
use crate::{core::messages, resources::course::Grade};
use crate::{
core::messages,
resources::{catalog::Catalog, course::Grade},
};

use super::DegreeStatus;

pub const TECHNICAL_ENGLISH_ADVANCED_B: &str = "324033";
const EXEMPT_COURSES_COUNT_DEMAND: usize = 2;
const ADVANCED_B_COURSES_COUNT_DEMAND: usize = 1;
const MINIMAL_YEAR_FOR_ENGLISH_REQUIREMENT: usize = 2021;

impl DegreeStatus {
fn check_english_requirement(&mut self) {
fn check_english_requirement(&mut self, year: usize) {
// English requirement is not relevant for students that started their studies before 2021
if year < MINIMAL_YEAR_FOR_ENGLISH_REQUIREMENT {
return;
}

let completed_english_content_courses_count = self
.course_statuses
.iter()
Expand Down Expand Up @@ -44,7 +53,7 @@ impl DegreeStatus {
_ => {}
}
}
pub fn postprocess(&mut self) {
self.check_english_requirement();
pub fn postprocess(&mut self, catalog: &Catalog) {
self.check_english_requirement(catalog.year());
}
}
42 changes: 28 additions & 14 deletions packages/server/src/core/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,22 @@ use std::str::FromStr;
use super::types::Requirement;
use super::*;

pub const COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID: &str = "61a102bb04c5400b98e6f401"; // catalog id from database
pub const COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID: &str = "61a102bb04c5400b98e6f401"; // catalog id from database
pub const COMPUTER_SCIENCE_3_YEARS_21_22_CATALOG_ID: &str = "61ec835f015bedeab20397a4"; // catalog id from database

#[test]
async fn test_year_catalog() {
dotenv().ok();
let db = Db::new().await;
let catalog = db
.get::<Catalog>(
bson::oid::ObjectId::from_str(COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID)
.expect("failed to create oid"),
)
.await
.unwrap();
assert_eq!(catalog.year(), 2019);
}

#[test]
async fn test_pdf_parser() {
Expand Down Expand Up @@ -319,7 +334,7 @@ async fn test_irrelevant_course() {
async fn test_restore_irrelevant_course() {
let mut degree_status = run_degree_status_full_flow(
"pdf_ctrl_c_ctrl_v_4.txt",
COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID,
COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID,
)
.await;

Expand All @@ -332,7 +347,7 @@ async fn test_restore_irrelevant_course() {

degree_status = run_degree_status(
degree_status,
get_catalog(COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID).await,
get_catalog(COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID).await,
)
.await;
degree_status.course_statuses.push(CourseStatus {
Expand All @@ -353,7 +368,7 @@ async fn test_restore_irrelevant_course() {

degree_status = run_degree_status(
degree_status,
get_catalog(COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID).await,
get_catalog(COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID).await,
)
.await;

Expand Down Expand Up @@ -449,7 +464,7 @@ async fn test_modified() {
async fn test_duplicated_courses() {
let mut degree_status = run_degree_status_full_flow(
"pdf_ctrl_c_ctrl_v_4.txt",
COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID,
COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID,
)
.await;

Expand All @@ -473,7 +488,7 @@ async fn test_duplicated_courses() {

degree_status = run_degree_status(
degree_status,
get_catalog(COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID).await,
get_catalog(COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID).await,
)
.await;

Expand Down Expand Up @@ -539,7 +554,7 @@ async fn run_degree_status_full_flow(file_name: &str, catalog: &str) -> DegreeSt
async fn test_missing_credit() {
let degree_status = run_degree_status_full_flow(
"pdf_ctrl_c_ctrl_v.txt",
COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID,
COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID,
)
.await;
//FOR VIEWING IN JSON FORMAT
Expand Down Expand Up @@ -661,7 +676,7 @@ async fn test_missing_credit() {
async fn test_overflow_credit() {
let degree_status = run_degree_status_full_flow(
"pdf_ctrl_c_ctrl_v_2.txt",
COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID,
COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID,
)
.await;
//FOR VIEWING IN JSON FORMAT
Expand Down Expand Up @@ -761,9 +776,10 @@ async fn test_overflow_credit() {
async fn test_postprocessing_english_requirement() {
let mut degree_status = run_degree_status_full_flow(
"pdf_ctrl_c_ctrl_v_2.txt",
COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID,
COMPUTER_SCIENCE_3_YEARS_21_22_CATALOG_ID,
)
.await;

//FOR VIEWING IN JSON FORMAT
// std::fs::write(
// "degree_status.json",
Expand All @@ -789,7 +805,7 @@ async fn test_postprocessing_english_requirement() {

degree_status = run_degree_status(
degree_status,
get_catalog(COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID).await,
get_catalog(COMPUTER_SCIENCE_3_YEARS_21_22_CATALOG_ID).await,
)
.await;

Expand All @@ -810,12 +826,10 @@ async fn test_postprocessing_english_requirement() {

degree_status = run_degree_status(
degree_status,
get_catalog(COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID).await,
get_catalog(COMPUTER_SCIENCE_3_YEARS_21_22_CATALOG_ID).await,
)
.await;

println!("{:#?}", degree_status.overflow_msgs);

assert_eq!(degree_status.overflow_msgs.len(), 3);
}

Expand Down Expand Up @@ -918,7 +932,7 @@ async fn test_software_engineer_itinerary() {

#[test]
async fn test_catalog_validations() {
let mut catalog = get_catalog(COMPUTER_SCIENCE_3_YEARS_18_19_CATALOG_ID).await;
let mut catalog = get_catalog(COMPUTER_SCIENCE_3_YEARS_19_20_CATALOG_ID).await;
assert!(validate_catalog(&catalog).is_ok());

// Add credit transfer between בחירה חופשית to רשימה א to close a cycle
Expand Down
10 changes: 10 additions & 0 deletions packages/server/src/resources/catalog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use crate::{
resources::course::CourseBank,
};
use bson::{doc, Document};
use regex::Regex;
use serde::{self, Deserialize, Serialize};
use std::collections::HashMap;

Expand All @@ -26,6 +27,15 @@ pub struct Catalog {
}

impl Catalog {
pub fn year(&self) -> usize {
let default_year = 2018;
Regex::new(r"(?P<year>\d{4})")
.unwrap()
.captures(&self.name)
.map(|cap| cap["year"].parse::<usize>().unwrap_or(default_year))
.unwrap_or(default_year)
}

pub fn get_course_list(&self, name: &str) -> Vec<CourseId> {
let mut course_list_for_bank = Vec::new();
for (course_id, bank_name) in &self.course_to_bank {
Expand Down

0 comments on commit d57a26a

Please sign in to comment.