Просмотр исходного кода

Maintenance: Migrate Twitter browser test to RSpec

This commit migrates `test/integration/twitter_browser_test.rb` to RSpec
as directly as possible.
Ryan Lue 5 лет назад
Родитель
Сommit
889dd92aea

+ 0 - 16
.gitlab-ci.yml

@@ -593,22 +593,6 @@ test:browser:autowizard_ff:
   <<: *test_browser_integration_definition
   <<: *script_integration_auto_wizard_definition
 
-test:browser:integration:twitter_chrome:
-  <<: *browser_integration_auto_wizard_definition
-  variables:
-    <<: *variables_browser_definition
-    BROWSER: "chrome"
-    AUTO_WIZARD_FILE: "contrib/auto_wizard_test.json"
-    TEST_FILE: "test/integration/twitter_browser_test.rb"
-
-test:browser:integration:twitter_ff:
-  <<: *browser_integration_auto_wizard_definition
-  variables:
-    <<: *variables_browser_definition
-    BROWSER: "firefox"
-    AUTO_WIZARD_FILE: "contrib/auto_wizard_test.json"
-    TEST_FILE: "test/integration/twitter_browser_test.rb"
-
 test:browser:integration:facebook_chrome:
   <<: *browser_integration_auto_wizard_definition
   variables:

+ 34 - 0
spec/system/admin/channel/twitter_spec.rb

@@ -0,0 +1,34 @@
+require 'rails_helper'
+
+RSpec.describe 'Admin Panel > Channels > Twitter', :authenticated, :use_vcr, type: :system do
+  context 'with incomplete credentials' do
+    it 'displays a 401 error modal' do
+      visit '/#channels/twitter'
+      within(:active_content) do
+        find('.js-configApp').click
+        fill_in 'Twitter Consumer Key *',    with: 'some_key',    exact: true
+        fill_in 'Twitter Consumer Secret *', with: 'some_secret', exact: true
+        click_on 'Submit'
+
+        expect(page).to have_css('.modal .alert', text: '401 Authorization Required')
+      end
+    end
+  end
+
+  context 'with invalid credentials' do
+    it 'displays a 401 error modal' do
+      visit '/#channels/twitter'
+      within(:active_content) do
+        find('.js-configApp').click
+        fill_in 'Twitter Consumer Key *',          with: 'some_key',                exact: true
+        fill_in 'Twitter Consumer Secret *',       with: 'some_secret',             exact: true
+        fill_in 'Twitter Access Token *',          with: 'some_oauth_token',        exact: true
+        fill_in 'Twitter Access Token Secret *',   with: 'some_oauth_token_secret', exact: true
+        fill_in 'Twitter Dev environment label *', with: 'some_env',                exact: true
+        click_on 'Submit'
+
+        expect(page).to have_css('.modal .alert', text: '401 Authorization Required')
+      end
+    end
+  end
+end

+ 76 - 0
test/data/vcr_cassettes/system/admin/channel/twitter/with_incomplete_credentials_displays_a_401_error_modal.yml

@@ -0,0 +1,76 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: https://api.twitter.com/oauth/request_token
+    body:
+      encoding: UTF-8
+      string: ''
+    headers:
+      Accept-Encoding:
+      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+      Accept:
+      - "*/*"
+      User-Agent:
+      - OAuth gem v0.5.4
+      Content-Length:
+      - '0'
+      Authorization:
+      - OAuth oauth_callback="http%3A%2F%2Fzammad.example.com%2Fapi%2Fv1%2Fexternal_credentials%2Ftwitter%2Fcallback",
+        oauth_consumer_key="some_key", oauth_nonce="IagNJMosiC5LrtN0bNIcGkctrIWJejAhI1PA9DKFA8",
+        oauth_signature="2f6IrVntUDtz9UOJ159p%2FF1NWWs%3D", oauth_signature_method="HMAC-SHA1",
+        oauth_timestamp="1573544688", oauth_version="1.0"
+  response:
+    status:
+      code: 401
+      message: Authorization Required
+    headers:
+      Cache-Control:
+      - no-cache, no-store, must-revalidate, pre-check=0, post-check=0
+      Content-Disposition:
+      - attachment; filename=json.json
+      Content-Length:
+      - '89'
+      Content-Type:
+      - application/json; charset=utf-8
+      Date:
+      - Tue, 12 Nov 2019 07:44:49 GMT
+      Expires:
+      - Tue, 31 Mar 1981 05:00:00 GMT
+      Last-Modified:
+      - Tue, 12 Nov 2019 07:44:49 GMT
+      Pragma:
+      - no-cache
+      Server:
+      - tsa_m
+      Set-Cookie:
+      - guest_id=v1%3A157354468916670365; Max-Age=63072000; Expires=Thu, 11 Nov 2021
+        07:44:49 GMT; Path=/; Domain=.twitter.com
+      - personalization_id="v1_1vmi2r8RoFgMCL+SgD77bw=="; Max-Age=63072000; Expires=Thu,
+        11 Nov 2021 07:44:49 GMT; Path=/; Domain=.twitter.com
+      Status:
+      - 401 Unauthorized
+      Strict-Transport-Security:
+      - max-age=631138519
+      Www-Authenticate:
+      - OAuth realm="https://api.twitter.com"
+      X-Connection-Hash:
+      - bf220064d30e7c53def04cd0401bedd9
+      X-Content-Type-Options:
+      - nosniff
+      X-Frame-Options:
+      - SAMEORIGIN
+      X-Response-Time:
+      - '103'
+      X-Transaction:
+      - '0080644900ce1d14'
+      X-Twitter-Response-Tags:
+      - BouncerCompliant
+      X-Xss-Protection:
+      - '0'
+    body:
+      encoding: ASCII-8BIT
+      string: '{"errors":[{"code":32,"message":"Could not authenticate you."}]}'
+    http_version: 
+  recorded_at: Tue, 12 Nov 2019 07:44:49 GMT
+recorded_with: VCR 4.0.0

+ 76 - 0
test/data/vcr_cassettes/system/admin/channel/twitter/with_invalid_credentials_displays_a_401_error_modal.yml

@@ -0,0 +1,76 @@
+---
+http_interactions:
+- request:
+    method: post
+    uri: https://api.twitter.com/oauth/request_token
+    body:
+      encoding: UTF-8
+      string: ''
+    headers:
+      Accept-Encoding:
+      - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+      Accept:
+      - "*/*"
+      User-Agent:
+      - OAuth gem v0.5.4
+      Content-Length:
+      - '0'
+      Authorization:
+      - OAuth oauth_callback="http%3A%2F%2Fzammad.example.com%2Fapi%2Fv1%2Fexternal_credentials%2Ftwitter%2Fcallback",
+        oauth_consumer_key="some_key", oauth_nonce="eSDyub3KNoiB6ius4ncrgMX9sEoAW3jYRsNwJzZDdSw",
+        oauth_signature="PK4O8hnKqm9I5H6bObYHI6RPZWA%3D", oauth_signature_method="HMAC-SHA1",
+        oauth_timestamp="1573544692", oauth_version="1.0"
+  response:
+    status:
+      code: 401
+      message: Authorization Required
+    headers:
+      Cache-Control:
+      - no-cache, no-store, must-revalidate, pre-check=0, post-check=0
+      Content-Disposition:
+      - attachment; filename=json.json
+      Content-Length:
+      - '89'
+      Content-Type:
+      - application/json; charset=utf-8
+      Date:
+      - Tue, 12 Nov 2019 07:44:52 GMT
+      Expires:
+      - Tue, 31 Mar 1981 05:00:00 GMT
+      Last-Modified:
+      - Tue, 12 Nov 2019 07:44:52 GMT
+      Pragma:
+      - no-cache
+      Server:
+      - tsa_m
+      Set-Cookie:
+      - guest_id=v1%3A157354469261589333; Max-Age=63072000; Expires=Thu, 11 Nov 2021
+        07:44:52 GMT; Path=/; Domain=.twitter.com
+      - personalization_id="v1_6zZaPL3yO9TwlBYf9Pi/fg=="; Max-Age=63072000; Expires=Thu,
+        11 Nov 2021 07:44:52 GMT; Path=/; Domain=.twitter.com
+      Status:
+      - 401 Unauthorized
+      Strict-Transport-Security:
+      - max-age=631138519
+      Www-Authenticate:
+      - OAuth realm="https://api.twitter.com"
+      X-Connection-Hash:
+      - 1ccb25aa6671b93b342083811c290299
+      X-Content-Type-Options:
+      - nosniff
+      X-Frame-Options:
+      - SAMEORIGIN
+      X-Response-Time:
+      - '104'
+      X-Transaction:
+      - 002b22bf00a6ac1d
+      X-Twitter-Response-Tags:
+      - BouncerCompliant
+      X-Xss-Protection:
+      - '0'
+    body:
+      encoding: ASCII-8BIT
+      string: '{"errors":[{"code":32,"message":"Could not authenticate you."}]}'
+    http_version: 
+  recorded_at: Tue, 12 Nov 2019 07:44:52 GMT
+recorded_with: VCR 4.0.0

+ 0 - 57
test/integration/twitter_browser_test.rb

@@ -1,57 +0,0 @@
-require 'browser_test_helper'
-
-class TwitterBrowserTest < TestCase
-  def test_add_config
-
-    @browser = browser_instance
-    login(
-      username:    'master@example.com',
-      password:    'test',
-      url:         browser_url,
-      auto_wizard: true,
-    )
-    tasks_close_all()
-
-    click(css: 'a[href="#manage"]')
-    click(css: '.content.active a[href="#channels/twitter"]')
-    click(css: '.content.active .js-configApp')
-    sleep 2
-    set(
-      css:   '.content.active .modal [name=consumer_key]',
-      value: 'some_key',
-    )
-    set(
-      css:   '.content.active .modal [name=consumer_secret]',
-      value: 'some_secret',
-    )
-    click(css: '.content.active .modal .js-submit')
-
-    watch_for(
-      css:   '.content.active .modal .alert',
-      value: '401 Authorization Required',
-    )
-
-    set(
-      css:   '.content.active .modal [name=oauth_token]',
-      value: 'some_oauth_token',
-    )
-
-    set(
-      css:   '.content.active .modal [name=oauth_token_secret]',
-      value: 'some_oauth_token_secret',
-    )
-
-    set(
-      css:   '.content.active .modal [name=env]',
-      value: 'some_env',
-    )
-
-    click(css: '.content.active .modal .js-submit')
-
-    watch_for(
-      css:   '.content.active .modal .alert',
-      value: '401 Authorization Required',
-    )
-
-  end
-end