Add a controller spec for personal access tokens.
Split the existing feature spec into both feature and controller specs. Feature specs assert on browser DOM, and controller specs assert on database state.
This commit is contained in:
parent
fc7a5a3806
commit
f14d423dc7
|
@ -0,0 +1,49 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Profiles::PersonalAccessTokensController do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
describe '#create' do
|
||||
def created_token
|
||||
PersonalAccessToken.order(:created_at).last
|
||||
end
|
||||
|
||||
before { sign_in(user) }
|
||||
|
||||
it "allows creation of a token" do
|
||||
name = FFaker::Product.brand
|
||||
|
||||
post :create, personal_access_token: { name: name }
|
||||
|
||||
expect(created_token).not_to be_nil
|
||||
expect(created_token.name).to eq(name)
|
||||
expect(created_token.expires_at).to be_nil
|
||||
expect(PersonalAccessToken.active).to include(created_token)
|
||||
end
|
||||
|
||||
it "allows creation of a token with an expiry date" do
|
||||
expires_at = 5.days.from_now
|
||||
|
||||
post :create, personal_access_token: { name: FFaker::Product.brand, expires_at: expires_at }
|
||||
|
||||
expect(created_token).not_to be_nil
|
||||
expect(created_token.expires_at.to_i).to eq(expires_at.to_i)
|
||||
end
|
||||
|
||||
context "scopes" do
|
||||
it "allows creation of a token with scopes" do
|
||||
post :create, personal_access_token: { name: FFaker::Product.brand, scopes: ['api', 'read_user'] }
|
||||
|
||||
expect(created_token).not_to be_nil
|
||||
expect(created_token.scopes).to eq(['api', 'read_user'])
|
||||
end
|
||||
|
||||
it "allows creation of a token with no scopes" do
|
||||
post :create, personal_access_token: { name: FFaker::Product.brand, scopes: [] }
|
||||
|
||||
expect(created_token).not_to be_nil
|
||||
expect(created_token.scopes).to eq([])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -27,54 +27,25 @@ describe 'Profile > Personal Access Tokens', feature: true, js: true do
|
|||
|
||||
describe "token creation" do
|
||||
it "allows creation of a token" do
|
||||
visit profile_personal_access_tokens_path
|
||||
fill_in "Name", with: FFaker::Product.brand
|
||||
name = FFaker::Product.brand
|
||||
|
||||
expect {click_on "Create Personal Access Token"}.to change { PersonalAccessToken.count }.by(1)
|
||||
expect(created_personal_access_token).to eq(PersonalAccessToken.last.token)
|
||||
expect(active_personal_access_tokens).to have_text(PersonalAccessToken.last.name)
|
||||
expect(active_personal_access_tokens).to have_text("Never")
|
||||
end
|
||||
|
||||
it "allows creation of a token with an expiry date" do
|
||||
visit profile_personal_access_tokens_path
|
||||
fill_in "Name", with: FFaker::Product.brand
|
||||
fill_in "Name", with: name
|
||||
|
||||
# Set date to 1st of next month
|
||||
find_field("Expires at").trigger('focus')
|
||||
find("a[title='Next']").click
|
||||
click_on "1"
|
||||
|
||||
expect {click_on "Create Personal Access Token"}.to change { PersonalAccessToken.count }.by(1)
|
||||
expect(created_personal_access_token).to eq(PersonalAccessToken.last.token)
|
||||
expect(active_personal_access_tokens).to have_text(PersonalAccessToken.last.name)
|
||||
# Scopes
|
||||
check "api"
|
||||
check "read_user"
|
||||
|
||||
click_on "Create Personal Access Token"
|
||||
expect(active_personal_access_tokens).to have_text(name)
|
||||
expect(active_personal_access_tokens).to have_text(Date.today.next_month.at_beginning_of_month.to_s(:medium))
|
||||
end
|
||||
|
||||
context "scopes" do
|
||||
it "allows creation of a token with scopes" do
|
||||
visit profile_personal_access_tokens_path
|
||||
fill_in "Name", with: FFaker::Product.brand
|
||||
|
||||
check "api"
|
||||
check "read_user"
|
||||
|
||||
expect {click_on "Create Personal Access Token"}.to change { PersonalAccessToken.count }.by(1)
|
||||
expect(created_personal_access_token).to eq(PersonalAccessToken.last.token)
|
||||
expect(PersonalAccessToken.last.scopes).to match_array(['api', 'read_user'])
|
||||
expect(active_personal_access_tokens).to have_text('api')
|
||||
expect(active_personal_access_tokens).to have_text('read_user')
|
||||
end
|
||||
|
||||
it "allows creation of a token with no scopes" do
|
||||
visit profile_personal_access_tokens_path
|
||||
fill_in "Name", with: FFaker::Product.brand
|
||||
|
||||
expect {click_on "Create Personal Access Token"}.to change { PersonalAccessToken.count }.by(1)
|
||||
expect(created_personal_access_token).to eq(PersonalAccessToken.last.token)
|
||||
expect(PersonalAccessToken.last.scopes).to eq([])
|
||||
expect(active_personal_access_tokens).to have_text('no scopes')
|
||||
end
|
||||
expect(active_personal_access_tokens).to have_text('api')
|
||||
expect(active_personal_access_tokens).to have_text('read_user')
|
||||
end
|
||||
|
||||
context "when creation fails" do
|
||||
|
@ -111,7 +82,7 @@ describe 'Profile > Personal Access Tokens', feature: true, js: true do
|
|||
disallow_personal_access_token_saves!
|
||||
visit profile_personal_access_tokens_path
|
||||
|
||||
expect { click_on "Revoke" }.not_to change { PersonalAccessToken.inactive.count }
|
||||
click_on "Revoke"
|
||||
expect(active_personal_access_tokens).to have_text(personal_access_token.name)
|
||||
expect(page).to have_content("Could not revoke")
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue