Merge branch '23036-replace-snippets-spinach' into 'master'
Replace 'snippets/snippets.feature' spinach with rspec See merge request !12385
This commit is contained in:
commit
d9a5d92140
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Replace 'snippets/snippets.feature' spinach with rspec
|
||||||
|
merge_request: 12385
|
||||||
|
author: Alexander Randa @randaalex
|
|
@ -1,40 +0,0 @@
|
||||||
@snippets
|
|
||||||
Feature: Snippets
|
|
||||||
Background:
|
|
||||||
Given I sign in as a user
|
|
||||||
And I have public "Personal snippet one" snippet
|
|
||||||
And I have private "Personal snippet private" snippet
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: I create new snippet
|
|
||||||
Given I visit new snippet page
|
|
||||||
And I submit new snippet "Personal snippet three"
|
|
||||||
Then I should see snippet "Personal snippet three"
|
|
||||||
|
|
||||||
Scenario: I update "Personal snippet one"
|
|
||||||
Given I visit snippet page "Personal snippet one"
|
|
||||||
And I click link "Edit"
|
|
||||||
And I submit new title "Personal snippet new title"
|
|
||||||
Then I should see "Personal snippet new title"
|
|
||||||
|
|
||||||
Scenario: Set "Personal snippet one" public
|
|
||||||
Given I visit snippet page "Personal snippet one"
|
|
||||||
And I click link "Edit"
|
|
||||||
And I uncheck "Private" checkbox
|
|
||||||
Then I should see "Personal snippet one" public
|
|
||||||
|
|
||||||
Scenario: I destroy "Personal snippet one"
|
|
||||||
Given I visit snippet page "Personal snippet one"
|
|
||||||
And I click link "Delete"
|
|
||||||
Then I should not see "Personal snippet one" in snippets
|
|
||||||
|
|
||||||
Scenario: I create new internal snippet
|
|
||||||
Given I logout directly
|
|
||||||
And I sign in as an admin
|
|
||||||
Then I visit new snippet page
|
|
||||||
And I submit new internal snippet
|
|
||||||
Then I visit snippet page "Internal personal snippet one"
|
|
||||||
And I logout directly
|
|
||||||
Then I sign in as a user
|
|
||||||
Given I visit new snippet page
|
|
||||||
Then I visit snippet page "Internal personal snippet one"
|
|
|
@ -487,10 +487,6 @@ module SharedPaths
|
||||||
visit explore_snippets_path
|
visit explore_snippets_path
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I visit new snippet page' do
|
|
||||||
visit new_snippet_path
|
|
||||||
end
|
|
||||||
|
|
||||||
def root_ref
|
def root_ref
|
||||||
@project.repository.root_ref
|
@project.repository.root_ref
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
module SharedSnippet
|
|
||||||
include Spinach::DSL
|
|
||||||
|
|
||||||
step 'I have public "Personal snippet one" snippet' do
|
|
||||||
create(:personal_snippet,
|
|
||||||
title: "Personal snippet one",
|
|
||||||
content: "Test content",
|
|
||||||
file_name: "snippet.rb",
|
|
||||||
visibility_level: Snippet::PUBLIC,
|
|
||||||
author: current_user)
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I have private "Personal snippet private" snippet' do
|
|
||||||
create(:personal_snippet,
|
|
||||||
title: "Personal snippet private",
|
|
||||||
content: "Provate content",
|
|
||||||
file_name: "private_snippet.rb",
|
|
||||||
visibility_level: Snippet::PRIVATE,
|
|
||||||
author: current_user)
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I have internal "Personal snippet internal" snippet' do
|
|
||||||
create(:personal_snippet,
|
|
||||||
title: "Personal snippet internal",
|
|
||||||
content: "Provate content",
|
|
||||||
file_name: "internal_snippet.rb",
|
|
||||||
visibility_level: Snippet::INTERNAL,
|
|
||||||
author: current_user)
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I have a public many lined snippet' do
|
|
||||||
create(:personal_snippet,
|
|
||||||
title: 'Many lined snippet',
|
|
||||||
content: <<-END.gsub(/^\s+\|/, ''),
|
|
||||||
|line one
|
|
||||||
|line two
|
|
||||||
|line three
|
|
||||||
|line four
|
|
||||||
|line five
|
|
||||||
|line six
|
|
||||||
|line seven
|
|
||||||
|line eight
|
|
||||||
|line nine
|
|
||||||
|line ten
|
|
||||||
|line eleven
|
|
||||||
|line twelve
|
|
||||||
|line thirteen
|
|
||||||
|line fourteen
|
|
||||||
END
|
|
||||||
file_name: 'many_lined_snippet.rb',
|
|
||||||
visibility_level: Snippet::PUBLIC,
|
|
||||||
author: current_user)
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'There is public "Personal snippet one" snippet' do
|
|
||||||
create(:personal_snippet,
|
|
||||||
title: "Personal snippet one",
|
|
||||||
content: "Test content",
|
|
||||||
file_name: "snippet.rb",
|
|
||||||
visibility_level: Snippet::PUBLIC,
|
|
||||||
author: create(:user))
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,86 +0,0 @@
|
||||||
class Spinach::Features::Snippets < Spinach::FeatureSteps
|
|
||||||
include SharedAuthentication
|
|
||||||
include SharedPaths
|
|
||||||
include SharedProject
|
|
||||||
include SharedSnippet
|
|
||||||
include WaitForRequests
|
|
||||||
|
|
||||||
step 'I click link "Personal snippet one"' do
|
|
||||||
click_link "Personal snippet one"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should not see "Personal snippet one" in snippets' do
|
|
||||||
expect(page).not_to have_content "Personal snippet one"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I click link "Edit"' do
|
|
||||||
page.within ".detail-page-header" do
|
|
||||||
first(:link, "Edit").click
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I click link "Delete"' do
|
|
||||||
first(:link, "Delete").click
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I submit new snippet "Personal snippet three"' do
|
|
||||||
fill_in "personal_snippet_title", with: "Personal snippet three"
|
|
||||||
fill_in "personal_snippet_file_name", with: "my_snippet.rb"
|
|
||||||
page.within('.file-editor') do
|
|
||||||
find('.ace_editor').native.send_keys 'Content of snippet three'
|
|
||||||
end
|
|
||||||
click_button "Create snippet"
|
|
||||||
wait_for_requests
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I submit new internal snippet' do
|
|
||||||
fill_in "personal_snippet_title", with: "Internal personal snippet one"
|
|
||||||
fill_in "personal_snippet_file_name", with: "my_snippet.rb"
|
|
||||||
choose 'personal_snippet_visibility_level_10'
|
|
||||||
|
|
||||||
page.within('.file-editor') do
|
|
||||||
find(:xpath, "//input[@id='personal_snippet_content']").set 'Content of internal snippet'
|
|
||||||
end
|
|
||||||
|
|
||||||
click_button "Create snippet"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see snippet "Personal snippet three"' do
|
|
||||||
expect(page).to have_content "Personal snippet three"
|
|
||||||
expect(page).to have_content "Content of snippet three"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I submit new title "Personal snippet new title"' do
|
|
||||||
fill_in "personal_snippet_title", with: "Personal snippet new title"
|
|
||||||
click_button "Save"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see "Personal snippet new title"' do
|
|
||||||
expect(page).to have_content "Personal snippet new title"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I uncheck "Private" checkbox' do
|
|
||||||
choose "Internal"
|
|
||||||
click_button "Save"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see "Personal snippet one" public' do
|
|
||||||
expect(page).to have_no_xpath("//i[@class='public-snippet']")
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I visit snippet page "Personal snippet one"' do
|
|
||||||
visit snippet_path(snippet)
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I visit snippet page "Internal personal snippet one"' do
|
|
||||||
visit snippet_path(internal_snippet)
|
|
||||||
end
|
|
||||||
|
|
||||||
def snippet
|
|
||||||
@snippet ||= PersonalSnippet.find_by!(title: "Personal snippet one")
|
|
||||||
end
|
|
||||||
|
|
||||||
def internal_snippet
|
|
||||||
@snippet ||= PersonalSnippet.find_by!(title: "Internal personal snippet one")
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,4 +0,0 @@
|
||||||
FactoryGirl.define do
|
|
||||||
factory :personal_snippet, parent: :snippet, class: :PersonalSnippet do
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,5 +0,0 @@
|
||||||
FactoryGirl.define do
|
|
||||||
factory :project_snippet, parent: :snippet, class: :ProjectSnippet do
|
|
||||||
project factory: :empty_project
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -18,4 +18,11 @@ FactoryGirl.define do
|
||||||
visibility_level Snippet::PRIVATE
|
visibility_level Snippet::PRIVATE
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
factory :project_snippet, parent: :snippet, class: :ProjectSnippet do
|
||||||
|
project factory: :empty_project
|
||||||
|
end
|
||||||
|
|
||||||
|
factory :personal_snippet, parent: :snippet, class: :PersonalSnippet do
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
feature 'Create Snippet', :js, feature: true do
|
feature 'User creates snippet', :js, feature: true do
|
||||||
include DropzoneHelper
|
include DropzoneHelper
|
||||||
|
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
gitlab_sign_in :user
|
sign_in(user)
|
||||||
visit new_snippet_path
|
visit new_snippet_path
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
feature 'User deletes snippet', feature: true do
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
let(:content) { 'puts "test"' }
|
||||||
|
let(:snippet) { create(:personal_snippet, :public, content: content, author: user) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sign_in(user)
|
||||||
|
|
||||||
|
visit snippet_path(snippet)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'deletes the snippet' do
|
||||||
|
first(:link, 'Delete').click
|
||||||
|
|
||||||
|
expect(page).not_to have_content(snippet.title)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,6 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
feature 'Edit Snippet', :js, feature: true do
|
feature 'User edits snippet', :js, feature: true do
|
||||||
include DropzoneHelper
|
include DropzoneHelper
|
||||||
|
|
||||||
let(:file_name) { 'test.rb' }
|
let(:file_name) { 'test.rb' }
|
||||||
|
@ -10,7 +10,7 @@ feature 'Edit Snippet', :js, feature: true do
|
||||||
let(:snippet) { create(:personal_snippet, :public, file_name: file_name, content: content, author: user) }
|
let(:snippet) { create(:personal_snippet, :public, file_name: file_name, content: content, author: user) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
gitlab_sign_in(user)
|
sign_in(user)
|
||||||
|
|
||||||
visit edit_snippet_path(snippet)
|
visit edit_snippet_path(snippet)
|
||||||
wait_for_requests
|
wait_for_requests
|
||||||
|
@ -27,7 +27,7 @@ feature 'Edit Snippet', :js, feature: true do
|
||||||
|
|
||||||
it 'updates the snippet with files attached' do
|
it 'updates the snippet with files attached' do
|
||||||
dropzone_file Rails.root.join('spec', 'fixtures', 'banana_sample.gif')
|
dropzone_file Rails.root.join('spec', 'fixtures', 'banana_sample.gif')
|
||||||
expect(page.find_field("personal_snippet_description").value).to have_content('banana_sample')
|
expect(page.find_field('personal_snippet_description').value).to have_content('banana_sample')
|
||||||
|
|
||||||
click_button('Save changes')
|
click_button('Save changes')
|
||||||
wait_for_requests
|
wait_for_requests
|
||||||
|
@ -35,4 +35,24 @@ feature 'Edit Snippet', :js, feature: true do
|
||||||
link = find('a.no-attachment-icon img[alt="banana_sample"]')['src']
|
link = find('a.no-attachment-icon img[alt="banana_sample"]')['src']
|
||||||
expect(link).to match(%r{/uploads/personal_snippet/#{snippet.id}/\h{32}/banana_sample\.gif\z})
|
expect(link).to match(%r{/uploads/personal_snippet/#{snippet.id}/\h{32}/banana_sample\.gif\z})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'updates the snippet to make it internal' do
|
||||||
|
choose 'Internal'
|
||||||
|
|
||||||
|
click_button 'Save changes'
|
||||||
|
wait_for_requests
|
||||||
|
|
||||||
|
expect(page).to have_no_xpath("//i[@class='fa fa-lock']")
|
||||||
|
expect(page).to have_xpath("//i[@class='fa fa-shield']")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'updates the snippet to make it public' do
|
||||||
|
choose 'Public'
|
||||||
|
|
||||||
|
click_button 'Save changes'
|
||||||
|
wait_for_requests
|
||||||
|
|
||||||
|
expect(page).to have_no_xpath("//i[@class='fa fa-lock']")
|
||||||
|
expect(page).to have_xpath("//i[@class='fa fa-globe']")
|
||||||
|
end
|
||||||
end
|
end
|
Loading…
Reference in New Issue