Replace project redirects spinach tests with RSpec analog
https://gitlab.com/gitlab-org/gitlab-ce/issues/23036
This commit is contained in:
parent
afd2d38111
commit
335736f627
3 changed files with 74 additions and 105 deletions
|
@ -1,38 +0,0 @@
|
||||||
Feature: Project Redirects
|
|
||||||
Background:
|
|
||||||
Given public project "Community"
|
|
||||||
And private project "Enterprise"
|
|
||||||
|
|
||||||
Scenario: I visit public project page
|
|
||||||
When I visit project "Community" page
|
|
||||||
Then I should see project "Community" home page
|
|
||||||
|
|
||||||
Scenario: I visit private project page
|
|
||||||
When I visit project "Enterprise" page
|
|
||||||
Then I should be redirected to sign in page
|
|
||||||
|
|
||||||
Scenario: I visit a non-existent project page
|
|
||||||
When I visit project "CommunityDoesNotExist" page
|
|
||||||
Then I should be redirected to sign in page
|
|
||||||
|
|
||||||
Scenario: I visit a non-existent project page as user
|
|
||||||
Given I sign in as a user
|
|
||||||
When I visit project "CommunityDoesNotExist" page
|
|
||||||
Then page status code should be 404
|
|
||||||
|
|
||||||
Scenario: I visit unauthorized project page as user
|
|
||||||
Given I sign in as a user
|
|
||||||
When I visit project "Enterprise" page
|
|
||||||
Then page status code should be 404
|
|
||||||
|
|
||||||
Scenario: I visit a public project without signing in
|
|
||||||
When I visit project "Community" page
|
|
||||||
And I should see project "Community" home page
|
|
||||||
And I click on "Sign In"
|
|
||||||
And Authenticate
|
|
||||||
Then I should be redirected to "Community" page
|
|
||||||
|
|
||||||
Scenario: I visit private project page without signing in
|
|
||||||
When I visit project "Enterprise" page
|
|
||||||
And I get redirected to signin page where I sign in
|
|
||||||
Then I should be redirected to "Enterprise" page
|
|
|
@ -1,67 +0,0 @@
|
||||||
class Spinach::Features::ProjectRedirects < Spinach::FeatureSteps
|
|
||||||
include SharedAuthentication
|
|
||||||
include SharedPaths
|
|
||||||
include SharedProject
|
|
||||||
|
|
||||||
step 'public project "Community"' do
|
|
||||||
create(:project, :public, name: 'Community')
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'private project "Enterprise"' do
|
|
||||||
create(:project, :private, name: 'Enterprise')
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I visit project "Community" page' do
|
|
||||||
project = Project.find_by(name: 'Community')
|
|
||||||
visit project_path(project)
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see project "Community" home page' do
|
|
||||||
Gitlab.config.gitlab.should_receive(:host).and_return("www.example.com")
|
|
||||||
page.within '.breadcrumbs .breadcrumb-item-text' do
|
|
||||||
expect(page).to have_content 'Community'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I visit project "Enterprise" page' do
|
|
||||||
project = Project.find_by(name: 'Enterprise')
|
|
||||||
visit project_path(project)
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I visit project "CommunityDoesNotExist" page' do
|
|
||||||
project = Project.find_by(name: 'Community')
|
|
||||||
visit project_path(project) + 'DoesNotExist'
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I click on "Sign In"' do
|
|
||||||
first(:link, "Sign in").click
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'Authenticate' do
|
|
||||||
admin = create(:admin)
|
|
||||||
fill_in "user_login", with: admin.email
|
|
||||||
fill_in "user_password", with: admin.password
|
|
||||||
click_button "Sign in"
|
|
||||||
Thread.current[:current_user] = admin
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should be redirected to "Community" page' do
|
|
||||||
project = Project.find_by(name: 'Community')
|
|
||||||
expect(current_path).to eq "/#{project.full_path}"
|
|
||||||
expect(status_code).to eq 200
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I get redirected to signin page where I sign in' do
|
|
||||||
admin = create(:admin)
|
|
||||||
fill_in "user_login", with: admin.email
|
|
||||||
fill_in "user_password", with: admin.password
|
|
||||||
click_button "Sign in"
|
|
||||||
Thread.current[:current_user] = admin
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should be redirected to "Enterprise" page' do
|
|
||||||
project = Project.find_by(name: 'Enterprise')
|
|
||||||
expect(current_path).to eq "/#{project.full_path}"
|
|
||||||
expect(status_code).to eq 200
|
|
||||||
end
|
|
||||||
end
|
|
74
spec/features/projects/redirects_spec.rb
Normal file
74
spec/features/projects/redirects_spec.rb
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'Project redirects' do
|
||||||
|
let(:user) { create :user }
|
||||||
|
let(:public_project) { create :project, :public }
|
||||||
|
let(:private_project) { create :project, :private }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(Gitlab.config.gitlab).to receive(:host).and_return('www.example.com')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows public project page' do
|
||||||
|
visit project_path(public_project)
|
||||||
|
|
||||||
|
page.within '.breadcrumbs .breadcrumb-item-text' do
|
||||||
|
expect(page).to have_content(public_project.name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to sign in page when project is private' do
|
||||||
|
visit project_path(private_project)
|
||||||
|
|
||||||
|
expect(current_path).to eq(new_user_session_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to sign in page when project does not exist' do
|
||||||
|
visit project_path(build(:project, :public))
|
||||||
|
|
||||||
|
expect(current_path).to eq(new_user_session_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to public project page after signing in' do
|
||||||
|
visit project_path(public_project)
|
||||||
|
|
||||||
|
first(:link, 'Sign in').click
|
||||||
|
|
||||||
|
fill_in 'user_login', with: user.email
|
||||||
|
fill_in 'user_password', with: user.password
|
||||||
|
click_button 'Sign in'
|
||||||
|
|
||||||
|
expect(status_code).to eq(200)
|
||||||
|
expect(current_path).to eq("/#{public_project.full_path}")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to private project page after sign in' do
|
||||||
|
visit project_path(private_project)
|
||||||
|
|
||||||
|
owner = private_project.owner
|
||||||
|
fill_in 'user_login', with: owner.email
|
||||||
|
fill_in 'user_password', with: owner.password
|
||||||
|
click_button 'Sign in'
|
||||||
|
|
||||||
|
expect(status_code).to eq(200)
|
||||||
|
expect(current_path).to eq("/#{private_project.full_path}")
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when signed in' do
|
||||||
|
before do
|
||||||
|
sign_in(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns 404 status when project does not exist' do
|
||||||
|
visit project_path(build(:project, :public))
|
||||||
|
|
||||||
|
expect(status_code).to eq(404)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns 404 when project is private' do
|
||||||
|
visit project_path(private_project)
|
||||||
|
|
||||||
|
expect(status_code).to eq(404)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue