From fef64ae28cca7974c6690bf24b769cff33bfabd4 Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Tue, 7 Nov 2023 21:23:50 +0100 Subject: [PATCH] Add tests for aliased connections --- test/Aliases_SQLite3_DB_Tests.robot | 55 -------- test/resources/common.resource | 7 +- .../common_tests/aliased_connection.robot | 129 ++++++++++++++++++ 3 files changed, 134 insertions(+), 57 deletions(-) delete mode 100644 test/Aliases_SQLite3_DB_Tests.robot create mode 100644 test/tests/common_tests/aliased_connection.robot diff --git a/test/Aliases_SQLite3_DB_Tests.robot b/test/Aliases_SQLite3_DB_Tests.robot deleted file mode 100644 index 40d7d725..00000000 --- a/test/Aliases_SQLite3_DB_Tests.robot +++ /dev/null @@ -1,55 +0,0 @@ -*** Settings *** -Library DatabaseLibrary -Library OperatingSystem -Force Tags main db smoke - -*** Variables *** -${DBName1} my_db_test1 -${DBName2} my_db_test2 - -*** Keywords *** -Remove DB file if exists - [Arguments] ${DB_FILE} - Run Keyword And Ignore Error Remove File ${DB_FILE} - File Should Not Exist ${DB_FILE} - Comment Sleep 1s - -*** Test Cases *** -Remove old DB if exists - Remove DB file if exists ${CURDIR}/${DBName1}.db - Remove DB file if exists ${CURDIR}/${DBName2}.db - -Connect to SQLiteDB - Comment Connect To Database Using Custom Params sqlite3 database='path_to_dbfile\dbname.db' - Connect To Database Using Custom Params sqlite3 database="${CURDIR}/${DBName1}.db", isolation_level=None alias=db1 - Connect To Database Using Custom Params sqlite3 database="${CURDIR}/${DBName2}.db", isolation_level=None alias=db2 - -Create person table - ${output} = Execute SQL String CREATE TABLE person (id integer unique,first_name varchar,last_name varchar); alias=db2 - Log ${output} - Should Be Equal As Strings ${output} None - -Create foobar table - ${output} = Execute SQL String create table foobar (id integer primary key, firstname varchar unique) alias=db1 - Log ${output} - Should Be Equal As Strings ${output} None - -Table Must Exist - person - Table Must Exist person alias=db2 - -Table Shouldn't Exist - person - Run Keyword And Expect Error Table 'person' does not exist in the db Table Must Exist person alias=db1 - -Table Shouldn't Exist - foobar - Run Keyword And Expect Error Table 'foobar' does not exist in the db Table Must Exist foobar alias=db2 - -Switch database without alias - Switch Database db2 - Table Must Exist person - Run Keyword And Expect Error Table 'foobar' does not exist in the db Table Must Exist foobar - -Disconnect from database db1 - Disconnect From Database alias=db1 - -Disconnect from all databases - Disconnect From All Databases diff --git a/test/resources/common.resource b/test/resources/common.resource index 6b78a1be..6f6cc170 100644 --- a/test/resources/common.resource +++ b/test/resources/common.resource @@ -24,13 +24,14 @@ ${DB_DRIVER} ODBC Driver 18 for SQL Server Connect To DB [Documentation] Connects to the database based on the current DB module under test ... and connection params set in global variables + [Arguments] ${alias}=${None} IF "${DB_MODULE_MODE}" == "custom" IF "${DB_MODULE}" == "sqlite3" Remove File ${DBName}.db - Connect To Database Using Custom Params sqlite3 database="./${DBName}.db", isolation_level=None + Connect To Database Using Custom Params sqlite3 database="./${DBName}.db", isolation_level=None alias=${alias} ELSE ${Connection String}= Build Connection String - Connect To Database Using Custom Connection String ${DB_MODULE} ${Connection String} + Connect To Database Using Custom Connection String ${DB_MODULE} ${Connection String} alias=${alias} END ELSE IF "${DB_MODULE_MODE}" == "standard" IF "${DB_MODULE}" == "pyodbc" @@ -42,6 +43,7 @@ Connect To DB ... ${DB_HOST} ... ${DB_PORT} ... dbDriver=${DB_DRIVER} + ... alias=${alias} ELSE Connect To Database ... ${DB_MODULE} @@ -50,6 +52,7 @@ Connect To DB ... ${DB_PASS} ... ${DB_HOST} ... ${DB_PORT} + ... alias=${alias} END ELSE Fail Unexpected mode - ${DB_MODULE_MODE} diff --git a/test/tests/common_tests/aliased_connection.robot b/test/tests/common_tests/aliased_connection.robot new file mode 100644 index 00000000..dd5c5b04 --- /dev/null +++ b/test/tests/common_tests/aliased_connection.robot @@ -0,0 +1,129 @@ +*** Settings *** +Resource ../../resources/common.resource +Suite Setup Run Keywords +... Connect To DB +... AND +... Create Person Table +Suite Teardown Run Keywords +... Connect To DB +... AND +... Drop Tables Person And Foobar +Test Teardown Disconnect From All Databases + + +*** Test Cases *** +Connections Can Be Aliased + Connect To DB # default alias + Connect To DB alias=second + +Default Alias Can Be Empty + Connect To DB # default alias + Query SELECT * FROM person + Connect To DB alias=second + Query SELECT * FROM person + Query SELECT * FROM person alias=second + +Switch From Default And Disconnect + Connect To DB # default alias + Connect To DB alias=second + Switch Database second + Query SELECT * FROM person # query with 'second' connection + Disconnect From Database alias=second + Query SELECT * FROM person # query with 'default' connection + +Disconnect Not Existing Alias + Connect To DB # default alias + Disconnect From Database alias=idontexist # silent warning + Run Keyword And Expect Error No open database connection to close + ... Disconnect From Database alias=idontexist error_if_no_connection=${True} + # default alias exist and can be closed + Disconnect From Database error_if_no_connection=${True} + +Switch Not Existing Alias + Run Keyword And Expect Error Non-existing index or alias 'second' + ... Switch Database second + +Execute SQL Script - Insert Data In Person table + Connect To DB alias=aliased_conn + ${output}= Execute SQL Script ${CURDIR}/insert_data_in_person_table.sql alias=aliased_conn + Should Be Equal As Strings ${output} None + +Check If Exists In DB - Franz Allan + Connect To DB alias=aliased_conn + Check If Exists In Database SELECT id FROM person WHERE FIRST_NAME= 'Franz Allan' alias=aliased_conn + +Check If Not Exists In DB - Joe + Connect To DB alias=aliased_conn + Check If Not Exists In Database SELECT id FROM person WHERE FIRST_NAME= 'Joe' alias=aliased_conn + +Table Must Exist - person + Connect To DB alias=aliased_conn + Table Must Exist person alias=aliased_conn + +Verify Row Count is 0 + Connect To DB alias=aliased_conn + Row Count is 0 SELECT * FROM person WHERE FIRST_NAME= 'NotHere' alias=aliased_conn + +Verify Row Count is Equal to X + Connect To DB alias=aliased_conn + Row Count is Equal to X SELECT id FROM person 2 alias=aliased_conn + +Verify Row Count is Less Than X + Connect To DB alias=aliased_conn + Row Count is Less Than X SELECT id FROM person 3 alias=aliased_conn + +Verify Row Count is Greater Than X + Connect To DB alias=aliased_conn + Row Count is Greater Than X SELECT * FROM person 1 alias=aliased_conn + +Retrieve Row Count + Connect To DB alias=aliased_conn + ${output}= Row Count SELECT id FROM person alias=aliased_conn + Log ${output} + Should Be Equal As Strings ${output} 2 + +Retrieve records from person table + Connect To DB alias=aliased_conn + ${output}= Execute SQL String SELECT * FROM person + Log ${output} + Should Be Equal As Strings ${output} None + +Verify Query - Row Count person table + ${output}= Query SELECT COUNT(*) FROM person + Log ${output} + Should Be Equal As Integers ${output}[0][0] 2 + +Verify Query - Get results as a list of dictionaries + Connect To DB alias=aliased_conn + ${output}= Query SELECT * FROM person returnAsDict=True alias=aliased_conn + Log ${output} + # some databases lower field names and you can't do anything about it + TRY + ${value 1}= Get From Dictionary ${output}[0] FIRST_NAME + EXCEPT Dictionary does not contain key 'FIRST_NAME'. + ${value 1}= Get From Dictionary ${output}[0] first_name + END + TRY + ${value 2}= Get From Dictionary ${output}[1] FIRST_NAME + EXCEPT Dictionary does not contain key 'FIRST_NAME'. + ${value 2}= Get From Dictionary ${output}[1] first_name + END + Should Be Equal As Strings ${value 1} Franz Allan + Should Be Equal As Strings ${value 2} Jerry + +Verify Delete All Rows From Table + Connect To DB alias=aliased_conn + Delete All Rows From Table person alias=aliased_conn + Row Count Is 0 SELECT * FROM foobar alias=aliased_conn + + + +*** Keywords *** +Aliases Suite Setup + Connect To DB + Create Person Table + +Aliases Suite Teardown + Connect To DB + Drop Tables Person And Foobar + Disconnect From All Databases