Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion examples/RunAllExamples.sql
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,18 @@ prompt RunExampleTestAnnotationsHugePackage
@@RunExampleTestAnnotationsHugePackage.sql
prompt RunExpectations
@@RunExpectations.sql
prompt RunWithDocumentationReporter

@@RunWithDocumentationReporter.sql

--workaround for suite level cache
declare d date := sysdate; begin loop exit when d != sysdate; end loop; end;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cache invalidation is fixed in another PR, no more need in that

/
@@award_bonus/run_award_bonus_test.sql
--workaround for suite level cache
declare d date := sysdate; begin loop exit when d != sysdate; end loop; end;
/
@@between_string/run_betwnstr_test.sql
--workaround for suite level cache
declare d date := sysdate; begin loop exit when d != sysdate; end loop; end;
/
@@remove_rooms_by_name/run_remove_rooms_by_name_test.sql
20 changes: 20 additions & 0 deletions examples/award_bonus/award_bonus.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
--https://docs.oracle.com/database/sql-developer-4.2/RPTUG/sql-developer-unit-testing.htm#RPTUG45065


create or replace procedure award_bonus (emp_id number, sales_amt number) as
commission real;
comm_missing exception;
begin
select commission_pct into commission
from employees_test
where employee_id = emp_id;

if commission is null then
raise comm_missing;
else
update employees_test
set salary = nvl(salary,0) + sales_amt*commission
where employee_id = emp_id;
end if;
end;
/
7 changes: 7 additions & 0 deletions examples/award_bonus/employees_test.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
create table employees_test (employee_id number primary key, commission_pct number, salary number);
insert into employees_test values (1001, 0.2, 8400);
insert into employees_test values (1002, 0.25, 6000);
insert into employees_test values (1003, 0.3, 5000);
-- next employee is not in the sales department, thus is not on commission.
insert into employees_test values (1004, null, 10000);
commit;
11 changes: 11 additions & 0 deletions examples/award_bonus/run_award_bonus_test.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@@employees_test.sql
@@award_bonus.sql
@@test_award_bonus.pkg

set serveroutput on size unlimited format truncated

exec ut.run(user||'.test_award_bonus',ut_documentation_reporter());

drop package test_award_bonus;
drop procedure award_bonus;
drop table employees_test;
82 changes: 82 additions & 0 deletions examples/award_bonus/test_award_bonus.pkg
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
create or replace package test_award_bonus as

-- %suite(Award bonus)

-- %test(Sets new salary as pct commision * sales amount)
-- %testsetup(add_test_employee)
procedure update_employee_salary;

-- %test(Raises exception if null bonus is passed)
-- %testsetup(add_employee_with_null_comm)
procedure fail_on_null_bonus;

procedure add_test_employee;

procedure add_employee_with_null_comm;

end;
/

create or replace package body test_award_bonus as

gc_test_employee constant integer := -1;
gc_salary constant number := 4500;
gc_commision_pct constant number := 0.2;

procedure update_employee_salary is
results sys_refcursor;
expected sys_refcursor;
not_affected sys_refcursor;
c_sales_amount constant number := 1000;
begin
--arrange
open expected for
select (salary + c_sales_amount * gc_commision_pct) as new_salary
from employees_test where employee_id = gc_test_employee;

open not_affected for
select * from employees_test where employee_id <> gc_test_employee;

--act
award_bonus(emp_id => gc_test_employee, sales_amt => c_sales_amount);

--assert
open results for
select salary as new_salary
from employees_test where employee_id = gc_test_employee;

ut.expect( results ).to_( equal( expected ) );

open results for
select * from employees_test where employee_id != gc_test_employee;

ut.expect( results ).to_( equal( not_affected ) );
end;

procedure fail_on_null_bonus is
begin
award_bonus(emp_id => gc_test_employee, sales_amt => null);
ut.expect( sqlcode ).not_to( equal( 0 ) );
exception
when others then
ut.expect( sqlcode ).not_to( equal( 0 ) );
end;

procedure add_employee( emp_id number, comm_pct number, sal number ) is
begin
insert into employees_test (employee_id, commission_pct, salary)
values (emp_id, comm_pct, sal);
end;

procedure add_test_employee is
begin
add_employee(gc_test_employee, 0.2, gc_salary);
end;

procedure add_employee_with_null_comm is
begin
add_employee(gc_test_employee, null, gc_salary);
end;

end;
/
9 changes: 9 additions & 0 deletions examples/between_string/betwnstr.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
create or replace function betwnstr( a_string varchar2, a_start_pos integer, a_end_pos integer ) return varchar2 is
l_start_pos pls_integer := a_start_pos;
begin
if l_start_pos = 0 then
l_start_pos := 1;
end if;
return substr( a_string, l_start_pos, a_end_pos - l_start_pos + 1);
end;
/
10 changes: 10 additions & 0 deletions examples/between_string/run_betwnstr_test.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@@betwnstr.sql
@@test_betwnstr.pkg

set serveroutput on size unlimited format truncated

exec ut.run(user||'.test_betwnstr',ut_documentation_reporter());

drop package test_betwnstr;
drop function betwnstr;

43 changes: 43 additions & 0 deletions examples/between_string/test_betwnstr.pkg
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
create or replace package test_betwnstr as

-- %suite(Between string function)

-- %test(Returns substring from start position to end position)
procedure normal_case;

-- %test(Returns substring when start position is zero)
procedure zero_start_position;

-- %test(Returns string until end if end position is greated than string length)
procedure big_end_position;

-- %test(Returns null for null inlut srting value)
procedure null_string;
end;
/

create or replace package body test_betwnstr as

procedure normal_case is
begin
ut.expect( betwnstr( '1234567', 2, 5 ) ).to_( equal('2345') );
end;

procedure zero_start_position is
begin
ut.expect( betwnstr( '1234567', 0, 5 ) ).to_( equal('12345') );
end;


procedure big_end_position is
begin
ut.expect( betwnstr( '1234567', 0, 500 ) ).to_( equal('1234567') );
end;

procedure null_string is
begin
ut.expect( betwnstr( null, 2, 5 ) ).to_( be_null );
end;

end;
/
30 changes: 15 additions & 15 deletions examples/demo_expectations.pck
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ create or replace package body demo_expectations is
ut.expect( l_actual_timestamp_tz ).to_( equal( l_expected_timestamp_tz ) );
ut.expect( l_actual_varchar2 ).to_( equal( l_expected_varchar2 ) );

open l_actual_cursor for select * from user_objects where rownum <100;
open l_actual_cursor for select * from user_objects where rownum <6;
open l_expected_cursor for select * from user_objects where rownum <5;

ut.expect(l_actual_cursor).to_equal(l_expected_cursor);
Expand Down Expand Up @@ -178,7 +178,7 @@ create or replace package body demo_expectations is
ut.expect( l_timestamp ).to_equal( l_timestamp_tz );
ut.expect( l_timestamp_ltz ).to_equal( l_date );
ut.expect( l_varchar2 ).to_equal( l_clob );
open l_cursor for select * from user_objects where rownum <100;
open l_cursor for select * from user_objects where rownum <5;
ut.expect( l_cursor ).to_equal( l_varchar2 );

--using the to_( equal( ) ) matcher
Expand All @@ -192,7 +192,7 @@ create or replace package body demo_expectations is
ut.expect( l_timestamp ).to_( equal( l_timestamp_tz ) );
ut.expect( l_timestamp_ltz ).to_( equal( l_date ) );
ut.expect( l_varchar2 ).to_( equal( l_clob ) );
open l_cursor for select * from user_objects where rownum <100;
open l_cursor for select * from user_objects where rownum <5;
ut.expect( l_varchar2 ).to_( equal( l_cursor ) );

end;
Expand Down Expand Up @@ -223,8 +223,8 @@ create or replace package body demo_expectations is
ut.expect( l_timestamp_ltz ).to_equal( l_timestamp_ltz );
ut.expect( l_timestamp_tz ).to_equal( l_timestamp_tz );
ut.expect( l_varchar2 ).to_equal( l_varchar2 );
open l_cursor1 for select * from all_objects;
open l_cursor2 for select * from all_objects;
open l_cursor1 for select * from all_objects where rownum <=50;
open l_cursor2 for select * from all_objects where rownum <=50;
ut.expect( l_cursor1 ).to_equal( l_cursor2 );

--using the to_( equal( ) ) matcher
Expand All @@ -239,8 +239,8 @@ create or replace package body demo_expectations is
ut.expect( l_timestamp_tz ).to_( equal( l_timestamp_tz ) );
ut.expect( l_varchar2 ).to_( equal( l_varchar2 ) );

open l_cursor1 for select * from all_objects;
open l_cursor2 for select * from all_objects;
open l_cursor1 for select * from all_objects where rownum <=50;
open l_cursor2 for select * from all_objects where rownum <=50;
ut.expect( l_cursor1 ).to_( equal( l_cursor2 ) );
end;

Expand Down Expand Up @@ -291,7 +291,7 @@ create or replace package body demo_expectations is
l_timestamp_tz timestamp with time zone := l_timestamp;
l_varchar2 varchar2(100) := 'a string';
begin
open l_cursor for select * from user_objects where rownum <100;
open l_cursor for select * from user_objects where rownum <5;
--using the to_be_null() matcher
ut.expect( l_anydata ).to_be_null();
ut.expect( l_blob ).to_be_null();
Expand All @@ -306,7 +306,7 @@ create or replace package body demo_expectations is
ut.expect( l_cursor ).to_be_null;

--using the to_( be_null() ) matcher
open l_cursor for select * from user_objects where rownum <100;
open l_cursor for select * from user_objects where rownum <5;
ut.expect( l_anydata ).to_( be_null() );
ut.expect( l_blob ).to_( be_null() );
ut.expect( l_boolean ).to_( be_null() );
Expand Down Expand Up @@ -432,7 +432,7 @@ create or replace package body demo_expectations is
l_timestamp_tz timestamp with time zone := sysdate;
l_varchar2 varchar2(100) := 'a string';
begin
open l_cursor for select * from user_objects where rownum <100;
open l_cursor for select * from user_objects where rownum <5;
--using the to_be_not_null() matcher
ut.expect( l_anydata ).to_be_not_null();
ut.expect( l_blob ).to_be_not_null();
Expand All @@ -447,7 +447,7 @@ create or replace package body demo_expectations is
ut.expect( l_cursor ).to_be_not_null;

--using the to_( be_not_null() ) matcher
open l_cursor for select * from user_objects where rownum <100;
open l_cursor for select * from user_objects where rownum <5;
ut.expect( l_anydata ).to_( be_not_null() );
ut.expect( l_blob ).to_( be_not_null() );
ut.expect( l_boolean ).to_( be_not_null() );
Expand All @@ -462,7 +462,7 @@ create or replace package body demo_expectations is
end;

procedure demo_to_match_failure is
l_clob clob := rpad('a',32767,'a')||'Stephen';
l_clob clob := 'There was a guy named Stephen';
begin
ut.expect( 'STEPHEN' ).to_match('^Stephen$');
ut.expect( 'stephen ' ).to_match('^Stephen$', 'i'); --case insensitive
Expand All @@ -479,7 +479,7 @@ create or replace package body demo_expectations is
end;

procedure demo_to_match_success is
l_clob clob := rpad('a',32767,'a')||'STEPHEN';
l_clob clob := 'There was a guy named STEPHEN';
begin
ut.expect( 'Hi, I am Stephen' ).to_match('Stephen$');
ut.expect( 'stephen' ).to_match('^Stephen$', 'i'); --case insensitive
Expand All @@ -492,7 +492,7 @@ create or replace package body demo_expectations is
end;

procedure demo_to_be_like_failure is
l_clob clob := rpad('a',32767,'a')||'Stephen';
l_clob clob := 'There was a guy named Stephen';
begin
ut.expect( 'STEPHEN' ).to_be_like('Stephen');
ut.expect( 'Stephen ' ).to_be_like('Stephen\_', '\'); --escape wildcards with '\'
Expand All @@ -509,7 +509,7 @@ create or replace package body demo_expectations is
end;

procedure demo_to_be_like_success is
l_clob clob := rpad('a',32767,'a')||'STEPHEN_';
l_clob clob := 'There was a guy named STEPHEN_';
begin
ut.expect( 'Hi, I am Stephen' ).to_be_like('%Stephen');
ut.expect( 'stephen_' ).to_be_like('_tephen\_', '\'); --escape wildcards with '\'
Expand Down
8 changes: 8 additions & 0 deletions examples/remove_rooms_by_name/remove_rooms_by_name.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
create or replace procedure remove_rooms_by_name( l_name rooms.name%type ) is
begin
if l_name is null then
raise program_error;
end if;
delete from rooms where name like l_name;
end;
/
12 changes: 12 additions & 0 deletions examples/remove_rooms_by_name/rooms.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
create table rooms (
room_key number primary key,
name varchar2(100)
);

create table room_contents (
contents_key number primary key,
room_key number,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit simpler:

room_key number references rooms(room_key),

name varchar2(100)
);

alter table room_contents add constraint fk_rooms foreign key (room_key) references rooms (room_key);
13 changes: 13 additions & 0 deletions examples/remove_rooms_by_name/run_remove_rooms_by_name_test.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@@rooms.sql
@@remove_rooms_by_name.sql
@@test_remove_rooms_by_name.pkg

set serveroutput on size unlimited format truncated

exec ut.run(user||'.test_remove_rooms_by_name',ut_documentation_reporter());

drop package test_remove_rooms_by_name;
drop procedure remove_rooms_by_name;
drop table room_contents;
drop table rooms;

Loading