Skip to content

Commit

Permalink
specs!
Browse files Browse the repository at this point in the history
  • Loading branch information
mmahalwy committed Aug 19, 2016
1 parent 02e6c5d commit 7a59f93
Show file tree
Hide file tree
Showing 7 changed files with 165 additions and 7 deletions.
1 change: 1 addition & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ AllCops:
- 'db/schema.rb'
- 'config/**/*'
- 'spec/spec_helper.rb'
- 'Guardfile'

Style/AlignHash:
EnforcedColonStyle: table
Expand Down
75 changes: 75 additions & 0 deletions Guardfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# A sample Guardfile
# More info at https://github.com/guard/guard#readme

## Uncomment and set this to only include directories you want to watch
# directories %w(app lib config test spec features) \
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}

## Note: if you are using the `directories` clause above and you are not
## watching the project directory ('.'), then you will want to move
## the Guardfile to a watched dir and symlink it back, e.g.
#
# $ mkdir config
# $ mv Guardfile config/
# $ ln -s config/Guardfile .
#
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"

# Note: The cmd option is now required due to the increasing number of ways
# rspec may be run, below are examples of the most common uses.
# * bundler: 'bundle exec rspec'
# * bundler binstubs: 'bin/rspec'
# * spring: 'bin/rspec' (This will use spring if running and you have
# installed the spring binstubs per the docs)
# * zeus: 'zeus rspec' (requires the server to be started separately)
# * 'just' rspec: 'rspec'

guard :rspec, cmd: "bundle exec rspec" do
require "guard/rspec/dsl"
dsl = Guard::RSpec::Dsl.new(self)

# Feel free to open issues for suggestions and improvements

# RSpec files
rspec = dsl.rspec
watch(rspec.spec_helper) { rspec.spec_dir }
watch(rspec.spec_support) { rspec.spec_dir }
watch(rspec.spec_files)

# Ruby files
ruby = dsl.ruby
dsl.watch_spec_files_for(ruby.lib_files)

# Rails files
rails = dsl.rails(view_extensions: %w(erb haml slim))
dsl.watch_spec_files_for(rails.app_files)
dsl.watch_spec_files_for(rails.views)

watch(rails.controllers) do |m|
[
rspec.spec.call("routing/#{m[1]}_routing"),
rspec.spec.call("controllers/#{m[1]}_controller"),
rspec.spec.call("acceptance/#{m[1]}")
]
end

# Rails config changes
watch(rails.spec_helper) { rspec.spec_dir }
watch(rails.routes) { "#{rspec.spec_dir}/routing" }
watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }

# Capybara features specs
watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }

# Turnip features and steps
watch(%r{^spec/acceptance/(.+)\.feature$})
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
end
end

guard :rubocop do
watch(%r{.+\.rb$})
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
end
41 changes: 35 additions & 6 deletions spec/controllers/api/v1/auth_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,41 @@
require 'rails_helper'

RSpec.describe Api::V1::AuthController, type: :controller do
let(:algorithm) { 'HS256' }
let(:user) { create(:user) }
let(:token_payload) do
now = Time.now.to_i
{
'iss' => 'onit',
'exp' => token_expiration,
'nbf' => now - 60, # available for use 1 minute before now
'iat' => now, # time issued
'jti' => SecureRandom.uuid,
'sub' => user.email
}.merge(user.as_json)
end

# describe "GET #create" do
# it "returns http success" do
# get :create
# expect(response).to have_http_status(:success)
# end
# end
let(:token_expiration) { Time.now.to_i + 86_400 }

let(:jwt) { JWT.encode(token_payload, Rails.application.secrets.secret_key_base, algorithm) }

describe 'GET #current' do
it 'returns unauthorized when calling with no token' do
get :current
expect(response).to have_http_status(:unauthorized)
end

it 'returns unauthorized with invalud token' do
request.headers['Authorization'] = 'NOT_VALID'
get :current
expect(response).to have_http_status(:unauthorized)
end

it 'returns success when token is valid' do
request.headers['Authorization'] = "Bearer #{jwt}"
get :current
expect(response).to have_http_status(:success)
end
end

end
2 changes: 1 addition & 1 deletion spec/rails_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

# Checks for pending migration and applies them before tests are run.
# If you are not using ActiveRecord, you can remove this line.
Expand Down
39 changes: 39 additions & 0 deletions spec/requests/api/v1/api_v1_auths_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
require 'rails_helper'

RSpec.describe 'Api::V1::Auth', type: :request do
let(:algorithm) { 'HS256' }
let(:user) { create(:user) }
let(:token_payload) do
now = Time.now.to_i
{
'iss' => 'onit',
'exp' => token_expiration,
'nbf' => now - 60, # available for use 1 minute before now
'iat' => now, # time issued
'jti' => SecureRandom.uuid,
'sub' => user.email
}.merge(user.as_json)
end

let(:token_expiration) { Time.now.to_i + 86_400 }

let(:jwt) { JWT.encode(token_payload, Rails.application.secrets.secret_key_base, algorithm) }

describe 'GET /api/v1/auth/current' do
it 'returns unauthorized when calling with no token' do
get api_v1_auth_current_path
expect(response).to have_http_status(:unauthorized)
end

it 'returns unauthorized with invalud token' do
get api_v1_auth_current_path, headers: { 'Authorization' => 'NOT_VALID' }
expect(response).to have_http_status(:unauthorized)
end

it 'returns success when token is valid with the user' do
get api_v1_auth_current_path, headers: { 'Authorization' => "Bearer #{jwt}" }
expect(response).to have_http_status(:success)
expect(response_json['user'].sort.to_h).to eql(user.as_json.except('id', 'created_at', 'updated_at', 'oauth_token', 'oauth_expires_at').sort.to_h)
end
end
end
3 changes: 3 additions & 0 deletions spec/support/factory_gir.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
end
11 changes: 11 additions & 0 deletions spec/support/response_json.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module ResponseJSON
def response_json
JSON.parse(response.body)
rescue
response.body
end
end

RSpec.configure do |config|
config.include ResponseJSON
end

0 comments on commit 7a59f93

Please sign in to comment.