software_communities_steps.rb 7.35 KB
Given /^SoftwareInfo has initial default values on database$/ do
  LicenseInfo.create(:version=>"None", :link=>"")
  LicenseInfo.create(:version=>"GPL-2", :link =>"www.gpl2.com")
  LicenseInfo.create(:version=>"GPL-3", :link =>"www.gpl3.com")

  ProgrammingLanguage.create(:name=>"C")
  ProgrammingLanguage.create(:name=>"C++")
  ProgrammingLanguage.create(:name=>"Ruby")
  ProgrammingLanguage.create(:name=>"Python")

  DatabaseDescription.create(:name => "Oracle")
  DatabaseDescription.create(:name => "MySQL")
  DatabaseDescription.create(:name => "Apache")
  DatabaseDescription.create(:name => "PostgreSQL")

  OperatingSystemName.create(:name=>"Debian")
  OperatingSystemName.create(:name=>"Fedora")
  OperatingSystemName.create(:name=>"CentOS")
end


Given /^I type in "([^"]*)" in autocomplete list "([^"]*)" and I choose "([^"]*)"$/ do |typed, input_field_selector, should_select|
  # Wait the page javascript load
  sleep 1
  # Basicaly it, search for the input field, type something, wait for ajax end select an item
  page.driver.browser.execute_script %Q{
    var search_query = "#{input_field_selector}.ui-autocomplete-input";
    var input = jQuery(search_query).first();

    input.trigger('click');
    input.val('#{typed}');
    input.trigger('keydown');

    window.setTimeout(function(){
      search_query = ".ui-menu-item a:contains('#{should_select}')";
      var typed = jQuery(search_query).first();

      typed.trigger('mouseenter').trigger('click');
      console.log(jQuery('#license_info_id'));
    }, 1000);
  }
  sleep 1
end


Given /^the following software language$/ do |table|
  table.hashes.each do |item|
    programming_language = ProgrammingLanguage.where(:name=>item[:programing_language]).first
    software_language = SoftwareLanguage::new

    software_language.programming_language = programming_language
    software_language.version = item[:version]
    software_language.operating_system = item[:operating_system]

    software_language.save!
  end
end

Given /^the following software databases$/ do |table|
  table.hashes.each do |item|
    database_description = DatabaseDescription.where(:name=>item[:database_name]).first
    software_database = SoftwareDatabase::new

    software_database.database_description = database_description
    software_database.version = item[:version]
    software_database.operating_system = item[:operating_system]

    software_database.save!
  end
end


Given /^the following operating systems$/ do |table|
  table.hashes.each do |item|
    operating_system_name = OperatingSystemName.where(:name=>item[:operating_system_name]).first
    operating_system = OperatingSystem::new

    operating_system.operating_system_name = operating_system_name
    operating_system.version = item[:version]

    operating_system.save!
  end
end

Given /^the following softwares$/ do |table|
  table.hashes.each do |item|
    software_info = SoftwareInfo.new
    software_info.community = Community.create(:name=>item[:name])

    software_info.finality = item[:finality] if item[:finality]
    software_info.acronym = item[:acronym] if item[:acronym]
    software_info.finality = item[:finality] if item[:finality]
    software_info.finality ||= "something"
    software_info.operating_platform = item[:operating_platform] if item[:operating_platform]
    software_info.objectives = item[:objectives] if item[:objectives]
    software_info.features = item[:features] if item[:features]
    software_info.public_software = item[:public_software] == "true" if item[:public_software]
    software_info.license_info = LicenseInfo.create :version=>"GPL - 1.0"

    if item[:software_language]
      programming_language = ProgrammingLanguage.where(:name=>item[:software_language]).first
      software_language = SoftwareLanguage.where(:programming_language_id=>programming_language).first
      software_info.software_languages << software_language
    end

    if item[:software_database]
      database_description = DatabaseDescription.where(:name=>item[:software_database]).first
      software_database = SoftwareDatabase.where(:database_description_id=>database_description).first
      software_info.software_databases << software_database
    end

    if item[:operating_system]
      operating_system_name = OperatingSystemName.where(:name => item[:operating_system]).first
      operating_system = OperatingSystem.where(:operating_system_name_id => operating_system_name).first
      software_info.operating_systems << operating_system
    end

    if item[:categories]
      categories = item[:categories].split(",")
      categories.map! {|category| category.strip}

      categories.each do |category_name|
        category = Category.find_by_name category_name
        software_info.community.categories << category
      end
    end

    software_info.save!
  end
end

# Dynamic table steps
Given /^I fill in first "([^"]*)" class with "([^"]*)"$/ do |selector, value|
  evaluate_script "jQuery('#{selector}').first().attr('value', '#{value}') && true"
end

Given /^I fill in last "([^"]*)" class with "([^"]*)"$/ do |selector, value|
  evaluate_script "jQuery('#{selector}').last().attr('value', '#{value}') && true"
end

Given /^I click on the first button with class "([^"]*)"$/ do |selector|
  evaluate_script "jQuery('#{selector}').first().trigger('click') && true"
end

Given /^I click on the last button with class "([^"]*)"$/ do |selector|
  evaluate_script "jQuery('#{selector}').last().trigger('click') && true"
end

Given /^the user "([^"]*)" has "([^"]*)" as secondary e\-mail$/ do |login, email|
  User[login].update_attributes(:secondary_email => email)
end

Given /^I click on anything with selector "([^"]*)"$/ do |selector|
  evaluate_script "jQuery('#{selector}').trigger('click') && true"
end

Given /^I should see "([^"]*)" of this selector "([^"]*)"$/ do |quantity, selector|
  evaluate_script "jQuery('#{selector}').length == '#{quantity}'"
end

Given /^selector "([^"]*)" should have any "([^"]*)"$/ do |selector, text|
  evaluate_script "jQuery('#{selector}').html().indexOf('#{text}') != -1"
end

Given /^I click on table number "([^"]*)" selector "([^"]*)" and select the value "([^"]*)"$/ do |number, selector, value|
  evaluate_script "jQuery('#{selector}:nth-child(#{number}) select option:contains(\"#{value}\")').selected() && true"
end

Given /^I fill with "([^"]*)" in field with name "([^"]*)" of table number "([^"]*)" with class "([^"]*)"$/ do |value, name, number, selector|
  evaluate_script "jQuery('#{selector}:nth-child(#{number}) input[name=\"#{name}\"]').val('#{value}') && true"
end

Given /^I sleep for (\d+) seconds$/ do |time|
  sleep time.to_i
end

Given /^I am logged in as mpog_admin$/ do
  visit('/account/logout')

  user = User.new(:login => 'admin_user', :password => '123456', :password_confirmation => '123456', :email => 'admin_user@example.com')
  person = Person.new :name=>"Mpog Admin", :identifier=>"mpog-admin"
  user.person = person
  user.save!

  user.activate
  e = Environment.default
  e.add_admin(user.person)

  visit('/account/login')
  fill_in("Username", :with => user.login)
  fill_in("Password", :with => '123456')
  click_button("Log in")
end

Given /^I should see "([^"]*)" before "([^"]*)"$/ do |before, after|
  assert page.body.index("#{before}") < page.body.index("#{after}")
end

Given /^I keyup on selector "([^"]*)"$/ do |selector|
  selector_founded = evaluate_script("jQuery('#{selector}').trigger('keyup').length != 0")
  selector_founded.should be_true
end