|
| 1 | +create or replace package body test_award_bonus as |
| 2 | + |
| 3 | + gc_test_employee constant integer := -1; |
| 4 | + gc_salary constant number := 4500; |
| 5 | + gc_commision_pct constant number := 0.2; |
| 6 | + |
| 7 | + procedure update_employee_salary is |
| 8 | + results sys_refcursor; |
| 9 | + expected sys_refcursor; |
| 10 | + not_affected sys_refcursor; |
| 11 | + c_sales_amount constant number := 1000; |
| 12 | + begin |
| 13 | + --arrange |
| 14 | + open expected for |
| 15 | + select (salary + c_sales_amount * gc_commision_pct) as new_salary |
| 16 | + from employees_test where employee_id = gc_test_employee; |
| 17 | + |
| 18 | + open not_affected for |
| 19 | + select * from employees_test where employee_id <> gc_test_employee; |
| 20 | + |
| 21 | + --act |
| 22 | + award_bonus(emp_id => gc_test_employee, sales_amt => c_sales_amount); |
| 23 | + |
| 24 | + --assert |
| 25 | + open results for |
| 26 | + select salary as new_salary |
| 27 | + from employees_test where employee_id = gc_test_employee; |
| 28 | + |
| 29 | + ut.expect( results ).to_( equal( expected ) ); |
| 30 | + |
| 31 | + open results for |
| 32 | + select * from employees_test where employee_id != gc_test_employee; |
| 33 | + |
| 34 | + ut.expect( results ).to_( equal( not_affected ) ); |
| 35 | + end; |
| 36 | + |
| 37 | + procedure fail_on_null_bonus is |
| 38 | + begin |
| 39 | + award_bonus(emp_id => gc_test_employee, sales_amt => null); |
| 40 | + ut.expect( sqlcode ).not_to( equal( 0 ) ); |
| 41 | + exception |
| 42 | + when others then |
| 43 | + ut.expect( sqlcode ).not_to( equal( 0 ) ); |
| 44 | + end; |
| 45 | + |
| 46 | + procedure add_employee( emp_id number, comm_pct number, sal number ) is |
| 47 | + begin |
| 48 | + insert into employees_test (employee_id, commission_pct, salary) |
| 49 | + values (emp_id, comm_pct, sal); |
| 50 | + end; |
| 51 | + |
| 52 | + procedure add_test_employee is |
| 53 | + begin |
| 54 | + add_employee(gc_test_employee, 0.2, gc_salary); |
| 55 | + end; |
| 56 | + |
| 57 | + procedure add_employee_with_null_comm is |
| 58 | + begin |
| 59 | + add_employee(gc_test_employee, null, gc_salary); |
| 60 | + end; |
| 61 | + |
| 62 | +end; |
| 63 | +/ |
0 commit comments