diaspora/spec/factories.rb
cmrd Senya 7374661e2f
Update the user data export archive format.
This commit introduces changes to the user data export archive format.
This extends data set which is included in the archive. This data can be
then imported to other pods when this feature is implemented.

Also the commit adds the archive format json schema. ATM it is used in
automatic tests only, but in future it will also be used to validate
incoming archives.
2017-08-10 09:36:26 +03:00

452 lines
13 KiB
Ruby

# Copyright (c) 2010-2011, Diaspora In This file is
# licensed under the Affero General Public License version 3 or late See
# the COPYRIGHT file.
#For Guidance
#http://github.com/thoughtbot/factory_girl
# http://railscasts.com/episodes/158-factories-not-fixtures
def r_str
SecureRandom.hex(3)
end
require "diaspora_federation/test/factories"
FactoryGirl.define do
factory :profile do
sequence(:first_name) { |n| "Robert#{n}#{r_str}" }
sequence(:last_name) { |n| "Grimm#{n}#{r_str}" }
bio "I am a cat lover and I love to run"
gender "robot"
location "Earth"
birthday Date.today
tag_string "#one #two"
association :person
end
factory :profile_with_image_url, :parent => :profile do
image_url "http://example.com/image.jpg"
image_url_medium "http://example.com/image_mid.jpg"
image_url_small "http://example.com/image_small.jpg"
end
factory(:person, aliases: %i(author)) do
transient do
first_name nil
end
sequence(:diaspora_handle) {|n| "bob-person-#{n}#{r_str}@example.net" }
pod { Pod.find_or_create_by(url: "http://example.net") }
serialized_public_key OpenSSL::PKey::RSA.generate(1024).public_key.export
after(:build) do |person, evaluator|
unless person.profile.first_name.present?
person.profile = FactoryGirl.build(:profile, person: person)
person.profile.first_name = evaluator.first_name if evaluator.first_name
end
end
after(:create) do |person|
person.profile.save
end
end
factory :account_deletion do
association :person
after(:build) do |delete|
delete.diaspora_handle = delete.person.diaspora_handle
end
end
factory :like do
association :author, :factory => :person
association :target, :factory => :status_message
end
factory :user do
getting_started false
sequence(:username) { |n| "bob#{n}#{r_str}" }
sequence(:email) { |n| "bob#{n}#{r_str}@pivotallabs.com" }
password "bluepin7"
password_confirmation { |u| u.password }
serialized_private_key OpenSSL::PKey::RSA.generate(1024).export
after(:build) do |u|
u.person = FactoryGirl.build(:person,
pod: nil,
serialized_public_key: u.encryption_key.public_key.export,
diaspora_handle: "#{u.username}#{User.diaspora_id_host}")
end
after(:create) do |u|
u.person.save
u.person.profile.save
end
end
factory :user_with_aspect, parent: :user do
transient do
friends []
end
after(:create) do |user, evaluator|
FactoryGirl.create(:aspect, user: user)
evaluator.friends.each do |friend|
connect_users_with_aspects(user, friend)
end
end
end
factory :aspect do
name "generic"
user
end
factory(:status_message, aliases: %i(status_message_without_participation)) do
sequence(:text) {|n| "jimmy's #{n} whales" }
author
factory(:status_message_with_poll) do
after(:build) do |sm|
FactoryGirl.create(:poll, status_message: sm)
end
end
factory(:status_message_with_location) do
after(:build) do |sm|
FactoryGirl.create(:location, status_message: sm)
end
end
factory(:status_message_with_photo) do
sequence(:text) {|n| "There are #{n} ninjas in this photo." }
after(:build) do |sm|
FactoryGirl.create(
:photo,
author: sm.author,
status_message: sm,
pending: false,
public: sm.public
)
end
end
factory(:status_message_in_aspect) do
public false
author { FactoryGirl.create(:user_with_aspect).person }
after(:build) do |sm|
sm.aspects << sm.author.owner.aspects.first
end
end
factory(:status_message_with_participations) do
transient do
participants []
end
after(:build) do |sm, ev|
ev.participants.each do |participant|
person = participant.is_a?(User) ? participant.person : participant
sm.participations.build(author: person)
end
end
end
end
factory(:location) do
sequence(:address) {|n| "Fernsehturm Berlin, #{n}, Berlin, Germany" }
sequence(:lat) {|n| 52.520645 + 0.0000001 * n }
sequence(:lng) {|n| 13.409779 + 0.0000001 * n }
end
factory :participation do
association :author, factory: :person
association :target, factory: :status_message
end
factory(:poll) do
sequence(:question) {|n| "What do you think about #{n} ninjas?" }
association :status_message
after(:build) do |p|
p.poll_answers << FactoryGirl.build(:poll_answer, poll: p)
p.poll_answers << FactoryGirl.build(:poll_answer, poll: p)
end
end
factory(:poll_answer) do
sequence(:answer) {|n| "#{n} questionmarks" }
association :poll
end
factory :poll_participation do
association :author, factory: :person
association :poll_answer
after(:build) {|p| p.poll = p.poll_answer.poll }
end
factory(:photo) do
sequence(:random_string) {|n| SecureRandom.hex(10) }
association :author, :factory => :person
height 42
width 23
after(:build) do |p|
p.unprocessed_image.store! File.open(File.join(File.dirname(__FILE__), 'fixtures', 'button.png'))
p.update_remote_path
end
end
factory(:remote_photo, :parent => :photo) do
remote_photo_path 'https://photo.com/images/'
remote_photo_name 'kittehs.jpg'
association :author,:factory => :person
processed_image nil
unprocessed_image nil
end
factory :reshare do
association(:root, :public => true, :factory => :status_message)
association(:author, :factory => :person)
end
factory :invitation do
service "email"
identifier "bob.smith@smith.com"
association :sender, :factory => :user_with_aspect
after(:build) do |i|
i.aspect = i.sender.aspects.first
end
end
factory :invitation_code do
sequence(:token){|n| "sdfsdsf#{n}"}
association :user
count 0
end
factory :service do |service|
nickname "sirrobertking"
type "Services::Twitter"
sequence(:uid) { |token| "00000#{token}" }
sequence(:access_token) { |token| "12345#{token}" }
sequence(:access_secret) { |token| "98765#{token}" }
end
factory :service_user do
sequence(:uid) { |id| "a#{id}"}
sequence(:name) { |num| "Rob Fergus the #{num.ordinalize}" }
association :service
photo_url "/assets/user/adams.jpg"
end
factory :pod do
sequence(:host) {|n| "pod#{n}.example#{r_str}.com" }
ssl true
end
factory(:comment) do
sequence(:text) {|n| "#{n} cats"}
association(:author, factory: :person)
association(:post, factory: :status_message)
end
factory(:notification, class: Notifications::AlsoCommented) do
association :recipient, :factory => :user
association :target, :factory => :comment
after(:build) do |note|
note.actors << FactoryGirl.build(:person)
end
end
factory(:notification_mentioned_in_comment, class: Notification) do
association :recipient, factory: :user
type "Notifications::MentionedInComment"
after(:build) do |note|
note.actors << FactoryGirl.build(:person)
note.target = FactoryGirl.create :mention_in_comment, person: note.recipient.person
end
end
factory(:tag, :class => ActsAsTaggableOn::Tag) do
name "partytimeexcellent"
end
factory(:o_embed_cache) do
url "http://youtube.com/kittens"
data {{'data' => 'foo'}}
end
factory(:open_graph_cache) do
url "http://example.com/articles/123"
image "http://example.com/images/123.jpg"
title "Some article"
ob_type "article"
description "This is the article lead"
video_url "http://example.com/videos/123.html"
end
factory(:tag_following) do
association(:tag, :factory => :tag)
association(:user, :factory => :user)
end
factory(:contact) do
association(:person, :factory => :person)
association(:user, :factory => :user)
end
factory(:mention) do
association(:person, factory: :person)
association(:mentions_container, factory: :status_message)
end
factory(:mention_in_comment, class: Mention) do
association(:person, factory: :person)
association(:mentions_container, factory: :comment)
end
factory(:conversation) do
association(:author, factory: :person)
sequence(:subject) {|n| "conversation ##{n}" }
after(:build) do |c|
c.participants << c.author
end
end
factory(:conversation_with_message, parent: :conversation) do
after(:create) do |c|
msg = FactoryGirl.build(:message, author: c.author)
msg.conversation_id = c.id
msg.save
end
end
factory(:message) do
association :author, factory: :person
association :conversation
sequence(:text) {|n| "message text ##{n}" }
after(:build) {|m| m.conversation.participants << m.author }
end
factory(:signature_order) do
order "guid parent_guid text author"
end
factory(:comment_signature) do
author_signature "some signature"
association :signature_order, order: "guid parent_guid text author new_property"
additional_data { {"new_property" => "some text"} }
end
factory(:like_signature) do
author_signature "some signature"
association :signature_order, order: "positive guid parent_type parent_guid author new_property"
additional_data { {"new_property" => "some text"} }
end
factory :role do
association :person
name "moderator"
end
factory(:poll_participation_signature) do
author_signature "some signature"
association :signature_order, order: "guid parent_guid author poll_answer_guid new_property"
additional_data { {"new_property" => "some text"} }
end
factory(:note, :parent => :status_message) do
text SecureRandom.hex(1000)
end
factory(:status, :parent => :status_message)
factory :o_auth_application, class: Api::OpenidConnect::OAuthApplication do
client_name "Diaspora Test Client"
redirect_uris %w(http://localhost:3000/)
end
factory :o_auth_application_with_image, class: Api::OpenidConnect::OAuthApplication do
client_name "Diaspora Test Client"
redirect_uris %w(http://localhost:3000/)
logo_uri "/assets/user/default.png"
end
factory :o_auth_application_with_ppid, class: Api::OpenidConnect::OAuthApplication do
client_name "Diaspora Test Client"
redirect_uris %w(http://localhost:3000/)
ppid true
sector_identifier_uri "https://example.com/uri"
end
factory :o_auth_application_with_ppid_with_specific_id, class: Api::OpenidConnect::OAuthApplication do
client_name "Diaspora Test Client"
redirect_uris %w(http://localhost:3000/)
ppid true
sector_identifier_uri "https://example.com/uri"
end
factory :o_auth_application_with_multiple_redirects, class: Api::OpenidConnect::OAuthApplication do
client_name "Diaspora Test Client"
redirect_uris %w(http://localhost:3000/ http://localhost/)
end
factory :o_auth_application_with_xss, class: Api::OpenidConnect::OAuthApplication do
client_name "<script>alert(0);</script>"
redirect_uris %w(http://localhost:3000/)
end
factory :auth_with_read, class: Api::OpenidConnect::Authorization do
o_auth_application
user
scopes %w(openid sub aud profile picture nickname name read)
after(:build) {|m|
m.redirect_uri = m.o_auth_application.redirect_uris[0]
}
end
factory :auth_with_read_and_ppid, class: Api::OpenidConnect::Authorization do
association :o_auth_application, factory: :o_auth_application_with_ppid
user
scopes %w(openid sub aud profile picture nickname name read)
after(:build) {|m|
m.redirect_uri = m.o_auth_application.redirect_uris[0]
}
end
factory :auth_with_read_and_write, class: Api::OpenidConnect::Authorization do
o_auth_application
user
scopes %w(openid sub aud profile picture nickname name read write)
after(:build) {|m|
m.redirect_uri = m.o_auth_application.redirect_uris[0]
}
end
# Factories for the DiasporaFederation-gem
factory(:federation_person_from_webfinger, class: DiasporaFederation::Entities::Person) do
sequence(:guid) { UUID.generate :compact }
sequence(:diaspora_id) {|n| "bob-person-#{n}#{r_str}@example.net" }
url "https://example.net/"
exported_key OpenSSL::PKey::RSA.generate(1024).public_key.export
profile {
DiasporaFederation::Entities::Profile.new(
FactoryGirl.attributes_for(:federation_profile_from_hcard, diaspora_id: diaspora_id))
}
end
factory(:federation_profile_from_hcard, class: DiasporaFederation::Entities::Profile) do
sequence(:diaspora_id) {|n| "bob-person-#{n}#{r_str}@example.net" }
sequence(:first_name) {|n| "My Name#{n}#{r_str}" }
last_name nil
image_url "/assets/user/default.png"
image_url_medium "/assets/user/default.png"
image_url_small "/assets/user/default.png"
searchable true
end
factory :federation_profile_from_hcard_with_image_url, parent: :federation_profile_from_hcard do
image_url "http://example.com/image.jpg"
image_url_medium "http://example.com/image_mid.jpg"
image_url_small "http://example.com/image_small.jpg"
end
end