def test_swap_up_repeated() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 30, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 30) e3 = Leader(3, "Sofia", "Manager", 25000, 30, "Grunts Department") e4 = Employee(4, "Senya", "Grunt Alpha", 15000, 30) e5 = Employee(5, "Sylvia", "Grunt Beta", 10000, 30) e6 = Employee(6, "Scarlett", "Grunt Gamma", 5000, 30) e7 = Employee(7, "Samantha", "Grunt Epsilon", 2500, 100) e2.become_subordinate(e1) e3.become_subordinate(e1) e4.become_subordinate(e3) e5.become_subordinate(e4) e6.become_subordinate(e5) e7.become_subordinate(e6) new_e7 = e7.swap_up() assert new_e7.get_superior() == e5 assert new_e7.salary == 5000 assert new_e7.position == "Grunt Gamma" for i in range(4): new_e7 = new_e7.swap_up() assert isinstance(new_e7, Leader) assert new_e7.get_superior() is None assert new_e7.salary == 500000 assert new_e7.position == "CEO" assert new_e7.get_department_name() == "Some Corp." new_subs = new_e7.get_direct_subordinates() assert new_subs[0].name == "Sarah" assert new_subs[1].name == "Sandra"
def test_department_salary_tree_simple() -> None: e1 = Leader(1, "Sarah", "CEO", 300000, 89, "Some Corp.") e2 = Leader(2, "Sandra", "Secretary", 20000, 89, "Finance") e3 = Employee(3, "Sofia", "Manager", 300000, 89) e4 = Leader(4, "Senya", "HR Head", 5000, 89, "Human Resources") e5 = Employee(5, "Sylvia", "Secretary", 300000, 99) e6 = Employee(6, "Selena", "Grunt", 5000, 99) e7 = Employee(7, "Sophie", "Grunt", 5000, 99) o = Organization() o.add_employee(e1) o.add_employee(e2, 1) o.add_employee(e3, 1) o.add_employee(e4, 1) o.add_employee(e5, 1) o.add_employee(e6, 4) o.add_employee(e7, 4) tree = create_department_salary_tree(o) assert int(tree.salary) == 300000 assert tree.department_name == "Some Corp." assert len(tree.subdepartments) == 2 assert int(tree.subdepartments[0].salary) == 20000 assert tree.subdepartments[0].department_name == "Finance" assert len(tree.subdepartments[0].subdepartments) == 0 assert int(tree.subdepartments[1].salary) == 5000 assert tree.subdepartments[1].department_name == "Human Resources" assert len(tree.subdepartments[1].subdepartments) == 0
def test_obtain_employees() -> None: o = Organization() e1 = Leader(1, 'Holly', '', 1, 1, 'Department') o.add_employee(e1) e2 = Employee(2, 'Ivan', '', 1, 1) o.add_employee(e2, 1) e3 = Employee(3, 'Kevin', '', 1, 1) o.add_employee(e3, 2) e4 = Employee(4, 'Joe', 'Mama', 1, 100) o.add_employee(e4, 2) e5 = Employee(5, 'Linda', '', 1, 1) o.add_employee(e5, 4) assert e1.get_direct_subordinates() == [e2] assert e2.get_superior() == e1 assert e2.get_direct_subordinates() == [e3, e4] assert e3.get_superior() == e2 assert e4.get_superior() == e2 assert e3.get_direct_subordinates() == [] assert e4.get_direct_subordinates() == [e5] assert e5.get_superior() == e4 e4.obtain_subordinates([2]) assert o.get_head() == e1 assert e1.get_direct_subordinates() == [e3, e4] assert e3.get_superior() == e1 assert e4.get_superior() == e1 assert e3.get_direct_subordinates() == [] assert e4.get_direct_subordinates() == [e2, e5] assert e2.get_superior() == e4 assert e5.get_superior() == e4
def test_get_all_subordinates_simple() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 20000, 30) e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Some Corp.") e1.become_subordinate(e2) e2.become_subordinate(e3) assert e3.get_all_subordinates()[0].name == 'Emma Ployee' assert e3.get_all_subordinates()[1].name == 'Sue Perior'
def test_get_employee() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 20000, 30) e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Some Corp.") e1.become_subordinate(e2) e2.become_subordinate(e3) assert e3.get_employee(1) is e1 assert e1.get_employee(1) is e1 assert e2.get_employee(3) is None
def test_get_department_name() -> None: e2 = Employee(3, 'Joe', 'Worker', 10000, 50) assert e2.get_department_name() == '' l = Leader(1, 'Lena', 'LEADER', 100000, 100, 'Department') assert l.get_department_name() == 'Department' e1 = Employee(2, 'Mama', 'Anna', 50000, 100) e1.become_subordinate(l) assert e1.get_department_name() == 'Department' e2.become_subordinate(e1) assert e2.get_department_name() == 'Department'
def test_get_employees_paid_more_than_simple() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 20000, 30) e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Some Corp.") e1.become_subordinate(e2) e2.become_subordinate(e3) more_than_10000 = e3.get_employees_paid_more_than(10000) assert len(more_than_10000) == 2 assert more_than_10000[0].name == 'Sue Perior' assert more_than_10000[1].name == 'Bigg Boss'
def test_fire_under_rating_simple() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 99, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 99) e3 = Employee(3, "Sofia", "Manager", 25000, 89) e4 = Employee(4, "Senya", "Grunt", 5000, 89) e5 = Employee(5, "Sylvia", "Grunt", 5000, 89) o = Organization() o.add_employee(e1) o.add_employee(e2, 1) o.add_employee(e3, 1) o.add_employee(e4, 3) o.add_employee(e5, 3) o.fire_under_rating(99) assert o.get_head() == e1 assert e1.get_direct_subordinates() == [e2]
def test_get_closest_common_superior_self_is_superior() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 50000, 30) e3 = Employee(3, "Robocop", "Worker", 20000, 30) e4 = Leader(4, "Sarah", "CEO", 500000, 30, "Some Corp.") e5 = Employee(5, "Sofia", "Worker", 10000, 30) e6 = Employee(6, "Terry", "Worker", 5000, 30) e7 = Employee(7, "Odysseus", "Worker", 22000, 30) e1.become_subordinate(e2) e3.become_subordinate(e2) e2.become_subordinate(e4) e5.become_subordinate(e2) e6.become_subordinate(e4) e7.become_subordinate(e4) assert e4.get_closest_common_superior(1) == e4
def test_get_organization_head_simple() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 20000, 30) e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Some Corp.") e1.become_subordinate(e2) e2.become_subordinate(e3) assert e1.get_organization_head().name == 'Bigg Boss'
def test_fire_lowest_rated_employee_tie() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 99, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 99) e3 = Employee(3, "Sofia", "Manager", 25000, 89) e4 = Employee(4, "Senya", "Grunt", 5000, 89) e5 = Employee(5, "Sylvia", "Grunt", 5000, 89) o = Organization() o.add_employee(e1) o.add_employee(e2, 1) o.add_employee(e3, 1) o.add_employee(e4, 3) o.add_employee(e5, 3) o.fire_lowest_rated_employee() assert e1.get_direct_subordinates() == [e2, e4, e5] assert e4.get_superior() == e1 assert e5.get_superior() == e1
def create_leaders(n: int) -> [Leader]: ans = [] for i in range(1, n + 1): ans.append( Leader(i, 'Name' + str(i), 'Job' + str(i), i * 1000, 50, 'Department' + str(i))) return ans
def test_get_employees_paid_more_than_advanced() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 50000, 30) e3 = Employee(3, "Robocop", "Worker", 20000, 30) e4 = Leader(4, "Sarah", "CEO", 500000, 30, "Some Corp.") e5 = Employee(5, "Sofia", "Worker", 10000, 30) e6 = Employee(6, "Terry", "Worker", 5000, 30) e7 = Employee(7, "Odysseus", "Worker", 22000, 30) e1.become_subordinate(e2) e3.become_subordinate(e2) e2.become_subordinate(e4) e5.become_subordinate(e2) e6.become_subordinate(e4) e7.become_subordinate(e4) more_than_20000 = e4.get_employees_paid_more_than(20000) assert more_than_20000 == [e2, e4, e7]
def test_get_all_subordinates_advanced() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 20000, 30) e3 = Employee(3, "Robocop", "Worker", 20000, 30) e4 = Leader(4, "Sarah", "CEO", 20000, 30, "Some Corp.") e5 = Employee(5, "Sofia", "Worker", 20000, 30) e6 = Employee(6, "Terry", "Worker", 20000, 30) e7 = Employee(7, "Odysseus", "Worker", 20000, 30) e1.become_subordinate(e2) e3.become_subordinate(e2) e2.become_subordinate(e4) e5.become_subordinate(e2) e6.become_subordinate(e4) e7.become_subordinate(e4) assert e2.get_all_subordinates() == [e1, e3, e5] assert e4.get_all_subordinates() == [e1, e2, e3, e5, e6, e7] assert e1.get_all_subordinates() == []
def test_get_closest_common_superior_simple() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 20000, 30) e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Some Corp.") e1.become_subordinate(e3) e2.become_subordinate(e3) superior = e1.get_closest_common_superior(3) assert superior.eid == 3
def test_short_create() -> None: o = Organization() lin = Leader(1, 'Linda', 'Sewed', 10, 10, 'MyNew') o.add_employee(lin) assert o.get_head() == lin t = create_department_salary_tree(o) assert t.department_name == 'MyNew' assert size(t) == 1
def test_become_each_other() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 30, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 30) e3 = Employee(3, "Sofia", "Manager", 25000, 40) e2.become_subordinate(e1) e3.become_subordinate(e2) assert e3.get_department_name() == 'Some Corp.' lol = e2.become_leader('chloeisamazingandneedschicken') assert isinstance(lol.get_employee(2), Leader) assert e3.get_department_name() == 'chloeisamazingandneedschicken' lol = e1.become_employee() assert isinstance(lol.get_employee(1), Employee) assert isinstance(lol.get_employee(1), Leader) == False assert lol.get_employee(1).get_department_name() == '' assert len(lol.get_employee(1).get_all_subordinates()) == 2 assert lol.get_employee(2).get_department_name() == \ 'chloeisamazingandneedschicken'
def test_get_highest_rated_subordinate_simple() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) assert e1.get_position_in_hierarchy() == 'Worker' e2 = Leader(2, "Sue Perior", "Manager", 20000, 30, "Department") e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Company") e1.become_subordinate(e2) e2.become_subordinate(e3) assert e3.get_highest_rated_subordinate().name == 'Sue Perior' e1.become_subordinate(e3) assert e3.get_highest_rated_subordinate().name == 'Emma Ployee'
def test_get_higher_paid_employees_simple() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 20000, 30) e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Some Corp.") e1.become_subordinate(e2) e2.become_subordinate(e3) more_than = e2.get_higher_paid_employees() assert len(more_than) == 1 assert more_than[0].name == 'Bigg Boss'
def test_obtain_subordinates_simple() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 30, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 30) e3 = Employee(3, "Sofia", "Manager", 25000, 40) e4 = Employee(4, "Senya", "Grunt", 5000, 30) e5 = Employee(5, "Sylvia", "Grunt", 5000, 40) e2.become_subordinate(e1) e3.become_subordinate(e1) e4.become_subordinate(e3) e5.become_subordinate(e3) new_head = e2.obtain_subordinates([3, 5]) assert new_head == e1 assert e2.get_direct_subordinates() == [e3, e5] assert e1.get_direct_subordinates() == [e2, e4] assert e3.get_superior() == e2 assert e5.get_superior() == e2 assert e2.get_superior() == e1 assert e4.get_superior() == e1
def test_get_average_salary_advanced() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 50000, 50) e2 = Employee(2, "Sue Perior", "Manager", 50000, 30) e3 = Employee(3, "Robocop", "Worker", 50000, 30) e4 = Leader(4, "Sarah", "CEO", 500000, 30, "Some Corp.") e5 = Employee(5, "Sofia", "Worker", 50000, 30) o = Organization() o.add_employee(e4) o.add_employee(e2, 4) o.add_employee(e1, 2) o.add_employee(e3, 2) o.add_employee(e5, 2) assert round(o.get_average_salary()) == 140000
def test_create_department_salary_tree() -> None: e1 = Leader(1, "Emma Ployee", "Worker", 15000, 50, 'Marketing') e2 = Employee(2, "Sue Perior", "Manager", 25000, 30) e3 = Employee(3, "Bigg Boss", "CEO", 50000, 60) e4 = Leader(4, "Emma Watson", "Manager", 30000, 50, 'Sales') e5 = Leader(5, "The Rock", "Worker", 15000, 15, 'Management') e2.become_subordinate(e1) e3.become_subordinate(e1) e4.become_subordinate(e3) e5.become_subordinate(e3) o = Organization(e1) dst = create_department_salary_tree(o) assert dst.department_name == 'Marketing' assert dst.salary == 30000.0 assert len(dst.subdepartments) == 2 assert dst.subdepartments[0].department_name == 'Sales' assert dst.subdepartments[0].salary == 30000.0 assert dst.subdepartments[1].department_name == 'Management' assert dst.subdepartments[1].salary == 15000.0
def test_get_highest_rated_subordinate_advanced() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 52000, 50) e2 = Employee(2, "Sue Perior", "Manager", 50000, 30) e3 = Employee(3, "Robocop", "Worker", 20000, 80) e4 = Leader(4, "Sarah", "CEO", 500000, 99, "Some Corp.") e5 = Employee(5, "Sofia", "Worker", 10000, 69) e6 = Employee(6, "Terry", "Worker", 5000, 79) e7 = Employee(7, "Odysseus", "Worker", 62000, 88) e8 = Employee(8, "Sparrow", "Contract Worker", 60000, 12) e9 = Employee(9, "Nick", "Contract Worker", 70000, 25) e10 = Employee(10, "Theseus", "Contract Worker", 80000, 87) e1.become_subordinate(e2) e3.become_subordinate(e2) e2.become_subordinate(e4) e5.become_subordinate(e2) e6.become_subordinate(e4) e7.become_subordinate(e4) e8.become_subordinate(e1) e9.become_subordinate(e1) e10.become_subordinate(e1) assert e2.get_highest_rated_subordinate() == e3 assert e4.get_highest_rated_subordinate() == e7 assert e1.get_highest_rated_subordinate() == e10
def test_get_department_leader() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) assert e1.get_department_leader() is None e2 = Leader(2, "Sue Perior", "Manager", 20000, 30, "Department") e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Company") e1.become_subordinate(e2) e2.become_subordinate(e3) assert e1.get_department_leader().name == 'Sue Perior' assert e2.get_department_leader().name == 'Sue Perior'
def test_swap_up_simple() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Leader(2, "Sue Perior", "Manager", 20000, 30, "Department") e3 = Leader(3, "Bigg Boss", "CEO", 50000, 60, "Company") e1.become_subordinate(e2) e2.become_subordinate(e3) new_e1 = e1.swap_up() assert isinstance(new_e1, Leader) new_e2 = new_e1.get_direct_subordinates()[0] assert isinstance(new_e2, Employee) assert new_e1.position == 'Manager' assert new_e1.eid == 1 assert e3.get_direct_subordinates()[0] is new_e1
def test_fire_under_rating_advanced() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 10, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 20) e3 = Employee(3, "Sofia", "Manager", 25000, 30) e4 = Employee(4, "Senya", "Grunt", 5000, 40) e5 = Employee(5, "Sylvia", "Grunt", 5000, 50) o = Organization() o.add_employee(e1) o.add_employee(e2, 1) o.add_employee(e3, 1) o.add_employee(e4, 2) o.add_employee(e5, 3) o.fire_under_rating(35) assert o.get_head() == e5 assert e5.get_direct_subordinates() == [e4] assert e4.get_superior() == e5
def test_promote_employee_simple() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 89, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 89) e3 = Employee(3, "Sofia", "Manager", 25000, 89) e4 = Employee(4, "Senya", "Grunt", 5000, 89) e5 = Employee(5, "Sylvia", "Grunt", 5000, 99) o = Organization() o.add_employee(e1) o.add_employee(e2, 1) o.add_employee(e3, 1) o.add_employee(e4, 3) o.add_employee(e5, 3) o.promote_employee(5) assert o.get_head().eid == 5 assert len(o.get_head().get_direct_subordinates()) == 2 assert o.get_head().get_direct_subordinates()[0].eid == 1 assert o.get_head().get_direct_subordinates()[1].eid == 2
def test_fire_employee_new_head_2() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 30, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 40) e3 = Employee(3, "Sofia", "Manager", 25000, 30) e4 = Employee(4, "Senya", "Grunt", 5000, 30) e5 = Employee(5, "Sylvia", "Grunt", 5000, 40) o = Organization() o.add_employee(e1) o.add_employee(e2, 1) o.add_employee(e3, 1) o.add_employee(e4, 3) o.add_employee(e5, 3) o.fire_employee(1) head = o.get_head() assert head.eid == 2 assert head.get_direct_subordinates() == [e3] assert e3.get_superior() == head
def test_fire_lowest_employee_new_head() -> None: e1 = Leader(1, "Sarah", "CEO", 500000, 1, "Some Corp.") e2 = Employee(2, "Sandra", "Secretary", 20000, 99) e3 = Employee(3, "Sofia", "Manager", 25000, 89) e4 = Employee(4, "Senya", "Grunt", 5000, 89) e5 = Employee(5, "Sylvia", "Grunt", 5000, 89) e6 = Employee(6, "Savannah", "Wedding Officiate", 5000, 50) o = Organization() o.add_employee(e1) o.add_employee(e2, 1) o.add_employee(e3, 1) o.add_employee(e4, 3) o.add_employee(e5, 3) o.add_employee(e6, 2) o.fire_lowest_rated_employee() assert o.get_head().eid == 2 assert o.get_head().get_direct_subordinates() == [e3, e6] assert e3.get_superior() == e2
def test_get_employees_with_position() -> None: e1 = Employee(1, "Emma Ployee", "Worker", 10000, 50) e2 = Employee(2, "Sue Perior", "Manager", 50000, 30) e3 = Employee(3, "Robocop", "Worker", 20000, 30) e4 = Leader(4, "Sarah", "CEO", 500000, 30, "Some Corp.") e5 = Employee(5, "Sofia", "Worker", 10000, 30) e6 = Employee(6, "Terry", "Worker", 5000, 30) e7 = Employee(7, "Odysseus", "Worker", 22000, 30) o = Organization() o.add_employee(e4) o.add_employee(e7, 4) o.add_employee(e6, 4) o.add_employee(e2, 4) o.add_employee(e1, 2) o.add_employee(e3, 2) o.add_employee(e5, 3) assert o.get_employees_with_position("Worker") == [e1, e3, e5, e6, e7] assert o.get_employees_with_position("Manager") == [e2] assert o.get_employees_with_position("CEO") == [e4]