create tests for data_model's EducationEntry class

This commit is contained in:
Sina Atalay 2023-10-07 19:14:56 +02:00
parent b1f2777b2b
commit 72048b6d33
2 changed files with 151 additions and 15 deletions

View File

@ -537,17 +537,13 @@ class Event(BaseModel):
date_and_location_strings.append(self.location)
if self.date is not None:
# Then it means start_date and end_date are not provided.
try:
# If this runs, it means the date is an ISO format string, and it can be
# parsed
date = format_date(Date.fromisoformat(self.date))
date_and_location_strings.append(date)
except:
if isinstance(self.date, str):
date_and_location_strings.append(self.date)
elif isinstance(self.date, Date):
date_and_location_strings.append(format_date(self.date))
else:
# Then it means start_date and end_date are provided.
raise RuntimeError("Date is neither a string nor a Date object!")
elif self.start_date is not None and self.end_date is not None:
start_date = format_date(self.start_date)
if self.end_date == "present":
@ -694,7 +690,7 @@ class EducationEntry(Event):
description="The type of the degree.",
examples=["BS", "BA", "PhD", "MS"],
)
gpa: Optional[str] = Field(
gpa: Optional[str | float] = Field(
default=None,
title="GPA",
description="The GPA of the degree.",

View File

@ -87,6 +87,10 @@ class TestRendercv(unittest.TestCase):
with self.subTest(msg="valid dates"):
data_model.Event(**input)
# Inputs without dates:
with self.subTest(msg="no dates"):
data_model.Event(**{})
# Inputs with invalid dates:
input = {
"start_date": Date(year=2020, month=1, day=1),
@ -162,7 +166,7 @@ class TestRendercv(unittest.TestCase):
]
event = data_model.Event(**input)
result = event.date_and_location_strings_with_timespan
with self.subTest(expected=expected):
with self.subTest(msg="start_date, end_date, and location are provided"):
self.assertEqual(result, expected)
input = {
@ -175,7 +179,42 @@ class TestRendercv(unittest.TestCase):
]
event = data_model.Event(**input)
result = event.date_and_location_strings_with_timespan
with self.subTest(expected=expected):
with self.subTest(msg="date and location are provided"):
self.assertEqual(result, expected)
input = {
"date": Date(year=2020, month=1, day=1),
}
expected = [
"Jan. 2020",
]
event = data_model.Event(**input)
result = event.date_and_location_strings_with_timespan
with self.subTest(msg="date is provided"):
self.assertEqual(result, expected)
input = {
"start_date": Date(year=2020, month=1, day=1),
"end_date": Date(year=2021, month=1, day=16),
}
expected = [
"Jan. 2020 to Jan. 2021",
"1 year 1 month",
]
event = data_model.Event(**input)
result = event.date_and_location_strings_with_timespan
with self.subTest(msg="start_date and end_date are provided"):
self.assertEqual(result, expected)
input = {
"location": "My Location",
}
expected = [
"My Location",
]
event = data_model.Event(**input)
result = event.date_and_location_strings_with_timespan
with self.subTest(msg="location is provided"):
self.assertEqual(result, expected)
def test_data_event_date_and_location_strings_without_timespan(self):
@ -219,7 +258,7 @@ class TestRendercv(unittest.TestCase):
]
event = data_model.Event(**input)
result = event.highlight_strings
with self.subTest(expected=expected):
with self.subTest(msg="highlights are provided"):
self.assertEqual(result, expected)
input = {}
@ -299,6 +338,107 @@ class TestRendercv(unittest.TestCase):
with self.subTest(msg="date is provided"):
self.assertEqual(result, expected)
def test_data_education_highlight_strings(self):
input = {
"institution": "My Institution",
"area": "My Area",
"gpa": 3.5,
"highlights": [
"My Highlight 1",
"My Highlight 2",
],
}
expected = [
"GPA: 3.5",
"My Highlight 1",
"My Highlight 2",
]
education = data_model.EducationEntry(**input)
result = education.highlight_strings
with self.subTest(msg="gpa and highlights are provided"):
self.assertEqual(result, expected)
input = {
"institution": "My Institution",
"area": "My Area",
"gpa": None,
"highlights": [
"My Highlight 1",
"My Highlight 2",
],
}
expected = [
"My Highlight 1",
"My Highlight 2",
]
education = data_model.EducationEntry(**input)
result = education.highlight_strings
with self.subTest(msg="gpa is not provided, but highlights are"):
self.assertEqual(result, expected)
input = {
"institution": "My Institution",
"area": "My Area",
"gpa": 3.5,
"highlights": [],
}
expected = [
"GPA: 3.5",
]
education = data_model.EducationEntry(**input)
result = education.highlight_strings
with self.subTest(msg="gpa is provided, but highlights are not"):
self.assertEqual(result, expected)
input = {
"institution": "My Institution",
"area": "My Area",
"gpa": None,
"highlights": [],
}
expected = []
education = data_model.EducationEntry(**input)
result = education.highlight_strings
with self.subTest(msg="neither gpa nor highlights are provided"):
self.assertEqual(result, expected)
input = {
"institution": "My Institution",
"area": "My Area",
"gpa": 3.5,
"transcript_url": "https://www.example.com/",
"highlights": None,
}
expected = [
"GPA: 3.5 ([Transcript](https://www.example.com/))",
]
education = data_model.EducationEntry(**input)
result = education.highlight_strings
with self.subTest(
msg="gpa and transcript_url are provided, but highlights are not"
):
self.assertEqual(result, expected)
input = {
"institution": "My Institution",
"area": "My Area",
"gpa": "3.5",
"transcript_url": "https://www.example.com/",
"highlights": [
"My Highlight 1",
"My Highlight 2",
],
}
expected = [
"GPA: 3.5 ([Transcript](https://www.example.com/))",
"My Highlight 1",
"My Highlight 2",
]
education = data_model.EducationEntry(**input)
result = education.highlight_strings
with self.subTest(msg="gpa, transcript_url, and highlights are provided"):
self.assertEqual(result, expected)
if __name__ == "__main__":
unittest.main()