diff --git a/api/site/www/template/html/master2/site_navigation.tpl b/api/site/www/template/html/master2/site_navigation.tpl index caa4f0f..a75760c 100644 --- a/api/site/www/template/html/master2/site_navigation.tpl +++ b/api/site/www/template/html/master2/site_navigation.tpl @@ -7,8 +7,10 @@ diff --git a/persistence/implementation/common/model/cms_node.e b/persistence/implementation/common/model/cms_node.e index 2ac72af..3c63321 100644 --- a/persistence/implementation/common/model/cms_node.e +++ b/persistence/implementation/common/model/cms_node.e @@ -6,6 +6,10 @@ note class CMS_NODE +inherit + + REFACTORING_HELPER + create make @@ -21,6 +25,10 @@ feature{NONE} -- Initialization set_creation_date (l_time) set_modification_date (l_time) set_publication_date (l_time) + fixme ("Remove harcode format") + set_format ("HTML") + fixme ("Remove harcode content type") + set_content_type ("Page") ensure content_set: content = a_content summary_set: summary = a_summary @@ -48,10 +56,32 @@ feature -- Access -- When the node was published. publication_date_output: READABLE_STRING_32 + -- Formatted output. id: INTEGER_64 assign set_id -- Unique id. + format: READABLE_STRING_32 + -- Format associated with `body'. + -- For example: text, mediawiki, html, etc + + content_type: READABLE_STRING_32 + -- Associated content type name. + -- Page, Article, Blog, News, etc. + +feature -- status report + + has_id: BOOLEAN + do + Result := id > 0 + end + + author: detachable CMS_USER + -- Node's author. + + collaborators: detachable LIST[CMS_USER] + -- Node's collaborators. + feature -- Element change set_content (a_content: like content) @@ -103,6 +133,22 @@ feature -- Element change publication_date_assigned: publication_date = a_publication_date end + set_content_type (a_content_type: like content_type) + -- Assign `content_type' with `a_content_type'. + do + content_type := a_content_type + ensure + content_type_assigned: content_type = a_content_type + end + + set_format (a_format: like format) + -- Assign `format' with `a_format'. + do + format := a_format + ensure + format_assigned: format = a_format + end + set_id (an_id: like id) -- Assign `id' with `an_id'. do @@ -111,4 +157,25 @@ feature -- Element change id_assigned: id = an_id end + set_author (u: like author) + -- Assign 'author' with `u' + do + author := u + ensure + auther_set: author = u + end + + add_collaborator (a_user: CMS_USER) + -- Add collaborator `a_user' to the collaborators list. + local + lst: like collaborators + do + lst := collaborators + if lst = Void then + create {ARRAYED_SET [CMS_USER]} lst.make (1) + collaborators := lst + end + lst.force (a_user) + end + end diff --git a/persistence/implementation/common/model/cms_user.e b/persistence/implementation/common/model/cms_user.e index a0aa0cb..5bd836e 100644 --- a/persistence/implementation/common/model/cms_user.e +++ b/persistence/implementation/common/model/cms_user.e @@ -6,6 +6,10 @@ note class CMS_USER +inherit + + DEBUG_OUTPUT + create make @@ -15,6 +19,9 @@ feature {NONE} -- Initialization -- Create an object with name `a_name'. do name := a_name + create creation_date.make_now_utc + ensure + name_set: name = a_name end feature -- Access @@ -31,6 +38,48 @@ feature -- Access email: detachable READABLE_STRING_32 -- User email. + profile: detachable CMS_USER_PROFILE + -- User profile. + + creation_date: DATE_TIME + -- Creation date. + + last_login_date: detachable DATE_TIME + -- User last login. + + data: detachable STRING_TABLE [detachable ANY] + -- Additional user's data. + + data_item (k: READABLE_STRING_GENERAL): detachable ANY + -- Additional item data. + do + if attached data as l_data then + Result := l_data.item (k) + end + end + +feature -- Status report + + has_id: BOOLEAN + do + Result := id > 0 + end + + has_email: BOOLEAN + do + Result := attached email as e and then not e.is_empty + end + + debug_output: STRING + do + Result := name + end + + same_as (u: detachable CMS_USER): BOOLEAN + do + Result := u /= Void and then id = u.id + end + feature -- Change element set_id (a_id: like id) @@ -65,4 +114,53 @@ feature -- Change element email_set: email = m end + set_profile (prof: like profile) + -- Set `profile' with `prof'. + do + profile := prof + ensure + profile_set: profile = prof + end + + set_data_item (k: READABLE_STRING_GENERAL; d: like data_item) + local + l_data: like data + do + l_data := data + if l_data = Void then + create l_data.make (1) + data := l_data + end + l_data.force (d, k) + end + + remove_data_item (k: READABLE_STRING_GENERAL) + do + if attached data as l_data then + l_data.remove (k) + end + end + + set_profile_item (k: READABLE_STRING_8; v: READABLE_STRING_8) + local + prof: like profile + do + prof := profile + if prof = Void then + create prof.make + profile := prof + end + prof.force (v, k) + end + + set_last_login_date (dt: like last_login_date) + do + last_login_date := dt + end + + set_last_login_date_now + do + set_last_login_date (create {DATE_TIME}.make_now_utc) + end + end diff --git a/persistence/implementation/common/model/cms_user_profile.e b/persistence/implementation/common/model/cms_user_profile.e new file mode 100644 index 0000000..878ce38 --- /dev/null +++ b/persistence/implementation/common/model/cms_user_profile.e @@ -0,0 +1,48 @@ +note + description: "Summary description for {CMS_USER_PROFILE}." + date: "$Date$" + revision: "$Revision$" + +class + CMS_USER_PROFILE + +inherit + TABLE_ITERABLE [READABLE_STRING_8, READABLE_STRING_8] + +create + make + +feature {NONE} -- Initialization + + make + do + create items.make (0) + end + +feature -- Access + + item (k: READABLE_STRING_8): detachable READABLE_STRING_8 + do + Result := items.item (k.as_string_8) + end + +feature -- Change + + force (v: READABLE_STRING_8; k: READABLE_STRING_8) + do + items.force (v, k.as_string_8) + end + +feature -- Access + + new_cursor: TABLE_ITERATION_CURSOR [READABLE_STRING_8, READABLE_STRING_8] + -- Fresh cursor associated with current structure + do + Result := items.new_cursor + end + +feature {NONE} -- Implementation + + items: HASH_TABLE [READABLE_STRING_8, STRING_8] + +end diff --git a/persistence/implementation/common/model/cms_user_role.e b/persistence/implementation/common/model/cms_user_role.e new file mode 100644 index 0000000..48f18ca --- /dev/null +++ b/persistence/implementation/common/model/cms_user_role.e @@ -0,0 +1,90 @@ +note + description: "Summary description for {CMS_USER_ROLE}." + date: "$Date$" + revision: "$Revision$" + +class + CMS_USER_ROLE + +inherit + ANY + redefine + is_equal + end + +create + make, + make_with_id + +feature {NONE} -- Initialization + + make_with_id (a_id: like id; a_name: like name) + do + id := a_id + make (a_name) + end + + make (a_name: like name) + do + name := a_name + create {ARRAYED_LIST [READABLE_STRING_8]} permissions.make (0) + end + +feature -- Status report + + has_id: BOOLEAN + do + Result := id > 0 + end + + has_permission (p: READABLE_STRING_8): BOOLEAN + do + Result := across permissions as c some c.item.is_case_insensitive_equal (p) end + end + +feature -- Access + + id: INTEGER + + name: READABLE_STRING_8 + + permissions: LIST [READABLE_STRING_8] + +feature -- Comparison + + same_user_role (r: CMS_USER_ROLE): BOOLEAN + do + Result := r.id = id + end + + is_equal (other: like Current): BOOLEAN + -- Is `other' attached to an object considered + -- equal to current object? + do + Result := id = other.id + end + +feature -- Change + + set_id (a_id: like id) + -- Set `id' with `a_id'. + do + id := a_id + ensure + set_id: id = a_id + end + + set_name (a_name: like name) + -- Set `name' with `a_name'. + do + name := a_name + ensure + name_set: name = a_name + end + + add_permission (n: READABLE_STRING_8) + do + permissions.force (n) + end + +end diff --git a/persistence/implementation/mysql/scripts/create_database.sql b/persistence/implementation/mysql/scripts/create_database.sql index 55dffb4..431938b 100644 --- a/persistence/implementation/mysql/scripts/create_database.sql +++ b/persistence/implementation/mysql/scripts/create_database.sql @@ -3,15 +3,18 @@ SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; -- ----------------------------------------------------- --- Schema cms +-- Schema mydb -- ----------------------------------------------------- -CREATE SCHEMA IF NOT EXISTS `cms` DEFAULT CHARACTER SET latin1 ; -USE `cms` ; +-- ----------------------------------------------------- +-- Schema cms_dev +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `cms_dev` DEFAULT CHARACTER SET latin1 ; +USE `cms_dev` ; -- ----------------------------------------------------- --- Table `cms`.`nodes` +-- Table `cms_dev`.`nodes` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `cms`.`nodes` ( +CREATE TABLE IF NOT EXISTS `cms_dev`.`nodes` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `publication_date` DATE NOT NULL, `creation_date` DATE NOT NULL, @@ -26,38 +29,39 @@ DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- --- Table `cms`.`roles` +-- Table `cms_dev`.`roles` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `cms`.`roles` ( +CREATE TABLE IF NOT EXISTS `cms_dev`.`roles` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `role` VARCHAR(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `role` (`role` ASC)) ENGINE = InnoDB -AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- --- Table `cms`.`users` +-- Table `cms_dev`.`users` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `cms`.`users` ( +CREATE TABLE IF NOT EXISTS `cms_dev`.`users` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(100) NOT NULL, `password` VARCHAR(100) NOT NULL, `salt` VARCHAR(100) NOT NULL, `email` VARCHAR(250) NOT NULL, + `creation_date` DATETIME NULL, + `last_login_date` DATETIME NULL, PRIMARY KEY (`id`), UNIQUE INDEX `username` (`username` ASC)) ENGINE = InnoDB -AUTO_INCREMENT = 1 +AUTO_INCREMENT = 2 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- --- Table `cms`.`users_nodes` +-- Table `cms_dev`.`users_nodes` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `cms`.`users_nodes` ( +CREATE TABLE IF NOT EXISTS `cms_dev`.`users_nodes` ( `users_id` INT(10) UNSIGNED NOT NULL, `nodes_id` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`users_id`, `nodes_id`), @@ -65,12 +69,12 @@ CREATE TABLE IF NOT EXISTS `cms`.`users_nodes` ( INDEX `fk_users_has_nodes_users_idx` (`users_id` ASC), CONSTRAINT `fk_users_has_nodes_nodes1` FOREIGN KEY (`nodes_id`) - REFERENCES `cms`.`nodes` (`id`) + REFERENCES `cms_dev`.`nodes` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_users_has_nodes_users` FOREIGN KEY (`users_id`) - REFERENCES `cms`.`users` (`id`) + REFERENCES `cms_dev`.`users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB @@ -78,9 +82,9 @@ DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- --- Table `cms`.`users_roles` +-- Table `cms_dev`.`users_roles` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `cms`.`users_roles` ( +CREATE TABLE IF NOT EXISTS `cms_dev`.`users_roles` ( `users_id` INT(10) UNSIGNED NOT NULL, `roles_id` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`users_id`, `roles_id`), @@ -88,18 +92,55 @@ CREATE TABLE IF NOT EXISTS `cms`.`users_roles` ( INDEX `fk_users_has_roles_users1_idx` (`users_id` ASC), CONSTRAINT `fk_users_has_roles_roles1` FOREIGN KEY (`roles_id`) - REFERENCES `cms`.`roles` (`id`) + REFERENCES `cms_dev`.`roles` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_users_has_roles_users1` FOREIGN KEY (`users_id`) - REFERENCES `cms`.`users` (`id`) + REFERENCES `cms_dev`.`users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; +-- ----------------------------------------------------- +-- Table `cms_dev`.`permissions` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `cms_dev`.`permissions` ( + `id` INT NOT NULL AUTO_INCREMENT, + `name` VARCHAR(45) NOT NULL, + `roles_id` INT(10) UNSIGNED NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `name_UNIQUE` (`name` ASC), + INDEX `fk_permissions_roles1_idx` (`roles_id` ASC), + CONSTRAINT `fk_permissions_roles1` + FOREIGN KEY (`roles_id`) + REFERENCES `cms_dev`.`roles` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `cms_dev`.`profiles` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `cms_dev`.`profiles` ( + `id` INT NOT NULL AUTO_INCREMENT, + `key` VARCHAR(45) NOT NULL, + `value` VARCHAR(100) NULL, + `users_id` INT(10) UNSIGNED NOT NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `key_UNIQUE` (`key` ASC), + INDEX `fk_profiles_users1_idx` (`users_id` ASC), + CONSTRAINT `fk_profiles_users1` + FOREIGN KEY (`users_id`) + REFERENCES `cms_dev`.`users` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/persistence/implementation/mysql/src/provider/role_data_provider.e b/persistence/implementation/mysql/src/provider/role_data_provider.e new file mode 100644 index 0000000..61590a0 --- /dev/null +++ b/persistence/implementation/mysql/src/provider/role_data_provider.e @@ -0,0 +1,222 @@ +note + description: "Summary description for {ROLE_DATA_PROVIDER}." + author: "" + date: "$Date$" + revision: "$Revision$" + +class + ROLE_DATA_PROVIDER + +inherit + + PARAMETER_NAME_HELPER + + SHARED_ERROR + + REFACTORING_HELPER + +create + make + +feature -- Initialization + + make (a_connection: DATABASE_CONNECTION) + -- Create a data provider. + do + create {DATABASE_HANDLER_IMPL} db_handler.make (a_connection) + post_execution + end + + db_handler: DATABASE_HANDLER + -- Db handler. + +feature -- Status Report + + is_successful: BOOLEAN + -- Is the last execution sucessful? + do + Result := db_handler.successful + end + + has_roles: BOOLEAN + -- Has any role? + do + Result := count > 0 + end + +feature -- Access + + roles: DATABASE_ITERATION_CURSOR [CMS_USER_ROLE] + -- List of roles. + local + l_parameters: STRING_TABLE [ANY] + do + log.write_information (generator + ".roles") + create l_parameters.make (0) + db_handler.set_query (create {DATABASE_QUERY}.data_reader (Select_roles, l_parameters)) + db_handler.execute_query + create Result.make (db_handler, agent fetch_role) + post_execution + end + +feature -- Basic Operations + + new_role (a_role: READABLE_STRING_32) + -- Create a new node. + local + l_parameters: STRING_TABLE [detachable ANY] + do + log.write_information (generator + ".new_role") + create l_parameters.make (1) + l_parameters.put (a_role,"name") + db_handler.set_query (create {DATABASE_QUERY}.data_reader (sql_insert_role, l_parameters)) + db_handler.execute_change + post_execution + end + + role (a_id: INTEGER_64): detachable CMS_USER_ROLE + -- Role for the given id `a_id', if any. + local + l_parameters: STRING_TABLE [ANY] + do + log.write_information (generator + ".role") + create l_parameters.make (1) + l_parameters.put (a_id,"id") + db_handler.set_query (create {DATABASE_QUERY}.data_reader (select_role_by_id, l_parameters)) + db_handler.execute_query + if db_handler.count = 1 then + Result := fetch_role + end + post_execution + end + + role_by_name (a_name: READABLE_STRING_32): detachable CMS_USER_ROLE + -- Role for the given name `a_name', if any. + local + l_parameters: STRING_TABLE [ANY] + do + log.write_information (generator + ".role_by_name") + create l_parameters.make (1) + l_parameters.put (a_name,"name") + db_handler.set_query (create {DATABASE_QUERY}.data_reader (select_role_by_name, l_parameters)) + db_handler.execute_query + if db_handler.count = 1 then + Result := fetch_role + end + post_execution + end + + count: INTEGER + -- Number of items users. + local + l_parameters: STRING_TABLE [ANY] + do + log.write_information (generator + ".count") + create l_parameters.make (0) + db_handler.set_query (create {DATABASE_QUERY}.data_reader (select_count, l_parameters)) + db_handler.execute_query + if db_handler.count = 1 then + Result := db_handler.read_integer_32 (1) + end + post_execution + end + + save_role_permission (a_role_id: INTEGER; a_permission: READABLE_STRING_32) + -- Add permission `a_permission' to the role id `a_role_id'. + require + valid_id: a_role_id > 0 + local + l_parameters: STRING_TABLE [detachable ANY] + do + log.write_information (generator + ".save_role_permission") + create l_parameters.make (1) + l_parameters.put (a_permission,"name") + l_parameters.put (a_role_id,"id") + db_handler.set_query (create {DATABASE_QUERY}.data_reader (SQL_Insert_permissions, l_parameters)) + db_handler.execute_change + post_execution + end + + permission_by_role (a_role_id: INTEGER_64): DATABASE_ITERATION_CURSOR [READABLE_STRING_32] + -- List of permission by role `a_role_id'. + local + l_parameters: STRING_TABLE [ANY] + do + log.write_information (generator + ".permission_by_role") + create l_parameters.make (1) + l_parameters.put (a_role_id, "id") + db_handler.set_query (create {DATABASE_QUERY}.data_reader (Select_permissions, l_parameters)) + db_handler.execute_query + create Result.make (db_handler, agent fetch_permission) + post_execution + end + +feature -- New Object + + fetch_role: CMS_USER_ROLE + do + create Result.make_with_id (0,"") + if attached db_handler.read_integer_32 (1) as l_id then + Result.set_id (l_id) + end + if attached db_handler.read_string (2) as l_u then + Result.set_name (l_u) + end + end + + fetch_permission: STRING_32 + do + create Result.make_empty + if attached db_handler.read_string (1) as l_u then + Result := l_u + end + end + + +feature {NONE} -- Sql Queries: Roles + + Select_count: STRING = "select count(*) from Roles;" + -- Number of roles. + + Select_roles: STRING = "select * from Roles;" + -- roles. + + Select_role_by_id: STRING = "select * from Roles where id =:id;" + -- Retrieve role by id if exists. + + Select_role_by_name: STRING = "select * from Roles where role =:name;" + -- Retrieve user by name if exists. + + SQL_Insert_role: STRING = "insert into roles (role) values (:name);" + -- SQL Insert to add a new node. + + +feature {NONE} -- Sql Queries: Permissions + + Select_permissions_count: STRING = "select count(*) from permissions where roles_id=:id;" + -- Number of permissions for a given role. + + Select_permissions: STRING = "select * from permissions where roles_id=:id;" + -- List of permissions for a given role. + + Select_permissions_by_id: STRING = "select name from permissions where roles_id=:id and id=:permissionid;" + -- Permission for a given role and permission id + + SQL_Insert_permissions: STRING = "insert into permissions (name, roles_id) values (:name, :id);" + -- SQL Insert to add a new node. + +feature {NONE} -- Implementation + + post_execution + -- Post database execution. + do + if db_handler.successful then + set_successful + else + if attached db_handler.last_error then + set_last_error_from_handler (db_handler.last_error) + end + end + end + +end diff --git a/persistence/implementation/mysql/src/provider/user_data_provider.e b/persistence/implementation/mysql/src/provider/user_data_provider.e index e603c05..3a31df8 100644 --- a/persistence/implementation/mysql/src/provider/user_data_provider.e +++ b/persistence/implementation/mysql/src/provider/user_data_provider.e @@ -149,6 +149,34 @@ feature -- Basic Operations post_execution end + add_role (a_user_id: INTEGER; a_role_id: INTEGER) + -- Add Role `a_role_id' to user `a_user_id' + local + l_parameters: STRING_TABLE [detachable ANY] + do + log.write_information (generator + ".add_role") + create l_parameters.make (2) + l_parameters.put (a_user_id,"users_id") + l_parameters.put (a_role_id,"roles_id") + db_handler.set_query (create {DATABASE_QUERY}.data_reader (slq_insert_users_roles, l_parameters)) + db_handler.execute_change + post_execution + end + + user_roles (a_id:INTEGER_64): DATABASE_ITERATION_CURSOR [INTEGER] + -- List of Roles id for the given user `a_id'. + local + l_parameters: STRING_TABLE [ANY] + do + log.write_information (generator + ".user_roles") + create l_parameters.make (1) + l_parameters.put (a_id, "user_id") + db_handler.set_query (create {DATABASE_QUERY}.data_reader (Select_user_roles, l_parameters)) + db_handler.execute_query + create Result.make (db_handler, agent fetch_role_id) + post_execution + end + feature -- New Object fetch_user: CMS_USER @@ -168,7 +196,14 @@ feature -- New Object end end -feature -- Sql Queries + fetch_role_id: INTEGER + do + if attached db_handler.read_integer_32 (1) as l_id then + Result := l_id + end + end + +feature {NONE} -- Sql Queries: USER Select_count: STRING = "select count(*) from Users;" -- Number of users. @@ -189,6 +224,12 @@ feature -- Sql Queries -- SQL Insert to add a new node. +feature {NONE} -- Sql Queries: USER_ROLES + + Slq_insert_users_roles: STRING = "insert into users_roles (users_id, roles_id) values (:users_id, :roles_id);" + + Select_user_roles: STRING = "Select roles_id from users_roles where users_id = :user_id" + feature {NONE} -- Implementation post_execution diff --git a/persistence/implementation/mysql/tests/roles/role_test_set.e b/persistence/implementation/mysql/tests/roles/role_test_set.e new file mode 100644 index 0000000..bac254a --- /dev/null +++ b/persistence/implementation/mysql/tests/roles/role_test_set.e @@ -0,0 +1,100 @@ +note + description: "Summary description for {ROLE_TEST_SET}." + author: "" + date: "$Date$" + revision: "$Revision$" + +class + ROLE_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) + end + + on_clean + -- + do + end + +feature -- Test routines + + test_roles_empty + do + assert ("Not elements",role_provider.roles.after) + assert ("Count = 0", role_provider.count = 0) + end + + test_roles_by_id_not_exist + do + assert ("Void", role_provider.role (1) = Void) + end + + test_roles_by_name_not_exist + do + assert ("Void", role_provider.role_by_name ("admin") = Void) + end + + test_new_role + do + assert ("Count = 0", role_provider.count = 0) + role_provider.new_role ("admin") + assert ("Count = 1", role_provider.count = 1) + assert ("Expected role", attached role_provider.role (1) as l_role and then l_role.name ~ "admin") + assert ("Expected role", attached role_provider.role_by_name ("admin") as l_role and then l_role.id = 1) + end + + test_permissions_empty_not_exist_role + do + assert ("Not elements",role_provider.permission_by_role (1).after) + end + + test_permissions_empty_exist_role + do + assert ("Count = 0", role_provider.count = 0) + role_provider.new_role ("admin") + assert ("Count = 1", role_provider.count = 1) + assert ("Exist role",not role_provider.roles.after) + assert ("Not permission by role 1 elements",role_provider.permission_by_role (1).after) + end + + test_new_role_with_permissions + do + assert ("Count = 0", role_provider.count = 0) + role_provider.new_role ("admin") + role_provider.save_role_permission (1, "Create Page") + role_provider.save_role_permission (1, "Edit Page") + role_provider.save_role_permission (1, "Delete Page") + assert ("Count = 1", role_provider.count = 1) + assert ("Exist role",not role_provider.roles.after) + assert ("Exist role permissions",not role_provider.permission_by_role (1).after) + assert ("Not Exist role permissions, for id 2",role_provider.permission_by_role (2).after) + end + + + + +feature {NONE} -- Implementation + + role_provider: ROLE_DATA_PROVIDER + -- role provider. + once + create Result.make (connection) + end +end diff --git a/persistence/implementation/mysql/tests/storage/storage_test_set.e b/persistence/implementation/mysql/tests/storage/storage_test_set.e index 8a02131..909a8dc 100644 --- a/persistence/implementation/mysql/tests/storage/storage_test_set.e +++ b/persistence/implementation/mysql/tests/storage/storage_test_set.e @@ -200,8 +200,6 @@ feature -- Test routines end test_node_does_not_exist - local - l_nodes: LIST[CMS_NODE] do across 1 |..| 10 as c loop storage.save_node (custom_node ("Content_" + c.item.out, "Summary_" + c.item.out, "Title_" + c.item.out)) @@ -210,8 +208,6 @@ feature -- Test routines end test_node - local - l_nodes: LIST[CMS_NODE] do across 1 |..| 10 as c loop storage.save_node (custom_node ("Content_" + c.item.out, "Summary_" + c.item.out, "Title_" + c.item.out)) @@ -221,7 +217,6 @@ feature -- Test routines test_update_node local - l_nodes: LIST[CMS_NODE] l_node: CMS_NODE do storage.save_node (custom_node ("Content", "Summary", "Title")) @@ -237,9 +232,6 @@ feature -- Test routines end test_update_node_title - local - l_nodes: LIST[CMS_NODE] - l_node: CMS_NODE do storage.save_node (custom_node ("Content", "Summary", "Title")) if attached {CMS_NODE} storage.node (1) as ll_node then @@ -249,9 +241,6 @@ feature -- Test routines end test_update_node_summary - local - l_nodes: LIST[CMS_NODE] - l_node: CMS_NODE do storage.save_node (custom_node ("Content", "Summary", "Title")) if attached {CMS_NODE} storage.node (1) as ll_node then @@ -261,9 +250,6 @@ feature -- Test routines end test_update_node_content - local - l_nodes: LIST[CMS_NODE] - l_node: CMS_NODE do storage.save_node (custom_node ("Content", "Summary", "Title")) if attached {CMS_NODE} storage.node (1) as ll_node then @@ -273,8 +259,6 @@ feature -- Test routines end test_delete_node - local - l_nodes: LIST[CMS_NODE] do across 1 |..| 10 as c loop storage.save_node (custom_node ("Content_" + c.item.out, "Summary_" + c.item.out, "Title_" + c.item.out)) diff --git a/persistence/implementation/mysql/tests/users/user_test_set.e b/persistence/implementation/mysql/tests/users/user_test_set.e index 6b06e9f..ac40562 100644 --- a/persistence/implementation/mysql/tests/users/user_test_set.e +++ b/persistence/implementation/mysql/tests/users/user_test_set.e @@ -65,6 +65,14 @@ feature -- Test routines assert ("Not void", attached user_provider.user_by_name ("test")) end + test_new_user_with_roles + do + user_provider.new_user ("test", "test","test@admin.com") + role_provider.new_role ("Admin") + assert ("Empty roles for given user", user_provider.user_roles (1).after) + user_provider.add_role (1, 1) + assert ("Not empty roles for given user", not user_provider.user_roles (1).after) + end feature {NONE} -- Implementation @@ -73,6 +81,13 @@ feature {NONE} -- Implementation once create Result.make (connection) end + + role_provider: ROLE_DATA_PROVIDER + -- user provider. + once + create Result.make (connection) + end + end diff --git a/persistence/implementation/mysql/tests/util/clean_db.e b/persistence/implementation/mysql/tests/util/clean_db.e index ef00839..7c6217e 100644 --- a/persistence/implementation/mysql/tests/util/clean_db.e +++ b/persistence/implementation/mysql/tests/util/clean_db.e @@ -23,6 +23,20 @@ feature do create l_parameters.make (0) + + -- Clean Permissions + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_permissions, l_parameters)) + db_handler(a_connection).execute_change + + -- Clean Users Roles + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_users_roles, l_parameters)) + db_handler(a_connection).execute_change + + -- Clean Roles + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_roles, l_parameters)) + db_handler(a_connection).execute_change + + -- Clean Nodes db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Sql_delete_nodes, l_parameters)) db_handler(a_connection).execute_change @@ -30,12 +44,20 @@ feature 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 + + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Rest_roles_autoincrement, l_parameters)) + db_handler(a_connection).execute_change + + db_handler(a_connection).set_query (create {DATABASE_QUERY}.data_reader (Rest_permissions_autoincrement, l_parameters)) + db_handler(a_connection).execute_change + end @@ -57,10 +79,25 @@ feature -- Sql delete queries Sql_delete_nodes: STRING = "delete from Nodes" -- Clean Nodes. + Sql_delete_roles: STRING = "delete from Roles" + -- Clean Roles. + + Sql_delete_permissions: STRING = "delete from Permissions" + -- Clean Permissions. + + Sql_delete_users_roles: STRING = "delete from Users_roles" + -- Clean User roles. + Rest_users_autoincrement: STRING = "ALTER TABLE Users AUTO_INCREMENT = 1" -- reset autoincrement Rest_nodes_autoincrement: STRING = "ALTER TABLE Nodes AUTO_INCREMENT = 1" -- reset autoincrement. + Rest_roles_autoincrement: STRING = "ALTER TABLE Roles AUTO_INCREMENT = 1" + -- reset autoincrement. + + Rest_permissions_autoincrement: STRING = "ALTER TABLE Permissions AUTO_INCREMENT = 1" + -- reset autoincrement. + end