This commit refactors account deletion spec by moving data creation to a helper object DataGenerator.
122 lines
2.5 KiB
Ruby
122 lines
2.5 KiB
Ruby
# TODO: docs
|
|
class DataGenerator
|
|
def person
|
|
@person || user.person
|
|
end
|
|
|
|
def user
|
|
@user || person.owner
|
|
end
|
|
|
|
def initialize(user_or_person)
|
|
if user_or_person.is_a? User
|
|
@user = user_or_person
|
|
elsif user_or_person.is_a? Person
|
|
@person = user_or_person
|
|
else
|
|
raise ArgumentError
|
|
end
|
|
end
|
|
|
|
def self.create(user_or_person, type)
|
|
generator = new(user_or_person)
|
|
if type.is_a? Symbol
|
|
generator.send(type)
|
|
elsif type.is_a? Array
|
|
type.each {|type|
|
|
generator.send(type)
|
|
}
|
|
end
|
|
end
|
|
|
|
def generic_user_data
|
|
preferences
|
|
notifications
|
|
blocks
|
|
service
|
|
private_post_as_receipient
|
|
tag_following
|
|
generic_person_data
|
|
end
|
|
|
|
def generic_person_data
|
|
private_status_message
|
|
mention
|
|
photo
|
|
conversations
|
|
role
|
|
participation
|
|
end
|
|
|
|
def preferences
|
|
%w[mentioned liked reshared].each do |pref|
|
|
user.user_preferences.create!(email_type: pref)
|
|
end
|
|
end
|
|
|
|
def notifications
|
|
FactoryGirl.create(:notification, recipient: user)
|
|
end
|
|
|
|
def conversations
|
|
a_friend = person.contacts.first.user.person
|
|
create_conversation_with_message(a_friend, person, "Subject", "Hey #{person.name}")
|
|
create_conversation_with_message(person, a_friend, "Subject", "Hey #{a_friend.name}")
|
|
end
|
|
|
|
def blocks
|
|
user.blocks.create!(person: eve.person)
|
|
eve.blocks.create!(person: person)
|
|
end
|
|
|
|
def service
|
|
FactoryGirl.create(:service, user: user)
|
|
end
|
|
|
|
def private_post_as_receipient
|
|
friend = mutual_friend
|
|
friend.post(
|
|
:status_message,
|
|
text: text_mentioning(user),
|
|
to: friend.aspects.first
|
|
)
|
|
end
|
|
|
|
def tag_following
|
|
TagFollowing.create!(tag: random_tag, user: user)
|
|
end
|
|
|
|
def random_tag
|
|
ActsAsTaggableOn::Tag.create!(name: "partytimeexcellent#{r_str}")
|
|
end
|
|
|
|
def mutual_friend
|
|
FactoryGirl.create(:user_with_aspect).tap {|friend|
|
|
connect_users(user, first_aspect, friend, friend.aspects.first)
|
|
}
|
|
end
|
|
|
|
def first_aspect
|
|
user.aspects.first || FactoryGirl.create(:aspect, user: user)
|
|
end
|
|
|
|
def private_status_message
|
|
post = FactoryGirl.create(:status_message, author: person)
|
|
|
|
person.contacts.each do |contact|
|
|
ShareVisibility.create!(user_id: contact.user.id, shareable: post)
|
|
end
|
|
end
|
|
|
|
%i(photo participation).each do |factory|
|
|
define_method factory do
|
|
FactoryGirl.create(factory, author: person)
|
|
end
|
|
end
|
|
|
|
%i[mention role].each do |factory|
|
|
define_method factory do
|
|
FactoryGirl.create(factory, person: person)
|
|
end
|
|
end
|
|
end
|