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

@ -3,11 +3,11 @@
require 'rails_helper'
describe GroupsController do
let(:user) { Fabricate(:user) }
fab!(:user) { Fabricate(:user) }
let(:group) { Fabricate(:group, users: [user]) }
let(:moderator_group_id) { Group::AUTO_GROUPS[:moderators] }
let(:admin) { Fabricate(:admin) }
let(:moderator) { Fabricate(:moderator) }
fab!(:admin) { Fabricate(:admin) }
fab!(:moderator) { Fabricate(:moderator) }
describe '#index' do
let(:staff_group) do
@ -161,7 +161,7 @@ describe GroupsController do
end
context 'viewing as an admin' do
let(:admin) { Fabricate(:admin) }
fab!(:admin) { Fabricate(:admin) }
before do
sign_in(admin)
@ -673,7 +673,7 @@ describe GroupsController do
)
end
let(:user3) do
fab!(:user3) do
Fabricate(:user,
last_seen_at: nil,
last_posted_at: nil,
@ -681,7 +681,7 @@ describe GroupsController do
)
end
let(:bot) { Fabricate(:user, id: -999) }
fab!(:bot) { Fabricate(:user, id: -999) }
let(:group) { Fabricate(:group, users: [user1, user2, user3, bot]) }
@ -793,7 +793,7 @@ describe GroupsController do
end
describe "#edit" do
let(:group) { Fabricate(:group) }
fab!(:group) { Fabricate(:group) }
context 'when user is not signed in' do
it 'should be fobidden' do
@ -835,7 +835,7 @@ describe GroupsController do
end
context 'when user is an admin' do
let(:user) { Fabricate(:admin) }
fab!(:user) { Fabricate(:admin) }
let(:group) { Fabricate(:group, users: [user], automatic: true) }
before do
@ -853,7 +853,7 @@ describe GroupsController do
end
describe "membership edits" do
let(:admin) { Fabricate(:admin) }
fab!(:admin) { Fabricate(:admin) }
before do
sign_in(admin)
@ -884,8 +884,8 @@ describe GroupsController do
end
context "is able to add several members to a group" do
let(:user1) { Fabricate(:user) }
let(:user2) { Fabricate(:user, username: "UsEr2") }
fab!(:user1) { Fabricate(:user) }
fab!(:user2) { Fabricate(:user, username: "UsEr2") }
it "adds by username" do
expect do
@ -963,7 +963,7 @@ describe GroupsController do
end
context 'public group' do
let(:other_user) { Fabricate(:user) }
fab!(:other_user) { Fabricate(:user) }
before do
group.update!(
@ -1068,7 +1068,7 @@ describe GroupsController do
end
context 'public group' do
let(:other_user) { Fabricate(:user) }
fab!(:other_user) { Fabricate(:user) }
let(:group) { Fabricate(:public_group, users: [other_user]) }
context "admin" do
@ -1106,8 +1106,8 @@ describe GroupsController do
context '#remove_members' do
context "is able to remove several members from a group" do
let(:user1) { Fabricate(:user) }
let(:user2) { Fabricate(:user, username: "UsEr2") }
fab!(:user1) { Fabricate(:user) }
fab!(:user2) { Fabricate(:user, username: "UsEr2") }
let(:group1) { Fabricate(:group, users: [user1, user2]) }
it "removes by username" do
@ -1218,7 +1218,7 @@ describe GroupsController do
end
context 'when user is an admin' do
let(:admin) { Fabricate(:admin) }
fab!(:admin) { Fabricate(:admin) }
before do
sign_in(admin)
@ -1263,7 +1263,7 @@ describe GroupsController do
end
describe '#request_membership' do
let(:new_user) { Fabricate(:user) }
fab!(:new_user) { Fabricate(:user) }
it 'requires the user to log in' do
post "/groups/#{group.name}/request_membership.json"
@ -1322,7 +1322,7 @@ describe GroupsController do
end
describe '#search ' do
let(:hidden_group) do
fab!(:hidden_group) do
Fabricate(:group,
visibility_level: Group.visibility_levels[:owners],
name: 'KingOfTheNorth'