Commit a7957059 authored by Rémy Coutable's avatar Rémy Coutable

[EE] Replace factory_girl_rails with factory_bot_rails

I've followed the [upgrade guide](https://github.com/thoughtbot/factory_bot/blob/4-9-0-stable/UPGRADE_FROM_FACTORY_GIRL.md) and ran these two commands:

```
grep -e FactoryGirl **/*.rake **/*.rb -s -l | xargs sed -i "" "s|FactoryGirl|FactoryBot|"
grep -e factory_girl **/*.rake **/*.rb -s -l | xargs sed -i "" "s|factory_girl|factory_bot|"
```
Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent 4ea931c2
......@@ -323,7 +323,7 @@ group :development, :test do
gem 'fuubar', '~> 2.2.0'
gem 'database_cleaner', '~> 1.5.0'
gem 'factory_girl_rails', '~> 4.7.0'
gem 'factory_bot_rails', '~> 4.8.2'
gem 'rspec-rails', '~> 3.6.0'
gem 'rspec-retry', '~> 0.4.5'
gem 'spinach-rails', '~> 0.2.1'
......
......@@ -216,10 +216,10 @@ GEM
excon (0.57.1)
execjs (2.6.0)
expression_parser (0.9.0)
factory_girl (4.7.0)
factory_bot (4.8.2)
activesupport (>= 3.0.0)
factory_girl_rails (4.7.0)
factory_girl (~> 4.7.0)
factory_bot_rails (4.8.2)
factory_bot (~> 4.8.2)
railties (>= 3.0.0)
faraday (0.12.2)
multipart-post (>= 1.2, < 3)
......@@ -1051,7 +1051,7 @@ DEPENDENCIES
elasticsearch-rails (~> 0.1.9)
email_reply_trimmer (~> 0.1)
email_spec (~> 1.6.0)
factory_girl_rails (~> 4.7.0)
factory_bot_rails (~> 4.8.2)
faraday (~> 0.12)
faraday_middleware-aws-signers-v4
ffaker (~> 2.4)
......
......@@ -11,7 +11,7 @@ class Projects::NotesController < Projects::ApplicationController
# Controller actions are returned from AbstractController::Base and methods of parent classes are
# excluded in order to return only specific controller related methods.
# That is ok for the app (no :create method in ancestors)
# but fails for tests because there is a :create method on FactoryGirl (one of the ancestors)
# but fails for tests because there is a :create method on FactoryBot (one of the ancestors)
#
# see https://github.com/rails/rails/blob/v4.2.7/actionpack/lib/abstract_controller/base.rb#L78
#
......
......@@ -180,7 +180,7 @@ module Gitlab
config.middleware.insert_after ActionDispatch::Flash, 'Gitlab::Middleware::ReadOnly'
config.generators do |g|
g.factory_girl false
g.factory_bot false
end
config.after_initialize do
......
......@@ -140,8 +140,8 @@ class Gitlab::Seeder::CycleAnalytics
issue.update(milestone: @project.milestones.sample)
else
label_name = "#{FFaker::Product.brand}-#{FFaker::Product.brand}-#{rand(1000)}"
list_label = FactoryGirl.create(:label, title: label_name, project: issue.project)
FactoryGirl.create(:list, board: FactoryGirl.create(:board, project: issue.project), label: list_label)
list_label = FactoryBot.create(:label, title: label_name, project: issue.project)
FactoryBot.create(:list, board: FactoryBot.create(:board, project: issue.project), label: list_label)
issue.update(labels: [list_label])
end
......
......@@ -8,7 +8,7 @@ might encounter or should avoid during development of GitLab CE and EE.
Consider the following factory:
```ruby
FactoryGirl.define do
FactoryBot.define do
factory :label do
sequence(:title) { |n| "label#{n}" }
end
......@@ -53,7 +53,7 @@ When run, this spec doesn't do what we might expect:
(compared using ==)
```
That's because FactoryGirl sequences are not reseted for each example.
That's because FactoryBot sequences are not reseted for each example.
Please remember that sequence-generated values exist only to avoid having to
explicitly set attributes that have a uniqueness constraint when using a factory.
......
......@@ -8,8 +8,8 @@ and effective _as well as_ fast.
Here are some things to keep in mind regarding test performance:
- `double` and `spy` are faster than `FactoryGirl.build(...)`
- `FactoryGirl.build(...)` and `.build_stubbed` are faster than `.create`.
- `double` and `spy` are faster than `FactoryBot.build(...)`
- `FactoryBot.build(...)` and `.build_stubbed` are faster than `.create`.
- Don't `create` an object when `build`, `build_stubbed`, `attributes_for`,
`spy`, or `double` will do. Database persistence is slow!
- Don't mark a feature as requiring JavaScript (through `@javascript` in
......@@ -254,13 +254,13 @@ end
### Factories
GitLab uses [factory_girl] as a test fixture replacement.
GitLab uses [factory_bot] as a test fixture replacement.
- Factory definitions live in `spec/factories/`, named using the pluralization
of their corresponding model (`User` factories are defined in `users.rb`).
- There should be only one top-level factory definition per file.
- FactoryGirl methods are mixed in to all RSpec groups. This means you can (and
should) call `create(...)` instead of `FactoryGirl.create(...)`.
- FactoryBot methods are mixed in to all RSpec groups. This means you can (and
should) call `create(...)` instead of `FactoryBot.create(...)`.
- Make use of [traits] to clean up definitions and usages.
- When defining a factory, don't define attributes that are not required for the
resulting record to pass validation.
......@@ -269,8 +269,8 @@ GitLab uses [factory_girl] as a test fixture replacement.
- Factories don't have to be limited to `ActiveRecord` objects.
[See example](https://gitlab.com/gitlab-org/gitlab-ce/commit/0b8cefd3b2385a21cfed779bd659978c0402766d).
[factory_girl]: https://github.com/thoughtbot/factory_girl
[traits]: http://www.rubydoc.info/gems/factory_girl/file/GETTING_STARTED.md#Traits
[factory_bot]: https://github.com/thoughtbot/factory_bot
[traits]: http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Traits
### Fixtures
......
......@@ -33,7 +33,7 @@ changes should be tested.
## [Testing best practices](best_practices.md)
Everything you should know about how to write good tests: RSpec, FactoryGirl,
Everything you should know about how to write good tests: RSpec, FactoryBot,
system tests, parameterized tests etc.
---
......
......@@ -35,7 +35,7 @@ Spinach.hooks.before_run do
# web editor and merge
TestEnv.disable_pre_receive
include FactoryGirl::Syntax::Methods
include FactoryBot::Syntax::Methods
include GitlabRoutingHelper
end
......
require 'spec_helper'
describe Gitlab::Geo::JwtRequestDecoder do
let!(:primary_node) { FactoryGirl.create(:geo_node, :primary) }
let!(:primary_node) { FactoryBot.create(:geo_node, :primary) }
let(:data) { { input: 123 } }
let(:request) { Gitlab::Geo::TransferRequest.new(data) }
......
......@@ -2,12 +2,12 @@ require 'spec_helper'
describe Gitlab::Geo::OauthSession do
subject { described_class.new }
let(:oauth_app) { FactoryGirl.create(:doorkeeper_application) }
let(:oauth_app) { FactoryBot.create(:doorkeeper_application) }
let(:oauth_return_to) { 'http://localhost:3000/oauth/geo/callback' }
let(:dummy_state) { 'salt:hmac:return_to' }
let(:valid_state) { described_class.new(return_to: oauth_return_to).generate_oauth_state }
let(:access_token) { FactoryGirl.create(:doorkeeper_access_token).token }
let(:user) { FactoryGirl.build(:user) }
let(:access_token) { FactoryBot.create(:doorkeeper_access_token).token }
let(:user) { FactoryBot.build(:user) }
before do
allow(subject).to receive(:oauth_app) { oauth_app }
......
......@@ -63,7 +63,7 @@ describe GeoNode, type: :model do
end
context 'cache expiration' do
let(:new_node) { FactoryGirl.build(:geo_node) }
let(:new_node) { FactoryBot.build(:geo_node) }
it 'expires cache when saved' do
expect(new_node).to receive(:expire_cache!).at_least(:once)
......
FactoryGirl.define do
FactoryBot.define do
factory :abuse_report do
reporter factory: :user
user
......
# Read about factories at https://github.com/thoughtbot/factory_girl
# Read about factories at https://github.com/thoughtbot/factory_bot
FactoryGirl.define do
FactoryBot.define do
factory :appearance do
title "GitLab Enterprise Edition"
description "Open source software to collaborate on code"
......
FactoryGirl.define do
FactoryBot.define do
factory :application_setting do
end
end
# Read about factories at https://github.com/thoughtbot/factory_girl
# Read about factories at https://github.com/thoughtbot/factory_bot
FactoryGirl.define do
FactoryBot.define do
factory :approval do
merge_request
user
......
# Read about factories at https://github.com/thoughtbot/factory_girl
# Read about factories at https://github.com/thoughtbot/factory_bot
FactoryGirl.define do
FactoryBot.define do
factory :approver_group do
target factory: :merge_request
group
......
# Read about factories at https://github.com/thoughtbot/factory_girl
# Read about factories at https://github.com/thoughtbot/factory_bot
FactoryGirl.define do
FactoryBot.define do
factory :approver do
target factory: :merge_request
user
......
FactoryGirl.define do
FactoryBot.define do
factory :audit_event, aliases: [:user_audit_event] do
user
type 'SecurityEvent'
......
FactoryGirl.define do
FactoryBot.define do
factory :award_emoji do
name "thumbsup"
user
......
FactoryGirl.define do
FactoryBot.define do
factory :board_label do
association :board
association :label
......
FactoryGirl.define do
FactoryBot.define do
factory :board do
sequence(:name) { |n| "board#{n}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :broadcast_message do
message "MyText"
starts_at 1.day.ago
......
FactoryGirl.define do
FactoryBot.define do
factory :chat_name, class: ChatName do
user factory: :user
service factory: :service
......
FactoryGirl.define do
FactoryBot.define do
factory :chat_team, class: ChatTeam do
sequence(:team_id) { |n| "abcdefghijklm#{n}" }
namespace factory: :group
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_build_trace_section_name, class: Ci::BuildTraceSectionName do
sequence(:name) { |n| "section_#{n}" }
project factory: :project
......
include ActionDispatch::TestProcess
FactoryGirl.define do
FactoryBot.define do
factory :ci_build, class: Ci::Build do
name 'test'
stage 'test'
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_group_variable, class: Ci::GroupVariable do
sequence(:key) { |n| "VARIABLE_#{n}" }
value 'VARIABLE_VALUE'
......
include ActionDispatch::TestProcess
FactoryGirl.define do
FactoryBot.define do
factory :ci_job_artifact, class: Ci::JobArtifact do
job factory: :ci_build
file_type :archive
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_pipeline_schedule, class: Ci::PipelineSchedule do
cron '0 1 * * *'
cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_pipeline_schedule_variable, class: Ci::PipelineScheduleVariable do
sequence(:key) { |n| "VARIABLE_#{n}" }
value 'VARIABLE_VALUE'
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_pipeline_variable, class: Ci::PipelineVariable do
sequence(:key) { |n| "VARIABLE_#{n}" }
value 'VARIABLE_VALUE'
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_empty_pipeline, class: Ci::Pipeline do
source :push
ref 'master'
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_runner_project, class: Ci::RunnerProject do
runner factory: :ci_runner
project
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_runner, class: Ci::Runner do
sequence(:description) { |n| "My runner#{n}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_sources_pipeline, class: Ci::Sources::Pipeline do
after(:build) do |source|
source.project ||= source.pipeline.project
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_stage, class: Ci::LegacyStage do
skip_create
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_trigger_request, class: Ci::TriggerRequest do
trigger factory: :ci_trigger
end
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_trigger_without_token, class: Ci::Trigger do
owner
......
FactoryGirl.define do
FactoryBot.define do
factory :ci_variable, class: Ci::Variable do
sequence(:key) { |n| "VARIABLE_#{n}" }
value 'VARIABLE_VALUE'
......
FactoryGirl.define do
FactoryBot.define do
factory :cluster_applications_helm, class: Clusters::Applications::Helm do
cluster factory: %i(cluster provided_by_gcp)
......
FactoryGirl.define do
FactoryBot.define do
factory :cluster_applications_ingress, class: Clusters::Applications::Ingress do
cluster factory: %i(cluster provided_by_gcp)
......
FactoryGirl.define do
FactoryBot.define do
factory :cluster, class: Clusters::Cluster do
user
name 'test-cluster'
......
FactoryGirl.define do
FactoryBot.define do
factory :cluster_platform_kubernetes, class: Clusters::Platforms::Kubernetes do
cluster
namespace nil
......
FactoryGirl.define do
FactoryBot.define do
factory :cluster_provider_gcp, class: Clusters::Providers::Gcp do
cluster
gcp_project_id 'test-gcp-project'
......
FactoryGirl.define do
FactoryBot.define do
factory :commit_status, class: CommitStatus do
name 'default'
stage 'test'
......
require_relative '../support/repo_helpers'
FactoryGirl.define do
FactoryBot.define do
factory :commit do
git_commit RepoHelpers.sample_commit
project
......
FactoryGirl.define do
FactoryBot.define do
factory :container_repository do
name 'test_container_image'
project
......
FactoryGirl.define do
FactoryBot.define do
factory :conversational_development_index_metric, class: ConversationalDevelopmentIndex::Metric do
leader_issues 9.256
instance_issues 1.234
......
FactoryGirl.define do
FactoryBot.define do
factory :deploy_keys_project do
deploy_key
project
......
FactoryGirl.define do
FactoryBot.define do
factory :deployment, class: Deployment do
sha '97de212e80737a608d939f648d959671fb0a0142'
ref 'master'
......
FactoryGirl.define do
FactoryBot.define do
factory :doorkeeper_access_grant, class: Doorkeeper::AccessGrant do
sequence(:resource_owner_id) { |n| n }
association :application, factory: :doorkeeper_application
......
FactoryGirl.define do
FactoryBot.define do
factory :email do
user
email { generate(:email_alias) }
......
FactoryGirl.define do
FactoryBot.define do
factory :environment, class: Environment do
sequence(:name) { |n| "environment#{n}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :epic_issue do
epic
issue
......
FactoryGirl.define do
FactoryBot.define do
factory :epic do
title { generate(:title) }
group
......
FactoryGirl.define do
FactoryBot.define do
factory :event do
project
author factory: :user
......
FactoryGirl.define do
FactoryBot.define do
factory :file_uploader do
skip_create
......
FactoryGirl.define do
FactoryBot.define do
factory :fork_network_member do
association :project
association :fork_network
......
FactoryGirl.define do
FactoryBot.define do
factory :fork_network do
association :root_project, factory: :project
end
......
FactoryGirl.define do
FactoryBot.define do
factory :forked_project_link do
association :forked_to_project, factory: [:project, :repository]
association :forked_from_project, factory: [:project, :repository]
......
FactoryGirl.define do
FactoryBot.define do
factory :geo_event_log, class: Geo::EventLog do
trait :created_event do
repository_created_event factory: :geo_repository_created_event
......
FactoryGirl.define do
FactoryBot.define do
factory :geo_event_log_state, class: Geo::EventLogState do
sequence(:event_id)
end
......
FactoryGirl.define do
FactoryBot.define do
factory :geo_file_registry, class: Geo::FileRegistry do
sequence(:file_id)
file_type :file
......
FactoryGirl.define do
FactoryBot.define do
factory :geo_project_registry, class: Geo::ProjectRegistry do
project
last_repository_synced_at nil
......
FactoryGirl.define do
FactoryBot.define do
factory :geo_node_namespace_link do
geo_node
namespace
......
FactoryGirl.define do
FactoryBot.define do
factory :geo_node_status do
sequence(:id)
geo_node
......
FactoryGirl.define do
FactoryBot.define do
factory :geo_node do
# Start at a number higher than the current port to avoid the GeoNode
# "lock out" validation
......
FactoryGirl.define do
FactoryBot.define do
sequence(:gitaly_commit_id) { Digest::SHA1.hexdigest(Time.now.to_f.to_s) }
factory :gitaly_commit, class: Gitaly::GitCommit do
......
FactoryGirl.define do
FactoryBot.define do
factory :gitaly_commit_author, class: Gitaly::CommitAuthor do
skip_create
......
require_relative '../support/gpg_helpers'
FactoryGirl.define do
FactoryBot.define do
factory :gpg_key_subkey do
gpg_key
......
require_relative '../support/gpg_helpers'
FactoryGirl.define do
FactoryBot.define do
factory :gpg_key do
key GpgHelpers::User1.public_key
user
......
require_relative '../support/gpg_helpers'
FactoryGirl.define do
FactoryBot.define do
factory :gpg_signature do
commit_sha { Digest::SHA1.hexdigest(SecureRandom.hex) }
project
......
FactoryGirl.define do
FactoryBot.define do
factory :group_custom_attribute do
group
sequence(:key) { |n| "key#{n}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :group_hook do
url { generate(:url) }
end
......
FactoryGirl.define do
FactoryBot.define do
factory :group_member do
access_level { GroupMember::OWNER }
group
......
FactoryGirl.define do
FactoryBot.define do
factory :group, class: Group, parent: :namespace do
sequence(:name) { |n| "group#{n}" }
path { name.downcase.gsub(/\s/, '_') }
......
FactoryGirl.define do
FactoryBot.define do
factory :identity do
provider 'ldapmain'
extern_uid 'my-ldap-id'
......
FactoryGirl.define do
FactoryBot.define do
factory :instance_configuration do
skip_create
end
......
FactoryGirl.define do
FactoryBot.define do
factory :issue_link do
source factory: :issue
target factory: :issue
......
FactoryGirl.define do
FactoryBot.define do
factory :issue do
title { generate(:title) }
author
......
require_relative '../support/helpers/key_generator_helper'
FactoryGirl.define do
FactoryBot.define do
factory :key do
title
key { Spec::Support::Helpers::KeyGeneratorHelper.new(1024).generate + ' dummy@gitlab.com' }
......
FactoryGirl.define do
FactoryBot.define do
factory :label_link do
label
target factory: :issue
......
FactoryGirl.define do
FactoryBot.define do
factory :label_priority do
project
label
......
FactoryGirl.define do
FactoryBot.define do
trait :base_label do
title { generate(:label_title) }
color "#990000"
......
FactoryGirl.define do
FactoryBot.define do
factory :ldap_group_link do
cn 'group1'
group_access Gitlab::Access::GUEST
......
include ActionDispatch::TestProcess
FactoryGirl.define do
FactoryBot.define do
factory :lfs_object do
sequence(:oid) { |n| "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a%05x" % n }
size 499013
......
FactoryGirl.define do
FactoryBot.define do
factory :lfs_objects_project do
lfs_object
project
......
FactoryGirl.define do
FactoryBot.define do
factory :gitlab_license, class: "Gitlab::License" do
skip_create
......
FactoryGirl.define do
FactoryBot.define do
factory :list do
board
label
......
FactoryGirl.define do
FactoryBot.define do
factory :merge_request do
title { generate(:title) }
author
......
FactoryGirl.define do
FactoryBot.define do
factory :merge_requests_closing_issues do
issue
merge_request
......
FactoryGirl.define do
FactoryBot.define do
factory :milestone do
title
......
FactoryGirl.define do
FactoryBot.define do
factory :namespace_statistics do
namespace factory: :namespace
end
......
FactoryGirl.define do
FactoryBot.define do
factory :namespace do
sequence(:name) { |n| "namespace#{n}" }
path { name.downcase.gsub(/\s/, '_') }
......
......@@ -2,7 +2,7 @@ require_relative '../support/repo_helpers'
include ActionDispatch::TestProcess
FactoryGirl.define do
FactoryBot.define do
factory :note do
project
note { generate(:title) }
......
FactoryGirl.define do
FactoryBot.define do
factory :notification_setting do
source factory: :project
user
......
FactoryGirl.define do
FactoryBot.define do
factory :oauth_access_grant do
resource_owner_id { create(:user).id }
application
......
FactoryGirl.define do
FactoryBot.define do
factory :oauth_access_token do
resource_owner
application
......
FactoryGirl.define do
FactoryBot.define do
factory :oauth_application, class: 'Doorkeeper::Application', aliases: [:application] do
sequence(:name) { |n| "OAuth App #{n}" }
uid { Doorkeeper::OAuth::Helpers::UniqueToken.generate }
......
FactoryGirl.define do
FactoryBot.define do
factory :pages_domain, class: 'PagesDomain' do
domain 'my.domain.com'
......
FactoryGirl.define do
FactoryBot.define do
factory :path_lock do
project
user
......
FactoryGirl.define do
FactoryBot.define do
factory :personal_access_token do
user
token { SecureRandom.hex(50) }
......
# EE-only
FactoryGirl.define do
FactoryBot.define do
factory :plan do
factory :free_plan do
name EE::Namespace::FREE_PLAN
......
FactoryGirl.define do
FactoryBot.define do
factory :project_auto_devops do
project
enabled true
......
FactoryGirl.define do
FactoryBot.define do
factory :project_custom_attribute do
project
sequence(:key) { |n| "key#{n}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :project_group_link do
project
group
......
FactoryGirl.define do
FactoryBot.define do
factory :project_hook do
url { generate(:url) }
enable_ssl_verification false
......
FactoryGirl.define do
FactoryBot.define do
factory :project_member do
user
project
......
FactoryGirl.define do
FactoryBot.define do
factory :project_statistics do
project
......
FactoryGirl.define do
FactoryBot.define do
factory :project_wiki do
skip_create
......
require_relative '../support/test_env'
FactoryGirl.define do
FactoryBot.define do
# Project without repository
#
# Project does not have bare repository.
......
FactoryGirl.define do
FactoryBot.define do
factory :protected_branch do
name
project
......
FactoryGirl.define do
FactoryBot.define do
factory :protected_branch_merge_access_level, class: ProtectedBranch::MergeAccessLevel do
user nil
group nil
......
FactoryGirl.define do
FactoryBot.define do
factory :protected_branch_push_access_level, class: ProtectedBranch::PushAccessLevel do
user nil
group nil
......
FactoryGirl.define do
FactoryBot.define do
factory :protected_tag do
name
project
......
FactoryGirl.define do
FactoryBot.define do
factory :protected_tag_create_access_level, class: ProtectedTag::CreateAccessLevel do
user nil
group nil
......
# Read about factories at https://github.com/thoughtbot/factory_girl
# Read about factories at https://github.com/thoughtbot/factory_bot
FactoryGirl.define do
FactoryBot.define do
factory :push_rule do
force_push_regex 'feature\/.*'
deny_delete_tag false
......
FactoryGirl.define do
FactoryBot.define do
factory :release do
tag "v1.1.0"
description "Awesome release"
......
require_relative '../support/test_env'
FactoryGirl.define do
FactoryBot.define do
factory :remote_mirror, class: 'RemoteMirror' do
association :project, :repository
url "http://foo:bar@test.com"
......
FactoryGirl.define do
FactoryBot.define do
factory :sent_notification do
project
recipient factory: :user
......
FactoryGirl.define do
FactoryBot.define do
sequence(:username) { |n| "user#{n}" }
sequence(:name) { |n| "John Doe#{n}" }
sequence(:email) { |n| "user#{n}@example.org" }
......
FactoryGirl.define do
FactoryBot.define do
factory :service_hook do
url { generate(:url) }
service
......
FactoryGirl.define do
FactoryBot.define do
factory :service do
project
type 'Service'
......
FactoryGirl.define do
FactoryBot.define do
factory :slack_integration do
sequence(:team_id) { |n| "T123#{n}" }
sequence(:user_id) { |n| "U123#{n}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :snippet do
author
title { generate(:title) }
......
FactoryGirl.define do
FactoryBot.define do
factory :spam_log do
user
sequence(:source_ip) { |n| "42.42.42.#{n % 255}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :subscription do
user
project
......
FactoryGirl.define do
FactoryBot.define do
factory :system_hook do
url { generate(:url) }
end
......
FactoryGirl.define do
FactoryBot.define do
factory :system_note_metadata do
note
action 'merge'
......
# Read about factories at https://github.com/thoughtbot/factory_girl
# Read about factories at https://github.com/thoughtbot/factory_bot
FactoryGirl.define do
FactoryBot.define do
factory :timelog do
time_spent 3600
user
......
FactoryGirl.define do
FactoryBot.define do
factory :todo do
project
author
......
FactoryGirl.define do
FactoryBot.define do
# TrendingProject
factory :trending_project, class: 'TrendingProject' do
project
......
FactoryGirl.define do
FactoryBot.define do
factory :u2f_registration do
certificate { FFaker::BaconIpsum.characters(728) }
key_handle { FFaker::BaconIpsum.characters(86) }
......
FactoryGirl.define do
FactoryBot.define do
factory :upload do
model { build(:project) }
path { "uploads/-/system/project/avatar/avatar.jpg" }
......
FactoryGirl.define do
FactoryBot.define do
factory :user_agent_detail do
ip_address '127.0.0.1'
user_agent 'AppleWebKit/537.36'
......
FactoryGirl.define do
FactoryBot.define do
factory :user_custom_attribute do
user
sequence(:key) { |n| "key#{n}" }
......
FactoryGirl.define do
FactoryBot.define do
factory :user, aliases: [:author, :assignee, :recipient, :owner, :resource_owner] do
email { generate(:email) }
name { generate(:name) }
......
FactoryGirl.define do
FactoryBot.define do
factory :web_hook_log do
web_hook factory: :project_hook
trigger 'push_hooks'
......
FactoryGirl.define do
FactoryBot.define do
factory :wiki_directory do
skip_create
......
require 'ostruct'
FactoryGirl.define do
FactoryBot.define do
factory :wiki_page do
transient do
attrs do
......
require 'spec_helper'
describe 'factories' do
FactoryGirl.factories.each do |factory|
FactoryBot.factories.each do |factory|
describe "#{factory.name} factory" do
it 'does not raise error when built' do
expect { build(factory.name) }.not_to raise_error
......
......@@ -13,8 +13,8 @@ describe "Admin Runners" do
context "when there are runners" do
before do
runner = FactoryGirl.create(:ci_runner, contacted_at: Time.now)
FactoryGirl.create(:ci_build, pipeline: pipeline, runner_id: runner.id)
runner = FactoryBot.create(:ci_runner, contacted_at: Time.now)
FactoryBot.create(:ci_build, pipeline: pipeline, runner_id: runner.id)
visit admin_runners_path
end
......@@ -25,8 +25,8 @@ describe "Admin Runners" do
describe 'search' do
before do
FactoryGirl.create :ci_runner, description: 'runner-foo'
FactoryGirl.create :ci_runner, description: 'runner-bar'
FactoryBot.create :ci_runner, description: 'runner-foo'
FactoryBot.create :ci_runner, description: 'runner-bar'
end
it 'shows correct runner when description matches' do
......@@ -62,11 +62,11 @@ describe "Admin Runners" do
end
describe "Runner show page" do
let(:runner) { FactoryGirl.create :ci_runner }
let(:runner) { FactoryBot.create :ci_runner }
before do
@project1 = FactoryGirl.create(:project)
@project2 = FactoryGirl.create(:project)
@project1 = FactoryBot.create(:project)
@project2 = FactoryBot.create(:project)
visit admin_runner_path(runner)
end
......
......@@ -2,17 +2,17 @@ require 'spec_helper'
describe RunnersHelper do
it "returns - not contacted yet" do
runner = FactoryGirl.build :ci_runner
runner = FactoryBot.build :ci_runner
expect(runner_status_icon(runner)).to include("not connected yet")
end
it "returns offline text" do
runner = FactoryGirl.build(:ci_runner, contacted_at: 1.day.ago, active: true)
runner = FactoryBot.build(:ci_runner, contacted_at: 1.day.ago, active: true)
expect(runner_status_icon(runner)).to include("Runner is offline")
end
it "returns online text" do
runner = FactoryGirl.build(:ci_runner, contacted_at: 1.second.ago, active: true)
runner = FactoryBot.build(:ci_runner, contacted_at: 1.second.ago, active: true)
expect(runner_status_icon(runner)).to include("Runner is online")
end
end
......@@ -228,7 +228,7 @@ describe Gitlab::BackgroundMigration::MigrateEventsToPushEventPayloads, :migrati
let(:projects) { table(:projects) }
let(:project) { projects.create(namespace_id: namespace.id, creator_id: author.id) }
# We can not rely on FactoryGirl as the state of Event may change in ways that
# We can not rely on FactoryBot as the state of Event may change in ways that
# the background migration does not expect, hence we use the Event class of
# the migration itself.
def create_push_event(project, author, data = nil)
......
......@@ -120,7 +120,7 @@ describe Ci::Pipeline, :mailer do
end
it "calculates average when there is one build without coverage" do
FactoryGirl.create(:ci_build, pipeline: pipeline)
FactoryBot.create(:ci_build, pipeline: pipeline)
expect(pipeline.coverage).to be_nil
end
end
......@@ -439,7 +439,7 @@ describe Ci::Pipeline, :mailer do
describe 'merge request metrics' do
let(:project) { create(:project, :repository) }
let(:pipeline) { FactoryGirl.create(:ci_empty_pipeline, status: 'created', project: project, ref: 'master', sha: project.repository.commit('master').id) }
let(:pipeline) { FactoryBot.create(:ci_empty_pipeline, status: 'created', project: project, ref: 'master', sha: project.repository.commit('master').id) }
let!(:merge_request) { create(:merge_request, source_project: project, source_branch: pipeline.ref) }
before do
......
......@@ -51,24 +51,24 @@ describe Ci::Runner do
describe '#display_name' do
it 'returns the description if it has a value' do
runner = FactoryGirl.build(:ci_runner, description: 'Linux/Ruby-1.9.3-p448')
runner = FactoryBot.build(:ci_runner, description: 'Linux/Ruby-1.9.3-p448')
expect(runner.display_name).to eq 'Linux/Ruby-1.9.3-p448'
end
it 'returns the token if it does not have a description' do
runner = FactoryGirl.create(:ci_runner)
runner = FactoryBot.create(:ci_runner)
expect(runner.display_name).to eq runner.description
end
it 'returns the token if the description is an empty string' do
runner = FactoryGirl.build(:ci_runner, description: '', token: 'token')
runner = FactoryBot.build(:ci_runner, description: '', token: 'token')
expect(runner.display_name).to eq runner.token
end
end
describe '#assign_to' do
let!(:project) { FactoryGirl.create :project }
let!(:shared_runner) { FactoryGirl.create(:ci_runner, :shared) }
let!(:project) { FactoryBot.create :project }
let!(:shared_runner) { FactoryBot.create(:ci_runner, :shared) }
before do
shared_runner.assign_to(project)
......@@ -83,15 +83,15 @@ describe Ci::Runner do
subject { described_class.online }
before do
@runner1 = FactoryGirl.create(:ci_runner, :shared, contacted_at: 1.year.ago)
@runner2 = FactoryGirl.create(:ci_runner, :shared, contacted_at: 1.second.ago)
@runner1 = FactoryBot.create(:ci_runner, :shared, contacted_at: 1.year.ago)
@runner2 = FactoryBot.create(:ci_runner, :shared, contacted_at: 1.second.ago)
end
it { is_expected.to eq([@runner2])}
end
describe '#online?' do
let(:runner) { FactoryGirl.create(:ci_runner, :shared) }
let(:runner) { FactoryBot.create(:ci_runner, :shared) }
subject { runner.online? }
......@@ -268,7 +268,7 @@ describe Ci::Runner do
end
describe '#status' do
let(:runner) { FactoryGirl.create(:ci_runner, :shared, contacted_at: 1.second.ago) }
let(:runner) { FactoryBot.create(:ci_runner, :shared, contacted_at: 1.second.ago) }
subject { runner.status }
......@@ -442,9 +442,9 @@ describe Ci::Runner do
describe "belongs_to_one_project?" do
it "returns false if there are two projects runner assigned to" do
runner = FactoryGirl.create(:ci_runner)
project = FactoryGirl.create(:project)
project1 = FactoryGirl.create(:project)
runner = FactoryBot.create(:ci_runner)
project = FactoryBot.create(:project)
project1 = FactoryBot.create(:project)
project.runners << runner
project1.runners << runner
......@@ -452,8 +452,8 @@ describe Ci::Runner do
end
it "returns true" do
runner = FactoryGirl.create(:ci_runner)
project = FactoryGirl.create(:project)
runner = FactoryBot.create(:ci_runner)
project = FactoryBot.create(:project)
project.runners << runner
expect(runner.belongs_to_one_project?).to be_truthy
......
......@@ -126,7 +126,7 @@ describe Deployment do
subject { deployment.stop_action }
context 'when no other actions' do
let(:deployment) { FactoryGirl.build(:deployment, deployable: build) }
let(:deployment) { FactoryBot.build(:deployment, deployable: build) }
it { is_expected.to be_nil }
end
......@@ -135,13 +135,13 @@ describe Deployment do
let!(:close_action) { create(:ci_build, :manual, pipeline: build.pipeline, name: 'close_app') }
context 'when matching action is defined' do
let(:deployment) { FactoryGirl.build(:deployment, deployable: build, on_stop: 'close_other_app') }
let(:deployment) { FactoryBot.build(:deployment, deployable: build, on_stop: 'close_other_app') }
it { is_expected.to be_nil }
end
context 'when no matching action is defined' do
let(:deployment) { FactoryGirl.build(:deployment, deployable: build, on_stop: 'close_app') }
let(:deployment) { FactoryBot.build(:deployment, deployable: build, on_stop: 'close_app') }
it { is_expected.to eq(close_action) }
end
......@@ -159,7 +159,7 @@ describe Deployment do
context 'when matching action is defined' do
let(:build) { create(:ci_build) }
let(:deployment) { FactoryGirl.build(:deployment, deployable: build, on_stop: 'close_app') }
let(:deployment) { FactoryBot.build(:deployment, deployable: build, on_stop: 'close_app') }
let!(:close_action) { create(:ci_build, :manual, pipeline: build.pipeline, name: 'close_app') }
it { is_expected.to be_truthy }
......
......@@ -327,12 +327,12 @@ describe Project do
describe 'project token' do
it 'sets an random token if none provided' do
project = FactoryGirl.create :project, runners_token: ''
project = FactoryBot.create :project, runners_token: ''
expect(project.runners_token).not_to eq('')
end
it 'does not set an random token if one provided' do
project = FactoryGirl.create :project, runners_token: 'my-token'
project = FactoryBot.create :project, runners_token: 'my-token'
expect(project.runners_token).to eq('my-token')
end
end
......
......@@ -234,7 +234,7 @@ describe RemoteMirror do
end
def create_mirror(params)
project = FactoryGirl.create(:project, :repository)
project = FactoryBot.create(:project, :repository)
project.remote_mirrors.create!(params)
end
end
......@@ -2,11 +2,11 @@ require 'spec_helper'
module Ci
describe RegisterJobService do
let!(:project) { FactoryGirl.create :project, shared_runners_enabled: false }
let!(:pipeline) { FactoryGirl.create :ci_pipeline, project: project }
let!(:pending_job) { FactoryGirl.create :ci_build, pipeline: pipeline }
let!(:shared_runner) { FactoryGirl.create(:ci_runner, is_shared: true) }
let!(:specific_runner) { FactoryGirl.create(:ci_runner, is_shared: false) }
let!(:project) { FactoryBot.create :project, shared_runners_enabled: false }
let!(:pipeline) { FactoryBot.create :ci_pipeline, project: project }
let!(:pending_job) { FactoryBot.create :ci_build, pipeline: pipeline }
let!(:shared_runner) { FactoryBot.create(:ci_runner, is_shared: true) }
let!(:specific_runner) { FactoryBot.create(:ci_runner, is_shared: false) }
before do
specific_runner.assign_to(project)
......@@ -74,11 +74,11 @@ module Ci
let!(:project3) { create :project, shared_runners_enabled: true }
let!(:pipeline3) { create :ci_pipeline, project: project3 }
let!(:build1_project1) { pending_job }
let!(:build2_project1) { FactoryGirl.create :ci_build, pipeline: pipeline }
let!(:build3_project1) { FactoryGirl.create :ci_build, pipeline: pipeline }
let!(:build1_project2) { FactoryGirl.create :ci_build, pipeline: pipeline2 }
let!(:build2_project2) { FactoryGirl.create :ci_build, pipeline: pipeline2 }
let!(:build1_project3) { FactoryGirl.create :ci_build, pipeline: pipeline3 }
let!(:build2_project1) { FactoryBot.create :ci_build, pipeline: pipeline }
let!(:build3_project1) { FactoryBot.create :ci_build, pipeline: pipeline }
let!(:build1_project2) { FactoryBot.create :ci_build, pipeline: pipeline2 }
let!(:build2_project2) { FactoryBot.create :ci_build, pipeline: pipeline2 }
let!(:build1_project3) { FactoryBot.create :ci_build, pipeline: pipeline3 }
it 'prefers projects without builds first' do
# it gets for one build from each of the projects
......
......@@ -41,7 +41,7 @@ describe Ci::RetryBuildService do
description: 'my-job', stage: 'test', pipeline: pipeline,
auto_canceled_by: create(:ci_empty_pipeline, project: project)) do |build|
##
# TODO, workaround for FactoryGirl limitation when having both
# TODO, workaround for FactoryBot limitation when having both
# stage (text) and stage_id (integer) columns in the table.
build.stage_id = stage.id
end
......
require 'spec_helper'
describe Oauth2::LogoutTokenValidationService do
let(:user) { FactoryGirl.create(:user) }
let(:access_token) { FactoryGirl.create(:doorkeeper_access_token, resource_owner_id: user.id).token }
let(:user) { FactoryBot.create(:user) }
let(:access_token) { FactoryBot.create(:doorkeeper_access_token, resource_owner_id: user.id).token }
let(:logout_state) { Gitlab::Geo::OauthSession.new(access_token: access_token).generate_logout_state }
context '#execute' do
......
......@@ -199,7 +199,7 @@ RSpec::Matchers.define :match_asset_path do |expected|
end
end
FactoryGirl::SyntaxRunner.class_eval do
FactoryBot::SyntaxRunner.class_eval do
include RSpec::Mocks::ExampleMethods
end
......
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
config.include FactoryBot::Syntax::Methods
end
......@@ -8,7 +8,7 @@
# The class renders `spec/fixtures/markdown.md.erb` using ERB, allowing for
# reference to the factory-created objects.
class MarkdownFeature
include FactoryGirl::Syntax::Methods
include FactoryBot::Syntax::Methods
def user
@user ||= create(:user)
......
......@@ -83,10 +83,10 @@ module TestEnv
setup_gitaly
# Create repository for FactoryGirl.create(:project)
# Create repository for FactoryBot.create(:project)
setup_factory_repo
# Create repository for FactoryGirl.create(:forked_project_with_submodules)
# Create repository for FactoryBot.create(:forked_project_with_submodules)
setup_forked_repo
end
......
......@@ -2,6 +2,6 @@ class TestLicense
def self.init
Gitlab::License.encryption_key = OpenSSL::PKey::RSA.generate(2048)
FactoryGirl.create(:license)
FactoryBot.create(:license)
end
end
......@@ -8,7 +8,7 @@ describe RecordsUploads do
storage :file
def model
FactoryGirl.build_stubbed(:user)
FactoryBot.build_stubbed(:user)
end
end
......
......@@ -187,7 +187,7 @@ describe 'projects/jobs/show' do
context 'when incomplete trigger_request is used' do
before do
build.trigger_request = FactoryGirl.build(:ci_trigger_request, trigger: nil)
build.trigger_request = FactoryBot.build(:ci_trigger_request, trigger: nil)
end
it 'test should not render token block' do
......@@ -199,7 +199,7 @@ describe 'projects/jobs/show' do
context 'when complete trigger_request is used' do
before do
build.trigger_request = FactoryGirl.build(:ci_trigger_request)
build.trigger_request = FactoryBot.build(:ci_trigger_request)
end
it 'should render token' do
......
......@@ -6,7 +6,7 @@ describe HistoricalDataWorker do
describe '#perform' do
context 'with a trial license' do
before do
FactoryGirl.create(:license, trial: true)
FactoryBot.create(:license, trial: true)
end
it 'does not track historical data' do
......@@ -18,7 +18,7 @@ describe HistoricalDataWorker do
context 'with a non trial license' do
before do
FactoryGirl.create(:license)
FactoryBot.create(:license)
end
it 'tracks historical data' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment