# TEST CASE:

- Name: Import data to MySQL database server
    - Procedure
        - Configure DB connection by editing `constants.py`
        - Run `main_db.py`
        - Start DBMS of your choice and validate the result. (phpmyadmin)
    - Expected output
        - Python file ran without errors and the database,
        - tables and records are successfully created in database.

- Name: GUI startup
    - Procedure
        - Run application via `main_gui.py`
        - do nothing

    - Expected output
        - show "Please select" at programme option menu
        - show "Please select" at Semester option menu
        - a empty list of module shown

- Name: Select programme
    - Procedure
        - Run application via `main_gui.py`
        - click programme option menu
        - watch option available in option menu

    - Expected output
        - show a list of programme available in DB

- Name: after user select programme, user proceed to Select semester
    - Procedure
        - Run application via `main_gui.py`
        - click programme option menu
        - select "Higher Diploma in Cybersecurity" in option menu
        - watch options available in "Semester"

    - Expected output
        - 1,2,4,5 should be available in semester list

- Name: user Selected semester, user proceed to input Grade
    - Procedure
        - run procedure "after user select programme, user proceed to Select semester"
        - select semester "1"

    - Expected output
        - the modules available to semester should be listed in the "Modules" frame
        - the "Please Select" should be shown in every "Grade" option menu.
        - a empty box should be displayed in the Module, Credit and Grade for every modules row for the rest

- Name: user input grade, get total GPA
    - Procedure
        - run procedure "user Selected semester, user proceed to input Grade"
        - input all gpa

    - Expected output
        - watch the label at the bottom of the form.
        - when not all gpa got answered, the gpa won't be updated (keep 0.00)
        - when app gpa answered, the result gpa will be displayed (1.23)

- Name: Screen update
    - Procedure
        - Run same procedure as stated in "GPA Calculation Test #2"
        - re-select "Semester" to 2
        - re-select "Semester" to 4

    - Expected output
        - when "Semester" is 2
            - Module list should be updated (3 -> 2 items)
            - Credit list should be updated (3 -> 2 items)
            - Grade list should be selected "Please select"
        - when "Semester" is 4
            - Module list should be updated (2 -> 1 items)
            - Credit list should be updated (2 -> 1 items)
            - Grade list should be selected "Please select"

- Name: GPA Calculation Test #1
    - Procedure
        - Run application via `main_gui.py`
        - Perform semester GPA calculation with the input data stated in excepted output.
        - Validate the result with expected output.

        - Input:
            - Programme: Higher Diploma in Cybersecurity; Semester: 2
            - Subjects:
                - "Vocational Chinese Communication: Putonghua Presentations, Administrative and Technical Text Writing" → A-
                - "English & Communication: Reports" → C+

    - Expected output
        - Semester GPA: 3.00 shown at bottom

- Name: GPA Calculation Test #2
    - Procedure
        - Run application via `main_gui.py`
        - Perform semester GPA calculation with the input data stated in excepted output.
        - Validate the result with expected output.

        - Input:
            - Programme:  Higher Diploma in AI and Smart Technology; Semester: 1
            - Subjects:
                - "Vocational Chinese Communication: Putonghua Conversation and Reports" → A
                - "English & Communication: Workplace Interaction" → C-
                - "English & Communication: Workplace Correspondance" → B+

    - Expected output
        - Semester GPA: 3.00 shown at bottom
