diff --git a/Gemfile b/Gemfile index f79fa93a..78d263fb 100644 --- a/Gemfile +++ b/Gemfile @@ -32,7 +32,7 @@ gem 'aws-sdk-sqs', '~> 1.30' group :development, :test do gem 'byebug' - gem 'rspec-rails', '~> 3.8' + gem 'rspec-rails' gem 'guard-rspec', require: false gem 'factory_bot_rails', '~> 6.1' gem 'database_cleaner' diff --git a/Gemfile.lock b/Gemfile.lock index 34c7440b..10323160 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -59,7 +59,7 @@ GEM addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) aws-eventstream (1.1.0) - aws-partitions (1.367.0) + aws-partitions (1.368.0) aws-sdk-core (3.105.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) @@ -248,14 +248,14 @@ GEM rspec-mocks (3.9.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) - rspec-rails (3.9.1) - actionpack (>= 3.0) - activesupport (>= 3.0) - railties (>= 3.0) - rspec-core (~> 3.9.0) - rspec-expectations (~> 3.9.0) - rspec-mocks (~> 3.9.0) - rspec-support (~> 3.9.0) + rspec-rails (4.0.1) + actionpack (>= 4.2) + activesupport (>= 4.2) + railties (>= 4.2) + rspec-core (~> 3.9) + rspec-expectations (~> 3.9) + rspec-mocks (~> 3.9) + rspec-support (~> 3.9) rspec-support (3.9.3) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) @@ -350,7 +350,7 @@ DEPENDENCIES rails (~> 6.0) rails-controller-testing rails_12factor - rspec-rails (~> 3.8) + rspec-rails rspec_junit_formatter sass-rails (~> 5.0) sdoc (~> 1.0.0) diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 97284956..80a4cf2a 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -32,6 +32,7 @@ def embed_find_page # POST request def embed_update_page_selector # POST request page = Page.find_by(id: params[:id]) + page.css_selector = params[:css_selector] if page.save render json: page diff --git a/app/controllers/embed_controller.rb b/app/controllers/embed_controller.rb index 2fd2ba86..3e5309aa 100644 --- a/app/controllers/embed_controller.rb +++ b/app/controllers/embed_controller.rb @@ -1,5 +1,4 @@ class EmbedController < ApplicationController - skip_before_action :verify_authenticity_token, only: [:inject] before_action :authorize, only: [:iframe] diff --git a/app/controllers/integrations_controller.rb b/app/controllers/integrations_controller.rb index 3096705b..204a6d7f 100644 --- a/app/controllers/integrations_controller.rb +++ b/app/controllers/integrations_controller.rb @@ -1,6 +1,8 @@ class IntegrationsController < ApplicationController + before_action :authorize + def index @slack_integrations = SlackIntegration.all - @sqs_integrations = SqsIntegration.all + @sqs_integrations = SqsIntegration.all end end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 50641a2a..99542f0f 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -40,5 +40,4 @@ def destroy cookies.delete(:user_id) redirect_to root_path end - end diff --git a/app/controllers/slack_integrations_controller.rb b/app/controllers/slack_integrations_controller.rb index 2f57e415..73875e78 100644 --- a/app/controllers/slack_integrations_controller.rb +++ b/app/controllers/slack_integrations_controller.rb @@ -1,5 +1,6 @@ class SlackIntegrationsController < ApplicationController before_action :set_slack_integration, only: [:show, :edit, :update, :destroy] + before_action :authorize # GET /slack_integrations def index diff --git a/app/controllers/sqs_integrations_controller.rb b/app/controllers/sqs_integrations_controller.rb index e9f290ce..bb051bcd 100644 --- a/app/controllers/sqs_integrations_controller.rb +++ b/app/controllers/sqs_integrations_controller.rb @@ -1,5 +1,6 @@ class SqsIntegrationsController < ApplicationController before_action :set_sqs_integration, only: [:show, :edit, :update, :destroy] + before_action :authorize # GET /sqs_integrations def index diff --git a/app/controllers/static_controller.rb b/app/controllers/static_controller.rb index 6d01eed6..5ed7cd80 100644 --- a/app/controllers/static_controller.rb +++ b/app/controllers/static_controller.rb @@ -1,4 +1,5 @@ class StaticController < ApplicationController + before_action :authorize def help path = File.join(Rails.root, 'data', 'help.md') @@ -8,5 +9,4 @@ def help def feed end - end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 899c6b8f..ac20f440 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,5 +1,4 @@ class UsersController < ApplicationController - before_action :authorize before_action :set_user, only: [:show, :edit, :update, :destroy] diff --git a/app/controllers/watching_controller.rb b/app/controllers/watching_controller.rb index e19bbea4..bbd09d34 100644 --- a/app/controllers/watching_controller.rb +++ b/app/controllers/watching_controller.rb @@ -1,9 +1,7 @@ class WatchingController < ApplicationController - before_action :authorize def feed @changes = Change.order('created_at DESC').first(20) end - end diff --git a/config/environments/development.rb b/config/environments/development.rb index 77ab7484..84a3e485 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -38,8 +38,6 @@ config.action_mailer.delivery_method = :letter_opener - config.hosts << "klaxon.test" - config.force_ssl = (ENV.fetch('KLAXON_FORCE_SSL', 'false').to_s.downcase == 'true') # Raises error for missing translations diff --git a/spec/controllers/api_controller_spec.rb b/spec/controllers/api_controller_spec.rb index 046a29a6..95c3ef78 100644 --- a/spec/controllers/api_controller_spec.rb +++ b/spec/controllers/api_controller_spec.rb @@ -2,25 +2,57 @@ RSpec.describe ApiController, type: :controller do - # describe "GET #subscriptions" do - # it "returns http success" do - # get :subscriptions - # expect(response).to have_http_status(:success) - # end - # end - - # describe "GET #users" do - # it "returns http success" do - # get :users - # expect(response).to have_http_status(:success) - # end - # end - - # describe "GET #pages" do - # it "returns http success" do - # get :pages - # expect(response).to have_http_status(:success) - # end - # end + before(:each) { + WebMock.allow_net_connect! + login + } + + describe "/page-preview" do + it "can query the tmp homepage" do + + url = 'https://www.themarshallproject.org' + css_selector = 'header' + + get(:page_preview, params: { url: url, css_selector: css_selector }) + + expect(response).to have_http_status(:success) + + data = JSON.parse(response.body) + expect(data['css_selector']).to eq css_selector + expect(data['url']).to eq url + expect(data['match_text']).to include 'About' + end + end + + it "can get the users" do + get(:users) + expect(JSON.parse(response.body).count).to be > 0 + end + + it "creates a page by url and can update that page's selector" do + url = "http://www.nytimes.com/" + selector = ".first-column-region .story" + + @user = current_user + + # create the page + post(:embed_find_page, params: { url: url }) + expect(response).to have_http_status(:success) + data = JSON.parse(response.body) + expect(data['url']).to eq url + expect(data['css_selector']).to eq nil + page = Page.find_by(url: url) + expect(page.user).to eq @user + + # update the page + post(:embed_update_page_selector, params: { id: page.id, css_selector: selector }) + data = JSON.parse(response.body) + expect(data['css_selector']).to eq selector + expect(data['user_id']).to eq @user.id + end + + it "has stats" + it "has subscriptions" + it "has pages" end diff --git a/spec/controllers/integrations_controller_spec.rb b/spec/controllers/integrations_controller_spec.rb index ae899ae0..97e69e99 100644 --- a/spec/controllers/integrations_controller_spec.rb +++ b/spec/controllers/integrations_controller_spec.rb @@ -1,12 +1,12 @@ require 'rails_helper' RSpec.describe IntegrationsController, type: :controller do - describe "GET #index" do + before (:each) { login } + it "returns http success" do get :index expect(response).to have_http_status(:success) end end - end diff --git a/spec/controllers/slack_integrations_controller_spec.rb b/spec/controllers/slack_integrations_controller_spec.rb index 6b8d4503..95462026 100644 --- a/spec/controllers/slack_integrations_controller_spec.rb +++ b/spec/controllers/slack_integrations_controller_spec.rb @@ -31,6 +31,8 @@ skip("Add a hash of attributes invalid for your model") } + before(:each) { login } + describe "GET #index" do it "assigns all slack_integrations as @slack_integrations" do slack_integration = SlackIntegration.create! valid_attributes diff --git a/spec/controllers/sqs_integrations_controller_spec.rb b/spec/controllers/sqs_integrations_controller_spec.rb index 25071d49..86dd2a40 100644 --- a/spec/controllers/sqs_integrations_controller_spec.rb +++ b/spec/controllers/sqs_integrations_controller_spec.rb @@ -35,6 +35,8 @@ } } + before(:each) { login } + describe "GET #index" do it "assigns all sqs_integrations as @sqs_integrations" do sqs_integration = SqsIntegration.create! valid_attributes diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index eee58291..a089dafc 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -37,7 +37,10 @@ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" + config.example_status_persistence_file_path = Rails.root.join('tmp/examples.txt') + config.include FactoryBot::Syntax::Methods + config.include LoginHelper config.use_transactional_fixtures = false diff --git a/spec/requests/api_controller_spec.rb b/spec/requests/api_controller_spec.rb deleted file mode 100644 index bf579df8..00000000 --- a/spec/requests/api_controller_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -require 'rails_helper' - -RSpec.describe ApiController, type: :request do - - before(:each) do - WebMock.allow_net_connect! - - # login - @user = User.where(email: 'test@test.com').first_or_create - get(token_session_path, params: { token: LoginToken.create(user: @user) }) - end - - describe "/page-preview" do - it "can query the tmp homepage" do - - url = 'https://www.themarshallproject.org' - css_selector = 'header' - - get(api_page_preview_path, params: { url: url, css_selector: css_selector }) - - expect(response).to have_http_status(:success) - - data = JSON.parse(response.body) - expect(data['css_selector']).to eq css_selector - expect(data['url']).to eq url - expect(data['match_text']).to include 'About' - end - end - - it "can get the users" do - get(api_users_path) - expect(JSON.parse(response.body).count).to be > 0 - end - - it "creates a page by url and can update that page's selector" do - url = "http://www.nytimes.com/" - selector = ".first-column-region .story" - - # create the page - post(embed_find_page_path, params: { url: url }) - expect(response).to have_http_status(:success) - data = JSON.parse(response.body) - expect(data['url']).to eq url - expect(data['css_selector']).to eq nil - page = Page.find_by(url: url) - expect(page.user).to eq @user - - # update the page - post(embed_update_page_selector_path, params: { id: page.id, css_selector: selector }) - data = JSON.parse(response.body) - expect(data['css_selector']).to eq selector - expect(data['user_id']).to eq @user.id - end - - it "has stats" - it "has subscriptions" - it "has pages" - -end diff --git a/spec/requests/pages_spec.rb b/spec/requests/pages_spec.rb index 99b4b096..ff22e777 100644 --- a/spec/requests/pages_spec.rb +++ b/spec/requests/pages_spec.rb @@ -2,10 +2,5 @@ RSpec.describe "Pages", type: :request do describe "GET /pages" do - it "works! (now write some real specs)" - # do - # get pages_path - # expect(response).to have_http_status(200) - # end end end diff --git a/spec/requests/slack_integrations_spec.rb b/spec/requests/slack_integrations_spec.rb index 1ecc608b..b2269ba8 100644 --- a/spec/requests/slack_integrations_spec.rb +++ b/spec/requests/slack_integrations_spec.rb @@ -2,9 +2,5 @@ RSpec.describe "SlackIntegrations", type: :request do describe "GET /slack_integrations" do - it "works! (now write some real specs)" do - get slack_integrations_path - expect(response).to have_http_status(200) - end end end diff --git a/spec/requests/sqs_integrations_spec.rb b/spec/requests/sqs_integrations_spec.rb index 04221c05..b98fe400 100644 --- a/spec/requests/sqs_integrations_spec.rb +++ b/spec/requests/sqs_integrations_spec.rb @@ -2,9 +2,5 @@ RSpec.describe "SqsIntegrations", type: :request do describe "GET /sqs_integrations" do - it "works!" do - get sqs_integrations_path - expect(response).to have_http_status(200) - end end end diff --git a/spec/requests/static_controller_spec.rb b/spec/requests/static_controller_spec.rb index 221d3592..e8f0a972 100644 --- a/spec/requests/static_controller_spec.rb +++ b/spec/requests/static_controller_spec.rb @@ -2,12 +2,4 @@ RSpec.describe StaticController, type: :request do - before(:each) do - WebMock.allow_net_connect! - - # login - @user = User.where(email: 'test@test.com').first_or_create - get(token_session_path, token: LoginToken.create(user: @user)) - end - end diff --git a/spec/requests/users_spec.rb b/spec/requests/users_spec.rb index 9849d589..a8f2a520 100644 --- a/spec/requests/users_spec.rb +++ b/spec/requests/users_spec.rb @@ -2,9 +2,5 @@ RSpec.describe "Users", type: :request do describe "GET /users" do - # it "works! (now write some real specs)" do - # get users_path - # expect(response).to have_http_status(200) - # end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a9e4ccf1..0a3cf331 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,6 +1,3 @@ -require "codeclimate-test-reporter" -CodeClimate::TestReporter.start - # This file was generated by the `rails generate rspec:install` command. Conventionally, all # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. # The generated `.rspec` file contains `--require spec_helper` which will cause diff --git a/spec/support/cookies.rb b/spec/support/cookies.rb new file mode 100644 index 00000000..5b26bb37 --- /dev/null +++ b/spec/support/cookies.rb @@ -0,0 +1,5 @@ +class ActionDispatch::Cookies::CookieJar + def encrypted; self; end + def signed; self; end + def permanent; self; end +end diff --git a/spec/support/login_helper.rb b/spec/support/login_helper.rb new file mode 100644 index 00000000..2f934b38 --- /dev/null +++ b/spec/support/login_helper.rb @@ -0,0 +1,10 @@ +module LoginHelper + def login(user=nil) + user = User.where(email: 'test@test.com').first_or_create if user.nil? + request.cookies[:user_id] = user.id + end + + def current_user + User.find(request.cookies[:user_id]) + end +end