"""
------------------------------------------------------------------------------
--                                                                          --
--                       APRIL 30 LECTURE EXAMPLES                          --
--                                                                          --
--                     A P R I L 3 0 _ T E S T S . P Y                      --
--                                                                          --
------------------------------------------------------------------------------
-- Jeremy D Keffer                                                          --
--                                                                          --
-- CISC106 011 Spring 2013                                                  --
--                                                                          --
------------------------------------------------------------------------------
-- This file contains unit tests for the functions we wrote in class on     --
-- April 30.  Compare the differences in this file and student.py with      --
-- their counterparts from April 18.                                        --
--                                                                          --
------------------------------------------------------------------------------
"""

import unittest
import course
import student

class TestApril30(unittest.TestCase):
    def test_create_course(self):
        course1 = course.create(
            "Underwater Basket Weaving",
            "ART",
            345,
            3.0,
            11)

        self.assertEqual(course1.name, "Underwater Basket Weaving")
        self.assertEqual(course1.department, "ART")
        self.assertEqual(course1.number, 345)
        self.assertEqual(course1.credits, 3.0)
        self.assertEqual(course1.section, 11)

    def test_course_equal(self):
        course1 = course.create(
            "Underwater Basket Weaving",
            "ART",
            345,
            3.0,
            11)

        course2 = course.create(
            "Underwater Basket Weaving",
            "ART",
            345,
            3.0,
            11)

        self.assertTrue(course.equal(course1, course2))

        course3 = course.create(
            "Another Super Interesting Class",
            "LOL",
            172,
            3.0,
            12)

        self.assertFalse(course.equal(course1, course3))

    def test_clone_course(self):
        course1 = course.create(
            "Underwater Basket Weaving",
            "ART",
            345,
            3.0,
            11)
        course2 = course.clone(course1)
        self.assertTrue(course.equal(course1, course2))
        self.assertFalse(course1 == course2)

    def test_create_student(self):
        course1 = course.create(
            "Underwater Basket Weaving",
            "ART",
            345,
            3.0,
            11)
        
        guybrush = student.Student(
            "Guybrush Threepwood",
            700873845,
            "1555-04-01",
            "Piracy",
            [course1],
            ["A"],
            "freshman")

        self.assertEqual(guybrush.name, "Guybrush Threepwood")
        self.assertEqual(guybrush.student_id, 700873845)
        self.assertEqual(guybrush.birthday, "1555-04-01")
        self.assertEqual(guybrush.major, "Piracy")
        self.assertTrue(course.equal(guybrush.classes_taken[0], course1))
        self.assertEqual(guybrush.grades, ["A"])
        self.assertEqual(guybrush.year, "freshman")

    def test_add_course(self):
        course1 = course.create(
            "Underwater Basket Weaving",
            "ART",
            345,
            3.0,
            11)
        
        guybrush = student.Student(
            "Guybrush Threepwood",
            700873845,
            "1555-04-01",
            "Piracy",
            [course1],
            ["A"],
            "freshman")

        course2 = course.create(
            "Computer Science for Engineers",
            "CISC",
            106,
            3.0,
            18)

        guybrush.add_course(course2, "B")
        self.assertEqual(len(guybrush.classes_taken), 2)
        self.assertTrue(course.equal(guybrush.classes_taken[-1], course2))
        self.assertEqual(guybrush.grades, ["A", "B"])

    def test_credits_and_gpa(self):
        course1 = course.create(
            "Underwater Basket Weaving",
            "ART",
            345,
            3.0,
            11)

        course2 = course.create(
            "Computer Science for Engineers",
            "CISC",
            106,
            3.0,
            18)
        
        guybrush = student.Student(
            "Guybrush Threepwood",
            700873845,
            "1555-04-01",
            "Piracy",
            [course1, course2],
            ["A", "B"],
            "freshman")

        self.assertEqual(guybrush.credits(), 6.00)
        self.assertEqual(guybrush.GPA(), 3.5)
        
if __name__ == '__main__':
    try:
        unittest.main()
    except SystemExit:
        pass
