Skip to content
Extraits de code Groupes Projets
Valider 2c09c354 rédigé par maxwell's avatar maxwell
Parcourir les fichiers

MS DG photos now delete sm if they are empty status messages, and status...

MS DG photos now delete sm if they are empty status messages, and status messages delete their photos
parent a415ff5c
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -107,10 +107,10 @@ class PhotosController < ApplicationController ...@@ -107,10 +107,10 @@ class PhotosController < ApplicationController
if photo.status_message_id if photo.status_message_id
respond_with :location => photo.status_message respond_with :location => photo.status_message
else else
respond_with :location => photos_path respond_with :location => person_photos_path(current_user.person)
end end
else else
respond_with :location => photos_path respond_with :location => person_photos_path(current_user.person)
end end
end end
......
...@@ -22,7 +22,7 @@ class StatusMessagesController < ApplicationController ...@@ -22,7 +22,7 @@ class StatusMessagesController < ApplicationController
@status_message = current_user.build_post(:status_message, params[:status_message]) @status_message = current_user.build_post(:status_message, params[:status_message])
if @status_message.save(:safe => true) if photos || @status_message.save!(:safe => true)
raise 'MongoMapper failed to catch a failed save' unless @status_message.id raise 'MongoMapper failed to catch a failed save' unless @status_message.id
@status_message.photos += photos unless photos.nil? @status_message.photos += photos unless photos.nil?
...@@ -65,7 +65,6 @@ class StatusMessagesController < ApplicationController ...@@ -65,7 +65,6 @@ class StatusMessagesController < ApplicationController
@status_message = current_user.my_posts.where(:_id => params[:id]).first @status_message = current_user.my_posts.where(:_id => params[:id]).first
if @status_message if @status_message
@status_message.destroy @status_message.destroy
else else
Rails.logger.info "event=post_destroy status=failure user=#{current_user.diaspora_handle} reason='User does not own post'" Rails.logger.info "event=post_destroy status=failure user=#{current_user.diaspora_handle} reason='User does not own post'"
end end
......
...@@ -27,6 +27,7 @@ class Photo < Post ...@@ -27,6 +27,7 @@ class Photo < Post
before_destroy :ensure_user_picture before_destroy :ensure_user_picture
before_destroy :delete_parent_if_no_photos_or_message
def ownership_of_status_message def ownership_of_status_message
message = StatusMessage.find_by_id(self.status_message_id) message = StatusMessage.find_by_id(self.status_message_id)
if status_message_id && message if status_message_id && message
...@@ -117,5 +118,15 @@ class Photo < Post ...@@ -117,5 +118,15 @@ class Photo < Post
scope :on_statuses, lambda { |post_ids| scope :on_statuses, lambda { |post_ids|
where(:status_message_id.in => post_ids) where(:status_message_id.in => post_ids)
} }
private
def delete_parent_if_no_photos_or_message
parent = self.status_message
photos = parent.photos || []
if parent.message.blank? && photos.count <= 1
parent.delete
end
end
end end
...@@ -37,7 +37,7 @@ class StatusMessage < Post ...@@ -37,7 +37,7 @@ class StatusMessage < Post
protected protected
def message_or_photos_present? def message_or_photos_present?
unless !self.message.blank? || self.photos.count > 0 if self.message.blank? && self.photos.count == 0
errors[:base] << 'Status message requires a message or at least one photo' errors[:base] << 'Status message requires a message or at least one photo'
end end
end end
......
...@@ -158,14 +158,41 @@ describe Photo do ...@@ -158,14 +158,41 @@ describe Photo do
end end
context "deletion" do context "deletion" do
it 'is deleted with parent status message' do before do
status_message = @user.build_post(:status_message, :message => "whattup", :to => @aspect.id) @status_message = @user.build_post(:status_message, :message => "", :to => @aspect.id)
status_message.photos << @photo2 @status_message.photos << @photo2
status_message.save @status_message.save
@status_message.reload
end
it 'is deleted with parent status message' do
proc { proc {
status_message.destroy @status_message.destroy
}.should change(Photo, :count).by(-1) }.should change(Photo, :count).by(-1)
end end
it 'deletes the parent object if there are no other photos or message' do
proc {
@photo2.destroy
}.should change(StatusMessage, :count).by(-1)
end
it 'does not delete the parent if the parent has other photos' do
@status_message.photos << @photo
@status_message.save
proc {
@photo2.destroy
}.should_not change(StatusMessage, :count)
end
it 'does not delete the parent if the parent has a message' do
@status_message.message = "hello there kids"
@status_message.save
proc {
@photo2.destroy
}.should_not change(StatusMessage, :count)
end
end end
end end
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter