From 185cf9a312102455df5ac5f4bc43df78103dc15f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Jul 2018 15:42:47 +1000 Subject: [PATCH 1/7] Remove code duplication --- .../consumer/shopping/embedded_groups_spec.rb | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/spec/features/consumer/shopping/embedded_groups_spec.rb b/spec/features/consumer/shopping/embedded_groups_spec.rb index 4122fb30ce..19fe83685a 100644 --- a/spec/features/consumer/shopping/embedded_groups_spec.rb +++ b/spec/features/consumer/shopping/embedded_groups_spec.rb @@ -17,9 +17,7 @@ feature "Using embedded shopfront functionality", js: true do end it "displays in an iframe" do - expect(page).to have_selector 'iframe#group_test_iframe' - - within_frame 'group_test_iframe' do + on_embedded_page do within 'div#group-page' do expect(page).to have_content 'About Us' end @@ -27,9 +25,7 @@ feature "Using embedded shopfront functionality", js: true do end it "displays powered by OFN text at bottom of page" do - expect(page).to have_selector 'iframe#group_test_iframe' - - within_frame 'group_test_iframe' do + on_embedded_page do within 'div#group-page' do expect(page).to have_selector 'div.powered-by-embedded' expect(page).to have_css "img[src*='favicon.ico']" @@ -40,9 +36,7 @@ feature "Using embedded shopfront functionality", js: true do end it "doesn't display contact details when embedded" do - expect(page).to have_selector 'iframe#group_test_iframe' - - within_frame 'group_test_iframe' do + on_embedded_page do within 'div#group-page' do expect(page).to have_no_selector 'div.contact-container' @@ -52,9 +46,7 @@ feature "Using embedded shopfront functionality", js: true do end it "does not display the header when embedded" do - expect(page).to have_selector 'iframe#group_test_iframe' - - within_frame 'group_test_iframe' do + on_embedded_page do within 'div#group-page' do expect(page).to have_no_selector 'header' expect(page).to have_no_selector 'img.group-logo' @@ -64,9 +56,7 @@ feature "Using embedded shopfront functionality", js: true do end it 'opens links to shops in a new window' do - expect(page).to have_selector 'iframe#group_test_iframe' - - within_frame 'group_test_iframe' do + on_embedded_page do within 'div#group-page' do enterprise_links = page.all(:xpath, "//*[contains(@href, 'enterprise-5/shop')]", :visible => :false).count enterprise_links_with_target_blank = page.all(:xpath, "//*[contains(@href, 'enterprise-5/shop') and @target = '_blank']", :visible => :false).count @@ -75,4 +65,14 @@ feature "Using embedded shopfront functionality", js: true do end end end + + private + + def on_embedded_page + expect(page).to have_selector 'iframe#group_test_iframe' + + within_frame 'group_test_iframe' do + yield + end + end end From ed747ec6124d8b645fea20a02f20eed9f74c5ee6 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Jul 2018 15:54:29 +1000 Subject: [PATCH 2/7] Use embedded groups example for tests --- spec/features/consumer/shopping/embedded_groups_spec.rb | 8 +++----- spec/support/views/group_iframe_test.html | 8 -------- 2 files changed, 3 insertions(+), 13 deletions(-) delete mode 100644 spec/support/views/group_iframe_test.html diff --git a/spec/features/consumer/shopping/embedded_groups_spec.rb b/spec/features/consumer/shopping/embedded_groups_spec.rb index 19fe83685a..dd301ec273 100644 --- a/spec/features/consumer/shopping/embedded_groups_spec.rb +++ b/spec/features/consumer/shopping/embedded_groups_spec.rb @@ -2,8 +2,6 @@ require 'spec_helper' feature "Using embedded shopfront functionality", js: true do - Capybara.server_port = 9999 - describe 'embedded groups' do let(:enterprise) { create(:distributor_enterprise) } let!(:group) { create(:enterprise_group, enterprises: [enterprise], permalink: 'group1', on_front_page: true) } @@ -13,7 +11,7 @@ feature "Using embedded shopfront functionality", js: true do Spree::Config[:embedded_shopfronts_whitelist] = 'test.com' page.driver.browser.js_errors = false allow_any_instance_of(ActionDispatch::Request).to receive(:referer).and_return('https://www.test.com') - Capybara.current_session.driver.visit('spec/support/views/group_iframe_test.html') + visit "/embedded-group-preview.html?group1" end it "displays in an iframe" do @@ -69,9 +67,9 @@ feature "Using embedded shopfront functionality", js: true do private def on_embedded_page - expect(page).to have_selector 'iframe#group_test_iframe' + expect(page).to have_selector "iframe" - within_frame 'group_test_iframe' do + within_frame :frame do yield end end diff --git a/spec/support/views/group_iframe_test.html b/spec/support/views/group_iframe_test.html deleted file mode 100644 index dcb4abbceb..0000000000 --- a/spec/support/views/group_iframe_test.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - From 6f737d8d1e1d856ee306022f19c51eb2bc21f00a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Jul 2018 16:01:19 +1000 Subject: [PATCH 3/7] Unclutter spec setup --- spec/features/consumer/shopping/embedded_groups_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/features/consumer/shopping/embedded_groups_spec.rb b/spec/features/consumer/shopping/embedded_groups_spec.rb index dd301ec273..21ee73c00d 100644 --- a/spec/features/consumer/shopping/embedded_groups_spec.rb +++ b/spec/features/consumer/shopping/embedded_groups_spec.rb @@ -4,14 +4,14 @@ feature "Using embedded shopfront functionality", js: true do describe 'embedded groups' do let(:enterprise) { create(:distributor_enterprise) } - let!(:group) { create(:enterprise_group, enterprises: [enterprise], permalink: 'group1', on_front_page: true) } + let(:group) { create(:enterprise_group, enterprises: [enterprise]) } before do Spree::Config[:enable_embedded_shopfronts] = true Spree::Config[:embedded_shopfronts_whitelist] = 'test.com' page.driver.browser.js_errors = false allow_any_instance_of(ActionDispatch::Request).to receive(:referer).and_return('https://www.test.com') - visit "/embedded-group-preview.html?group1" + visit "/embedded-group-preview.html?#{group.permalink}" end it "displays in an iframe" do From 66980b247a466afa320513a8677f8f0875844558 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Jul 2018 16:35:27 +1000 Subject: [PATCH 4/7] Fix test of opening shops in new windows The test case had some hard-coded enterprise name that didn't match anything. It then confirmed that all found links (none) would open a new window. So it wasn't confirming anything. --- .../consumer/shopping/embedded_groups_spec.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/spec/features/consumer/shopping/embedded_groups_spec.rb b/spec/features/consumer/shopping/embedded_groups_spec.rb index 21ee73c00d..6df7734d6d 100644 --- a/spec/features/consumer/shopping/embedded_groups_spec.rb +++ b/spec/features/consumer/shopping/embedded_groups_spec.rb @@ -53,12 +53,17 @@ feature "Using embedded shopfront functionality", js: true do end end - it 'opens links to shops in a new window' do + it "opens links to shops in a new window" do on_embedded_page do within 'div#group-page' do - enterprise_links = page.all(:xpath, "//*[contains(@href, 'enterprise-5/shop')]", :visible => :false).count - enterprise_links_with_target_blank = page.all(:xpath, "//*[contains(@href, 'enterprise-5/shop') and @target = '_blank']", :visible => :false).count - expect(enterprise_links).to equal(enterprise_links_with_target_blank) + shop_links_xpath = "//*[contains(@href, '#{enterprise.permalink}/shop')]" + + expect(page).to have_xpath shop_links_xpath, visible: false + + shop_links = page.all(:xpath, shop_links_xpath, visible: false) + shop_links.each do |link| + expect(link[:target]).to eq "_blank" + end end end end From 599f1a966ba82dc6fa5e2cddc2fb71591694c7ec Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Jul 2018 17:11:21 +1000 Subject: [PATCH 5/7] Use embedded shops example for tests --- public/embedded-shop-preview.html | 20 ++++++++++++++++ .../shopping/embedded_shopfronts_spec.rb | 23 +++++++++++-------- spec/support/views/iframe_test.html | 8 ------- 3 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 public/embedded-shop-preview.html delete mode 100644 spec/support/views/iframe_test.html diff --git a/public/embedded-shop-preview.html b/public/embedded-shop-preview.html new file mode 100644 index 0000000000..a3c53f6440 --- /dev/null +++ b/public/embedded-shop-preview.html @@ -0,0 +1,20 @@ + + Embedded Shop + + +

+ This is a preview page for embedded shops. + Choose a shop to display by copying its permalink id into the URL after the question mark. + Example: embedded-shop-preview.html?bawbawfoodhub +

+ + + + + + diff --git a/spec/features/consumer/shopping/embedded_shopfronts_spec.rb b/spec/features/consumer/shopping/embedded_shopfronts_spec.rb index 87b6a7e5ca..da99492945 100644 --- a/spec/features/consumer/shopping/embedded_shopfronts_spec.rb +++ b/spec/features/consumer/shopping/embedded_shopfronts_spec.rb @@ -7,8 +7,6 @@ feature "Using embedded shopfront functionality", js: true do include CheckoutWorkflow include UIComponentHelper - Capybara.server_port = 9999 - describe "using iframes" do let(:distributor) { create(:distributor_enterprise, name: 'My Embedded Hub', permalink: 'test_enterprise', with_payment_and_shipping: true) } let(:supplier) { create(:supplier_enterprise) } @@ -24,9 +22,8 @@ feature "Using embedded shopfront functionality", js: true do Spree::Config[:enable_embedded_shopfronts] = true Spree::Config[:embedded_shopfronts_whitelist] = 'test.com' - page.driver.browser.js_errors = false allow_any_instance_of(ActionDispatch::Request).to receive(:referer).and_return('https://www.test.com') - Capybara.current_session.driver.visit('spec/support/views/iframe_test.html') + visit "/embedded-shop-preview.html?#{distributor.permalink}" end after do @@ -34,9 +31,7 @@ feature "Using embedded shopfront functionality", js: true do end it "displays modified shopfront layout" do - expect(page).to have_selector 'iframe#test_iframe' - - within_frame 'test_iframe' do + on_embedded_page do within 'nav.top-bar' do expect(page).to have_selector 'ul.left', visible: false expect(page).to have_selector 'ul.center', visible: false @@ -48,7 +43,7 @@ feature "Using embedded shopfront functionality", js: true do end xit "allows shopping and checkout" do - within_frame 'test_iframe' do + on_embedded_page do fill_in "variants[#{variant.id}]", with: 1 wait_until_enabled 'input.add_to_cart' @@ -97,7 +92,7 @@ feature "Using embedded shopfront functionality", js: true do end it "redirects to embedded hub on logout when embedded" do - within_frame 'test_iframe' do + on_embedded_page do find('ul.right li#login-link a').click login_with_modal @@ -110,6 +105,16 @@ feature "Using embedded shopfront functionality", js: true do end end + private + + def on_embedded_page + expect(page).to have_selector "iframe" + + within_frame :frame do + yield + end + end + def login_with_modal expect(page).to have_selector 'div.login-modal', visible: true diff --git a/spec/support/views/iframe_test.html b/spec/support/views/iframe_test.html deleted file mode 100644 index fe71aa66e3..0000000000 --- a/spec/support/views/iframe_test.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - From 8a3a617870adc7e240f087d95cda8121ebaf83d2 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Jul 2018 10:44:43 +1000 Subject: [PATCH 6/7] DRY specs with new EmbeddedPagesHelper --- .../consumer/shopping/embedded_groups_spec.rb | 11 +---------- .../consumer/shopping/embedded_shopfronts_spec.rb | 9 +-------- spec/support/embedded_pages_helper.rb | 11 +++++++++++ 3 files changed, 13 insertions(+), 18 deletions(-) create mode 100644 spec/support/embedded_pages_helper.rb diff --git a/spec/features/consumer/shopping/embedded_groups_spec.rb b/spec/features/consumer/shopping/embedded_groups_spec.rb index 6df7734d6d..b53f12c2eb 100644 --- a/spec/features/consumer/shopping/embedded_groups_spec.rb +++ b/spec/features/consumer/shopping/embedded_groups_spec.rb @@ -1,6 +1,7 @@ require 'spec_helper' feature "Using embedded shopfront functionality", js: true do + include OpenFoodNetwork::EmbeddedPagesHelper describe 'embedded groups' do let(:enterprise) { create(:distributor_enterprise) } @@ -68,14 +69,4 @@ feature "Using embedded shopfront functionality", js: true do end end end - - private - - def on_embedded_page - expect(page).to have_selector "iframe" - - within_frame :frame do - yield - end - end end diff --git a/spec/features/consumer/shopping/embedded_shopfronts_spec.rb b/spec/features/consumer/shopping/embedded_shopfronts_spec.rb index da99492945..1b965db512 100644 --- a/spec/features/consumer/shopping/embedded_shopfronts_spec.rb +++ b/spec/features/consumer/shopping/embedded_shopfronts_spec.rb @@ -1,6 +1,7 @@ require 'spec_helper' feature "Using embedded shopfront functionality", js: true do + include OpenFoodNetwork::EmbeddedPagesHelper include AuthenticationWorkflow include WebHelper include ShopWorkflow @@ -107,14 +108,6 @@ feature "Using embedded shopfront functionality", js: true do private - def on_embedded_page - expect(page).to have_selector "iframe" - - within_frame :frame do - yield - end - end - def login_with_modal expect(page).to have_selector 'div.login-modal', visible: true diff --git a/spec/support/embedded_pages_helper.rb b/spec/support/embedded_pages_helper.rb new file mode 100644 index 0000000000..2e8e53b843 --- /dev/null +++ b/spec/support/embedded_pages_helper.rb @@ -0,0 +1,11 @@ +module OpenFoodNetwork + module EmbeddedPagesHelper + def on_embedded_page + expect(page).to have_selector "iframe" + + within_frame :frame do + yield + end + end + end +end From 962c54b606e509e0002f96fbedf23ad0f92e2ebd Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Jul 2018 10:45:33 +1000 Subject: [PATCH 7/7] Remove unnecessary expectation The `iframe` is rendered in pure HTML and should always be there. --- spec/support/embedded_pages_helper.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/support/embedded_pages_helper.rb b/spec/support/embedded_pages_helper.rb index 2e8e53b843..5eed420394 100644 --- a/spec/support/embedded_pages_helper.rb +++ b/spec/support/embedded_pages_helper.rb @@ -1,8 +1,6 @@ module OpenFoodNetwork module EmbeddedPagesHelper def on_embedded_page - expect(page).to have_selector "iframe" - within_frame :frame do yield end