diff --git a/.travis/push_release_version.sh b/.travis/push_release_version.sh index 43ca773d8..082359af4 100755 --- a/.travis/push_release_version.sh +++ b/.travis/push_release_version.sh @@ -9,6 +9,7 @@ if [ "${TRAVIS_REPO_SLUG}" = "${UTPLSQL_REPO}" ] && [ "$TRAVIS_PULL_REQUEST" == git add sonar-project.properties git add VERSION git add source/* + git add docs/* git commit -m 'Updated project version after build [skip ci]' echo "Pushing to origin" git push --quiet origin HEAD:${CURRENT_BRANCH} diff --git a/VERSION b/VERSION index 6eef43b75..ed530b3a7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v3.1.4 +v3.1.5 diff --git a/docs/about/authors.md b/docs/about/authors.md index cb3463d25..74f294701 100644 --- a/docs/about/authors.md +++ b/docs/about/authors.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) ### utPLSQL v3 Major Contributors diff --git a/docs/about/license.md b/docs/about/license.md index 66212bb2e..193e46c03 100644 --- a/docs/about/license.md +++ b/docs/about/license.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Version Information diff --git a/docs/about/project-details.md b/docs/about/project-details.md index 1b38f3d5f..4126baeb5 100644 --- a/docs/about/project-details.md +++ b/docs/about/project-details.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # utPLSQL Project Details diff --git a/docs/about/support.md b/docs/about/support.md index 2ee94a403..e774552c8 100644 --- a/docs/about/support.md +++ b/docs/about/support.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # How to get support diff --git a/docs/index.md b/docs/index.md index dbea7b8a5..00c62767d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Introduction to utPLSQL diff --git a/docs/userguide/advanced_data_comparison.md b/docs/userguide/advanced_data_comparison.md index 959be9d52..7bf15f123 100644 --- a/docs/userguide/advanced_data_comparison.md +++ b/docs/userguide/advanced_data_comparison.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Advanced data comparison diff --git a/docs/userguide/annotations.md b/docs/userguide/annotations.md index 1c7ca5f87..3bc2b7456 100644 --- a/docs/userguide/annotations.md +++ b/docs/userguide/annotations.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Annotations diff --git a/docs/userguide/best-practices.md b/docs/userguide/best-practices.md index b216d1fcd..c2ed2cd8d 100644 --- a/docs/userguide/best-practices.md +++ b/docs/userguide/best-practices.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Best Practices diff --git a/docs/userguide/coverage.md b/docs/userguide/coverage.md index 09c3184e5..a4de33f7e 100644 --- a/docs/userguide/coverage.md +++ b/docs/userguide/coverage.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Coverage utPLSQL comes with a built-in coverage reporting engine. The code coverage reporting is based on the DBMS_PROFILER package provided with Oracle database. diff --git a/docs/userguide/exception-reporting.md b/docs/userguide/exception-reporting.md index 3670d9ae3..522a858db 100644 --- a/docs/userguide/exception-reporting.md +++ b/docs/userguide/exception-reporting.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Exception handling and reporting diff --git a/docs/userguide/expectations.md b/docs/userguide/expectations.md index 5d10492b8..e64bbe2f8 100644 --- a/docs/userguide/expectations.md +++ b/docs/userguide/expectations.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Expectation concepts Validation of the code under test (the tested logic of procedure/function etc.) is performed by comparing the actual data against the expected data. diff --git a/docs/userguide/getting-started.md b/docs/userguide/getting-started.md index a8c2225fd..15a0ee039 100644 --- a/docs/userguide/getting-started.md +++ b/docs/userguide/getting-started.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Getting started with TDD and utPLSQL diff --git a/docs/userguide/install.md b/docs/userguide/install.md index 9b886ebc7..547a51a1e 100644 --- a/docs/userguide/install.md +++ b/docs/userguide/install.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Downloading latest version of utPLSQL diff --git a/docs/userguide/querying_suites.md b/docs/userguide/querying_suites.md index de3e0e870..9441386df 100644 --- a/docs/userguide/querying_suites.md +++ b/docs/userguide/querying_suites.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Qyerying for test suites diff --git a/docs/userguide/reporters.md b/docs/userguide/reporters.md index cdba72993..4d340dd78 100644 --- a/docs/userguide/reporters.md +++ b/docs/userguide/reporters.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) utPLSQL provides the following reporting formats. diff --git a/docs/userguide/running-unit-tests.md b/docs/userguide/running-unit-tests.md index 174998112..8985cad7a 100644 --- a/docs/userguide/running-unit-tests.md +++ b/docs/userguide/running-unit-tests.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Running tests diff --git a/docs/userguide/upgrade.md b/docs/userguide/upgrade.md index 1eaae311d..7c0740c32 100644 --- a/docs/userguide/upgrade.md +++ b/docs/userguide/upgrade.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.4.2223--develop-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) # Upgrading from version 2 diff --git a/sonar-project.properties b/sonar-project.properties index 561dca071..84e767093 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.projectKey=utPLSQL # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1. sonar.projectName=utPLSQL -sonar.projectVersion=v3.1.4 +sonar.projectVersion=v3.1.5 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. @@ -19,6 +19,7 @@ sonar.projectDescription=PL/SQL Unit Testing Framework sonar.plsql.file.suffixes=sql,tab,pkb,tpb sonar.language=plsql + sonar.exclusions=create_synonyms_and_grants_for_public.sql, create_user_grants.sql, create_user_synonyms.sql, create_utplsql_owner.sql, define_ut3_owner_param.sql, install.sql, install_above_12_1.sql, install_component.sql, install_headless.sql, uninstall.sql, uninstall_all.sql, uninstall_coverage_tables.sql sonar.pullrequest.provider=github diff --git a/source/core/ut_utils.pks b/source/core/ut_utils.pks index 2f6ed7122..8d2ceef9b 100644 --- a/source/core/ut_utils.pks +++ b/source/core/ut_utils.pks @@ -21,7 +21,7 @@ create or replace package ut_utils authid definer is * */ - gc_version constant varchar2(50) := 'v3.1.4.2692'; + gc_version constant varchar2(50) := 'v3.1.5.2707'; subtype t_executable_type is varchar2(30); gc_before_all constant t_executable_type := 'beforeall'; diff --git a/source/create_synonyms_and_grants_for_public.sql b/source/create_synonyms_and_grants_for_public.sql index dcc940737..2535c25fc 100644 --- a/source/create_synonyms_and_grants_for_public.sql +++ b/source/create_synonyms_and_grants_for_public.sql @@ -107,6 +107,8 @@ grant select, insert, delete, update on &&ut3_owner..dbmspcc_units to public; grant execute on &&ut3_owner..ut_matcher_options to public; grant execute on &&ut3_owner..ut_matcher_options_items to public; grant execute on &&ut3_owner..ut_run_info to public; +grant execute on &&ut3_owner..ut_cursor_column_tab to public; +grant execute on &&ut3_owner..ut_cursor_details to public; prompt Creating synonyms for UTPLSQL objects in &&ut3_owner schema to PUBLIC @@ -167,3 +169,5 @@ create public synonym dbmspcc_blocks for &&ut3_owner..dbmspcc_blocks; create public synonym dbmspcc_runs for &&ut3_owner..dbmspcc_runs; create public synonym dbmspcc_units for &&ut3_owner..dbmspcc_units; create public synonym ut_run_info for &&ut3_owner..ut_run_info; +create public synonym ut_cursor_column_tab for &&ut3_owner..ut_cursor_column_tab; +create public synonym ut_cursor_details for &&ut3_owner..ut_cursor_details; diff --git a/source/create_user_grants.sql b/source/create_user_grants.sql index 032d75f6a..c0dbebcaf 100644 --- a/source/create_user_grants.sql +++ b/source/create_user_grants.sql @@ -126,4 +126,5 @@ grant select, insert, delete, update on &&ut3_owner..dbmspcc_units to &ut3_user; grant execute on &&ut3_owner..ut_matcher_options to &ut3_user; grant execute on &&ut3_owner..ut_matcher_options_items to &ut3_user; grant execute on &&ut3_owner..ut_run_info to &ut3_user; - +grant execute on &&ut3_owner..ut_cursor_column_tab to &ut3_user; +grant execute on &&ut3_owner..ut_cursor_details to &ut3_user; diff --git a/source/create_user_synonyms.sql b/source/create_user_synonyms.sql index b08cb7b0e..89d1736f8 100644 --- a/source/create_user_synonyms.sql +++ b/source/create_user_synonyms.sql @@ -109,3 +109,5 @@ create or replace synonym &ut3_user..dbmspcc_blocks for &&ut3_owner..dbmspcc_blo create or replace synonym &ut3_user..dbmspcc_runs for &&ut3_owner..dbmspcc_runs; create or replace synonym &ut3_user..dbmspcc_units for &&ut3_owner..dbmspcc_units; create or replace synonym &ut3_user..ut_run_info for &&ut3_owner..ut_run_info; +create or replace synonym &ut3_user..ut_cursor_column_tab for &&ut3_owner..ut_cursor_column_tab; +create or replace synonym &ut3_user..ut_cursor_details for &&ut3_owner..ut_cursor_details; \ No newline at end of file diff --git a/test/core/min_grant_user/test_min_grant_user.pkb b/test/core/min_grant_user/test_min_grant_user.pkb index aafa88fd0..f35bb4f74 100644 --- a/test/core/min_grant_user/test_min_grant_user.pkb +++ b/test/core/min_grant_user/test_min_grant_user.pkb @@ -1,15 +1,60 @@ -create or replace package body test_min_grant_user is - - procedure test_join_by_cursor is - l_results clob; - begin - execute immediate 'begin ut3$user#.test_cursor_grants.run(); end;'; - l_results := core.get_dbms_output_as_clob(); - --Assert - ut.expect( l_results ).to_be_like( '%execute join by test [% sec]' || - '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); - - end; - -end; -/ +create or replace package body test_min_grant_user is + + procedure test_join_by_cursor is + l_results clob; + begin + execute immediate 'begin ut3$user#.test_cursor_grants.run_test_join_by_cursor(); end;'; + l_results := core.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%execute join by test [% sec]' || + '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); + + end; + + procedure test_equal_cursor is + l_results clob; + begin + execute immediate 'begin ut3$user#.test_cursor_grants.run_test_equal_cursor(); end;'; + l_results := core.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%execute equal test [% sec]' || + '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); + + end; + + procedure test_not_empty_cursor is + l_results clob; + begin + execute immediate 'begin ut3$user#.test_cursor_grants.run_test_not_empty_cursor(); end;'; + l_results := core.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%execute not_empty test [% sec]' || + '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); + + end; + + + procedure test_have_count_cursor is + l_results clob; + begin + execute immediate 'begin ut3$user#.test_cursor_grants.run_test_have_count_cursor(); end;'; + l_results := core.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%execute have_count test [% sec]' || + '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); + + end; + + procedure test_empty_cursor is + l_results clob; + begin + execute immediate 'begin ut3$user#.test_cursor_grants.run_test_empty_cursor(); end;'; + l_results := core.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%execute empty test [% sec]' || + '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); + + end; + +end; +/ diff --git a/test/core/min_grant_user/test_min_grant_user.pks b/test/core/min_grant_user/test_min_grant_user.pks index 48c550f4c..82a2b014b 100644 --- a/test/core/min_grant_user/test_min_grant_user.pks +++ b/test/core/min_grant_user/test_min_grant_user.pks @@ -1,10 +1,22 @@ -create or replace package test_min_grant_user is - - --%suite(minimum grant user tests) - --%suitepath(utplsql.core) - - --%test(execute join by test) - procedure test_join_by_cursor; - -end; -/ +create or replace package test_min_grant_user is + + --%suite(minimum grant user tests) + --%suitepath(utplsql.core) + + --%test(execute join by test) + procedure test_join_by_cursor; + + --%test(execute equal test) + procedure test_equal_cursor; + + --%test(execute not_empty test) + procedure test_not_empty_cursor; + + --%test(execute have_count test) + procedure test_have_count_cursor; + + --%test(execute empty test) + procedure test_empty_cursor; + +end; +/ diff --git a/test/helpers/test_dummy_object.tps b/test/helpers/test_dummy_object.tps index 4305f73ce..79eed3e6e 100644 --- a/test/helpers/test_dummy_object.tps +++ b/test/helpers/test_dummy_object.tps @@ -13,4 +13,7 @@ create or replace type test_dummy_object as object ( "name" varchar2(30), "Value" varchar2(30) ) -/ \ No newline at end of file +/ + + +grant execute on test_dummy_object to ut3$user#; \ No newline at end of file diff --git a/test/helpers/test_dummy_object_list.tps b/test/helpers/test_dummy_object_list.tps index 67bba558e..e1dde66ed 100644 --- a/test/helpers/test_dummy_object_list.tps +++ b/test/helpers/test_dummy_object_list.tps @@ -1,2 +1,4 @@ create or replace type test_dummy_object_list as table of test_dummy_object / + +grant execute on test_dummy_object_list to ut3$user#; \ No newline at end of file diff --git a/test/helpers/ut3user#.test_cursor_grants.pkb b/test/helpers/ut3user#.test_cursor_grants.pkb index 481f23c84..2ed1ff919 100644 --- a/test/helpers/ut3user#.test_cursor_grants.pkb +++ b/test/helpers/ut3user#.test_cursor_grants.pkb @@ -1,23 +1,96 @@ -create or replace package body ut3$user#.test_cursor_grants is - - procedure run is - begin - ut3.ut.run('test_cursor_grants'); - end; - - procedure test_join_by_cursor is - l_actual SYS_REFCURSOR; - l_expected SYS_REFCURSOR; - begin - --Arrange - open l_actual for select owner, object_name,object_type from all_objects where owner = user - order by 1,2,3 asc; - open l_expected for select owner, object_name,object_type from all_objects where owner = user - order by 1,2,3 desc; - - --Act - ut3.ut.expect(l_actual).to_equal(l_expected).join_by('OWNER'); - - end; -end; -/ \ No newline at end of file +create or replace package body ut3$user#.test_cursor_grants is + + procedure run_test_join_by_cursor is + begin + ut3.ut.run('test_cursor_grants.test_join_by_cursor'); + end; + + procedure run_test_equal_cursor is + begin + ut3.ut.run('test_cursor_grants.test_equal_cursor'); + end; + + procedure run_test_not_empty_cursor is + begin + ut3.ut.run('test_cursor_grants.test_not_empty_cursor'); + end; + + procedure run_test_have_count_cursor is + begin + ut3.ut.run('test_cursor_grants.test_have_count_cursor'); + end; + + procedure run_test_empty_cursor is + begin + ut3.ut.run('test_cursor_grants.test_empty_cursor'); + end; + + procedure test_join_by_cursor is + l_actual SYS_REFCURSOR; + l_expected SYS_REFCURSOR; + begin + --Arrange + open l_actual for select owner, object_name,object_type from all_objects where owner = user + order by 1,2,3 asc; + open l_expected for select owner, object_name,object_type from all_objects where owner = user + order by 1,2,3 desc; + + --Act + ut3.ut.expect(l_actual).to_equal(l_expected).join_by('OBJECT_NAME,OBJECT_TYPE'); + + end; + + procedure test_equal_cursor is + l_actual SYS_REFCURSOR; + l_expected SYS_REFCURSOR; + l_list ut3_tester.test_dummy_object_list; + begin + --Arrange + open l_actual for select value(x) as item from table(l_list) x; + open l_expected for select value(x) as item from table(l_list) x; + + --Act + ut3.ut.expect(l_actual).to_equal(l_expected); + + end; + + procedure test_not_empty_cursor is + l_details_cur SYS_REFCURSOR; + l_expected ut3_tester.test_dummy_object_list; + begin + select ut3_tester.test_dummy_object( rn, 'Something '||rn, rn1) + bulk collect into l_expected + from (select rownum * case when mod(rownum,2) = 0 then -1 else 1 end rn, + rownum * case when mod(rownum,4) = 0 then -1 else 1 end rn1 + from dual connect by level <=10); + + --Arrange + open l_details_cur for + select value(x) as item from table(l_expected) x; + + --Act + ut3.ut.expect(l_details_cur).not_to_be_empty(); + end; + + procedure test_have_count_cursor is + l_expected SYS_REFCURSOR; + begin + --Arrange + open l_expected for + select value(x) as item from table(ut3_tester.test_dummy_object_list()) x; + + --Act + ut3.ut.expect(l_expected).to_have_count(0); + end; + + procedure test_empty_cursor is + l_expected SYS_REFCURSOR; + begin + open l_expected for + select value(x) as item from table(ut3_tester.test_dummy_object_list()) x; + --Act + ut3.ut.expect(l_expected).to_be_empty(); + end; + +end; +/ diff --git a/test/helpers/ut3user#.test_cursor_grants.pks b/test/helpers/ut3user#.test_cursor_grants.pks index 012b973c8..2ebb3d04a 100644 --- a/test/helpers/ut3user#.test_cursor_grants.pks +++ b/test/helpers/ut3user#.test_cursor_grants.pks @@ -1,9 +1,26 @@ -create or replace package ut3$user#.test_cursor_grants is - --%suite() - - procedure run; - - --%test(execute join by test) - procedure test_join_by_cursor; -end; -/ +create or replace package ut3$user#.test_cursor_grants is + --%suite() + + procedure run_test_join_by_cursor; + procedure run_test_equal_cursor; + procedure run_test_not_empty_cursor; + procedure run_test_have_count_cursor; + procedure run_test_empty_cursor; + + --%test(execute join by test) + procedure test_join_by_cursor; + + --%test(execute equal test) + procedure test_equal_cursor; + + --%test(execute not empty test) + procedure test_not_empty_cursor; + + --%test(execute have_count test) + procedure test_have_count_cursor; + + --%test(execute empty test) + procedure test_empty_cursor; + +end; +/