From 1cce8fe30a73f538ed63e88d7c09e18456d333b9 Mon Sep 17 00:00:00 2001
From: Hong-Phuc Bui <hong-phuc.bui@htwsaar.de>
Date: Wed, 19 Jun 2024 10:01:45 +0200
Subject: [PATCH] test

---
 study-effort/src/mystudy/lecture.py        |   51 +++++++++++++---
 study-effort/vorlesung.csv                 |    3 +
 study-effort/src/mystudy/main.py           |   25 +++++--
 study-effort/tests/mystudy/lecture_test.py |   50 +++++++++++-----
 study-effort/pyproject.toml                |    2 
 5 files changed, 95 insertions(+), 36 deletions(-)

diff --git a/study-effort/pyproject.toml b/study-effort/pyproject.toml
index 26b7f61..042a0be 100644
--- a/study-effort/pyproject.toml
+++ b/study-effort/pyproject.toml
@@ -10,8 +10,6 @@
 # All the following settings are optional:
 where = ["src"]
 
-
-
 [project.scripts]
 mystudy = "mystudy.main:main"
 
diff --git a/study-effort/src/mystudy/lecture.py b/study-effort/src/mystudy/lecture.py
index 778a4bb..b6861de 100644
--- a/study-effort/src/mystudy/lecture.py
+++ b/study-effort/src/mystudy/lecture.py
@@ -4,19 +4,48 @@
 ects_effort: Final[int] = 30
 
 
-def lecture_effort(lecture_pre_week, ects):
-    """
-    :param lecture_pre_week: wie viel Veranstaltungen hat eine Vorlesung in der Woche
-    :param ects: Anzahl der ECTS der Vorlesung
-    :return:
-    """
-    effort_in_time = ects * ects_effort
-    effort_per_week = effort_in_time / lecture_time # how many hours for a week
-    return effort_per_week - (lecture_pre_week * 1.5)
+class Lecture():
+    def __init__(self, name, ects, frequency):
+        """
+
+        :param name:
+        :param ects:
+        :param frequency:
+        """
+        self._name = name
+        self._ects = ects
+        self._frequency = frequency
+
+    def cal_effort(self, time_per_ects = ects_effort, duration = lecture_time) -> float:
+        """
+        Berechnet den Zeitaufwand pro woche für diese Vorlesung
+        :param time_per_ects:
+        :param duration:
+        :return:
+        """
+        effort_in_time = self._ects * time_per_ects
+        effort_per_week = effort_in_time / duration
+        return effort_per_week - (self._frequency * 1.5)
+
+    def __repr__(self):
+        return f"Vorlesungsname {self._name} ECTS: {self._ects}"
+
+    # def __str__(self):
+    #    return self.__repr__()
 
 
-def format_lecture_effort(name, lecture_count, ects, effort):
-    return f"Für die Vorlesung {name} mit {ects} ECTS und {lecture_count} Veranstaltung pro Woche brauchen Sie {effort} Stunden zu lernen."
+def parse_lecture_line(line: str) -> Lecture:
+    words = line.split(";")
+    words = [w.strip() for w in words]
+    name = words[0]
+    count = float(words[1])
+    ects = int(words[2])
+    return Lecture(name, ects, count)
+    pass
+
+
+
+
 
 
 
diff --git a/study-effort/src/mystudy/main.py b/study-effort/src/mystudy/main.py
index d5d8a94..f90d7d9 100644
--- a/study-effort/src/mystudy/main.py
+++ b/study-effort/src/mystudy/main.py
@@ -1,12 +1,21 @@
-from mystudy import lecture
+from mystudy.lecture import Lecture, parse_lecture_line
+from sys import argv
 
-lecture_count = input("Geben Sie die Anzahl der Veranstaltungen ein!")
-lecture_per_week = int(lecture_count)
 
-ects_input = input("Geben Sie die ECTS-Zahl der Vorlesung ein!")
-ects = int(ects_input)
+def read_file_to_lecture(filename: str) -> list[Lecture]:
+    lectures = []
+    with open(filename, 'r') as file:
+        while line := file.readline():
+            if len(line.strip()) > 0:
+                l = parse_lecture_line(line)
+                lectures.append(l)
+    return lectures
 
-effort = lecture.lecture_effort(lecture_per_week, ects)
-text = lecture.format_lecture_effort("Mathematik", lecture_per_week, ects, effort)
 
-print(text)
+def main():
+    filename = argv[1]
+    print(filename)
+    lectures = read_file_to_lecture(filename)
+    for l in lectures:
+        print(l)
+
diff --git a/study-effort/tests/mystudy/lecture_test.py b/study-effort/tests/mystudy/lecture_test.py
index d82108a..cc6f0f8 100644
--- a/study-effort/tests/mystudy/lecture_test.py
+++ b/study-effort/tests/mystudy/lecture_test.py
@@ -1,22 +1,42 @@
 import unittest
-from mystudy import lecture
+from mystudy.lecture import Lecture, parse_lecture_line
+
+EPSILON = 0.01
+
+class LectureTestCase(unittest.TestCase):
+    def test_constructor(self):
+        n = "Mathematik"
+        ects = 5
+        f = 2.5
+        mathe2 = Lecture(n, ects, f)
+        english = Lecture("English", 2, 1)
+        print(mathe2)
+        print(english)
+        text = f"{mathe2} am Montag"
+        text2 = f"{mathe2} im Studiengang MAM"
+        print(text)
 
 
-class MyTestCase(unittest.TestCase):
-    def test_something(self):
-        ects_python = 2
-        lecture_per_week = 2
-        effort_per_week = lecture.lecture_effort(lecture_per_week, ects_python)
-        self.assertEqual(effort_per_week, 1.0)  # add assertion here
+    def test_cal_effort(self):
+        n = "Mathematik",
+        ects = 5
+        f = 2.5
+        mathe2 = Lecture(n, ects, f)
+        e1 = mathe2.cal_effort()
+        # self.assertEqual(e1, 6)
+        diff = abs(e1 - 6.25)
+        self.assertTrue(diff < EPSILON)
 
-    def test_format(self):
-        ects = 3
-        lecture_per_week = 2
-        name = "Informatik"
-        text = lecture.format_lecture_effort(name, lecture_per_week, ects, 8)
-        self.assertTrue(text.index(f"{ects}") >= 0)
-        self.assertTrue(text.index(name) >= 0)
-        self.assertTrue(text.index("8"))
+        e2 = mathe2.cal_effort(time_per_ects=20)
+        diff = abs(e2 - 2.92)
+        # self.assertEqual(e2, 7)
+        self.assertTrue(diff < EPSILON)
+
+    def test_parse_lecture_line(self):
+        data = "English; 3; 2"
+        english = parse_lecture_line(data)
+        text = "Vorlesungsname English ECTS: 2"
+        self.assertEqual(text, f"{english}")
 
 
 if __name__ == '__main__':
diff --git a/study-effort/vorlesung.csv b/study-effort/vorlesung.csv
new file mode 100644
index 0000000..88eab23
--- /dev/null
+++ b/study-effort/vorlesung.csv
@@ -0,0 +1,3 @@
+Mathematik; 2.5; 5
+Prog-2    ; 2  ; 5
+

--
Gitblit v1.10.0-SNAPSHOT