From 3a699b23a04962cf8d383e62c43702c45e5f4286 Mon Sep 17 00:00:00 2001 From: jvelilla Date: Mon, 15 Sep 2014 23:27:11 -0300 Subject: [PATCH] Refactor persistence library. Added a persistence speficication cluster and implementation cluser, Implementation MySQL. Added test cases for mysql implementation. --- api/roc_api.ecf | 2 +- .../mysql/persistence_mysql.ecf} | 9 ++- .../mysql}/scripts/Readme.txt | 0 .../mysql}/scripts/create_database.sql | 4 +- .../mysql}/scripts/tables.sql | 0 .../mysql}/src/cms_storage_mysql.e | 0 .../src/database/data_parameters_names.e | 0 .../mysql}/src/database/database_config.e | 0 .../mysql}/src/database/database_connection.e | 0 .../src/database/database_connection_mysql.e | 0 .../src/database/database_connection_null.e | 0 .../mysql}/src/database/database_handler.e | 0 .../src/database/database_handler_impl.e | 0 .../src/database/database_iteration_cursor.e | 0 .../mysql}/src/database/database_null.e | 0 .../mysql}/src/database/database_query.e | 0 .../database/database_sql_server_encoder.e | 0 .../src/database/database_store_procedure.e | 0 .../src/database/parameter_name_helper.e | 0 .../mysql}/src/model/cms_node.e | 0 .../mysql}/src/model/cms_user.e | 0 .../mysql}/src/provider/node_data_provider.e | 0 .../mysql}/src/provider/user_data_provider.e | 0 .../mysql}/src/security/security_provider.e | 0 .../mysql}/src/string_helper.e | 0 .../mysql}/tests/application.e | 0 .../mysql/tests/nodes/node_test_set.e | 26 +++++++ .../mysql}/tests/tests.ecf | 2 +- .../mysql/tests/users/user_test_set.e | 78 +++++++++++++++++++ .../mysql/tests/util/abstract_db_test.e | 17 ++++ .../mysql/tests/util/clean_db.e | 66 ++++++++++++++++ persistence/{src => interface}/cms_storage.e | 0 32 files changed, 196 insertions(+), 8 deletions(-) rename persistence/{persistence.ecf => implementation/mysql/persistence_mysql.ecf} (81%) rename persistence/{ => implementation/mysql}/scripts/Readme.txt (100%) rename persistence/{ => implementation/mysql}/scripts/create_database.sql (97%) rename persistence/{ => implementation/mysql}/scripts/tables.sql (100%) rename persistence/{ => implementation/mysql}/src/cms_storage_mysql.e (100%) rename persistence/{ => implementation/mysql}/src/database/data_parameters_names.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_config.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_connection.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_connection_mysql.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_connection_null.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_handler.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_handler_impl.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_iteration_cursor.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_null.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_query.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_sql_server_encoder.e (100%) rename persistence/{ => implementation/mysql}/src/database/database_store_procedure.e (100%) rename persistence/{ => implementation/mysql}/src/database/parameter_name_helper.e (100%) rename persistence/{ => implementation/mysql}/src/model/cms_node.e (100%) rename persistence/{ => implementation/mysql}/src/model/cms_user.e (100%) rename persistence/{ => implementation/mysql}/src/provider/node_data_provider.e (100%) rename persistence/{ => implementation/mysql}/src/provider/user_data_provider.e (100%) rename persistence/{ => implementation/mysql}/src/security/security_provider.e (100%) rename persistence/{ => implementation/mysql}/src/string_helper.e (100%) rename persistence/{ => implementation/mysql}/tests/application.e (100%) create mode 100644 persistence/implementation/mysql/tests/nodes/node_test_set.e rename persistence/{ => implementation/mysql}/tests/tests.ecf (93%) create mode 100644 persistence/implementation/mysql/tests/users/user_test_set.e create mode 100644 persistence/implementation/mysql/tests/util/abstract_db_test.e create mode 100644 persistence/implementation/mysql/tests/util/clean_db.e rename persistence/{src => interface}/cms_storage.e (100%) diff --git a/api/roc_api.ecf b/api/roc_api.ecf index abec5e6..ab56bd2 100644 --- a/api/roc_api.ecf +++ b/api/roc_api.ecf @@ -16,7 +16,7 @@ - + diff --git a/persistence/persistence.ecf b/persistence/implementation/mysql/persistence_mysql.ecf similarity index 81% rename from persistence/persistence.ecf rename to persistence/implementation/mysql/persistence_mysql.ecf index e3b2f16..c3190a8 100644 --- a/persistence/persistence.ecf +++ b/persistence/implementation/mysql/persistence_mysql.ecf @@ -1,6 +1,6 @@ - - + + diff --git a/persistence/scripts/Readme.txt b/persistence/implementation/mysql/scripts/Readme.txt similarity index 100% rename from persistence/scripts/Readme.txt rename to persistence/implementation/mysql/scripts/Readme.txt diff --git a/persistence/scripts/create_database.sql b/persistence/implementation/mysql/scripts/create_database.sql similarity index 97% rename from persistence/scripts/create_database.sql rename to persistence/implementation/mysql/scripts/create_database.sql index 06d4fd0..55dffb4 100644 --- a/persistence/scripts/create_database.sql +++ b/persistence/implementation/mysql/scripts/create_database.sql @@ -12,7 +12,7 @@ USE `cms` ; -- Table `cms`.`nodes` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `cms`.`nodes` ( - `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT, + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `publication_date` DATE NOT NULL, `creation_date` DATE NOT NULL, `modification_date` DATE NOT NULL, @@ -59,7 +59,7 @@ DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `cms`.`users_nodes` ( `users_id` INT(10) UNSIGNED NOT NULL, - `nodes_id` SMALLINT(5) UNSIGNED NOT NULL, + `nodes_id` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`users_id`, `nodes_id`), INDEX `fk_users_has_nodes_nodes1_idx` (`nodes_id` ASC), INDEX `fk_users_has_nodes_users_idx` (`users_id` ASC), diff --git a/persistence/scripts/tables.sql b/persistence/implementation/mysql/scripts/tables.sql similarity index 100% rename from persistence/scripts/tables.sql rename to persistence/implementation/mysql/scripts/tables.sql diff --git a/persistence/src/cms_storage_mysql.e b/persistence/implementation/mysql/src/cms_storage_mysql.e similarity index 100% rename from persistence/src/cms_storage_mysql.e rename to persistence/implementation/mysql/src/cms_storage_mysql.e diff --git a/persistence/src/database/data_parameters_names.e b/persistence/implementation/mysql/src/database/data_parameters_names.e similarity index 100% rename from persistence/src/database/data_parameters_names.e rename to persistence/implementation/mysql/src/database/data_parameters_names.e diff --git a/persistence/src/database/database_config.e b/persistence/implementation/mysql/src/database/database_config.e similarity index 100% rename from persistence/src/database/database_config.e rename to persistence/implementation/mysql/src/database/database_config.e diff --git a/persistence/src/database/database_connection.e b/persistence/implementation/mysql/src/database/database_connection.e similarity index 100% rename from persistence/src/database/database_connection.e rename to persistence/implementation/mysql/src/database/database_connection.e diff --git a/persistence/src/database/database_connection_mysql.e b/persistence/implementation/mysql/src/database/database_connection_mysql.e similarity index 100% rename from persistence/src/database/database_connection_mysql.e rename to persistence/implementation/mysql/src/database/database_connection_mysql.e diff --git a/persistence/src/database/database_connection_null.e b/persistence/implementation/mysql/src/database/database_connection_null.e similarity index 100% rename from persistence/src/database/database_connection_null.e rename to persistence/implementation/mysql/src/database/database_connection_null.e diff --git a/persistence/src/database/database_handler.e b/persistence/implementation/mysql/src/database/database_handler.e similarity index 100% rename from persistence/src/database/database_handler.e rename to persistence/implementation/mysql/src/database/database_handler.e diff --git a/persistence/src/database/database_handler_impl.e b/persistence/implementation/mysql/src/database/database_handler_impl.e similarity index 100% rename from persistence/src/database/database_handler_impl.e rename to persistence/implementation/mysql/src/database/database_handler_impl.e diff --git a/persistence/src/database/database_iteration_cursor.e b/persistence/implementation/mysql/src/database/database_iteration_cursor.e similarity index 100% rename from persistence/src/database/database_iteration_cursor.e rename to persistence/implementation/mysql/src/database/database_iteration_cursor.e diff --git a/persistence/src/database/database_null.e b/persistence/implementation/mysql/src/database/database_null.e similarity index 100% rename from persistence/src/database/database_null.e rename to persistence/implementation/mysql/src/database/database_null.e diff --git a/persistence/src/database/database_query.e b/persistence/implementation/mysql/src/database/database_query.e similarity index 100% rename from persistence/src/database/database_query.e rename to persistence/implementation/mysql/src/database/database_query.e diff --git a/persistence/src/database/database_sql_server_encoder.e b/persistence/implementation/mysql/src/database/database_sql_server_encoder.e similarity index 100% rename from persistence/src/database/database_sql_server_encoder.e rename to persistence/implementation/mysql/src/database/database_sql_server_encoder.e diff --git a/persistence/src/database/database_store_procedure.e b/persistence/implementation/mysql/src/database/database_store_procedure.e similarity index 100% rename from persistence/src/database/database_store_procedure.e rename to persistence/implementation/mysql/src/database/database_store_procedure.e diff --git a/persistence/src/database/parameter_name_helper.e b/persistence/implementation/mysql/src/database/parameter_name_helper.e similarity index 100% rename from persistence/src/database/parameter_name_helper.e rename to persistence/implementation/mysql/src/database/parameter_name_helper.e diff --git a/persistence/src/model/cms_node.e b/persistence/implementation/mysql/src/model/cms_node.e similarity index 100% rename from persistence/src/model/cms_node.e rename to persistence/implementation/mysql/src/model/cms_node.e diff --git a/persistence/src/model/cms_user.e b/persistence/implementation/mysql/src/model/cms_user.e similarity index 100% rename from persistence/src/model/cms_user.e rename to persistence/implementation/mysql/src/model/cms_user.e diff --git a/persistence/src/provider/node_data_provider.e b/persistence/implementation/mysql/src/provider/node_data_provider.e similarity index 100% rename from persistence/src/provider/node_data_provider.e rename to persistence/implementation/mysql/src/provider/node_data_provider.e diff --git a/persistence/src/provider/user_data_provider.e b/persistence/implementation/mysql/src/provider/user_data_provider.e similarity index 100% rename from persistence/src/provider/user_data_provider.e rename to persistence/implementation/mysql/src/provider/user_data_provider.e diff --git a/persistence/src/security/security_provider.e b/persistence/implementation/mysql/src/security/security_provider.e similarity index 100% rename from persistence/src/security/security_provider.e rename to persistence/implementation/mysql/src/security/security_provider.e diff --git a/persistence/src/string_helper.e b/persistence/implementation/mysql/src/string_helper.e similarity index 100% rename from persistence/src/string_helper.e rename to persistence/implementation/mysql/src/string_helper.e diff --git a/persistence/tests/application.e b/persistence/implementation/mysql/tests/application.e similarity index 100% rename from persistence/tests/application.e rename to persistence/implementation/mysql/tests/application.e diff --git a/persistence/implementation/mysql/tests/nodes/node_test_set.e b/persistence/implementation/mysql/tests/nodes/node_test_set.e new file mode 100644 index 0000000..b7146ee --- /dev/null +++ b/persistence/implementation/mysql/tests/nodes/node_test_set.e @@ -0,0 +1,26 @@ +note + description: "[ + Eiffel tests that can be executed by testing tool. + ]" + author: "EiffelStudio test wizard" + date: "$Date$" + revision: "$Revision$" + testing: "type/manual" + +class + NODE_TEST_SET + +inherit + EQA_TEST_SET + +feature -- Test routines + + new_test_routine + -- New test routine + do + assert ("not_implemented", False) + end + +end + + diff --git a/persistence/tests/tests.ecf b/persistence/implementation/mysql/tests/tests.ecf similarity index 93% rename from persistence/tests/tests.ecf rename to persistence/implementation/mysql/tests/tests.ecf index 30118d7..cf85bf2 100644 --- a/persistence/tests/tests.ecf +++ b/persistence/implementation/mysql/tests/tests.ecf @@ -8,7 +8,7 @@ - + diff --git a/persistence/implementation/mysql/tests/users/user_test_set.e b/persistence/implementation/mysql/tests/users/user_test_set.e new file mode 100644 index 0000000..6b06e9f --- /dev/null +++ b/persistence/implementation/mysql/tests/users/user_test_set.e @@ -0,0 +1,78 @@ +note + description: "[ + Eiffel tests that can be executed by testing tool. + ]" + author: "EiffelStudio test wizard" + date: "$Date$" + revision: "$Revision$" + testing: "type/manual" + +class + USER_TEST_SET + +inherit + EQA_TEST_SET + redefine + on_prepare, + on_clean + select + default_create + end + ABSTRACT_DB_TEST + rename + default_create as default_db_test + end + + +feature {NONE} -- Events + + on_prepare + -- + do + (create {CLEAN_DB}).clean_db(connection) + user_provider.new_user ("admin", "admin","admin@admin.com") + end + + on_clean + -- + do + end + +feature -- Test routines + + test_user_exist + -- User admin exist + do + assert ("Not void", attached user_provider.user_by_email ("admin@admin.com")) + assert ("Not void", attached user_provider.user (1)) + assert ("Not void", attached user_provider.user_by_name ("admin")) + end + + test_user_not_exist + -- Uset test does not exist. + do + assert ("Void", user_provider.user_by_email ("test@admin.com") = Void) + assert ("Void", user_provider.user(2) = Void ) + assert ("Void", user_provider.user_by_name ("test") = Void) + end + + test_new_user + do + user_provider.new_user ("test", "test","test@admin.com") + assert ("Not void", attached user_provider.user_by_email ("test@admin.com")) + assert ("Not void", attached user_provider.user (2)) + assert ("Not void", attached user_provider.user (2) as l_user and then l_user.id = 2 and then l_user.name ~ "test") + assert ("Not void", attached user_provider.user_by_name ("test")) + end + + +feature {NONE} -- Implementation + + user_provider: USER_DATA_PROVIDER + -- user provider. + once + create Result.make (connection) + end +end + + diff --git a/persistence/implementation/mysql/tests/util/abstract_db_test.e b/persistence/implementation/mysql/tests/util/abstract_db_test.e new file mode 100644 index 0000000..0e23859 --- /dev/null +++ b/persistence/implementation/mysql/tests/util/abstract_db_test.e @@ -0,0 +1,17 @@ +note + description: "Summary description for {ABSTRACT_DB_TEST}." + date: "$Date$" + revision: "$Revision$" + +class + ABSTRACT_DB_TEST + + +feature -- Database connection + + connection: DATABASE_CONNECTION_MYSQL + -- MYSQL database connection + once + create Result.login_with_schema ("cms_dev", "root", "") + end +end diff --git a/persistence/implementation/mysql/tests/util/clean_db.e b/persistence/implementation/mysql/tests/util/clean_db.e new file mode 100644 index 0000000..ef00839 --- /dev/null +++ b/persistence/implementation/mysql/tests/util/clean_db.e @@ -0,0 +1,66 @@ +note + description: "[ + Setting up database tests + 1. Put the database in a known state before running your test suite. + 2. Data reinitialization. For testing in developer sandboxes, something that you should do every time you rebuild the system, you may want to forgo dropping and rebuilding the database in favor of simply reinitializing the source data. + You can do this either by erasing all existing data and then inserting the initial data vales back into the database, or you can simple run updates to reset the data values. + The first approach is less risky and may even be faster for large amounts of data. - See more at: http://www.agiledata.org/essays/databaseTesting.html#sthash.6yVp35g8.dpuf + ]" + + date: "$Date$" + revision: "$Revision$" + EIS: "name=Database Testing", "src=http://www.agiledata.org/essays/databaseTesting.html", "protocol=uri" + +class + CLEAN_DB + +feature + + clean_db (a_connection: DATABASE_CONNECTION) + -- Clean db test. + local + l_parameters: STRING_TABLE[STRING] + do + create l_parameters.make (0) + + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_nodes, l_parameters)) + db_handler(a_connection).execute_change + + -- Clean Users + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_users, l_parameters)) + db_handler(a_connection).execute_change + + -- Reset Autoincremente + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Rest_users_autoincrement, l_parameters)) + db_handler(a_connection).execute_change + + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Rest_nodes_autoincrement, l_parameters)) + db_handler(a_connection).execute_change + end + + + +feature -- Database Hanlder + + db_handler (a_connection: DATABASE_CONNECTION): DATABASE_HANDLER + -- Db handler + once + create {DATABASE_HANDLER_IMPL} Result.make (a_connection) + end + + +feature -- Sql delete queries + + Sql_delete_users: STRING = "delete from Users" + -- Clean Users. + + Sql_delete_nodes: STRING = "delete from Nodes" + -- Clean Nodes. + + Rest_users_autoincrement: STRING = "ALTER TABLE Users AUTO_INCREMENT = 1" + -- reset autoincrement + + Rest_nodes_autoincrement: STRING = "ALTER TABLE Nodes AUTO_INCREMENT = 1" + -- reset autoincrement. + +end diff --git a/persistence/src/cms_storage.e b/persistence/interface/cms_storage.e similarity index 100% rename from persistence/src/cms_storage.e rename to persistence/interface/cms_storage.e