DEV: Prefabrication (test optimization) (#7414)

* Introduced fab!, a helper that creates database state for a group

It's almost identical to let_it_be, except:

 1. It creates a new object for each test by default,
 2. You can disable it using PREFABRICATION=0
This commit is contained in:
Daniel Waterworth
2019-05-07 03:12:20 +00:00
committed by Sam
parent 329969ea20
commit e219588142
258 changed files with 1402 additions and 1364 deletions

View File

@ -4,7 +4,7 @@ require 'rails_helper'
require_dependency 'validators/post_validator'
describe Validators::PostValidator do
let(:topic) { Fabricate(:topic) }
fab!(:topic) { Fabricate(:topic) }
let(:post) { build(:post, topic: topic) }
let(:validator) { Validators::PostValidator.new({}) }
@ -26,8 +26,8 @@ describe Validators::PostValidator do
end
describe "when post's topic is a PM between a human and a non human user" do
let(:robot) { Fabricate(:user, id: -3) }
let(:user) { Fabricate(:user) }
fab!(:robot) { Fabricate(:user, id: -3) }
fab!(:user) { Fabricate(:user) }
let(:topic) do
Fabricate(:private_message_topic, topic_allowed_users: [
@ -189,8 +189,8 @@ describe Validators::PostValidator do
end
describe "unique_post_validator" do
let(:user) { Fabricate(:user, id: 999) }
let(:post) { Fabricate(:post, user: user, topic: topic) }
fab!(:user) { Fabricate(:user, id: 999) }
fab!(:post) { Fabricate(:post, user: user, topic: topic) }
before do
SiteSetting.unique_posts_mins = 5
@ -240,9 +240,9 @@ describe Validators::PostValidator do
context "force_edit_last_validator" do
let(:user) { Fabricate(:user) }
let(:other_user) { Fabricate(:user) }
let(:topic) { Fabricate(:topic) }
fab!(:user) { Fabricate(:user) }
fab!(:other_user) { Fabricate(:user) }
fab!(:topic) { Fabricate(:topic) }
before do
SiteSetting.max_consecutive_replies = 2

View File

@ -7,7 +7,7 @@ describe Validators::UploadValidator do
subject(:validator) { described_class.new }
describe 'validate' do
let(:user) { Fabricate(:user) }
fab!(:user) { Fabricate(:user) }
let(:filename) { "discourse.csv" }
let(:csv_file) { file_from_fixtures(filename, "csv") }
@ -57,7 +57,7 @@ describe Validators::UploadValidator do
end
describe 'upload for site settings' do
let(:user) { Fabricate(:admin) }
fab!(:user) { Fabricate(:admin) }
let(:upload) do
Fabricate.build(:upload,
@ -85,7 +85,7 @@ describe Validators::UploadValidator do
end
describe 'for normal user' do
let(:user) { Fabricate(:user) }
fab!(:user) { Fabricate(:user) }
it 'should not allow the upload' do
expect(subject.validate(upload)).to eq(nil)

View File

@ -21,8 +21,8 @@ describe UsernameSettingValidator do
end
context "regex support" do
let!(:darthvader) { Fabricate(:user, username: 'darthvader') }
let!(:luke) { Fabricate(:user, username: 'luke') }
fab!(:darthvader) { Fabricate(:user, username: 'darthvader') }
fab!(:luke) { Fabricate(:user, username: 'luke') }
it "returns false if regex doesn't match" do
v = described_class.new(regex: 'darth')