Commit 95367d53bdce54355fffdf724209d7d51db04708
Committed by
Gabriel Silva
1 parent
9b3cd0de
Exists in
external_followers
Adds Follower behavior to External Person
- Introduces Follower and Followable concerns - Adds External Profile - External Person can follow profiles - External Profiles can be followed - Refactors Profile/Circle relations Signed-off-by: DylanGuedes <djmgguedes@gmail.com> Signed-off-by: Gabriel Silva <gabriel93.silva@gmail.com>
Showing
39 changed files
with
665 additions
and
401 deletions
Show diff stats
app/controllers/concerns/needs_profile.rb
... | ... | @@ -32,6 +32,8 @@ module NeedsProfile |
32 | 32 | params.delete(:profile) |
33 | 33 | redirect_to(Noosfero.url_options.merge(params).merge(:host => profile_hostname)) |
34 | 34 | end |
35 | + elsif session[:external] | |
36 | + @profile = ExternalPerson.find(session[:external]) | |
35 | 37 | else |
36 | 38 | render_not_found |
37 | 39 | end | ... | ... |
app/controllers/my_profile/circles_controller.rb
... | ... | @@ -3,7 +3,7 @@ class CirclesController < MyProfileController |
3 | 3 | before_action :accept_only_post, :only => [:create, :update, :destroy] |
4 | 4 | |
5 | 5 | def index |
6 | - @circles = profile.circles | |
6 | + @circles = profile.owned_circles | |
7 | 7 | end |
8 | 8 | |
9 | 9 | def new |
... | ... | @@ -11,7 +11,7 @@ class CirclesController < MyProfileController |
11 | 11 | end |
12 | 12 | |
13 | 13 | def create |
14 | - @circle = Circle.new(params[:circle].merge({ :person => profile })) | |
14 | + @circle = Circle.new(params[:circle].merge({ :owner => profile })) | |
15 | 15 | if @circle.save |
16 | 16 | redirect_to :action => 'index' |
17 | 17 | else |
... | ... | @@ -21,7 +21,7 @@ class CirclesController < MyProfileController |
21 | 21 | |
22 | 22 | def xhr_create |
23 | 23 | if request.xhr? |
24 | - circle = Circle.new(params[:circle].merge({:person => profile })) | |
24 | + circle = Circle.new(params[:circle].merge({:owner => profile })) | |
25 | 25 | if circle.save |
26 | 26 | render :partial => "circle_checkbox", :locals => { :circle => circle }, |
27 | 27 | :status => 201 | ... | ... |
app/controllers/my_profile/followers_controller.rb
... | ... | @@ -4,11 +4,11 @@ class FollowersController < MyProfileController |
4 | 4 | before_action :accept_only_post, :only => [:update_category] |
5 | 5 | |
6 | 6 | def index |
7 | - @followed_people = profile.followed_profiles.order(:type) | |
7 | + @followed_people = profile.followed_profiles.sort_by(&:type) | |
8 | 8 | @profile_types = {_('All profiles') => nil}.merge(Circle.profile_types).to_a |
9 | 9 | |
10 | 10 | if params['filter'].present? |
11 | - @followed_people = @followed_people.where(:type => params['filter']) | |
11 | + @followed_people = @followed_people.select{|c| c.type == params['filter']} | |
12 | 12 | @active_filter = params['filter'] |
13 | 13 | end |
14 | 14 | |
... | ... | @@ -17,7 +17,7 @@ class FollowersController < MyProfileController |
17 | 17 | |
18 | 18 | def set_category_modal |
19 | 19 | followed_profile = Profile.find(params[:followed_profile_id]) |
20 | - circles = Circle.where(:person => profile, :profile_type => followed_profile.class.name) | |
20 | + circles = Circle.where(:owner => profile, :profile_type => followed_profile.class.name) | |
21 | 21 | render :partial => 'followers/edit_circles_modal', :locals => { :circles => circles, :followed_profile => followed_profile } |
22 | 22 | end |
23 | 23 | ... | ... |
app/controllers/public/profile_controller.rb
... | ... | @@ -74,6 +74,8 @@ class ProfileController < PublicController |
74 | 74 | |
75 | 75 | def following |
76 | 76 | @followed_people = profile.followed_profiles.paginate(:per_page => per_page, :page => params[:npage], :total_entries => profile.followed_profiles.count) |
77 | + puts "FOLLOWED_PEOPLE: #{@followed_people.map(&:name)}" | |
78 | + return @followed_people | |
77 | 79 | end |
78 | 80 | |
79 | 81 | def followed |
... | ... | @@ -170,6 +172,7 @@ class ProfileController < PublicController |
170 | 172 | if profile.followed_by?(current_person) |
171 | 173 | render :text => _("You are already following %s.") % profile.name, :status => 400 |
172 | 174 | else |
175 | + params[:circles] ||= [] | |
173 | 176 | selected_circles = params[:circles].map{ |circle_name, circle_id| Circle.find_by(:id => circle_id) }.select{ |c| c.present? } |
174 | 177 | if selected_circles.present? |
175 | 178 | current_person.follow(profile, selected_circles) |
... | ... | @@ -181,7 +184,7 @@ class ProfileController < PublicController |
181 | 184 | end |
182 | 185 | |
183 | 186 | def find_profile_circles |
184 | - circles = Circle.where(:person => current_person, :profile_type => profile.class.name) | |
187 | + circles = Circle.where(:owner => current_person, :profile_type => profile.class.name) | |
185 | 188 | render :partial => 'blocks/profile_info_actions/circles', :locals => { :circles => circles, :profile_types => Circle.profile_types.to_a } |
186 | 189 | end |
187 | 190 | |
... | ... | @@ -260,10 +263,11 @@ class ProfileController < PublicController |
260 | 263 | end |
261 | 264 | |
262 | 265 | def search_followed |
263 | - result = [] | |
264 | - circles = find_by_contents(:circles, user, user.circles.where(:profile_type => 'Person'), params[:q])[:results] | |
265 | - followed = find_by_contents(:followed, user, Profile.followed_by(user), params[:q])[:results] | |
266 | - result = circles + followed | |
266 | + circles = find_by_contents(:circles, user, user.owned_circles.where(:profile_type => 'Person'), params[:q])[:results] | |
267 | + local_followed = find_by_contents(:followed, user, user.local_followed_profiles, params[:q])[:results] | |
268 | + external_followed = find_by_contents(:followed, user, user.external_followed_profiles, params[:q])[:results] | |
269 | + | |
270 | + result = circles + local_followed + external_followed | |
267 | 271 | render :text => prepare_to_token_input_by_class(result).to_json |
268 | 272 | end |
269 | 273 | |
... | ... | @@ -516,7 +520,7 @@ class ProfileController < PublicController |
516 | 520 | followed << Person.find(identifier) |
517 | 521 | when 'Circle' |
518 | 522 | circle = Circle.find(identifier) |
519 | - followed += Profile.in_circle(circle) | |
523 | + followed += circle.profiles | |
520 | 524 | end |
521 | 525 | end |
522 | 526 | followed.uniq | ... | ... |
app/jobs/notify_activity_to_profiles_job.rb
... | ... | @@ -24,7 +24,7 @@ class NotifyActivityToProfilesJob < Struct.new(:tracked_action_id) |
24 | 24 | ActionTrackerNotification.connection.execute("INSERT INTO action_tracker_notifications(profile_id, action_tracker_id) SELECT DISTINCT profiles.id, #{tracked_action.id} FROM profiles WHERE profiles.id IN (#{target.marked_people.map(&:id).join(',')})") |
25 | 25 | else |
26 | 26 | # Notify all followers |
27 | - ActionTrackerNotification.connection.execute("INSERT INTO action_tracker_notifications(profile_id, action_tracker_id) SELECT DISTINCT c.person_id, #{tracked_action.id} FROM profiles_circles AS p JOIN circles as c ON c.id = p.circle_id WHERE p.profile_id = #{tracked_action.user.id} AND (c.person_id NOT IN (SELECT atn.profile_id FROM action_tracker_notifications AS atn WHERE atn.action_tracker_id = #{tracked_action.id}))") | |
27 | + ActionTrackerNotification.connection.execute("INSERT INTO action_tracker_notifications(profile_id, action_tracker_id) SELECT DISTINCT c.owner_id, #{tracked_action.id} FROM profiles_circles AS p JOIN circles as c ON c.id = p.circle_id WHERE p.profile_id = #{tracked_action.user.id} AND (c.owner_id NOT IN (SELECT atn.profile_id FROM action_tracker_notifications AS atn WHERE atn.action_tracker_id = #{tracked_action.id}))") | |
28 | 28 | end |
29 | 29 | |
30 | 30 | if tracked_action.user.is_a? Organization | ... | ... |
app/models/add_member.rb
... | ... | @@ -22,7 +22,7 @@ class AddMember < Task |
22 | 22 | self.roles = [Profile::Roles.member(organization.environment.id).id] |
23 | 23 | end |
24 | 24 | target.affiliate(requestor, self.roles.select{|r| !r.to_i.zero? }.map{|i| Role.find(i)}) |
25 | - person.follow(organization, Circle.find_or_create_by(:person => person, :name =>_('memberships'), :profile_type => 'Community')) | |
25 | + person.follow(organization, Circle.find_or_create_by(:owner => person, :name =>_('memberships'), :profile_type => 'Community')) | |
26 | 26 | end |
27 | 27 | |
28 | 28 | def title | ... | ... |
app/models/circle.rb
... | ... | @@ -6,30 +6,35 @@ class Circle < ApplicationRecord |
6 | 6 | _('Circle') |
7 | 7 | |
8 | 8 | has_many :profile_followers |
9 | - belongs_to :person | |
9 | + belongs_to :owner, polymorphic: true | |
10 | 10 | |
11 | - attr_accessible :name, :person, :profile_type | |
11 | + attr_accessible :name, :owner, :profile_type | |
12 | 12 | |
13 | 13 | validates :name, presence: true |
14 | - validates :person_id, presence: true | |
14 | + validates :owner_id, presence: true | |
15 | 15 | validates :profile_type, presence: true |
16 | - validates :person_id, :uniqueness => {:scope => :name, :message => "can't add two circles with the same name"} | |
16 | + validates :owner_id, :uniqueness => {:scope => :name, :message => "can't add two circles with the same name"} | |
17 | 17 | |
18 | 18 | validate :profile_type_must_be_in_list |
19 | 19 | |
20 | 20 | scope :by_owner, -> person{ |
21 | - where(:person => person) | |
21 | + where(:owner => person) | |
22 | 22 | } |
23 | 23 | |
24 | 24 | scope :with_name, -> name{ |
25 | 25 | where(:name => name) |
26 | 26 | } |
27 | 27 | |
28 | + def profiles | |
29 | + self.profile_followers.map(&:profile) | |
30 | + end | |
31 | + | |
28 | 32 | def self.profile_types |
29 | 33 | { |
30 | 34 | _("Person") => Person.name, |
31 | 35 | _("Community") => Community.name, |
32 | - _("Enterprise") => Enterprise.name | |
36 | + _("Enterprise") => Enterprise.name, | |
37 | + _("Organization") => Organization.name | |
33 | 38 | } |
34 | 39 | end |
35 | 40 | ... | ... |
app/models/concerns/external_user.rb
... | ... | @@ -20,7 +20,7 @@ module ExternalUser |
20 | 20 | if login && domain && environment.has_federated_network?(domain) |
21 | 21 | external_environment = environment.external_environments.find_by_domain(domain) |
22 | 22 | scheme = "http#{external_environment.uses_ssl? ? 's' : ''}" |
23 | - url = URI.parse(scheme+"://"+ domain +'/.well-known/webfinger?resource=acct:'+ | |
23 | +p url = URI.parse(scheme+"://"+ domain +'/.well-known/webfinger?resource=acct:'+ | |
24 | 24 | login+'@'+domain) |
25 | 25 | http = build_request(url) |
26 | 26 | req = Net::HTTP::Get.new(url.to_s) | ... | ... |
... | ... | @@ -0,0 +1,23 @@ |
1 | +module Followable | |
2 | + extend ActiveSupport::Concern | |
3 | + | |
4 | + included do | |
5 | + has_many :profile_followers, :as => :profile | |
6 | + has_many :circles, :through => :profile_followers | |
7 | + end | |
8 | + | |
9 | + def followers | |
10 | + person_followers = Person.joins(:owned_circles).merge(circles).uniq | |
11 | + external_person_followers = ExternalPerson.joins(:owned_circles).merge(circles).uniq | |
12 | + | |
13 | + person_followers + external_person_followers | |
14 | + end | |
15 | + | |
16 | + def followed_by?(person) | |
17 | + (person == self) || (person.in? self.followers) | |
18 | + end | |
19 | + | |
20 | + def in_circle?(circle) | |
21 | + circle.in? self.circles | |
22 | + end | |
23 | +end | ... | ... |
... | ... | @@ -0,0 +1,52 @@ |
1 | +module Follower | |
2 | + extend ActiveSupport::Concern | |
3 | + | |
4 | + included do | |
5 | + has_many :owned_circles, as: :owner, :class_name => "Circle" | |
6 | + end | |
7 | + | |
8 | + def follow(profile, circles) | |
9 | + circles = [circles] unless circles.is_a?(Array) | |
10 | + circles.each do |new_circle| | |
11 | + next if new_circle.owner != self || !profile.kind_of?(new_circle.profile_type.constantize) | |
12 | + ProfileFollower.create(profile: profile, circle: new_circle) | |
13 | + end | |
14 | + end | |
15 | + | |
16 | + def follows?(profile) | |
17 | + return false if profile.nil? | |
18 | + profile.followed_by?(self) | |
19 | + end | |
20 | + | |
21 | + def unfollow(profile) | |
22 | + ProfileFollower.with_follower(self).with_profile(profile).destroy_all | |
23 | + end | |
24 | + | |
25 | + def local_followed_profiles | |
26 | + Profile.joins(:circles).where("circles.owner_id = ?", self.id).uniq | |
27 | + end | |
28 | + | |
29 | + def external_followed_profiles | |
30 | + ExternalProfile.joins(:circles).where("circles.owner_id = ?", self.id).uniq | |
31 | + end | |
32 | + | |
33 | + def followed_profiles | |
34 | + local_followed_profiles + external_followed_profiles | |
35 | + end | |
36 | + | |
37 | + def update_profile_circles(profile, new_circles) | |
38 | + profile_circles = ProfileFollower.with_profile(profile).with_follower(self).map(&:circle) | |
39 | + circles_to_add = new_circles - profile_circles | |
40 | + self.follow(profile, circles_to_add) | |
41 | + | |
42 | + circles_to_remove = profile_circles - new_circles | |
43 | + ProfileFollower.where('circle_id IN (?) AND profile_id = ?', | |
44 | + circles_to_remove.map(&:id), profile.id).destroy_all | |
45 | + end | |
46 | + | |
47 | + def remove_profile_from_circle(profile, circle) | |
48 | + return if circle.owner != self | |
49 | + ProfileFollower.with_profile(profile).with_circle(circle).destroy_all | |
50 | + end | |
51 | + | |
52 | +end | ... | ... |
app/models/external_person.rb
1 | 1 | # A pseudo profile is a person from a remote network |
2 | -class ExternalPerson < ActiveRecord::Base | |
2 | +class ExternalPerson < ExternalProfile | |
3 | 3 | |
4 | 4 | include Human |
5 | 5 | include ProfileEntity |
6 | + include Follower | |
6 | 7 | |
7 | 8 | validates_uniqueness_of :identifier, scope: :source |
8 | - | |
9 | 9 | validates_presence_of :source, :email, :created_at |
10 | 10 | |
11 | 11 | attr_accessible :source, :email, :created_at |
... | ... | @@ -27,13 +27,6 @@ class ExternalPerson < ActiveRecord::Base |
27 | 27 | _('Public profile') |
28 | 28 | end |
29 | 29 | |
30 | - def avatar | |
31 | - "http://#{self.source}/profile/#{self.identifier}/icon/" | |
32 | - end | |
33 | - | |
34 | - def url | |
35 | - "http://#{self.source}/profile/#{self.identifier}" | |
36 | - end | |
37 | 30 | |
38 | 31 | alias :public_profile_url :url |
39 | 32 | |
... | ... | @@ -75,10 +68,6 @@ class ExternalPerson < ActiveRecord::Base |
75 | 68 | "#{scheme}://#{self.source}" |
76 | 69 | end |
77 | 70 | |
78 | - def profile_custom_icon(gravatar_default=nil) | |
79 | - self.avatar | |
80 | - end | |
81 | - | |
82 | 71 | def preferred_login_redirection |
83 | 72 | environment.redirection_after_login |
84 | 73 | end |
... | ... | @@ -122,26 +111,6 @@ class ExternalPerson < ActiveRecord::Base |
122 | 111 | "#{jid(options)}/#{self.name}" |
123 | 112 | end |
124 | 113 | |
125 | - class ExternalPerson::Image | |
126 | - def initialize(path) | |
127 | - @path = path | |
128 | - end | |
129 | - | |
130 | - def public_filename(size = nil) | |
131 | - URI.join(@path, size.to_s) | |
132 | - end | |
133 | - | |
134 | - def content_type | |
135 | - # This is not really going to be used anywhere that matters | |
136 | - # so we are hardcodding it here. | |
137 | - 'image/png' | |
138 | - end | |
139 | - end | |
140 | - | |
141 | - def image | |
142 | - ExternalPerson::Image.new(avatar) | |
143 | - end | |
144 | - | |
145 | 114 | def data_hash(gravatar_default = nil) |
146 | 115 | friends_list = {} |
147 | 116 | { |
... | ... | @@ -195,67 +164,11 @@ class ExternalPerson < ActiveRecord::Base |
195 | 164 | build_contact: nil, is_a_friend?: false, ask_to_join?: false, refuse_join: |
196 | 165 | nil, blocks_to_expire_cache: [], cache_keys: [], communities_cache_key: '', |
197 | 166 | friends_cache_key: '', manage_friends_cache_key: '', |
198 | - relationships_cache_key: '', is_member_of?: false, follows?: false, | |
167 | + relationships_cache_key: '', is_member_of?: false, | |
199 | 168 | each_friend: nil, is_last_admin?: false, is_last_admin_leaving?: false, |
200 | 169 | leave: nil, last_notification: nil, notification_time: 0, notifier: nil, |
201 | - remove_suggestion: nil, allow_invitation_from?: false | |
202 | - } | |
203 | - | |
204 | - derivated_methods = generate_derivated_methods(methods_and_responses) | |
205 | - derivated_methods.merge(methods_and_responses) | |
206 | - end | |
207 | - | |
208 | - def profile_instance_methods | |
209 | - methods_and_responses = { | |
210 | - role_assignments: RoleAssignment.none, favorite_enterprises: | |
211 | - Enterprise.none, memberships: Profile.none, friendships: Profile.none, | |
212 | - tasks: Task.none, suggested_profiles: ProfileSuggestion.none, | |
213 | - suggested_people: ProfileSuggestion.none, suggested_communities: | |
214 | - ProfileSuggestion.none, public_profile: true, nickname: nil, custom_footer: | |
215 | - '', custom_header: '', address: '', zip_code: '', contact_phone: '', | |
216 | - image_builder: nil, description: '', closed: false, template_id: nil, lat: | |
217 | - nil, lng: nil, is_template: false, fields_privacy: {}, preferred_domain_id: | |
218 | - nil, category_ids: [], country: '', city: '', state: '', | |
219 | - national_region_code: '', redirect_l10n: false, notification_time: 0, | |
220 | - custom_url_redirection: nil, email_suggestions: false, | |
221 | - allow_members_to_invite: false, invite_friends_only: false, secret: false, | |
222 | - profile_admin_mail_notification: false, redirection_after_login: nil, | |
223 | - profile_activities: ProfileActivity.none, action_tracker_notifications: | |
224 | - ActionTrackerNotification.none, tracked_notifications: | |
225 | - ActionTracker::Record.none, scraps_received: Scrap.none, template: | |
226 | - Profile.none, comments_received: Comment.none, email_templates: | |
227 | - EmailTemplate.none, members: Profile.none, members_like: Profile.none, | |
228 | - members_by: Profile.none, members_by_role: Profile.none, scraps: | |
229 | - Scrap.none, welcome_page_content: nil, settings: {}, find_in_all_tasks: | |
230 | - nil, top_level_categorization: {}, interests: Category.none, geolocation: | |
231 | - '', country_name: '', pending_categorizations: [], add_category: false, | |
232 | - create_pending_categorizations: false, top_level_articles: Article.none, | |
233 | - valid_identifier: true, valid_template: false, create_default_set_of_boxes: | |
234 | - true, copy_blocks_from: nil, default_template: nil, | |
235 | - template_without_default: nil, template_with_default: nil, apply_template: | |
236 | - false, iframe_whitelist: [], recent_documents: Article.none, last_articles: | |
237 | - Article.none, is_validation_entity?: false, hostname: nil, own_hostname: | |
238 | - nil, article_tags: {}, tagged_with: Article.none, | |
239 | - insert_default_article_set: false, copy_articles_from: true, | |
240 | - copy_article_tree: nil, copy_article?: false, add_member: false, | |
241 | - remove_member: false, add_admin: false, remove_admin: false, add_moderator: | |
242 | - false, display_info_to?: true, update_category_from_region: nil, | |
243 | - accept_category?: false, custom_header_expanded: '', | |
244 | - custom_footer_expanded: '', public?: true, themes: [], find_theme: nil, | |
245 | - blogs: Blog.none, blog: nil, has_blog?: false, forums: Forum.none, forum: | |
246 | - nil, has_forum?: false, admins: [], settings_field: {}, setting_changed: | |
247 | - false, public_content: true, enable_contact?: false, folder_types: [], | |
248 | - folders: Article.none, image_galleries: Article.none, image_valid: true, | |
249 | - update_header_and_footer: nil, update_theme: nil, update_layout_template: | |
250 | - nil, recent_actions: ActionTracker::Record.none, recent_notifications: | |
251 | - ActionTracker::Record.none, more_active_label: _('no activity'), | |
252 | - more_popular_label: _('no members'), profile_custom_image: nil, | |
253 | - is_on_homepage?: false, activities: ProfileActivity.none, | |
254 | - may_display_field_to?: true, may_display_location_to?: true, public_fields: | |
255 | - {}, followed_by?: false, display_private_info_to?: true, can_view_field?: | |
256 | - true, remove_from_suggestion_list: nil, layout_template: 'default', | |
257 | - is_admin?: false, add_friend: false, follows?: false, is_a_friend?: false, | |
258 | - already_request_friendship?: false | |
170 | + remove_suggestion: nil, allow_invitation_from?: false, in_social_circle?: false, | |
171 | + allow_followers: false | |
259 | 172 | } |
260 | 173 | |
261 | 174 | derivated_methods = generate_derivated_methods(methods_and_responses) |
... | ... | @@ -266,25 +179,15 @@ class ExternalPerson < ActiveRecord::Base |
266 | 179 | if person_instance_methods.keys.include?(method) |
267 | 180 | return person_instance_methods[method] |
268 | 181 | end |
269 | - if profile_instance_methods.keys.include? method | |
270 | - return profile_instance_methods[method] | |
271 | - end | |
182 | + super(method, *args, &block) | |
272 | 183 | end |
273 | 184 | |
274 | 185 | def respond_to_missing?(method_name, include_private = false) |
275 | 186 | person_instance_methods.keys.include?(method_name) || |
276 | - profile_instance_methods.keys.include?(method_name) || | |
277 | 187 | super |
278 | 188 | end |
279 | 189 | |
280 | - private | |
281 | - | |
282 | - def generate_derivated_methods(methods) | |
283 | - derivated_methods = {} | |
284 | - methods.keys.each do |method| | |
285 | - derivated_methods[method.to_s.insert(-1, '?').to_sym] = false | |
286 | - derivated_methods[method.to_s.insert(-1, '=').to_sym] = nil | |
287 | - end | |
288 | - derivated_methods | |
190 | + def kind_of?(klass) | |
191 | + (klass == Person) ? true : super | |
289 | 192 | end |
290 | 193 | end | ... | ... |
... | ... | @@ -0,0 +1,126 @@ |
1 | +class ExternalProfile < ApplicationRecord | |
2 | + | |
3 | + include Followable | |
4 | + | |
5 | + SEARCHABLE_FIELDS = { | |
6 | + :name => {:label => _('Name'), :weight => 10}, | |
7 | + :identifier => {:label => _('Username'), :weight => 5}, | |
8 | + :nickname => {:label => _('Nickname'), :weight => 2}, | |
9 | + } | |
10 | + | |
11 | + def name | |
12 | + "#{self[:name]}@#{self.source}" | |
13 | + end | |
14 | + | |
15 | + class ExternalProfile::Image | |
16 | + def initialize(path) | |
17 | + @path = path | |
18 | + end | |
19 | + | |
20 | + def public_filename(size = nil) | |
21 | + URI.join(@path, size.to_s) | |
22 | + end | |
23 | + | |
24 | + def content_type | |
25 | + # This is not really going to be used anywhere that matters | |
26 | + # so we are hardcodding it here. | |
27 | + 'image/png' | |
28 | + end | |
29 | + end | |
30 | + | |
31 | + def url | |
32 | + "http://#{self.source}/profile/#{self.identifier}" | |
33 | + end | |
34 | + | |
35 | + def image | |
36 | + ExternalProfile::Image.new(avatar) | |
37 | + end | |
38 | + | |
39 | + def profile_custom_icon(gravatar_default=nil) | |
40 | + self.avatar | |
41 | + end | |
42 | + | |
43 | + def avatar | |
44 | + "http://#{self.source}/profile/#{self.identifier}/icon/" | |
45 | + end | |
46 | + | |
47 | + # External Profile should respond to all methods in Profile | |
48 | +def profile_instance_methods | |
49 | + methods_and_responses = { | |
50 | + role_assignments: RoleAssignment.none, favorite_enterprises: | |
51 | + Enterprise.none, memberships: Profile.none, friendships: Profile.none, | |
52 | + tasks: Task.none, suggested_profiles: ProfileSuggestion.none, | |
53 | + suggested_people: ProfileSuggestion.none, suggested_communities: | |
54 | + ProfileSuggestion.none, public_profile: true, nickname: nil, custom_footer: | |
55 | + '', custom_header: '', address: '', zip_code: '', contact_phone: '', | |
56 | + image_builder: nil, description: '', closed: false, template_id: nil, lat: | |
57 | + nil, lng: nil, is_template: false, fields_privacy: {}, preferred_domain_id: | |
58 | + nil, category_ids: [], country: '', city: '', state: '', | |
59 | + national_region_code: '', redirect_l10n: false, notification_time: 0, | |
60 | + custom_url_redirection: nil, email_suggestions: false, | |
61 | + allow_members_to_invite: false, invite_friends_only: false, secret: false, | |
62 | + profile_admin_mail_notification: false, redirection_after_login: nil, | |
63 | + profile_activities: ProfileActivity.none, action_tracker_notifications: | |
64 | + ActionTrackerNotification.none, tracked_notifications: | |
65 | + ActionTracker::Record.none, scraps_received: Scrap.none, template: | |
66 | + Profile.none, comments_received: Comment.none, email_templates: | |
67 | + EmailTemplate.none, members: Profile.none, members_like: Profile.none, | |
68 | + members_by: Profile.none, members_by_role: Profile.none, scraps: | |
69 | + Scrap.none, welcome_page_content: nil, settings: {}, find_in_all_tasks: | |
70 | + nil, top_level_categorization: {}, interests: Category.none, geolocation: | |
71 | + '', country_name: '', pending_categorizations: [], add_category: false, | |
72 | + create_pending_categorizations: false, top_level_articles: Article.none, | |
73 | + valid_identifier: true, valid_template: false, create_default_set_of_boxes: | |
74 | + true, copy_blocks_from: nil, default_template: nil, | |
75 | + template_without_default: nil, template_with_default: nil, apply_template: | |
76 | + false, iframe_whitelist: [], recent_documents: Article.none, last_articles: | |
77 | + Article.none, is_validation_entity?: false, hostname: nil, own_hostname: | |
78 | + nil, article_tags: {}, tagged_with: Article.none, | |
79 | + insert_default_article_set: false, copy_articles_from: true, | |
80 | + copy_article_tree: nil, copy_article?: false, add_member: false, | |
81 | + remove_member: false, add_admin: false, remove_admin: false, add_moderator: | |
82 | + false, display_info_to?: true, update_category_from_region: nil, | |
83 | + accept_category?: false, custom_header_expanded: '', | |
84 | + custom_footer_expanded: '', public?: true, themes: [], find_theme: nil, | |
85 | + blogs: Blog.none, blog: nil, has_blog?: false, forums: Forum.none, forum: | |
86 | + nil, has_forum?: false, admins: [], settings_field: {}, setting_changed: | |
87 | + false, public_content: true, enable_contact?: false, folder_types: [], | |
88 | + folders: Article.none, image_galleries: Article.none, image_valid: true, | |
89 | + update_header_and_footer: nil, update_theme: nil, update_layout_template: | |
90 | + nil, recent_actions: ActionTracker::Record.none, recent_notifications: | |
91 | + ActionTracker::Record.none, more_active_label: _('no activity'), | |
92 | + more_popular_label: _('no members'), profile_custom_image: nil, | |
93 | + is_on_homepage?: false, activities: ProfileActivity.none, | |
94 | + may_display_field_to?: true, may_display_location_to?: true, public_fields: | |
95 | + {}, display_private_info_to?: true, can_view_field?: | |
96 | + true, remove_from_suggestion_list: nil, layout_template: 'default', | |
97 | + is_admin?: false, add_friend: false, is_a_friend?: false, | |
98 | + already_request_friendship?: false, tracked_actions: ActionTracker::Record.none | |
99 | + } | |
100 | + | |
101 | + derivated_methods = generate_derivated_methods(methods_and_responses) | |
102 | + derivated_methods.merge(methods_and_responses) | |
103 | + end | |
104 | + | |
105 | + def method_missing(method, *args, &block) | |
106 | + if profile_instance_methods.keys.include? method | |
107 | + return profile_instance_methods[method] | |
108 | + end | |
109 | + raise NoMethodError, "undefined method #{method} for #{self}" | |
110 | + end | |
111 | + | |
112 | + def respond_to_missing?(method_name, include_private = false) | |
113 | + profile_instance_methods.keys.include?(method_name) || super | |
114 | + end | |
115 | + | |
116 | + private | |
117 | + | |
118 | + def generate_derivated_methods(methods) | |
119 | + derivated_methods = {} | |
120 | + methods.keys.each do |method| | |
121 | + derivated_methods[method.to_s.insert(-1, '?').to_sym] = false | |
122 | + derivated_methods[method.to_s.insert(-1, '=').to_sym] = nil | |
123 | + end | |
124 | + derivated_methods | |
125 | + end | |
126 | +end | ... | ... |
app/models/favorite_enterprise_person.rb
... | ... | @@ -8,7 +8,7 @@ class FavoriteEnterprisePerson < ApplicationRecord |
8 | 8 | belongs_to :person |
9 | 9 | |
10 | 10 | after_create do |favorite| |
11 | - favorite.person.follow(favorite.enterprise, Circle.find_or_create_by(:person => favorite.person, :name =>_('favorites'), :profile_type => 'Enterprise')) | |
11 | + favorite.person.follow(favorite.enterprise, Circle.find_or_create_by(:owner => favorite.person, :name =>_('favorites'), :profile_type => 'Enterprise')) | |
12 | 12 | end |
13 | 13 | |
14 | 14 | protected | ... | ... |
app/models/friendship.rb
... | ... | @@ -12,7 +12,7 @@ class Friendship < ApplicationRecord |
12 | 12 | |
13 | 13 | circles = friendship.group.blank? ? ['friendships'] : friendship.group.split(',').map(&:strip) |
14 | 14 | circles.each do |circle| |
15 | - friendship.person.follow(friendship.friend, Circle.find_or_create_by(:person => friendship.person, :name => circle, :profile_type => 'Person')) | |
15 | + friendship.person.follow(friendship.friend, Circle.find_or_create_by(:owner => friendship.person, :name => circle, :profile_type => 'Person')) | |
16 | 16 | end |
17 | 17 | end |
18 | 18 | |
... | ... | @@ -22,7 +22,7 @@ class Friendship < ApplicationRecord |
22 | 22 | |
23 | 23 | groups = friendship.group.blank? ? ['friendships'] : friendship.group.split(',').map(&:strip) |
24 | 24 | groups.each do |group| |
25 | - circle = Circle.find_by(:person => friendship.person, :name => group ) | |
25 | + circle = Circle.find_by(:owner => friendship.person, :name => group ) | |
26 | 26 | friendship.person.remove_profile_from_circle(friendship.friend, circle) if circle |
27 | 27 | end |
28 | 28 | end | ... | ... |
app/models/person.rb
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | class Person < Profile |
3 | 3 | |
4 | 4 | include Human |
5 | + include Follower | |
5 | 6 | |
6 | 7 | attr_accessible :organization, :contact_information, :sex, :birth_date, :cell_phone, :comercial_phone, :jabber_id, :personal_website, :nationality, :address_reference, :district, :schooling, :schooling_status, :formation, :custom_formation, :area_of_study, :custom_area_of_study, :professional_activity, :organization_website, :following_articles |
7 | 8 | |
... | ... | @@ -93,7 +94,6 @@ class Person < Profile |
93 | 94 | has_many :following_articles, :class_name => 'Article', :through => :article_followers, :source => :article |
94 | 95 | has_many :friendships, :dependent => :destroy |
95 | 96 | has_many :friends, :class_name => 'Person', :through => :friendships |
96 | - has_many :circles | |
97 | 97 | |
98 | 98 | scope :online, -> { |
99 | 99 | joins(:user).where("users.chat_status != '' AND users.chat_status_at >= ?", DateTime.now - User.expires_chat_status_every.minutes) |
... | ... | @@ -183,33 +183,6 @@ class Person < Profile |
183 | 183 | end |
184 | 184 | end |
185 | 185 | |
186 | - def follow(profile, circles) | |
187 | - circles = [circles] unless circles.is_a?(Array) | |
188 | - circles.each do |new_circle| | |
189 | - ProfileFollower.create(profile: profile, circle: new_circle) | |
190 | - end | |
191 | - end | |
192 | - | |
193 | - def update_profile_circles(profile, new_circles) | |
194 | - profile_circles = ProfileFollower.with_profile(profile).with_follower(self).map(&:circle) | |
195 | - circles_to_add = new_circles - profile_circles | |
196 | - circles_to_remove = profile_circles - new_circles | |
197 | - circles_to_add.each do |new_circle| | |
198 | - ProfileFollower.create(profile: profile, circle: new_circle) | |
199 | - end | |
200 | - | |
201 | - ProfileFollower.where('circle_id IN (?) AND profile_id = ?', | |
202 | - circles_to_remove.map(&:id), profile.id).destroy_all | |
203 | - end | |
204 | - | |
205 | - def unfollow(profile) | |
206 | - ProfileFollower.with_follower(self).with_profile(profile).destroy_all | |
207 | - end | |
208 | - | |
209 | - def remove_profile_from_circle(profile, circle) | |
210 | - ProfileFollower.with_profile(profile).with_circle(circle).destroy_all | |
211 | - end | |
212 | - | |
213 | 186 | def already_request_friendship?(person) |
214 | 187 | person.tasks.where(requestor_id: self.id, type: 'AddFriend', status: Task::Status::ACTIVE).first |
215 | 188 | end |
... | ... | @@ -494,11 +467,6 @@ class Person < Profile |
494 | 467 | profile.members.include?(self) |
495 | 468 | end |
496 | 469 | |
497 | - def follows?(profile) | |
498 | - return false if profile.nil? | |
499 | - profile.followed_by?(self) | |
500 | - end | |
501 | - | |
502 | 470 | def each_friend(offset=0) |
503 | 471 | while friend = self.friends.order(:id).offset(offset).first |
504 | 472 | yield friend |
... | ... | @@ -603,10 +571,6 @@ class Person < Profile |
603 | 571 | } |
604 | 572 | end |
605 | 573 | |
606 | - def followed_profiles | |
607 | - Profile.followed_by self | |
608 | - end | |
609 | - | |
610 | 574 | def in_social_circle?(person) |
611 | 575 | self.is_a_friend?(person) || super |
612 | 576 | end | ... | ... |
app/models/profile.rb
... | ... | @@ -4,6 +4,7 @@ |
4 | 4 | class Profile < ApplicationRecord |
5 | 5 | |
6 | 6 | include ProfileEntity |
7 | + include Followable | |
7 | 8 | |
8 | 9 | attr_accessible :public_profile, :nickname, :custom_footer, :custom_header, :address, :zip_code, :contact_phone, :image_builder, :description, :closed, :template_id, :lat, :lng, :is_template, :fields_privacy, :preferred_domain_id, :category_ids, :country, :city, :state, :national_region_code, :email, :contact_email, :redirect_l10n, :notification_time, |
9 | 10 | :custom_url_redirection, :email_suggestions, :allow_members_to_invite, :invite_friends_only, :secret, :profile_admin_mail_notification, :redirection_after_login, :allow_followers |
... | ... | @@ -222,20 +223,6 @@ class Profile < ApplicationRecord |
222 | 223 | scope :more_active, -> { order 'activities_count DESC' } |
223 | 224 | scope :more_recent, -> { order "created_at DESC" } |
224 | 225 | |
225 | - scope :followed_by, -> person{ | |
226 | - distinct.select('profiles.*'). | |
227 | - joins('left join profiles_circles ON profiles_circles.profile_id = profiles.id'). | |
228 | - joins('left join circles ON circles.id = profiles_circles.circle_id'). | |
229 | - where('circles.person_id = ?', person.id) | |
230 | - } | |
231 | - | |
232 | - scope :in_circle, -> circle{ | |
233 | - distinct.select('profiles.*'). | |
234 | - joins('left join profiles_circles ON profiles_circles.profile_id = profiles.id'). | |
235 | - joins('left join circles ON circles.id = profiles_circles.circle_id'). | |
236 | - where('circles.id = ?', circle.id) | |
237 | - } | |
238 | - | |
239 | 226 | settings_items :allow_followers, :type => :boolean, :default => true |
240 | 227 | alias_method :allow_followers?, :allow_followers |
241 | 228 | |
... | ... | @@ -251,8 +238,7 @@ class Profile < ApplicationRecord |
251 | 238 | |
252 | 239 | has_many :email_templates, :foreign_key => :owner_id |
253 | 240 | |
254 | - has_many :profile_followers | |
255 | - has_many :followers, -> { uniq }, :class_name => 'Person', :through => :profile_followers, :source => :person | |
241 | + # has_many :followers, -> { uniq }, :through => :profile_followers, :source => :person | |
256 | 242 | |
257 | 243 | # Although this should be a has_one relation, there are no non-silly names for |
258 | 244 | # a foreign key on article to reference the template to which it is |
... | ... | @@ -729,7 +715,7 @@ private :generate_url, :url_options |
729 | 715 | else |
730 | 716 | self.affiliate(person, Profile::Roles.admin(environment.id), attributes) if members.count == 0 |
731 | 717 | self.affiliate(person, Profile::Roles.member(environment.id), attributes) |
732 | - person.follow(self, Circle.find_or_create_by(:person => person, :name =>_('memberships'), :profile_type => 'Community')) | |
718 | + person.follow(self, Circle.find_or_create_by(:owner => person, :name =>_('memberships'), :profile_type => self.class.name)) | |
733 | 719 | end |
734 | 720 | person.tasks.pending.of("InviteMember").select { |t| t.data[:community_id] == self.id }.each { |invite| invite.cancel } |
735 | 721 | remove_from_suggestion_list person |
... | ... | @@ -1011,10 +997,6 @@ private :generate_url, :url_options |
1011 | 997 | self.active_fields |
1012 | 998 | end |
1013 | 999 | |
1014 | - def followed_by?(person) | |
1015 | - (person == self) || (person.in? self.followers) | |
1016 | - end | |
1017 | - | |
1018 | 1000 | def in_social_circle?(person) |
1019 | 1001 | (person == self) || (person.is_member_of?(self)) |
1020 | 1002 | end |
... | ... | @@ -1058,7 +1040,4 @@ private :generate_url, :url_options |
1058 | 1040 | person.kind_of?(Profile) && person.has_permission?('destroy_profile', self) |
1059 | 1041 | end |
1060 | 1042 | |
1061 | - def in_circle?(circle, follower) | |
1062 | - ProfileFollower.with_follower(follower).with_circle(circle).with_profile(self).present? | |
1063 | - end | |
1064 | 1043 | end | ... | ... |
app/models/profile_follower.rb
... | ... | @@ -4,17 +4,24 @@ class ProfileFollower < ApplicationRecord |
4 | 4 | |
5 | 5 | attr_accessible :profile, :circle |
6 | 6 | |
7 | - belongs_to :profile | |
7 | + #TODO -> user being followed | |
8 | + belongs_to :profile, :polymorphic => true | |
8 | 9 | belongs_to :circle |
9 | 10 | |
10 | - has_one :person, through: :circle | |
11 | - alias follower person | |
11 | + #TODO -> circle owner | |
12 | + # has_one :person, through: :circle, source_type: "ProfileFollower" | |
13 | + | |
14 | + def circle_owner | |
15 | + self.circle.owner | |
16 | + end | |
17 | + | |
18 | + alias follower circle_owner | |
12 | 19 | |
13 | 20 | validates_presence_of :profile_id, :circle_id |
14 | 21 | validates :profile_id, :uniqueness => {:scope => :circle_id, :message => "can't put a profile in the same circle twice"} |
15 | 22 | |
16 | 23 | scope :with_follower, -> person{ |
17 | - joins(:circle).where('circles.person_id = ?', person.id) | |
24 | + joins(:circle).where('circles.owner_id = ?', person.id) | |
18 | 25 | } |
19 | 26 | |
20 | 27 | scope :with_profile, -> profile{ | ... | ... |
app/views/blocks/profile_info_actions/_select_circles.html.erb
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | <div id="circles-checkboxes"> |
4 | 4 | <% circles.each do |circle| %> |
5 | 5 | <div class="circle"> |
6 | - <%= labelled_check_box circle.name, "circles[#{circle.name}]", circle.id, followed_profile.in_circle?(circle, follower) %> | |
6 | + <%= labelled_check_box circle.name, "circles[#{circle.name}]", circle.id, followed_profile.in_circle?(circle) %> | |
7 | 7 | </div> |
8 | 8 | <% end %> |
9 | 9 | </div> | ... | ... |
app/views/followers/_profile_list.html.erb
app/views/profile/_profile_comment_form.html.erb
... | ... | @@ -10,7 +10,7 @@ |
10 | 10 | :rows => 1, |
11 | 11 | :class => 'submit-with-keypress', |
12 | 12 | :title => _('Leave your comment'), |
13 | - :onfocus => ("if(this.value==this.title){this.value='';this.style.color='#000'};this.style.backgroundImage='url(" + profile_icon(current_person, :icon, false) + ")'" if logged_in?), | |
13 | + :onfocus => ("if(this.value==this.title){this.value='';this.style.color='#000'};this.style.backgroundImage='url(" + profile_icon(current_person, :icon, false).to_s + ")'" if logged_in?), | |
14 | 14 | :onblur => ("if(this.value==''){this.value=this.title;this.style.color='#ccc'};this.style.backgroundImage='none'" if logged_in?), |
15 | 15 | :value => _('Leave your comment'), |
16 | 16 | :style => 'color: #ccc' %> | ... | ... |
db/migrate/20160810131138_adds_person_type_to_circles.rb
0 → 100644
... | ... | @@ -0,0 +1,11 @@ |
1 | +class AddsPersonTypeToCircles < ActiveRecord::Migration | |
2 | + def up | |
3 | + add_column :circles, :person_type, :string, default: "Person" | |
4 | + add_index :circles, [:person_id, :person_type] | |
5 | + end | |
6 | + | |
7 | + def down | |
8 | + remove_column :circles, :person_type | |
9 | + remove_index :circles, [:person_id, :person_type] | |
10 | + end | |
11 | +end | ... | ... |
db/migrate/20160822174619_adds_profile_type_to_profile_followers.rb
0 → 100644
... | ... | @@ -0,0 +1,11 @@ |
1 | +class AddsProfileTypeToProfileFollowers < ActiveRecord::Migration | |
2 | + def up | |
3 | + add_column :profiles_circles, :profile_type, :string, default: "Person" | |
4 | + add_index :profiles_circles, [:profile_id, :profile_type] | |
5 | + end | |
6 | + | |
7 | + def down | |
8 | + remove_column :profiles_circles, :profile_type | |
9 | + remove_index :profiles_circles, [:profile_id, :profile_type] | |
10 | + end | |
11 | +end | ... | ... |
db/migrate/20160822184703_rename_person_id_from_circles.rb
0 → 100644
... | ... | @@ -0,0 +1,11 @@ |
1 | +class RenamePersonIdFromCircles < ActiveRecord::Migration | |
2 | + def up | |
3 | + rename_column :circles, :person_id, :owner_id | |
4 | + rename_column :circles, :person_type, :owner_type | |
5 | + end | |
6 | + | |
7 | + def down | |
8 | + rename_column :circles, :owner_id, :person_id | |
9 | + rename_column :circles, :owner_type, :person_type | |
10 | + end | |
11 | +end | ... | ... |
db/migrate/20160829170524_rename_external_people_to_external_profiles.rb
0 → 100644
db/migrate/20160829185118_add_type_to_external_profile.rb
0 → 100644
db/schema.rb
... | ... | @@ -11,7 +11,7 @@ |
11 | 11 | # |
12 | 12 | # It's strongly recommended that you check this file into your version control system. |
13 | 13 | |
14 | -ActiveRecord::Schema.define(version: 20160705162914) do | |
14 | +ActiveRecord::Schema.define(version: 20160829185118) do | |
15 | 15 | |
16 | 16 | # These are extensions that must be enabled in order to support this database |
17 | 17 | enable_extension "plpgsql" |
... | ... | @@ -277,11 +277,13 @@ ActiveRecord::Schema.define(version: 20160705162914) do |
277 | 277 | |
278 | 278 | create_table "circles", force: :cascade do |t| |
279 | 279 | t.string "name" |
280 | - t.integer "person_id" | |
281 | - t.string "profile_type", null: false | |
280 | + t.integer "owner_id" | |
281 | + t.string "profile_type", null: false | |
282 | + t.string "owner_type", default: "Person" | |
282 | 283 | end |
283 | 284 | |
284 | - add_index "circles", ["person_id", "name"], name: "circles_composite_key_index", unique: true, using: :btree | |
285 | + add_index "circles", ["owner_id", "name"], name: "circles_composite_key_index", unique: true, using: :btree | |
286 | + add_index "circles", ["owner_id", "owner_type"], name: "index_circles_on_owner_id_and_owner_type", using: :btree | |
285 | 287 | |
286 | 288 | create_table "comments", force: :cascade do |t| |
287 | 289 | t.string "title" |
... | ... | @@ -439,7 +441,7 @@ ActiveRecord::Schema.define(version: 20160705162914) do |
439 | 441 | add_index "external_feeds", ["enabled"], name: "index_external_feeds_on_enabled", using: :btree |
440 | 442 | add_index "external_feeds", ["fetched_at"], name: "index_external_feeds_on_fetched_at", using: :btree |
441 | 443 | |
442 | - create_table "external_people", force: :cascade do |t| | |
444 | + create_table "external_profiles", force: :cascade do |t| | |
443 | 445 | t.string "name" |
444 | 446 | t.string "identifier" |
445 | 447 | t.string "source" |
... | ... | @@ -448,6 +450,7 @@ ActiveRecord::Schema.define(version: 20160705162914) do |
448 | 450 | t.boolean "visible", default: true |
449 | 451 | t.datetime "created_at" |
450 | 452 | t.datetime "updated_at" |
453 | + t.string "type", default: "ExternalProfile" | |
451 | 454 | end |
452 | 455 | |
453 | 456 | create_table "favorite_enterprise_people", force: :cascade do |t| |
... | ... | @@ -686,9 +689,11 @@ ActiveRecord::Schema.define(version: 20160705162914) do |
686 | 689 | t.integer "circle_id" |
687 | 690 | t.datetime "created_at" |
688 | 691 | t.datetime "updated_at" |
692 | + t.string "profile_type", default: "Person" | |
689 | 693 | end |
690 | 694 | |
691 | 695 | add_index "profiles_circles", ["profile_id", "circle_id"], name: "profiles_circles_composite_key_index", unique: true, using: :btree |
696 | + add_index "profiles_circles", ["profile_id", "profile_type"], name: "index_profiles_circles_on_profile_id_and_profile_type", using: :btree | |
692 | 697 | |
693 | 698 | create_table "qualifier_certifiers", force: :cascade do |t| |
694 | 699 | t.integer "qualifier_id" | ... | ... |
features/step_definitions/followers_steps.rb
1 | 1 | Given /^the user "(.+)" has the following circles$/ do |user_name,table| |
2 | 2 | person = User.find_by(:login => user_name).person |
3 | 3 | table.hashes.each do |circle| |
4 | - Circle.create!(:person => person, :name => circle[:name], :profile_type => circle[:profile_type]) | |
4 | + Circle.create!(:owner => person, :name => circle[:name], :profile_type => circle[:profile_type]) | |
5 | 5 | end |
6 | 6 | end |
7 | 7 | |
... | ... | @@ -11,7 +11,7 @@ Then /^"(.+)" should be a follower of "(.+)" in circle "(.+)"$/ do |person, prof |
11 | 11 | person = Person.find_by(identifier: person) |
12 | 12 | followers.should include(person) |
13 | 13 | |
14 | - circle = Circle.find_by(:name => circle, :person => person) | |
14 | + circle = Circle.find_by(:name => circle, :owner => person) | |
15 | 15 | ProfileFollower.find_by(:circle => circle, :profile => profile).should_not == nil |
16 | 16 | end |
17 | 17 | |
... | ... | @@ -25,11 +25,11 @@ end |
25 | 25 | Given /^"(.+)" is a follower of "(.+)" in circle "(.+)"$/ do |person, profile, circle| |
26 | 26 | profile = Profile.find_by(identifier: profile) |
27 | 27 | person = Person.find_by(identifier: person) |
28 | - circle = Circle.find_by(:name => circle, :person => person) | |
28 | + circle = Circle.find_by(:name => circle, :owner => person) | |
29 | 29 | ProfileFollower.create!(:circle => circle, :profile => profile) |
30 | 30 | end |
31 | 31 | |
32 | 32 | Then /^"(.+)" should have the circle "(.+)" with profile type "(.+)"$/ do |user_name, circle, profile_type| |
33 | 33 | person = User.find_by(:login => user_name).person |
34 | - Circle.find_by(:name => circle, :person => person, :profile_type => profile_type).should_not == nil | |
34 | + Circle.find_by(:name => circle, :owner => person, :profile_type => profile_type).should_not == nil | |
35 | 35 | end | ... | ... |
test/functional/circles_controller_test.rb
... | ... | @@ -10,8 +10,8 @@ class CirclesControllerTest < ActionController::TestCase |
10 | 10 | end |
11 | 11 | |
12 | 12 | should 'return all circles of a profile' do |
13 | - circle1 = Circle.create!(:name => "circle1", :person => @person, :profile_type => 'Person') | |
14 | - circle2 = Circle.create!(:name => "circle2", :person => @person, :profile_type => 'Person') | |
13 | + circle1 = Circle.create!(:name => "circle1", :owner => @person, :profile_type => 'Person') | |
14 | + circle2 = Circle.create!(:name => "circle2", :owner => @person, :profile_type => 'Person') | |
15 | 15 | get :index, :profile => @person.identifier |
16 | 16 | |
17 | 17 | assert_equivalent [circle1, circle2], assigns[:circles] |
... | ... | @@ -24,7 +24,7 @@ class CirclesControllerTest < ActionController::TestCase |
24 | 24 | end |
25 | 25 | |
26 | 26 | should 'create a new circle' do |
27 | - assert_difference '@person.circles.count' do | |
27 | + assert_difference '@person.owned_circles.count' do | |
28 | 28 | post :create, :profile => @person.identifier, |
29 | 29 | :circle => { :name => 'circle' , :profile_type => Person.name} |
30 | 30 | end |
... | ... | @@ -32,14 +32,14 @@ class CirclesControllerTest < ActionController::TestCase |
32 | 32 | end |
33 | 33 | |
34 | 34 | should 'not create a circle without a name' do |
35 | - assert_no_difference '@person.circles.count' do | |
35 | + assert_no_difference '@person.owned_circles.count' do | |
36 | 36 | post :create, :profile => @person.identifier, :circle => { :name => nil } |
37 | 37 | end |
38 | 38 | assert_template :new |
39 | 39 | end |
40 | 40 | |
41 | 41 | should 'retrieve an existing circle when editing' do |
42 | - circle = Circle.create!(:name => "circle", :person => @person, :profile_type => 'Person') | |
42 | + circle = Circle.create!(:name => "circle", :owner => @person, :profile_type => 'Person') | |
43 | 43 | get :edit, :profile => @person.identifier, :id => circle.id |
44 | 44 | assert_equal circle.name, assigns[:circle].name |
45 | 45 | end |
... | ... | @@ -50,7 +50,7 @@ class CirclesControllerTest < ActionController::TestCase |
50 | 50 | end |
51 | 51 | |
52 | 52 | should 'update an existing circle' do |
53 | - circle = Circle.create!(:name => "circle", :person => @person, :profile_type => 'Person') | |
53 | + circle = Circle.create!(:name => "circle", :owner => @person, :profile_type => 'Person') | |
54 | 54 | post :update, :profile => @person.identifier, :id => circle.id, |
55 | 55 | :circle => { :name => "new name" } |
56 | 56 | |
... | ... | @@ -60,7 +60,7 @@ class CirclesControllerTest < ActionController::TestCase |
60 | 60 | end |
61 | 61 | |
62 | 62 | should 'not update an existing circle without a name' do |
63 | - circle = Circle.create!(:name => "circle", :person => @person, :profile_type => 'Person') | |
63 | + circle = Circle.create!(:name => "circle", :owner => @person, :profile_type => 'Person') | |
64 | 64 | post :update, :profile => @person.identifier, :id => circle.id, |
65 | 65 | :circle => { :name => nil } |
66 | 66 | |
... | ... | @@ -75,18 +75,18 @@ class CirclesControllerTest < ActionController::TestCase |
75 | 75 | end |
76 | 76 | |
77 | 77 | should 'destroy an existing circle and remove related profiles' do |
78 | - circle = Circle.create!(:name => "circle", :person => @person, :profile_type => 'Person') | |
78 | + circle = Circle.create!(:name => "circle", :owner => @person, :profile_type => 'Person') | |
79 | 79 | fast_create(ProfileFollower, :profile_id => fast_create(Person).id, :circle_id => circle.id) |
80 | 80 | |
81 | - assert_difference ["@person.circles.count", 'ProfileFollower.count'], -1 do | |
81 | + assert_difference ["@person.owned_circles.count", 'ProfileFollower.count'], -1 do | |
82 | 82 | post :destroy, :profile => @person.identifier, :id => circle.id |
83 | 83 | end |
84 | 84 | end |
85 | 85 | |
86 | 86 | should 'not destroy an existing circle if action is not post' do |
87 | - circle = Circle.create!(:name => "circle", :person => @person, :profile_type => 'Person') | |
87 | + circle = Circle.create!(:name => "circle", :owner => @person, :profile_type => 'Person') | |
88 | 88 | |
89 | - assert_no_difference "@person.circles.count" do | |
89 | + assert_no_difference "@person.owned_circles.count" do | |
90 | 90 | get :destroy, :profile => @person.identifier, :id => circle.id |
91 | 91 | end |
92 | 92 | assert_response 404 | ... | ... |
test/functional/followers_controller_test.rb
... | ... | @@ -9,8 +9,8 @@ class FollowersControllerTest < ActionController::TestCase |
9 | 9 | should 'return followed people list' do |
10 | 10 | login_as(@profile.identifier) |
11 | 11 | person = fast_create(Person) |
12 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
13 | - fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle.id) | |
12 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
13 | + ProfileFollower.create(:profile => person, :circle => circle) | |
14 | 14 | |
15 | 15 | get :index, :profile => @profile.identifier |
16 | 16 | assert_includes assigns(:followed_people), person |
... | ... | @@ -20,10 +20,10 @@ class FollowersControllerTest < ActionController::TestCase |
20 | 20 | login_as(@profile.identifier) |
21 | 21 | person = fast_create(Person) |
22 | 22 | community = fast_create(Community) |
23 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
24 | - circle2 = Circle.create!(:person=> @profile, :name => "Teams", :profile_type => 'Community') | |
25 | - fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle.id) | |
26 | - fast_create(ProfileFollower, :profile_id => community.id, :circle_id => circle2.id) | |
23 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
24 | + circle2 = Circle.create!(:owner=> @profile, :name => "Teams", :profile_type => 'Community') | |
25 | + ProfileFollower.create(:profile => person, :circle => circle) | |
26 | + ProfileFollower.create(:profile => community, :circle => circle2) | |
27 | 27 | |
28 | 28 | get :index, :profile => @profile.identifier, :filter => "Community" |
29 | 29 | assert_equal assigns(:followed_people), [community] |
... | ... | @@ -47,8 +47,8 @@ class FollowersControllerTest < ActionController::TestCase |
47 | 47 | should 'update followed person category' do |
48 | 48 | login_as(@profile.identifier) |
49 | 49 | person = fast_create(Person) |
50 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
51 | - circle2 = Circle.create!(:person=> @profile, :name => "DotA", :profile_type => 'Person') | |
50 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
51 | + circle2 = Circle.create!(:owner=> @profile, :name => "DotA", :profile_type => 'Person') | |
52 | 52 | fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle.id) |
53 | 53 | |
54 | 54 | post :update_category, :profile => @profile.identifier, :circles => {"DotA"=> circle2.id}, :followed_profile_id => person.id | ... | ... |
test/functional/profile_controller_test.rb
... | ... | @@ -773,7 +773,7 @@ class ProfileControllerTest < ActionController::TestCase |
773 | 773 | end |
774 | 774 | |
775 | 775 | should 'not see the followers activities in the current profile' do |
776 | - circle = Circle.create!(:person=> profile, :name => "Zombies", :profile_type => 'Person') | |
776 | + circle = Circle.create!(:owner=> profile, :name => "Zombies", :profile_type => 'Person') | |
777 | 777 | |
778 | 778 | p2 = create_user.person |
779 | 779 | refute profile.follows?(p2) |
... | ... | @@ -969,7 +969,7 @@ class ProfileControllerTest < ActionController::TestCase |
969 | 969 | login_as(profile.identifier) |
970 | 970 | p1= fast_create(Person) |
971 | 971 | |
972 | - circle = Circle.create!(:person=> profile, :name => "Zombies", :profile_type => 'Person') | |
972 | + circle = Circle.create!(:owner=> profile, :name => "Zombies", :profile_type => 'Person') | |
973 | 973 | |
974 | 974 | profile.follow(p1, circle) |
975 | 975 | |
... | ... | @@ -1993,7 +1993,7 @@ class ProfileControllerTest < ActionController::TestCase |
1993 | 1993 | login_as(@profile.identifier) |
1994 | 1994 | person = fast_create(Person) |
1995 | 1995 | |
1996 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
1996 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
1997 | 1997 | |
1998 | 1998 | assert_difference 'ProfileFollower.count' do |
1999 | 1999 | post :follow, :profile => person.identifier, :circles => {"Zombies" => circle.id} |
... | ... | @@ -2004,8 +2004,8 @@ class ProfileControllerTest < ActionController::TestCase |
2004 | 2004 | login_as(@profile.identifier) |
2005 | 2005 | person = fast_create(Person) |
2006 | 2006 | |
2007 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2008 | - circle2 = Circle.create!(:person=> @profile, :name => "Brainsss", :profile_type => 'Person') | |
2007 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2008 | + circle2 = Circle.create!(:owner=> @profile, :name => "Brainsss", :profile_type => 'Person') | |
2009 | 2009 | |
2010 | 2010 | assert_difference 'ProfileFollower.count', 2 do |
2011 | 2011 | post :follow, :profile => person.identifier, :circles => {"Zombies" => circle.id, "Brainsss"=> circle2.id} |
... | ... | @@ -2016,8 +2016,8 @@ class ProfileControllerTest < ActionController::TestCase |
2016 | 2016 | login_as(@profile.identifier) |
2017 | 2017 | person = fast_create(Person) |
2018 | 2018 | |
2019 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2020 | - circle2 = Circle.create!(:person=> @profile, :name => "Brainsss", :profile_type => 'Person') | |
2019 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2020 | + circle2 = Circle.create!(:owner=> @profile, :name => "Brainsss", :profile_type => 'Person') | |
2021 | 2021 | |
2022 | 2022 | assert_no_difference 'ProfileFollower.count' do |
2023 | 2023 | post :follow, :profile => person.identifier, :circles => {"Zombies" => "0", "Brainsss" => "0"} |
... | ... | @@ -2030,11 +2030,11 @@ class ProfileControllerTest < ActionController::TestCase |
2030 | 2030 | login_as(@profile.identifier) |
2031 | 2031 | person = fast_create(Person) |
2032 | 2032 | |
2033 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2034 | - fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle.id) | |
2033 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2034 | + ProfileFollower.create(:profile => person, :circle => circle) | |
2035 | 2035 | |
2036 | 2036 | assert_no_difference 'ProfileFollower.count' do |
2037 | - post :follow, :profile => person.identifier, :follow => { :circles => {"Zombies" => circle.id} } | |
2037 | + post :follow, :profile => person.identifier, :circles => {"Zombies" => circle.id} | |
2038 | 2038 | end |
2039 | 2039 | assert_response 400 |
2040 | 2040 | end |
... | ... | @@ -2050,8 +2050,8 @@ class ProfileControllerTest < ActionController::TestCase |
2050 | 2050 | login_as(@profile.identifier) |
2051 | 2051 | person = fast_create(Person) |
2052 | 2052 | |
2053 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2054 | - follower = fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle.id) | |
2053 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2054 | + follower = ProfileFollower.create!(:profile => person, circle: circle) | |
2055 | 2055 | |
2056 | 2056 | assert_not_nil follower |
2057 | 2057 | |
... | ... | @@ -2073,7 +2073,7 @@ class ProfileControllerTest < ActionController::TestCase |
2073 | 2073 | login_as(@profile.identifier) |
2074 | 2074 | person = fast_create(Person) |
2075 | 2075 | |
2076 | - circle = Circle.create!(:person=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2076 | + circle = Circle.create!(:owner=> @profile, :name => "Zombies", :profile_type => 'Person') | |
2077 | 2077 | fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle.id) |
2078 | 2078 | |
2079 | 2079 | post :unfollow, :profile => person.identifier, :redirect_to => "/some/url" |
... | ... | @@ -2082,8 +2082,8 @@ class ProfileControllerTest < ActionController::TestCase |
2082 | 2082 | |
2083 | 2083 | should "search followed people or circles" do |
2084 | 2084 | login_as(@profile.identifier) |
2085 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2086 | - c2 = Circle.create!(:name => 'Work', :person => @profile, :profile_type => Person) | |
2085 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2086 | + c2 = Circle.create!(:name => 'Work', :owner => @profile, :profile_type => Person) | |
2087 | 2087 | p1 = create_user('emily').person |
2088 | 2088 | p2 = create_user('wollie').person |
2089 | 2089 | p3 = create_user('mary').person |
... | ... | @@ -2115,7 +2115,7 @@ class ProfileControllerTest < ActionController::TestCase |
2115 | 2115 | |
2116 | 2116 | should 'treat followed entries' do |
2117 | 2117 | login_as(@profile.identifier) |
2118 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2118 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2119 | 2119 | p1 = create_user('emily').person |
2120 | 2120 | p2 = create_user('wollie').person |
2121 | 2121 | p3 = create_user('mary').person |
... | ... | @@ -2132,7 +2132,7 @@ class ProfileControllerTest < ActionController::TestCase |
2132 | 2132 | |
2133 | 2133 | should 'return empty followed entries if the user is not on his wall' do |
2134 | 2134 | login_as(@profile.identifier) |
2135 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2135 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2136 | 2136 | p1 = create_user('emily').person |
2137 | 2137 | p2 = create_user('wollie').person |
2138 | 2138 | p3 = create_user('mary').person |
... | ... | @@ -2149,7 +2149,7 @@ class ProfileControllerTest < ActionController::TestCase |
2149 | 2149 | |
2150 | 2150 | should 'leave private scrap' do |
2151 | 2151 | login_as(@profile.identifier) |
2152 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2152 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2153 | 2153 | p1 = create_user('emily').person |
2154 | 2154 | p2 = create_user('wollie').person |
2155 | 2155 | ProfileFollower.create!(:profile => p1, :circle => c1) |
... | ... | @@ -2165,7 +2165,7 @@ class ProfileControllerTest < ActionController::TestCase |
2165 | 2165 | end |
2166 | 2166 | |
2167 | 2167 | should 'list private scraps on wall for marked people' do |
2168 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2168 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2169 | 2169 | p1 = create_user('emily').person |
2170 | 2170 | ProfileFollower.create!(:profile => p1, :circle => c1) |
2171 | 2171 | p1.add_friend(@profile) |
... | ... | @@ -2179,7 +2179,7 @@ class ProfileControllerTest < ActionController::TestCase |
2179 | 2179 | end |
2180 | 2180 | |
2181 | 2181 | should 'not list private scraps on wall for not marked people' do |
2182 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2182 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2183 | 2183 | p1 = create_user('emily').person |
2184 | 2184 | p2 = create_user('wollie').person |
2185 | 2185 | not_marked = create_user('jack').person |
... | ... | @@ -2197,7 +2197,7 @@ class ProfileControllerTest < ActionController::TestCase |
2197 | 2197 | end |
2198 | 2198 | |
2199 | 2199 | should 'list private scraps on wall for creator' do |
2200 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2200 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2201 | 2201 | p1 = create_user('emily').person |
2202 | 2202 | ProfileFollower.create!(:profile => p1, :circle => c1) |
2203 | 2203 | scrap = Scrap.create!(:content => 'Secret message.', :sender_id => @profile.id, :receiver_id => @profile.id, :marked_people => [p1]) |
... | ... | @@ -2210,7 +2210,7 @@ class ProfileControllerTest < ActionController::TestCase |
2210 | 2210 | end |
2211 | 2211 | |
2212 | 2212 | should 'list private scraps on wall for environment administrator' do |
2213 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2213 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2214 | 2214 | p1 = create_user('emily').person |
2215 | 2215 | admin = create_user('env-admin').person |
2216 | 2216 | env = @profile.environment |
... | ... | @@ -2227,7 +2227,7 @@ class ProfileControllerTest < ActionController::TestCase |
2227 | 2227 | end |
2228 | 2228 | |
2229 | 2229 | should 'list private scraps on network for marked people' do |
2230 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2230 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2231 | 2231 | p1 = create_user('emily').person |
2232 | 2232 | p2 = create_user('wollie').person |
2233 | 2233 | p2.add_friend(p1) |
... | ... | @@ -2245,7 +2245,7 @@ class ProfileControllerTest < ActionController::TestCase |
2245 | 2245 | end |
2246 | 2246 | |
2247 | 2247 | should 'not list private scraps on network for not marked people' do |
2248 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2248 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2249 | 2249 | p1 = create_user('emily').person |
2250 | 2250 | not_marked = create_user('jack').person |
2251 | 2251 | not_marked.add_friend(p1) |
... | ... | @@ -2262,7 +2262,7 @@ class ProfileControllerTest < ActionController::TestCase |
2262 | 2262 | end |
2263 | 2263 | |
2264 | 2264 | should 'list private scraps on network for creator' do |
2265 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2265 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2266 | 2266 | p1 = create_user('emily').person |
2267 | 2267 | p1.add_friend(@profile) |
2268 | 2268 | ProfileFollower.create!(:profile => p1, :circle => c1) |
... | ... | @@ -2277,7 +2277,7 @@ class ProfileControllerTest < ActionController::TestCase |
2277 | 2277 | end |
2278 | 2278 | |
2279 | 2279 | should 'list private scraps on network for environment admin' do |
2280 | - c1 = Circle.create!(:name => 'Family', :person => @profile, :profile_type => Person) | |
2280 | + c1 = Circle.create!(:name => 'Family', :owner => @profile, :profile_type => Person) | |
2281 | 2281 | p1 = create_user('emily').person |
2282 | 2282 | admin = create_user('env-admin').person |
2283 | 2283 | env = @profile.environment | ... | ... |
test/unit/article_test.rb
... | ... | @@ -1101,7 +1101,7 @@ class ArticleTest < ActiveSupport::TestCase |
1101 | 1101 | |
1102 | 1102 | should 'create notifications to followers when creating an article' do |
1103 | 1103 | friend = fast_create(Person) |
1104 | - circle = Circle.create!(:person=> friend, :name => "Zombies", :profile_type => 'Person') | |
1104 | + circle = Circle.create!(:owner=> friend, :name => "Zombies", :profile_type => 'Person') | |
1105 | 1105 | friend.follow(profile, circle) |
1106 | 1106 | Article.destroy_all |
1107 | 1107 | ActionTracker::Record.destroy_all |
... | ... | @@ -1115,7 +1115,7 @@ class ArticleTest < ActiveSupport::TestCase |
1115 | 1115 | |
1116 | 1116 | should 'create the notification to the follower when one follower has the notification and the other no' do |
1117 | 1117 | f1 = fast_create(Person) |
1118 | - circle = Circle.create!(:person=> f1, :name => "Zombies", :profile_type => 'Person') | |
1118 | + circle = Circle.create!(:owner=> f1, :name => "Zombies", :profile_type => 'Person') | |
1119 | 1119 | f1.follow(profile, circle) |
1120 | 1120 | |
1121 | 1121 | User.current = profile.user |
... | ... | @@ -1125,7 +1125,7 @@ class ArticleTest < ActiveSupport::TestCase |
1125 | 1125 | assert_equal 2, ActionTrackerNotification.where(action_tracker_id: article.activity.id).count |
1126 | 1126 | |
1127 | 1127 | f2 = fast_create(Person) |
1128 | - circle2 = Circle.create!(:person=> f2, :name => "Zombies", :profile_type => 'Person') | |
1128 | + circle2 = Circle.create!(:owner=> f2, :name => "Zombies", :profile_type => 'Person') | |
1129 | 1129 | f2.follow(profile, circle2) |
1130 | 1130 | |
1131 | 1131 | article2 = create TinyMceArticle, :name => 'Tracked Article 2', :profile_id => profile.id |
... | ... | @@ -1137,7 +1137,7 @@ class ArticleTest < ActiveSupport::TestCase |
1137 | 1137 | should 'destroy activity and notifications of followers when destroying an article' do |
1138 | 1138 | friend = fast_create(Person) |
1139 | 1139 | |
1140 | - circle = Circle.create!(:person=> friend, :name => "Zombies", :profile_type => 'Person') | |
1140 | + circle = Circle.create!(:owner=> friend, :name => "Zombies", :profile_type => 'Person') | |
1141 | 1141 | |
1142 | 1142 | friend.follow(profile, circle) |
1143 | 1143 | ... | ... |
test/unit/external_person_test.rb
... | ... | @@ -134,4 +134,30 @@ class ExternalPersonTest < ActiveSupport::TestCase |
134 | 134 | assert_respond_to ExternalPerson.new, method.to_sym unless method =~ /^autosave_.*|validate_.*|^before_.*|^after_.*|^assignment_.*|^(city|state)_.*/ |
135 | 135 | end |
136 | 136 | end |
137 | + | |
138 | + should 'raise error if method is not in Person or Profile' do | |
139 | + assert_raise NoMethodError do | |
140 | + ExternalPerson.new.send(:this_method_does_not_exist_right?) | |
141 | + end | |
142 | + end | |
143 | + | |
144 | + should 'be able to follow people' do | |
145 | + person = fast_create(Person, :environment_id => Environment.default.id) | |
146 | + circle = Circle.create(owner: @external_person, profile_type: "Person", name: "FRIENDSSS") | |
147 | + | |
148 | + assert_difference "@external_person.followed_profiles.count" do | |
149 | + @external_person.follow(person, circle) | |
150 | + end | |
151 | + end | |
152 | + | |
153 | + should 'be able to unfolllow people' do | |
154 | + person = fast_create(Person, :environment_id => Environment.default.id) | |
155 | + circle = Circle.create(owner: @external_person, profile_type: "Person", name: "FRIENDSSS") | |
156 | + @external_person.follow(person, circle) | |
157 | + | |
158 | + assert_difference "@external_person.followed_profiles.count", -1 do | |
159 | + @external_person.unfollow(person) | |
160 | + end | |
161 | + end | |
162 | + | |
137 | 163 | end | ... | ... |
... | ... | @@ -0,0 +1,59 @@ |
1 | +require_relative "../test_helper" | |
2 | + | |
3 | +class FollowableTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + @person1 = create_user('perso-test-1').person | |
7 | + @person2 = create_user('person-test-2').person | |
8 | + @external_person = ExternalPerson.create!(identifier: 'johnlocke', | |
9 | + name: 'John Locke', | |
10 | + source: 'anerenvironment.org', | |
11 | + email: 'locke@island.org', | |
12 | + created_at: Date.yesterday) | |
13 | + | |
14 | + @circle1 = Circle.create!(owner: @person1, name: "Zombies", profile_type: 'Person') | |
15 | + @circle2 = Circle.create!(owner: @person1, name: "Humans", profile_type: 'Person') | |
16 | + @circle3 = Circle.create!(owner: @external_person, name: "Crypt", profile_type: 'Person') | |
17 | + | |
18 | + @external_profile = ExternalProfile.create | |
19 | + end | |
20 | + | |
21 | + should 'return all unique circles and followers of a profile' do | |
22 | + @person1.follow(@person2, @circle1) | |
23 | + @person1.follow(@person2, @circle2) | |
24 | + @external_person.follow(@person2, @circle3) | |
25 | + | |
26 | + assert_equivalent [@circle1, @circle2, @circle3], @person2.circles | |
27 | + assert_equivalent [@person1, @external_person], @person2.followers | |
28 | + end | |
29 | + | |
30 | + should 'return all unique circles and followers of a external profile' do | |
31 | + Circle.any_instance.stubs(:profile_type).returns("ExternalProfile") | |
32 | + @person1.follow(@external_profile, @circle1) | |
33 | + @person1.follow(@external_profile, @circle2) | |
34 | + @external_person.follow(@external_profile, @circle3) | |
35 | + | |
36 | + assert_equivalent [@circle1, @circle2, @circle3], @external_profile.circles | |
37 | + assert_equivalent [@person1, @external_person], @external_profile.followers | |
38 | + end | |
39 | + | |
40 | + should 'onlyreturn true if profile is in circle' do | |
41 | + @person1.follow(@person2, @circle1) | |
42 | + @external_person.follow(@person2, @circle3) | |
43 | + | |
44 | + assert @person2.in_circle? @circle1 | |
45 | + assert @person2.in_circle? @circle3 | |
46 | + refute @person2.in_circle? @circle2 | |
47 | + end | |
48 | + | |
49 | + should 'only return true if external profile is in circle' do | |
50 | + Circle.any_instance.stubs(:profile_type).returns("ExternalProfile") | |
51 | + @person1.follow(@external_profile, @circle1) | |
52 | + @external_person.follow(@external_profile, @circle3) | |
53 | + | |
54 | + assert @external_profile.in_circle? @circle1 | |
55 | + assert @external_profile.in_circle? @circle3 | |
56 | + refute @external_profile.in_circle? @circle2 | |
57 | + end | |
58 | + | |
59 | +end | ... | ... |
... | ... | @@ -0,0 +1,184 @@ |
1 | +require_relative "../test_helper" | |
2 | + | |
3 | +class FollowerTest < ActiveSupport::TestCase | |
4 | + | |
5 | + def setup | |
6 | + @person1 = create_user('perso-test-1').person | |
7 | + @person2 = create_user('person-test-2').person | |
8 | + | |
9 | + @circle1 = Circle.create!(owner: @person1, name: "Zombies", profile_type: 'Person') | |
10 | + @circle2 = Circle.create!(owner: @person1, name: "Humans", profile_type: 'Person') | |
11 | + @circle3 = Circle.create!(owner: @person1, name: "Crypt", profile_type: 'Community') | |
12 | + | |
13 | + @external_person = ExternalPerson.create!(identifier: 'johnlocke', | |
14 | + name: 'John Locke', | |
15 | + source: 'anerenvironment.org', | |
16 | + email: 'locke@island.org', | |
17 | + created_at: Date.yesterday) | |
18 | + end | |
19 | + | |
20 | + should 'follows? return false when no profile is passed as parameter' do | |
21 | + assert_equal false, @person1.follows?(nil) | |
22 | + end | |
23 | + | |
24 | + should 'follow person with regular user' do | |
25 | + assert_difference '@person1.followed_profiles.count' do | |
26 | + @person1.follow(@person2, @circle1) | |
27 | + end | |
28 | + assert @person1.follows?(@person2) | |
29 | + end | |
30 | + | |
31 | + should 'follow a community' do | |
32 | + community = fast_create(Community) | |
33 | + circle = Circle.create!(owner: @person1, name: "Terminus", profile_type: 'Community') | |
34 | + | |
35 | + assert_difference '@person1.followed_profiles.count' do | |
36 | + @person1.follow(community, circle) | |
37 | + end | |
38 | + assert @person1.follows?(community) | |
39 | + end | |
40 | + | |
41 | + should 'not follow person if the user is not the owner of the circle' do | |
42 | + person3 = create_user('perso-test-3').person | |
43 | + | |
44 | + assert_no_difference '@circle1.owner.followed_profiles.count' do | |
45 | + person3.follow(@person2, @circle1) | |
46 | + end | |
47 | + assert_not @circle1.owner.follows?(@person2) | |
48 | + end | |
49 | + | |
50 | + should 'not follow a community if circle profile type does not match' do | |
51 | + community = fast_create(Community) | |
52 | + | |
53 | + assert_no_difference '@person1.followed_profiles.count' do | |
54 | + @person1.follow(community, @circle1) | |
55 | + end | |
56 | + assert_not @person1.follows?(community) | |
57 | + end | |
58 | + | |
59 | + should 'follow person with external user' do | |
60 | + @circle1.update_attributes(owner: @external_person) | |
61 | + | |
62 | + assert_difference '@external_person.followed_profiles.count' do | |
63 | + @external_person.follow(@person2, @circle1) | |
64 | + end | |
65 | + assert @external_person.follows?(@person2) | |
66 | + end | |
67 | + | |
68 | + should 'unfollow person with regular user' do | |
69 | + @person1.follow(@person2, @circle1) | |
70 | + | |
71 | + assert_difference '@person1.followed_profiles.count', -1 do | |
72 | + @person1.unfollow(@person2) | |
73 | + end | |
74 | + assert_not @person1.follows?(@person2) | |
75 | + end | |
76 | + | |
77 | + should 'unfollow person with external user' do | |
78 | + @circle1.update_attributes(owner: @external_person) | |
79 | + @external_person.follow(@person2, @circle1) | |
80 | + | |
81 | + assert_difference '@external_person.followed_profiles.count', -1 do | |
82 | + @external_person.unfollow(@person2) | |
83 | + end | |
84 | + assert_not @external_person.follows?(@person2) | |
85 | + end | |
86 | + | |
87 | + should 'get the followed profiles for a regular user' do | |
88 | + community = fast_create(Community) | |
89 | + | |
90 | + @person1.follow(@person2, @circle1) | |
91 | + @person1.follow(@external_person, @circle1) | |
92 | + @person1.follow(community, @circle3) | |
93 | + assert_equivalent [@person2, @external_person, community], | |
94 | + @person1.followed_profiles | |
95 | + end | |
96 | + | |
97 | + should 'get the followed profiles for an external user' do | |
98 | + person3 = create_user('person-test-3').person | |
99 | + community = fast_create(Community) | |
100 | + @circle1.update_attributes(owner: @external_person) | |
101 | + @circle3.update_attributes(owner: @external_person) | |
102 | + | |
103 | + @external_person.follow(@person2, @circle1) | |
104 | + @external_person.follow(person3, @circle1) | |
105 | + @external_person.follow(community, @circle3) | |
106 | + assert_equivalent [@person2, person3, community], | |
107 | + @external_person.followed_profiles | |
108 | + end | |
109 | + | |
110 | + should 'not follow same person twice even with different circles' do | |
111 | + circle4 = Circle.create!(owner: @person1, name: "Free Folk", profile_type: 'Person') | |
112 | + | |
113 | + @person1.follow(@person2, @circle1) | |
114 | + @person1.follow(@person2, @circle2) | |
115 | + @person1.follow(@person2, circle4) | |
116 | + assert_equivalent [@person2], @person1.followed_profiles | |
117 | + end | |
118 | + | |
119 | + should 'display an error if a person is already being followed' do | |
120 | + @person1.follow(@person2, @circle1) | |
121 | + profile_follower = ProfileFollower.new(circle: @circle1, profile: @person2) | |
122 | + | |
123 | + profile_follower.valid? | |
124 | + assert profile_follower.errors.messages[:profile_id].present? | |
125 | + end | |
126 | + | |
127 | + should 'update profile circles for a person' do | |
128 | + circle4 = Circle.create!(owner: @person1, name: "Brains", profile_type: 'Person') | |
129 | + @person1.follow(@person2, [@circle1, @circle2]) | |
130 | + | |
131 | + @person1.update_profile_circles(@person2, [@circle2, circle4]) | |
132 | + assert_equivalent [@circle2, circle4], @person2.circles | |
133 | + end | |
134 | + | |
135 | + should 'keep other follower circles after update' do | |
136 | + person3 = create_user('person-test-3').person | |
137 | + circle4 = Circle.create!(owner: person3, name: "Humans", profile_type: 'Person') | |
138 | + @person1.follow(@person2, @circle1) | |
139 | + person3.follow(@person2, circle4) | |
140 | + | |
141 | + @person1.update_profile_circles(@person2, [@circle1, @circle2]) | |
142 | + assert_equivalent [@circle1, @circle2, circle4], @person2.circles | |
143 | + end | |
144 | + | |
145 | + should 'remove a person from a circle' do | |
146 | + @person1.follow(@person2, [@circle1, @circle2]) | |
147 | + | |
148 | + @person1.remove_profile_from_circle(@person2, @circle2) | |
149 | + assert @person2.in_circle? @circle1 | |
150 | + assert_not @person2.in_circle? @circle2 | |
151 | + end | |
152 | + | |
153 | + should 'not remove a person from a circle if the user is not the owner' do | |
154 | + person3 = create_user('person-test-3').person | |
155 | + @person1.follow(@person2, [@circle1, @circle2]) | |
156 | + | |
157 | + person3.remove_profile_from_circle(@person2, @circle2) | |
158 | + assert @person2.in_circle? @circle1 | |
159 | + assert @person2.in_circle? @circle2 | |
160 | + end | |
161 | + | |
162 | + should 'follow external profile' do | |
163 | + external_profile = ExternalProfile.create | |
164 | + @circle1.stubs(:profile_type).returns("ExternalProfile") | |
165 | + | |
166 | + assert_difference '@person1.followed_profiles.count' do | |
167 | + @person1.follow(external_profile, @circle1) | |
168 | + end | |
169 | + assert @person1.follows? external_profile | |
170 | + assert_equivalent [external_profile], @person1.followed_profiles | |
171 | + end | |
172 | + | |
173 | + should 'unfollow external profile' do | |
174 | + external_profile = ExternalProfile.create | |
175 | + @circle1.stubs(:profile_type).returns("ExternalProfile") | |
176 | + @person1.follow(external_profile, @circle1) | |
177 | + | |
178 | + assert_difference '@person1.followed_profiles.count', -1 do | |
179 | + @person1.unfollow(external_profile) | |
180 | + end | |
181 | + assert_not @person1.follows?(@person2) | |
182 | + end | |
183 | + | |
184 | +end | ... | ... |
test/unit/friendship_test.rb
... | ... | @@ -81,8 +81,8 @@ class FriendshipTest < ActiveSupport::TestCase |
81 | 81 | p2.add_friend(p1, 'friends') |
82 | 82 | end |
83 | 83 | |
84 | - assert_includes p1.followers(true), p2 | |
85 | - assert_includes p2.followers(true), p1 | |
84 | + assert_includes p1.followers, p2 | |
85 | + assert_includes p2.followers, p1 | |
86 | 86 | end |
87 | 87 | |
88 | 88 | should 'remove follower when a friend removal occurs' do |
... | ... | @@ -94,8 +94,8 @@ class FriendshipTest < ActiveSupport::TestCase |
94 | 94 | |
95 | 95 | Friendship.remove_friendship(p1, p2) |
96 | 96 | |
97 | - assert_not_includes p1.followers(true), p2 | |
98 | - assert_not_includes p2.followers(true), p1 | |
97 | + assert_not_includes p1.followers, p2 | |
98 | + assert_not_includes p2.followers, p1 | |
99 | 99 | end |
100 | 100 | |
101 | 101 | should 'keep friendship intact when stop following' do |
... | ... | @@ -115,8 +115,8 @@ class FriendshipTest < ActiveSupport::TestCase |
115 | 115 | p1 = create_user('testuser1').person |
116 | 116 | p2 = create_user('testuser2').person |
117 | 117 | |
118 | - circle1 = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
119 | - circle2 = Circle.create!(:person=> p2, :name => "Zombies", :profile_type => 'Person') | |
118 | + circle1 = Circle.create!(:owner=> p1, :name => "Zombies", :profile_type => 'Person') | |
119 | + circle2 = Circle.create!(:owner=> p2, :name => "Zombies", :profile_type => 'Person') | |
120 | 120 | p1.follow(p2, circle1) |
121 | 121 | p2.follow(p1, circle2) |
122 | 122 | ... | ... |
test/unit/notify_activity_to_profiles_job_test.rb
... | ... | @@ -31,9 +31,9 @@ class NotifyActivityToProfilesJobTest < ActiveSupport::TestCase |
31 | 31 | refute NotifyActivityToProfilesJob::NOTIFY_ONLY_COMMUNITY.include?(action_tracker.verb) |
32 | 32 | p1, p2, m1, m2 = fast_create(Person), fast_create(Person), fast_create(Person), fast_create(Person) |
33 | 33 | |
34 | - circle1 = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
35 | - circle2 = Circle.create!(:person=> p2, :name => "Zombies", :profile_type => 'Person') | |
36 | - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Person') | |
34 | + circle1 = Circle.create!(:owner=> p1, :name => "Zombies", :profile_type => 'Person') | |
35 | + circle2 = Circle.create!(:owner=> p2, :name => "Zombies", :profile_type => 'Person') | |
36 | + circle = Circle.create!(:owner=> person, :name => "Zombies", :profile_type => 'Person') | |
37 | 37 | |
38 | 38 | fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle1.id) |
39 | 39 | fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle2.id) |
... | ... | @@ -54,7 +54,7 @@ class NotifyActivityToProfilesJobTest < ActiveSupport::TestCase |
54 | 54 | |
55 | 55 | should 'notify only marked people on marked scraps' do |
56 | 56 | profile = create_user('scrap-creator').person |
57 | - c1 = Circle.create!(:name => 'Family', :person => profile, :profile_type => Person) | |
57 | + c1 = Circle.create!(:name => 'Family', :owner => profile, :profile_type => Person) | |
58 | 58 | p1 = create_user('emily').person |
59 | 59 | p2 = create_user('wollie').person |
60 | 60 | not_marked = create_user('jack').person |
... | ... | @@ -100,7 +100,7 @@ class NotifyActivityToProfilesJobTest < ActiveSupport::TestCase |
100 | 100 | refute NotifyActivityToProfilesJob::NOTIFY_ONLY_COMMUNITY.include?(action_tracker.verb) |
101 | 101 | p1, p2, m1, m2 = fast_create(Person), fast_create(Person), fast_create(Person), fast_create(Person) |
102 | 102 | |
103 | - circle1 = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
103 | + circle1 = Circle.create!(:owner=> p1, :name => "Zombies", :profile_type => 'Person') | |
104 | 104 | fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle1.id) |
105 | 105 | |
106 | 106 | fast_create(RoleAssignment, :accessor_id => m1.id, :role_id => 3, :resource_id => community.id) |
... | ... | @@ -148,8 +148,8 @@ class NotifyActivityToProfilesJobTest < ActiveSupport::TestCase |
148 | 148 | refute NotifyActivityToProfilesJob::NOTIFY_ONLY_COMMUNITY.include?(action_tracker.verb) |
149 | 149 | p1, p2, m1, m2 = fast_create(Person), fast_create(Person), fast_create(Person), fast_create(Person) |
150 | 150 | |
151 | - circle1 = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
152 | - circle2 = Circle.create!(:person=> p2, :name => "Zombies", :profile_type => 'Person') | |
151 | + circle1 = Circle.create!(:owner=> p1, :name => "Zombies", :profile_type => 'Person') | |
152 | + circle2 = Circle.create!(:owner=> p2, :name => "Zombies", :profile_type => 'Person') | |
153 | 153 | |
154 | 154 | fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle1.id) |
155 | 155 | fast_create(ProfileFollower, :profile_id => person.id, :circle_id => circle2.id) | ... | ... |
test/unit/organization_test.rb
... | ... | @@ -267,9 +267,9 @@ class OrganizationTest < ActiveSupport::TestCase |
267 | 267 | o.add_member(p3) |
268 | 268 | assert p3.is_member_of?(o) |
269 | 269 | |
270 | - assert_equal true, o.send(:followed_by?,p1) | |
271 | - assert_equal true, o.send(:followed_by?,p3) | |
272 | - assert_equal false, o.send(:followed_by?,p2) | |
270 | + assert o.followed_by? p1 | |
271 | + assert o.followed_by? p3 | |
272 | + refute o.followed_by? p2 | |
273 | 273 | end |
274 | 274 | |
275 | 275 | should "compose bare jabber id by identifier plus 'conference' and default hostname" do | ... | ... |
test/unit/person_test.rb
... | ... | @@ -843,8 +843,8 @@ class PersonTest < ActiveSupport::TestCase |
843 | 843 | p3 = fast_create(Person) |
844 | 844 | p4 = fast_create(Person) |
845 | 845 | |
846 | - circle2 = Circle.create!(:person=> p2, :name => "Zombies", :profile_type => 'Person') | |
847 | - circle4 = Circle.create!(:person=> p4, :name => "Zombies", :profile_type => 'Person') | |
846 | + circle2 = Circle.create!(:owner => p2, :name => "Zombies", :profile_type => 'Person') | |
847 | + circle4 = Circle.create!(:owner => p4, :name => "Zombies", :profile_type => 'Person') | |
848 | 848 | |
849 | 849 | p2.follow(p1, circle2) |
850 | 850 | assert p2.follows?(p1) |
... | ... | @@ -889,8 +889,8 @@ class PersonTest < ActiveSupport::TestCase |
889 | 889 | p3 = fast_create(Person) |
890 | 890 | p4 = fast_create(Person) |
891 | 891 | |
892 | - circle2 = Circle.create!(:person=> p2, :name => "Zombies", :profile_type => 'Person') | |
893 | - circle4 = Circle.create!(:person=> p4, :name => "Zombies", :profile_type => 'Person') | |
892 | + circle2 = Circle.create!(:owner => p2, :name => "Zombies", :profile_type => 'Person') | |
893 | + circle4 = Circle.create!(:owner => p4, :name => "Zombies", :profile_type => 'Person') | |
894 | 894 | p2.follow(p1, circle2) |
895 | 895 | assert p2.follows?(p1) |
896 | 896 | refute p3.follows?(p1) |
... | ... | @@ -1640,11 +1640,6 @@ class PersonTest < ActiveSupport::TestCase |
1640 | 1640 | assert person.can_change_homepage? |
1641 | 1641 | end |
1642 | 1642 | |
1643 | - should 'follow? return false when no profile is passed as parameter' do | |
1644 | - person = Person.new | |
1645 | - assert_equal false, person.follows?(nil) | |
1646 | - end | |
1647 | - | |
1648 | 1643 | should 'allow posting content when has post_content permission' do |
1649 | 1644 | person = create_user('person').person |
1650 | 1645 | profile = mock |
... | ... | @@ -1957,53 +1952,4 @@ class PersonTest < ActiveSupport::TestCase |
1957 | 1952 | person.user.expects(:save!).never |
1958 | 1953 | person.save! |
1959 | 1954 | end |
1960 | - | |
1961 | - should 'update profile circles for a person' do | |
1962 | - person = create_user('testuser').person | |
1963 | - community = fast_create(Community) | |
1964 | - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community') | |
1965 | - circle2 = Circle.create!(:person=> person, :name => "Dota", :profile_type => 'Community') | |
1966 | - circle3 = Circle.create!(:person=> person, :name => "Quadrado", :profile_type => 'Community') | |
1967 | - person.follow(community, [circle, circle2]) | |
1968 | - person.update_profile_circles(community, [circle2, circle3]) | |
1969 | - assert_equivalent [circle2, circle3], ProfileFollower.with_profile(community).with_follower(person).map(&:circle) | |
1970 | - end | |
1971 | - | |
1972 | - should 'a person follow a profile' do | |
1973 | - person = create_user('testuser').person | |
1974 | - community = fast_create(Community) | |
1975 | - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community') | |
1976 | - person.follow(community, circle) | |
1977 | - assert_includes person.followed_profiles, community | |
1978 | - end | |
1979 | - | |
1980 | - should 'a person follow a profile with more than one circle' do | |
1981 | - person = create_user('testuser').person | |
1982 | - community = fast_create(Community) | |
1983 | - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community') | |
1984 | - circle2 = Circle.create!(:person=> person, :name => "Dota", :profile_type => 'Community') | |
1985 | - person.follow(community, [circle, circle2]) | |
1986 | - assert_includes person.followed_profiles, community | |
1987 | - assert_equivalent [circle, circle2], ProfileFollower.with_profile(community).with_follower(person).map(&:circle) | |
1988 | - end | |
1989 | - | |
1990 | - should 'a person unfollow a profile' do | |
1991 | - person = create_user('testuser').person | |
1992 | - community = fast_create(Community) | |
1993 | - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community') | |
1994 | - person.follow(community, circle) | |
1995 | - person.unfollow(community) | |
1996 | - assert_not_includes person.followed_profiles, community | |
1997 | - end | |
1998 | - | |
1999 | - should 'a person remove a profile from a circle' do | |
2000 | - person = create_user('testuser').person | |
2001 | - community = fast_create(Community) | |
2002 | - circle = Circle.create!(:person=> person, :name => "Zombies", :profile_type => 'Community') | |
2003 | - circle2 = Circle.create!(:person=> person, :name => "Dota", :profile_type => 'Community') | |
2004 | - person.follow(community, [circle, circle2]) | |
2005 | - person.remove_profile_from_circle(community, circle) | |
2006 | - assert_equivalent [circle2], ProfileFollower.with_profile(community).with_follower(person).map(&:circle) | |
2007 | - end | |
2008 | - | |
2009 | 1955 | end | ... | ... |
test/unit/profile_followers_test.rb
... | ... | @@ -1,73 +0,0 @@ |
1 | -require_relative "../test_helper" | |
2 | - | |
3 | -class ProfileFollowersTest < ActiveSupport::TestCase | |
4 | - | |
5 | - should 'a person follow another' do | |
6 | - p1 = create_user('person_test').person | |
7 | - p2 = create_user('person_test_2').person | |
8 | - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
9 | - | |
10 | - assert_difference 'ProfileFollower.count' do | |
11 | - p1.follow(p2, circle) | |
12 | - end | |
13 | - | |
14 | - assert_includes p2.followers(true), p1 | |
15 | - assert_not_includes p1.followers(true), p2 | |
16 | - end | |
17 | - | |
18 | - should 'a person unfollow another person' do | |
19 | - p1 = create_user('person_test').person | |
20 | - p2 = create_user('person_test_2').person | |
21 | - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
22 | - | |
23 | - p1.follow(p2,circle) | |
24 | - | |
25 | - assert_difference 'ProfileFollower.count', -1 do | |
26 | - p1.unfollow(p2) | |
27 | - end | |
28 | - | |
29 | - assert_not_includes p2.followers(true), p1 | |
30 | - end | |
31 | - | |
32 | - should 'get the followed persons for a profile' do | |
33 | - p1 = create_user('person_test').person | |
34 | - p2 = create_user('person_test_2').person | |
35 | - p3 = create_user('person_test_3').person | |
36 | - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
37 | - | |
38 | - p1.follow(p2, circle) | |
39 | - p1.follow(p3, circle) | |
40 | - | |
41 | - assert_equivalent p1.followed_profiles, [p2,p3] | |
42 | - assert_equivalent Profile.followed_by(p1), [p2,p3] | |
43 | - end | |
44 | - | |
45 | - should 'not follow same person twice' do | |
46 | - p1 = create_user('person_test').person | |
47 | - p2 = create_user('person_test_2').person | |
48 | - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
49 | - | |
50 | - assert_difference 'ProfileFollower.count' do | |
51 | - p1.follow(p2, circle) | |
52 | - p1.follow(p2, circle) | |
53 | - end | |
54 | - | |
55 | - assert_equivalent p1.followed_profiles, [p2] | |
56 | - assert_equivalent p2.followers, [p1] | |
57 | - end | |
58 | - | |
59 | - should 'show the correct message when a profile is followed by the same person' do | |
60 | - p1 = create_user('person_test').person | |
61 | - p2 = create_user('person_test_2').person | |
62 | - circle = Circle.create!(:person=> p1, :name => "Zombies", :profile_type => 'Person') | |
63 | - | |
64 | - p1.follow(p2, circle) | |
65 | - profile_follower = ProfileFollower.new | |
66 | - profile_follower.circle = circle | |
67 | - profile_follower.profile = p2 | |
68 | - profile_follower.valid? | |
69 | - | |
70 | - assert_includes profile_follower.errors.messages[:profile_id], | |
71 | - "can't put a profile in the same circle twice" | |
72 | - end | |
73 | -end |