From bf92a7441e8e2fa2b6163847cce141fca2f7f21c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonne=20Ha=C3=9F?= <me@jhass.eu>
Date: Sat, 29 Aug 2015 15:55:46 +0200
Subject: [PATCH] Bump selenium-webdriver, implement aspect sorting cucumber
 step with selenium API

---
 Gemfile                                      |  7 +----
 Gemfile.lock                                 |  9 ++----
 app/assets/javascripts/app/pages/contacts.js |  4 +--
 app/views/contacts/_aspect_listings.haml     |  2 +-
 features/desktop/manages_aspects.feature     |  2 +-
 features/step_definitions/aspects_steps.rb   | 33 +++++++++-----------
 6 files changed, 22 insertions(+), 35 deletions(-)

diff --git a/Gemfile b/Gemfile
index 65308f2e0e..00a1487262 100644
--- a/Gemfile
+++ b/Gemfile
@@ -261,12 +261,7 @@ group :test do
 
   gem "capybara",           "2.4.4"
   gem "database_cleaner" ,  "1.4.1"
-  gem "selenium-webdriver", "2.46.2"
-
-  source "https://rails-assets.org" do
-    gem "rails-assets-jquery-simulate",     "1.0.1"
-    gem "rails-assets-jquery-simulate-ext", "1.3.0"
-  end
+  gem "selenium-webdriver", "2.47.1"
 
   # General helpers
 
diff --git a/Gemfile.lock b/Gemfile.lock
index 4a069a0159..e387f8a63c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -541,9 +541,6 @@ GEM
     rails-assets-jquery-fullscreen-plugin (0.5.0)
     rails-assets-jquery-placeholder (2.1.2)
       rails-assets-jquery (>= 1.6)
-    rails-assets-jquery-simulate (1.0.1)
-    rails-assets-jquery-simulate-ext (1.3.0)
-      rails-assets-jquery (>= 1.7.0)
     rails-assets-jquery-textchange (0.2.3)
       rails-assets-jquery
     rails-assets-jquery.slimscroll (1.3.6)
@@ -648,7 +645,7 @@ GEM
       sprockets (>= 2.8, < 4.0)
       sprockets-rails (>= 2.0, < 4.0)
       tilt (~> 1.1)
-    selenium-webdriver (2.46.2)
+    selenium-webdriver (2.47.1)
       childprocess (~> 0.5)
       multi_json (~> 1.0)
       rubyzip (~> 1.0)
@@ -831,8 +828,6 @@ DEPENDENCIES
   rails-assets-jeresig--jquery.hotkeys (= 0.2.0)!
   rails-assets-jquery (= 1.11.2)!
   rails-assets-jquery-placeholder (= 2.1.2)!
-  rails-assets-jquery-simulate (= 1.0.1)!
-  rails-assets-jquery-simulate-ext (= 1.3.0)!
   rails-assets-jquery-textchange (= 0.2.3)!
   rails-assets-markdown-it (= 4.4.0)!
   rails-assets-markdown-it--markdown-it-for-inline (= 0.1.1)!
@@ -857,7 +852,7 @@ DEPENDENCIES
   ruby-oembed (= 0.8.14)
   rubyzip (= 1.1.7)
   sass-rails (= 5.0.1)
-  selenium-webdriver (= 2.46.2)
+  selenium-webdriver (= 2.47.1)
   shoulda-matchers (= 2.8.0)
   sidekiq (= 3.4.2)
   sidetiq (= 0.6.3)
diff --git a/app/assets/javascripts/app/pages/contacts.js b/app/assets/javascripts/app/pages/contacts.js
index 782120b22f..0cce5ef15b 100644
--- a/app/assets/javascripts/app/pages/contacts.js
+++ b/app/assets/javascripts/app/pages/contacts.js
@@ -81,11 +81,11 @@ app.pages.Contacts = Backbone.View.extend({
     $("#aspect_nav .nav").sortable({
       items: "li.aspect[data-aspect-id]",
       update: function() {
-        $("#aspect_nav .ui-sortable").removeClass("synced");
+        $("#aspect_nav .ui-sortable").addClass("syncing");
         var data = JSON.stringify({ ordered_aspect_ids: $(this).sortable("toArray", { attribute: "data-aspect-id" }) });
         $.ajax(Routes.orderAspects(),
           { type: "put", dataType: "text", contentType: "application/json", data: data })
-          .done(function() { $("#aspect_nav .ui-sortable").addClass("synced"); });
+          .done(function() { $("#aspect_nav .ui-sortable").removeClass("syncing"); });
       },
       revert: true,
       helper: "clone"
diff --git a/app/views/contacts/_aspect_listings.haml b/app/views/contacts/_aspect_listings.haml
index 664b412c65..450b433d2e 100644
--- a/app/views/contacts/_aspect_listings.haml
+++ b/app/views/contacts/_aspect_listings.haml
@@ -1,5 +1,5 @@
 #aspect_nav
-  %ul.nav.nav-tabs.nav-stacked.synced
+  %ul.nav.nav-tabs.nav-stacked.ui-sortable
     %li.all_contacts{:class => ("active" if params["set"] == "all")}
       %a{:href => contacts_path(:set => "all")}
         = t('contacts.index.all_contacts')
diff --git a/features/desktop/manages_aspects.feature b/features/desktop/manages_aspects.feature
index 5f6865eaf5..784e052548 100644
--- a/features/desktop/manages_aspects.feature
+++ b/features/desktop/manages_aspects.feature
@@ -81,7 +81,7 @@ Feature: User manages contacts
     And I have an aspect called "People"
     And I have an aspect called "Cat People"
     When I am on the contacts page
-    And I drag "Cat People" up 40 pixels
+    And I drag "Cat People" up
     And I go to the contacts page
     Then I should see "Cat People" as 2. aspect
     And I should see "People" as 3. aspect
diff --git a/features/step_definitions/aspects_steps.rb b/features/step_definitions/aspects_steps.rb
index 5d71150663..53290bed19 100644
--- a/features/step_definitions/aspects_steps.rb
+++ b/features/step_definitions/aspects_steps.rb
@@ -88,24 +88,21 @@ When /^(.*) in the aspect creation modal$/ do |action|
   end
 end
 
-When /^I drag "([^"]*)" (up|down) (\d+) pixels?$/ do |aspect_name, direction, distance|
-  distance = distance.to_i * -1 if direction == "up"
-  page.execute_script %{
-    function drag() {
-      $("li.aspect:contains('#{aspect_name}')")
-        .simulate("drag-n-drop", { dy: #{distance}, interpolation: { stepWidth: 10, stepDelay: 5 } });
-    }
-    function loadScripts() {
-      $.getScript("/assets/jquery-simulate/jquery.simulate.js", function(){
-        $.getScript("/assets/jquery-simulate-ext/src/jquery.simulate.ext.js", function(){
-          $.getScript("/assets/jquery-simulate-ext/src/jquery.simulate.drag-n-drop.js", drag);
-        });
-      });
-    }
-    if (!$.simulate) { loadScripts(); } else { drag(); }
-  }
-  expect(find("#aspect_nav")).to have_css ".synced"
-end
+When /^I drag "([^"]*)" (up|down)$/ do |aspect_name, direction|
+  aspect_id = @me.aspects.where(name: aspect_name).first.id
+  aspect = find(:xpath, "//div[@id='aspect_nav']/ul/li[@data-aspect-id='#{aspect_id}']")
+  target = direction == "up" ? aspect.all(:xpath, "./preceding-sibling::li").last :
+                               aspect.all(:xpath, "./following-sibling::li").first
+  browser = aspect.base.driver.browser
+  mouse = browser.mouse
+  native_aspect = aspect.base.native
+  native_target = target.base.native
+  mouse.down native_aspect
+  mouse.move_to native_target, native_target.size.width / 2, 0
+  sleep 1
+  mouse.up
+  expect(page).to have_no_css "#aspect_nav .ui-sortable.syncing"
+ end
 
 And /^I toggle the aspect "([^"]*)"$/ do |name|
   toggle_aspect(name)
-- 
GitLab