summaryrefslogtreecommitdiff
path: root/features
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-06-22 18:00:11 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-06-22 18:00:11 +0200
commit73e003013f1f6f81f3ca3518784d41d608490403 (patch)
tree44ea8d05e155938f265fd577ec3d57a4c7e45feb /features
parent3fe3cbf222a036d4487b9630e2abfc58ec7515cf (diff)
parentcc9b5c49d1de2a9e1e90895700376793b9d614f6 (diff)
downloadgitlab-ce-73e003013f1f6f81f3ca3518784d41d608490403.tar.gz
Merge branch 'master' into admin-edit-identities
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Conflicts: app/views/admin/users/show.html.haml
Diffstat (limited to 'features')
-rw-r--r--features/project/commits/comments.feature1
-rw-r--r--features/project/merge_requests.feature2
-rw-r--r--features/project/source/multiselect_blob.feature85
-rw-r--r--features/project/wiki.feature2
-rw-r--r--features/snippets/snippets.feature13
-rw-r--r--features/steps/admin/broadcast_messages.rb2
-rw-r--r--features/steps/admin/settings.rb6
-rw-r--r--features/steps/dashboard/new_project.rb2
-rw-r--r--features/steps/groups.rb2
-rw-r--r--features/steps/profile/profile.rb12
-rw-r--r--features/steps/project/merge_requests.rb41
-rw-r--r--features/steps/project/project.rb2
-rw-r--r--features/steps/project/source/multiselect_blob.rb58
-rw-r--r--features/steps/search.rb12
-rw-r--r--features/steps/shared/authentication.rb4
-rw-r--r--features/steps/shared/diff_note.rb44
-rw-r--r--features/steps/shared/note.rb14
-rw-r--r--features/steps/snippets/snippets.rb20
-rw-r--r--features/support/env.rb1
19 files changed, 124 insertions, 199 deletions
diff --git a/features/project/commits/comments.feature b/features/project/commits/comments.feature
index c41075d7ad4..320f008abb6 100644
--- a/features/project/commits/comments.feature
+++ b/features/project/commits/comments.feature
@@ -39,6 +39,7 @@ Feature: Project Commits Comments
@javascript
Scenario: I can delete a comment
Given I leave a comment like "XML attached"
+ Then I should see a comment saying "XML attached"
And I delete a comment
Then I should not see a comment saying "XML attached"
diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature
index eb091c291e9..d043badbc46 100644
--- a/features/project/merge_requests.feature
+++ b/features/project/merge_requests.feature
@@ -11,7 +11,7 @@ Feature: Project Merge Requests
And I should not see "Feature NS-03" in merge requests
Scenario: I should see rejected merge requests
- Given I click link "Rejected"
+ Given I click link "Closed"
Then I should see "Feature NS-03" in merge requests
And I should not see "Bug NS-04" in merge requests
diff --git a/features/project/source/multiselect_blob.feature b/features/project/source/multiselect_blob.feature
deleted file mode 100644
index 63b7cb77a93..00000000000
--- a/features/project/source/multiselect_blob.feature
+++ /dev/null
@@ -1,85 +0,0 @@
-Feature: Project Source Multiselect Blob
- Background:
- Given I sign in as a user
- And I own project "Shop"
- And I visit ".gitignore" file in repo
-
- @javascript
- Scenario: I click line 1 in file
- When I click line 1 in file
- Then I should see "L1" as URI fragment
- And I should see line 1 highlighted
-
- @javascript
- Scenario: I shift-click line 1 in file
- When I shift-click line 1 in file
- Then I should see "L1" as URI fragment
- And I should see line 1 highlighted
-
- @javascript
- Scenario: I click line 1 then click line 2 in file
- When I click line 1 in file
- Then I should see "L1" as URI fragment
- And I should see line 1 highlighted
- Then I click line 2 in file
- Then I should see "L2" as URI fragment
- And I should see line 2 highlighted
-
- @javascript
- Scenario: I click various line numbers to test multiselect
- Then I click line 1 in file
- Then I should see "L1" as URI fragment
- And I should see line 1 highlighted
- Then I shift-click line 2 in file
- Then I should see "L1-2" as URI fragment
- And I should see lines 1-2 highlighted
- Then I shift-click line 3 in file
- Then I should see "L1-3" as URI fragment
- And I should see lines 1-3 highlighted
- Then I click line 3 in file
- Then I should see "L3" as URI fragment
- And I should see line 3 highlighted
- Then I shift-click line 1 in file
- Then I should see "L1-3" as URI fragment
- And I should see lines 1-3 highlighted
- Then I shift-click line 5 in file
- Then I should see "L1-5" as URI fragment
- And I should see lines 1-5 highlighted
- Then I shift-click line 4 in file
- Then I should see "L1-4" as URI fragment
- And I should see lines 1-4 highlighted
- Then I click line 5 in file
- Then I should see "L5" as URI fragment
- And I should see line 5 highlighted
- Then I shift-click line 3 in file
- Then I should see "L3-5" as URI fragment
- And I should see lines 3-5 highlighted
- Then I shift-click line 1 in file
- Then I should see "L1-3" as URI fragment
- And I should see lines 1-3 highlighted
- Then I shift-click line 1 in file
- Then I should see "L1" as URI fragment
- And I should see line 1 highlighted
-
- @javascript
- Scenario: I multiselect lines 1-5 and then go back and forward in history
- When I click line 1 in file
- And I shift-click line 3 in file
- And I shift-click line 2 in file
- And I shift-click line 5 in file
- Then I should see "L1-5" as URI fragment
- And I should see lines 1-5 highlighted
- Then I go back in history
- Then I should see "L1-2" as URI fragment
- And I should see lines 1-2 highlighted
- Then I go back in history
- Then I should see "L1-3" as URI fragment
- And I should see lines 1-3 highlighted
- Then I go back in history
- Then I should see "L1" as URI fragment
- And I should see line 1 highlighted
- Then I go forward in history
- And I go forward in history
- And I go forward in history
- Then I should see "L1-5" as URI fragment
- And I should see lines 1-5 highlighted
diff --git a/features/project/wiki.feature b/features/project/wiki.feature
index 7a70f348754..2ebfa3c1660 100644
--- a/features/project/wiki.feature
+++ b/features/project/wiki.feature
@@ -69,7 +69,7 @@ Feature: Project Wiki
And I click on the "Pages" button
Then I should see non-escaped link in the pages list
- @javascript @focus
+ @javascript
Scenario: Creating an invalid new page
Given I create a New page with an invalid name
Then I should see an error message
diff --git a/features/snippets/snippets.feature b/features/snippets/snippets.feature
index 6e8019c326f..4f617b6bed8 100644
--- a/features/snippets/snippets.feature
+++ b/features/snippets/snippets.feature
@@ -25,4 +25,15 @@ Feature: Snippets
Scenario: I destroy "Personal snippet one"
Given I visit snippet page "Personal snippet one"
And I click link "Destroy"
- Then I should not see "Personal snippet one" in snippets \ No newline at end of file
+ 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"
diff --git a/features/steps/admin/broadcast_messages.rb b/features/steps/admin/broadcast_messages.rb
index 2ecb6f0191a..f6daf852977 100644
--- a/features/steps/admin/broadcast_messages.rb
+++ b/features/steps/admin/broadcast_messages.rb
@@ -36,6 +36,6 @@ class Spinach::Features::AdminBroadcastMessages < Spinach::FeatureSteps
step 'I should see a customized broadcast message' do
expect(page).to have_content 'Application update from 4:00 CST to 5:00 CST'
- expect(page).to have_selector %(div[style="background-color:#f2dede;color:#b94a48"])
+ expect(page).to have_selector %(div[style="background-color: #f2dede; color: #b94a48"])
end
end
diff --git a/features/steps/admin/settings.rb b/features/steps/admin/settings.rb
index 1c0b7a4b712..147a4bd7486 100644
--- a/features/steps/admin/settings.rb
+++ b/features/steps/admin/settings.rb
@@ -11,9 +11,9 @@ class Spinach::Features::AdminSettings < Spinach::FeatureSteps
end
step 'I should see application settings saved' do
- expect(current_application_settings.gravatar_enabled).to be_false
- expect(current_application_settings.home_page_url).to eq 'https://about.gitlab.com/'
- expect(page).to have_content 'Application settings saved successfully'
+ expect(current_application_settings.gravatar_enabled).to be_falsey
+ expect(current_application_settings.home_page_url).to eq "https://about.gitlab.com/"
+ expect(page).to have_content "Application settings saved successfully"
end
step 'I click on "Service Templates"' do
diff --git a/features/steps/dashboard/new_project.rb b/features/steps/dashboard/new_project.rb
index b4ade65ee53..d4440c1fb4d 100644
--- a/features/steps/dashboard/new_project.rb
+++ b/features/steps/dashboard/new_project.rb
@@ -10,7 +10,7 @@ class Spinach::Features::NewProject < Spinach::FeatureSteps
end
step 'I see "New project" page' do
- expect(page).to have_content("Project path")
+ expect(page).to have_content('Project path')
end
step 'I click on "Import project from GitHub"' do
diff --git a/features/steps/groups.rb b/features/steps/groups.rb
index c6c855a7c22..6221163ac54 100644
--- a/features/steps/groups.rb
+++ b/features/steps/groups.rb
@@ -154,7 +154,7 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
end
step 'I should not see group "Owned" avatar' do
- expect(Group.find_by(name: "Owned").avatar?).to be_false
+ expect(Group.find_by(name: "Owned").avatar?).to eq false
end
step 'I should not see the "Remove avatar" button' do
diff --git a/features/steps/profile/profile.rb b/features/steps/profile/profile.rb
index 10bd307320e..3f19bed8a0b 100644
--- a/features/steps/profile/profile.rb
+++ b/features/steps/profile/profile.rb
@@ -53,7 +53,7 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
end
step 'I should see my gravatar' do
- expect(@user.avatar?).to be_false
+ expect(@user.avatar?).to eq false
end
step 'I should not see the "Remove avatar" button' do
@@ -87,11 +87,15 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
end
step "I should see a missing password error message" do
- expect(page).to have_content "You must provide a valid current password"
+ page.within ".flash-container" do
+ expect(page).to have_content "You must provide a valid current password"
+ end
end
step "I should see a password error message" do
- expect(page).to have_content "Password confirmation doesn't match"
+ page.within '.alert' do
+ expect(page).to have_content "Password confirmation doesn't match"
+ end
end
step 'I reset my token' do
@@ -120,7 +124,7 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
step "I am not an ldap user" do
current_user.identities.delete
- expect(current_user.ldap_user?).to be_false
+ expect(current_user.ldap_user?).to eq false
end
step 'I redirected to expired password page' do
diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb
index 62c64e60f6d..5684d661527 100644
--- a/features/steps/project/merge_requests.rb
+++ b/features/steps/project/merge_requests.rb
@@ -19,8 +19,8 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
click_link "All"
end
- step 'I click link "Rejected"' do
- click_link "Rejected"
+ step 'I click link "Closed"' do
+ click_link "Closed"
end
step 'I should see merge request "Wiki Feature"' do
@@ -31,8 +31,8 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
step 'I should see closed merge request "Bug NS-04"' do
merge_request = MergeRequest.find_by!(title: "Bug NS-04")
- expect(merge_request.closed?).to be_true
- expect(page).to have_content "Rejected by"
+ expect(merge_request).to be_closed
+ expect(page).to have_content "Closed by"
end
step 'I should see merge request "Bug NS-04"' do
@@ -125,7 +125,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
expect(buttons.count).to eq(2)
buttons.each do |b|
- expect(expect(b['href'])).not_to have_content('json')
+ expect(b['href']).not_to have_content('json')
end
end
@@ -164,20 +164,26 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
end
step 'I should see a discussion has started on diff' do
- expect(page).to have_content "#{current_user.name} started a discussion"
- expect(page).to have_content sample_commit.line_code_path
- expect(page).to have_content "Line is wrong"
+ page.within(".notes .discussion") do
+ page.should have_content "#{current_user.name} started a discussion"
+ page.should have_content sample_commit.line_code_path
+ page.should have_content "Line is wrong"
+ end
end
step 'I should see a discussion has started on commit diff' do
- expect(page).to have_content "#{current_user.name} started a discussion on commit"
- expect(page).to have_content sample_commit.line_code_path
- expect(page).to have_content "Line is wrong"
+ page.within(".notes .discussion") do
+ page.should have_content "#{current_user.name} started a discussion on commit"
+ page.should have_content sample_commit.line_code_path
+ page.should have_content "Line is wrong"
+ end
end
step 'I should see a discussion has started on commit' do
- expect(page).to have_content "#{current_user.name} started a discussion on commit"
- expect(page).to have_content "One comment to rule them all"
+ page.within(".notes .discussion") do
+ page.should have_content "#{current_user.name} started a discussion on commit"
+ page.should have_content "One comment to rule them all"
+ end
end
step 'merge request is mergeable' do
@@ -206,7 +212,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
step 'I should see merged request' do
page.within '.issue-box' do
- expect(page).to have_content "Accepted"
+ expect(page).to have_content "Merged"
end
end
@@ -329,12 +335,13 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
end
def leave_comment(message)
- page.within(".js-discussion-note-form") do
+ page.within(".js-discussion-note-form", visible: true) do
fill_in "note_note", with: message
click_button "Add Comment"
end
-
- expect(page).to have_content message
+ page.within(".notes_holder", visible: true) do
+ expect(page).to have_content message
+ end
end
def init_diff_note_first_file
diff --git a/features/steps/project/project.rb b/features/steps/project/project.rb
index ee4c7cd0f06..e4465a1c3b7 100644
--- a/features/steps/project/project.rb
+++ b/features/steps/project/project.rb
@@ -59,7 +59,7 @@ class Spinach::Features::Project < Spinach::FeatureSteps
end
step 'I should see the default project avatar' do
- expect(@project.avatar?).to be_false
+ expect(@project.avatar?).to eq false
end
step 'I should not see the "Remove avatar" button' do
diff --git a/features/steps/project/source/multiselect_blob.rb b/features/steps/project/source/multiselect_blob.rb
deleted file mode 100644
index 8e14623b892..00000000000
--- a/features/steps/project/source/multiselect_blob.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-class Spinach::Features::ProjectSourceMultiselectBlob < Spinach::FeatureSteps
- include SharedAuthentication
- include SharedProject
- include SharedPaths
-
- class << self
- def click_line_steps(*line_numbers)
- line_numbers.each do |line_number|
- step "I click line #{line_number} in file" do
- find("#L#{line_number}").click
- end
-
- step "I shift-click line #{line_number} in file" do
- script = "$('#L#{line_number}').trigger($.Event('click', { shiftKey: true }));"
- execute_script(script)
- end
- end
- end
-
- def check_state_steps(*ranges)
- ranges.each do |range|
- fragment = range.kind_of?(Array) ? "L#{range.first}-#{range.last}" : "L#{range}"
- pluralization = range.kind_of?(Array) ? "s" : ""
-
- step "I should see \"#{fragment}\" as URI fragment" do
- expect(URI.parse(current_url).fragment).to eq fragment
- end
-
- step "I should see line#{pluralization} #{fragment[1..-1]} highlighted" do
- ids = Array(range).map { |n| "LC#{n}" }
- extra = false
-
- highlighted = page.all("#tree-content-holder .highlight .line.hll")
- highlighted.each do |element|
- extra ||= ids.delete(element[:id]).nil?
- end
-
- expect(extra).to be_false and ids.should be_empty
- end
- end
- end
- end
-
- click_line_steps *Array(1..5)
- check_state_steps *Array(1..5), Array(1..2), Array(1..3), Array(1..4), Array(1..5), Array(3..5)
-
- step 'I go back in history' do
- go_back
- end
-
- step 'I go forward in history' do
- go_forward
- end
-
- step 'I click on ".gitignore" file in repo' do
- click_link ".gitignore"
- end
-end
diff --git a/features/steps/search.rb b/features/steps/search.rb
index fec5d9f0e4e..87893aa0205 100644
--- a/features/steps/search.rb
+++ b/features/steps/search.rb
@@ -52,7 +52,9 @@ class Spinach::Features::Search < Spinach::FeatureSteps
end
step 'I should see code results for project "Shop"' do
- expect(page).to have_content 'Update capybara, rspec-rails, poltergeist to recent versions'
+ page.within('.results') do
+ page.should have_content 'Update capybara, rspec-rails, poltergeist to recent versions'
+ end
end
step 'I search for "Contibuting"' do
@@ -71,7 +73,9 @@ class Spinach::Features::Search < Spinach::FeatureSteps
end
step 'I should see "Foo" link in the search results' do
- expect(find(:css, '.search-results')).to have_link 'Foo'
+ page.within('.results') do
+ find(:css, '.search-results').should have_link 'Foo'
+ end
end
step 'I should not see "Bar" link in the search results' do
@@ -79,7 +83,9 @@ class Spinach::Features::Search < Spinach::FeatureSteps
end
step 'I should see "test_wiki" link in the search results' do
- expect(find(:css, '.search-results')).to have_link 'test_wiki.md'
+ page.within('.results') do
+ find(:css, '.search-results').should have_link 'test_wiki.md'
+ end
end
step 'project has Wiki content' do
diff --git a/features/steps/shared/authentication.rb b/features/steps/shared/authentication.rb
index 3c0f2a9406a..735e0ef6108 100644
--- a/features/steps/shared/authentication.rb
+++ b/features/steps/shared/authentication.rb
@@ -28,6 +28,10 @@ module SharedAuthentication
logout
end
+ step "I logout directly" do
+ logout_direct
+ end
+
def current_user
@user || User.first
end
diff --git a/features/steps/shared/diff_note.rb b/features/steps/shared/diff_note.rb
index c4f89ca31c9..27a95aeb19a 100644
--- a/features/steps/shared/diff_note.rb
+++ b/features/steps/shared/diff_note.rb
@@ -20,11 +20,14 @@ module SharedDiffNote
end
step 'I leave a diff comment like "Typo, please fix"' do
- click_diff_line(sample_commit.line_code)
- page.within("#{diff_file_selector} form[rel$='#{sample_commit.line_code}']") do
- fill_in "note[note]", with: "Typo, please fix"
- find(".js-comment-button").trigger("click")
- sleep 0.05
+ page.within(diff_file_selector) do
+ click_diff_line(sample_commit.line_code)
+
+ page.within("form[rel$='#{sample_commit.line_code}']") do
+ fill_in "note[note]", with: "Typo, please fix"
+ find(".js-comment-button").trigger("click")
+ sleep 0.05
+ end
end
end
@@ -45,28 +48,37 @@ module SharedDiffNote
end
step 'I preview a diff comment text like "Should fix it :smile:"' do
- click_diff_line(sample_commit.line_code)
- page.within("#{diff_file_selector} form[rel$='#{sample_commit.line_code}']") do
- fill_in "note[note]", with: "Should fix it :smile:"
- find('.js-md-preview-button').click
+ page.within(diff_file_selector) do
+ click_diff_line(sample_commit.line_code)
+
+ page.within("form[rel$='#{sample_commit.line_code}']") do
+ fill_in "note[note]", with: "Should fix it :smile:"
+ find('.js-md-preview-button').click
+ end
end
end
step 'I preview another diff comment text like "DRY this up"' do
- click_diff_line(sample_commit.del_line_code)
+ page.within(diff_file_selector) do
+ click_diff_line(sample_commit.del_line_code)
- page.within("#{diff_file_selector} form[rel$='#{sample_commit.del_line_code}']") do
- fill_in "note[note]", with: "DRY this up"
- find('.js-md-preview-button').click
+ page.within("form[rel$='#{sample_commit.del_line_code}']") do
+ fill_in "note[note]", with: "DRY this up"
+ find('.js-md-preview-button').click
+ end
end
end
step 'I open a diff comment form' do
- click_diff_line(sample_commit.line_code)
+ page.within(diff_file_selector) do
+ click_diff_line(sample_commit.line_code)
+ end
end
step 'I open another diff comment form' do
- click_diff_line(sample_commit.del_line_code)
+ page.within(diff_file_selector) do
+ click_diff_line(sample_commit.del_line_code)
+ end
end
step 'I write a diff comment like ":-1: I don\'t like this"' do
@@ -194,7 +206,7 @@ module SharedDiffNote
end
def diff_file_selector
- ".diff-file:nth-of-type(1)"
+ '.diff-file:nth-of-type(1)'
end
def click_diff_line(code)
diff --git a/features/steps/shared/note.rb b/features/steps/shared/note.rb
index b2675546a14..f6aabfefeff 100644
--- a/features/steps/shared/note.rb
+++ b/features/steps/shared/note.rb
@@ -2,8 +2,10 @@ module SharedNote
include Spinach::DSL
step 'I delete a comment' do
- find('.note').hover
- find(".js-note-delete").click
+ page.within('.notes') do
+ find('.note').hover
+ find(".js-note-delete").click
+ end
end
step 'I haven\'t written any comment text' do
@@ -16,7 +18,6 @@ module SharedNote
page.within(".js-main-target-form") do
fill_in "note[note]", with: "XML attached"
click_button "Add Comment"
- sleep 0.05
end
end
@@ -123,13 +124,14 @@ module SharedNote
end
step 'I edit the last comment with a +1' do
- find(".note").hover
- find('.js-note-edit').click
+ page.within(".notes") do
+ find(".note").hover
+ find('.js-note-edit').click
+ end
page.within(".current-note-edit-form") do
fill_in 'note[note]', with: '+1 Awesome!'
click_button 'Save Comment'
- sleep 0.05
end
end
diff --git a/features/steps/snippets/snippets.rb b/features/steps/snippets/snippets.rb
index 09fdd1b5a13..426da2918ea 100644
--- a/features/steps/snippets/snippets.rb
+++ b/features/steps/snippets/snippets.rb
@@ -31,6 +31,18 @@ class Spinach::Features::Snippets < Spinach::FeatureSteps
click_button "Create snippet"
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"
@@ -58,7 +70,15 @@ class Spinach::Features::Snippets < Spinach::FeatureSteps
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
diff --git a/features/support/env.rb b/features/support/env.rb
index d4a878ea4ce..672251af084 100644
--- a/features/support/env.rb
+++ b/features/support/env.rb
@@ -25,6 +25,7 @@ WebMock.allow_net_connect!
Spinach.hooks.before_run do
include RSpec::Mocks::ExampleMethods
+ RSpec::Mocks.setup
TestEnv.init(mailer: false)
include FactoryGirl::Syntax::Methods