From 7d7c39e3dc9af0a53bd800bd40ce566511eab20a Mon Sep 17 00:00:00 2001
From: Raphael <raphael@joindiaspora.com>
Date: Sat, 17 Jul 2010 14:09:21 -0700
Subject: [PATCH] callbacks not running on photo save

---
 app/models/photo.rb       |  4 +++-
 app/models/post.rb        |  8 ++++----
 lib/encryptable.rb        | 10 +++++++---
 spec/models/photo_spec.rb | 24 +++++++++++++++++++++---
 spec/spec_helper.rb       | 29 +++++++++++++++--------------
 5 files changed, 50 insertions(+), 25 deletions(-)

diff --git a/app/models/photo.rb b/app/models/photo.rb
index 8de0e993a0..42e7042736 100644
--- a/app/models/photo.rb
+++ b/app/models/photo.rb
@@ -1,6 +1,8 @@
 class Photo < Post
   require 'carrierwave/orm/mongomapper'
   include MongoMapper::Document
-
+  before_validation {puts "I'M GONNA VALIDATE"} 
+  before_save {puts "I'M GONNA SAVE"} 
+  before_create {puts "I'M GONNA CREATE"} 
   mount_uploader :image, ImageUploader
 end
diff --git a/app/models/post.rb b/app/models/post.rb
index 9b711d6ce7..383d56b107 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -36,15 +36,15 @@ class Post
     self.first(:person_id => person.id, :order => '_id desc')
   end
 
- def self.my_newest
-   self.newest(User.owner)
- end
+   def self.my_newest
+     self.newest(User.owner)
+   end
   def self.newest_by_email(email)
     self.newest(Person.first(:email => email))
   end
 
 #ENCRYPTION
-  before_validation :sign_if_mine
+    before_validation :sign_if_mine
     validates_true_for :creator_signature, :logic => lambda {self.verify_creator_signature}
     
     xml_accessor :creator_signature
diff --git a/lib/encryptable.rb b/lib/encryptable.rb
index 75e23632e3..226ae5e1f0 100644
--- a/lib/encryptable.rb
+++ b/lib/encryptable.rb
@@ -3,6 +3,7 @@
      ""
    end
     def verify_creator_signature
+      #creator_signature = sign if creator_signature.nil? && person == User.owner
       verify_signature(creator_signature, person)
     end
     
@@ -10,21 +11,24 @@
       return false unless signature && person.key_fingerprint
       validity = nil
       GPGME::verify(signature, signable_string, 
-        {:armor => true, :always_trust => true}){ |sig|
-        validity =  sig.status == GPGME::GPG_ERR_NO_ERROR &&
-            sig.fpr == person.key_fingerprint
+        {:armor => true, :always_trust => true}){ |signature_analysis|
+        puts signature_analysis
+        validity =  signature_analysis.status == GPGME::GPG_ERR_NO_ERROR &&
+            signature_analysis.fpr == person.key_fingerprint
       }
       return validity
     end
     
     protected
     def sign_if_mine
+      puts "In sign_if_mine"
       if self.person == User.owner
         self.creator_signature = sign
       end
     end
 
     def sign
+      puts "signing"
       sign_with_key(User.owner.key)
     end
 
diff --git a/spec/models/photo_spec.rb b/spec/models/photo_spec.rb
index ce23dc471a..2b70223ccf 100644
--- a/spec/models/photo_spec.rb
+++ b/spec/models/photo_spec.rb
@@ -3,20 +3,38 @@ require File.dirname(__FILE__) + '/../spec_helper'
 describe Photo do
   before do
     @user = Factory.create(:user)
+    @fixture_name = File.dirname(__FILE__) + '/../fixtures/bp.jpeg'
   end
   it 'should save a photo to GridFS' do
     photo = Photo.new(:person => @user)
-    fixture_name = File.dirname(__FILE__) + '/../fixtures/bp.jpeg'
-    file = File.open(fixture_name)
+    file = File.open(@fixture_name)
     photo.image = file
     photo.save.should == true
     binary = photo.image.read
-    fixture_binary = File.open(fixture_name).read
+    fixture_binary = File.open(@fixture_name).read
     binary.should == fixture_binary
   end
 
   it 'should create thumbnails' do
     pending('need to figure this out... tearing issue')
   end
+  describe 'with encryption' do
+    
+    before do
+      unstub_mocha_stubs
+    end
+    
+    after do
+      stub_signature_verification
+    end
 
+    it 'should save a signed photo to GridFS' do
+      photo = Photo.new(:person => @user)
+      photo.image = File.open(@fixture_name)
+      #photo.creator_signature = photo.send(:sign)
+      photo.verify_creator_signature.should be true
+      photo.save.should == true
+    end
+    
+  end
 end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 960ee7844e..7194908bb1 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -42,30 +42,31 @@ end
   end
 
   def stub_signature_verification
+    post_models = []
     get_models.each{ |model|
-      puts model
+      constant_model = model.camelize.constantize
+      if constant_model == Post || constant_model.superclass == Post
+        post_models << constant_model
+      end
     }
     
-    Post.any_instance.stubs(:verify_creator_signature).returns(true)
-    StatusMessage.any_instance.stubs(:verify_creator_signature).returns(true)
-    Blog.any_instance.stubs(:verify_creator_signature).returns(true)
-    Bookmark.any_instance.stubs(:verify_creator_signature).returns(true)
-    Comment.any_instance.stubs(:verify_creator_signature).returns(true)
+    post_models.each{ | model|
+      model.any_instance.stubs(:verify_creator_signature).returns(true)
+    }
+
     Comment.any_instance.stubs(:verify_post_creator_signature).returns(true)
-    Photo.any_instance.stubs(:verify_creator_signature).returns(true)
     Person.any_instance.stubs(:remove_key).returns(true)
     User.any_instance.stubs(:remove_key).returns(true)
   end
 
   def unstub_mocha_stubs
     Mocha::Mockery.instance.stubba.unstub_all
- 
   end
 
-def get_models
-  models = []
-  Dir.glob( RAILS_ROOT + '/app/models/*' ).each do |f|
-    models << File.basename( f ).gsub( /^(.+).rb/, '\1')
+  def get_models
+    models = []
+    Dir.glob( File.dirname(__FILE__) + '/../app/models/*' ).each do |f|
+      models << File.basename( f ).gsub( /^(.+).rb/, '\1')
+    end
+    models
   end
-  models
-end
-- 
GitLab