This commit introduces support for AccountMigration federation message receive. It covers the cases when the new home pod for a user is remote respective to the recepient pod of the message. It also allows to initiate migration locally by a podmin from the rails console. This will give the pods a possibility to understand the account migration event on the federation level and thus future version which will implement migration will be backward compatible with the pods starting from this commit.
445 lines
12 KiB
Ruby
445 lines
12 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
|
|
end
|
|
|
|
factory :account_migration do
|
|
association :old_person, factory: :person
|
|
association :new_person, factory: :person
|
|
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(:share_visibility) do
|
|
user
|
|
association :shareable, factory: :status_message
|
|
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}" }
|
|
|
|
user
|
|
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 :block do
|
|
user
|
|
person
|
|
end
|
|
|
|
factory :report do
|
|
user
|
|
association :item, factory: :status_message
|
|
text "offensive content"
|
|
end
|
|
|
|
factory :o_auth_application, class: Api::OpenidConnect::OAuthApplication do
|
|
client_name { "Diaspora Test Client #{r_str}" }
|
|
redirect_uris %w(http://localhost:3000/)
|
|
end
|
|
|
|
factory :o_auth_application_with_ppid, parent: :o_auth_application do
|
|
ppid true
|
|
sector_identifier_uri "https://example.com/uri"
|
|
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
|