Commit b3d90985386043f6f20925068f120cc0995ee6d0
Committed by
Luciano Prestes
1 parent
eee6f248
Exists in
master
and in
5 other branches
fixes_software: Add server-side database dynamic table validations and tests
Signed-off-by: Fabio Teixeira <fabio1079@gmail.com>
Showing
3 changed files
with
91 additions
and
39 deletions
Show diff stats
features/software_registration.feature
| @@ -6,25 +6,19 @@ Feature: software registration | @@ -6,25 +6,19 @@ Feature: software registration | ||
| 6 | Background: | 6 | Background: |
| 7 | Given "MpogSoftwarePlugin" plugin is enabled | 7 | Given "MpogSoftwarePlugin" plugin is enabled |
| 8 | And SoftwareInfo has initial default values on database | 8 | And SoftwareInfo has initial default values on database |
| 9 | - And I am logged in as admin | 9 | + And I am logged in as mpog_admin |
| 10 | And I go to /admin/plugins | 10 | And I go to /admin/plugins |
| 11 | And I check "MpogSoftwarePlugin" | 11 | And I check "MpogSoftwarePlugin" |
| 12 | And I press "Save changes" | 12 | And I press "Save changes" |
| 13 | 13 | ||
| 14 | - Scenario: Show library fields when click in New Library | ||
| 15 | - Given I go to admin_user's control panel | ||
| 16 | - And I follow "Manage my groups" | ||
| 17 | - And I follow "Create a new software" | ||
| 18 | - And I follow "New Library" | ||
| 19 | - Then I should see "Name" | ||
| 20 | - Then I should see "Version" | ||
| 21 | - Then I should see "License" | ||
| 22 | - | ||
| 23 | @selenium | 14 | @selenium |
| 24 | Scenario: Show SoftwareLangue fields when click in New Language | 15 | Scenario: Show SoftwareLangue fields when click in New Language |
| 25 | - Given I go to admin_user's control panel | ||
| 26 | - And I follow "Manage my groups" | 16 | + Given I go to /myprofile/mpog-admin |
| 27 | And I follow "Create a new software" | 17 | And I follow "Create a new software" |
| 18 | + And I fill in "community_name" with "basic software" | ||
| 19 | + And I fill in "software_info_finality" with "basic software finality" | ||
| 20 | + And I press "Create" | ||
| 21 | + And I follow "Public Software" | ||
| 28 | And I follow "New language" | 22 | And I follow "New language" |
| 29 | And I should see "3" of this selector ".software-language-table" | 23 | And I should see "3" of this selector ".software-language-table" |
| 30 | And I follow "Delete" | 24 | And I follow "Delete" |
| @@ -33,9 +27,12 @@ Feature: software registration | @@ -33,9 +27,12 @@ Feature: software registration | ||
| 33 | 27 | ||
| 34 | @selenium | 28 | @selenium |
| 35 | Scenario: Show databasefields when click in New database | 29 | Scenario: Show databasefields when click in New database |
| 36 | - Given I go to admin_user's control panel | ||
| 37 | - And I follow "Manage my groups" | 30 | + Given I go to /myprofile/mpog-admin |
| 38 | And I follow "Create a new software" | 31 | And I follow "Create a new software" |
| 32 | + And I fill in "community_name" with "basic software" | ||
| 33 | + And I fill in "software_info_finality" with "basic software finality" | ||
| 34 | + And I press "Create" | ||
| 35 | + And I follow "Public Software" | ||
| 39 | And I follow "New Database" | 36 | And I follow "New Database" |
| 40 | And I should see "3" of this selector ".database-table" | 37 | And I should see "3" of this selector ".database-table" |
| 41 | And I follow "Delete" | 38 | And I follow "Delete" |
| @@ -43,12 +40,39 @@ Feature: software registration | @@ -43,12 +40,39 @@ Feature: software registration | ||
| 43 | #3 because one is always hidden | 40 | #3 because one is always hidden |
| 44 | 41 | ||
| 45 | @selenium | 42 | @selenium |
| 46 | - Scenario: Delete software libraries | ||
| 47 | - Given I go to admin_user's control panel | ||
| 48 | - And I follow "Manage my groups" | 43 | + Scenario: Software database name should be an autocomplete |
| 44 | + Given I go to /myprofile/mpog-admin | ||
| 49 | And I follow "Create a new software" | 45 | And I follow "Create a new software" |
| 50 | - And I follow "New Library" | ||
| 51 | - And I should see "2" of this selector ".library-table" | ||
| 52 | - And I follow "Delete" | ||
| 53 | - Then I should see "1" of this selector ".library-table" | 46 | + And I fill in "community_name" with "basic software" |
| 47 | + And I fill in "software_info_finality" with "basic software finality" | ||
| 48 | + And I press "Create" | ||
| 49 | + And I follow "Public Software" | ||
| 50 | + And I follow "New Database" | ||
| 51 | + And I type in "my" into autocomplete list "database_autocomplete" and I choose "MySQL" | ||
| 52 | + And I fill in "database_autocomplete" with "Replace me with MySQL" | ||
| 53 | + And I fill in "database__version" with "" | ||
| 54 | + Then selector ".database_autocomplete" should have any "MySQL" | ||
| 54 | 55 | ||
| 56 | + @selenium | ||
| 57 | + Scenario: Create software with all dynamic table fields filled | ||
| 58 | + Given I go to /myprofile/mpog-admin | ||
| 59 | + And I follow "Create a new software" | ||
| 60 | + And I fill in "community_name" with "basic software" | ||
| 61 | + And I fill in "software_info_finality" with "basic software finality" | ||
| 62 | + And I press "Create" | ||
| 63 | + And I follow "Public Software" | ||
| 64 | + And I follow "New language" | ||
| 65 | + And I fill in "language__version" with "1.2.3" | ||
| 66 | + And I fill in "language__operating_system" with "Unix" | ||
| 67 | + And I follow "New Database" | ||
| 68 | + And I type in "my" into autocomplete list "database_autocomplete" and I choose "MySQL" | ||
| 69 | + And I fill in "database__version" with "4.5.6" | ||
| 70 | + And I fill in "database__operating_system" with "Unix" | ||
| 71 | + And I press "Save" | ||
| 72 | + And I follow "Software Info" | ||
| 73 | + And I follow "Public Software" | ||
| 74 | + And selector "#language__version" should have any "1.2.3" | ||
| 75 | + And selector "#language__operating_system" should have any "Unix" | ||
| 76 | + And selector ".database_autocomplete" should have any "MySQL" | ||
| 77 | + And selector "#database__version" should have any "4.5.6" | ||
| 78 | + Then selector "#database__operating_system" should have any "Unix" |
lib/database_helper.rb
| 1 | module DatabaseHelper | 1 | module DatabaseHelper |
| 2 | 2 | ||
| 3 | + def self.isValidDatabase? database | ||
| 4 | + return false if SoftwareHelper.all_table_is_empty?(database) | ||
| 5 | + | ||
| 6 | + database_description_id_list = DatabaseDescription.select(:id).collect {|dd| dd.id } | ||
| 7 | + | ||
| 8 | + return false unless database_description_id_list.include?(database[:database_description_id].to_i) | ||
| 9 | + | ||
| 10 | + true | ||
| 11 | + end | ||
| 12 | + | ||
| 3 | def self.list_database new_databases | 13 | def self.list_database new_databases |
| 4 | return [] if new_databases.nil? or new_databases.length == 0 | 14 | return [] if new_databases.nil? or new_databases.length == 0 |
| 5 | list_databases = [] | 15 | list_databases = [] |
| 6 | 16 | ||
| 7 | new_databases.each do |new_database| | 17 | new_databases.each do |new_database| |
| 8 | - unless SoftwareHelper.all_table_is_empty? new_database | 18 | + if isValidDatabase? new_database |
| 9 | database = SoftwareDatabase.new | 19 | database = SoftwareDatabase.new |
| 10 | database.database_description_id = new_database[:database_description_id] | 20 | database.database_description_id = new_database[:database_description_id] |
| 11 | database.version = new_database[:version] | 21 | database.version = new_database[:version] |
test/unit/database_helper_test.rb
| @@ -5,29 +5,34 @@ class DatabaseHelperTest < ActiveSupport::TestCase | @@ -5,29 +5,34 @@ class DatabaseHelperTest < ActiveSupport::TestCase | ||
| 5 | include DatabaseHelper | 5 | include DatabaseHelper |
| 6 | 6 | ||
| 7 | def setup | 7 | def setup |
| 8 | - @database_objects = [{"database_description_id" => "1" ,"version" => "2.0", "operating_system" => "debian"}, | ||
| 9 | - {"database_description_id" => "2" ,"version" => "2.1", "operating_system" => "debian"}, | ||
| 10 | - {"database_description_id" => "3" ,"version" => "2.2", "operating_system" => "debian"}] | 8 | + dd1 = DatabaseDescription.create(:name => "Oracle") |
| 9 | + dd2 = DatabaseDescription.create(:name => "MySQL") | ||
| 10 | + | ||
| 11 | + @database_objects = [ | ||
| 12 | + {:database_description_id => dd1.id.to_s ,:version => "2.0", :operating_system => "debian"}, | ||
| 13 | + {:database_description_id => dd2.id.to_s ,:version => "2.1", :operating_system => "debian"}, | ||
| 14 | + {:database_description_id => dd1.id.to_s ,:version => "2.2", :operating_system => "debian"}] | ||
| 11 | @database_objects | 15 | @database_objects |
| 12 | end | 16 | end |
| 13 | 17 | ||
| 14 | def teardown | 18 | def teardown |
| 15 | @database_objects = nil | 19 | @database_objects = nil |
| 20 | + DatabaseDescription.destroy_all | ||
| 16 | end | 21 | end |
| 17 | 22 | ||
| 18 | should "return an empty list" do | 23 | should "return an empty list" do |
| 19 | empty_list = [] | 24 | empty_list = [] |
| 20 | - assert_equal [],DatabaseHelper.list_database(empty_list) | 25 | + assert_equal [], DatabaseHelper.list_database(empty_list) |
| 21 | end | 26 | end |
| 22 | 27 | ||
| 23 | should "return a list with current database objects" do | 28 | should "return a list with current database objects" do |
| 24 | list_compare = [] | 29 | list_compare = [] |
| 25 | - assert_equal list_compare.class, DatabaseHelper.list_database(@database_objects).class | 30 | + assert_equal list_compare.class, DatabaseHelper.list_database(@database_objects).class |
| 26 | end | 31 | end |
| 27 | 32 | ||
| 28 | should "have same information from the list passed as parameter" do | 33 | should "have same information from the list passed as parameter" do |
| 29 | list_compare = DatabaseHelper.list_database(@database_objects) | 34 | list_compare = DatabaseHelper.list_database(@database_objects) |
| 30 | - assert_equal @database_objects.first[:database_description_id], list_compare.first.database_description_id | 35 | + assert_equal @database_objects.first[:database_description_id].to_i, list_compare.first.database_description_id |
| 31 | end | 36 | end |
| 32 | 37 | ||
| 33 | should "return a list with the same size of the parameter" do | 38 | should "return a list with the same size of the parameter" do |
| @@ -40,19 +45,32 @@ class DatabaseHelperTest < ActiveSupport::TestCase | @@ -40,19 +45,32 @@ class DatabaseHelperTest < ActiveSupport::TestCase | ||
| 40 | assert_equal false,DatabaseHelper.valid_list_database?(list_compare) | 45 | assert_equal false,DatabaseHelper.valid_list_database?(list_compare) |
| 41 | end | 46 | end |
| 42 | 47 | ||
| 43 | - should "return a html text with operating system equals to linux" do | ||
| 44 | - databases = [] | 48 | + should "return a html text with operating system equals to linux" do |
| 49 | + databases = [] | ||
| 50 | + | ||
| 51 | + database_description = DatabaseDescription.new | ||
| 52 | + database_description.name = "teste" | ||
| 53 | + | ||
| 54 | + software_database = SoftwareDatabase.new | ||
| 55 | + software_database.version = 2 | ||
| 56 | + software_database.operating_system = "linux" | ||
| 57 | + software_database.database_description = database_description | ||
| 45 | 58 | ||
| 46 | - database_description = DatabaseDescription.new | ||
| 47 | - database_description.name = "teste" | 59 | + databases << software_database |
| 48 | 60 | ||
| 49 | - software_database = SoftwareDatabase.new | ||
| 50 | - software_database.version = 2 | ||
| 51 | - software_database.operating_system = "linux" | ||
| 52 | - software_database.database_description = database_description | 61 | + assert_not_nil DatabaseHelper.database_as_tables(databases).first.call.index("linux") |
| 62 | + end | ||
| 63 | + | ||
| 64 | + should "remove invalid tables from the list" do | ||
| 65 | + @database_objects.push({ | ||
| 66 | + :database_description_id => "I'm not a valid id", | ||
| 67 | + :version => "2.0", | ||
| 68 | + :operating_system => "debian" | ||
| 69 | + }) | ||
| 53 | 70 | ||
| 54 | - databases << software_database | 71 | + database_objects_length = @database_objects.count |
| 72 | + list_compare = DatabaseHelper.list_database(@database_objects) | ||
| 55 | 73 | ||
| 56 | - assert_not_nil DatabaseHelper.database_as_tables(databases).first.call.index("linux") | ||
| 57 | - end | 74 | + assert_equal database_objects_length-1, list_compare.count |
| 58 | end | 75 | end |
| 76 | +end |