spec/models/content_folder_spec.rb in daengine-0.6.21 vs spec/models/content_folder_spec.rb in daengine-0.6.22
- old
+ new
@@ -4,42 +4,73 @@
context 'fields' do
subject { FactoryGirl.build :content_folder }
let(:defined_fields) {
- [:folder_id, :label, :document_ids, :child_folders]
+ [:folder_id, :label, :document_ids, :child_folders, :documents]
}
it 'has all defined fields' do
defined_fields.each { |f| should respond_to(f) }
end
+
end
+ context "folder with assets" do
+ subject do
+ FactoryGirl.build :content_folder
+ end
+
+ it 'has assets' do
+ #puts "#{subject.inspect}"
+ asset_one = FactoryGirl.create :digital_asset
+ asset_two = FactoryGirl.create :digital_asset, :digital_asset_id => "guid_1234"
+ subject.documents << [asset_one, asset_two]
+ subject.save
+ #puts "#{subject.inspect}"
+ #puts "#{subject.documents.first.id}"
+ #puts "#{asset_one.id}"
+ subject.document_ids.should_not be_empty
+ end
+ end
+
context 'validation' do
- subject { FactoryGirl.build :content_folder_with_document_ids }
- let(:basic_subject) { FactoryGirl.build :content_folder }
- let(:subject_with_folders) { FactoryGirl.build :content_folder_with_child_folders }
+ subject { FactoryGirl.build :content_folder_with_document_ids, :folder_id => "folder_id_1" }
+ let(:basic_subject) { FactoryGirl.build :content_folder, :folder_id => "folder_id_2" }
+ let(:subject_with_folders) { FactoryGirl.build :content_folder_with_child_folders, :folder_id => "folder_id_3" }
+ let(:a_folder) { FactoryGirl.build :content_folder, :folder_id => "foo" }
+ let(:dupe_folder) { FactoryGirl.build :content_folder, :folder_id => "foo" }
required_fields = [:folder_id, :label]
+
required_fields.each do |f|
it "validates #{f} is required" do
should be_valid
subject.send("#{f}=", nil)
should be_invalid "should be invalid if #{f} is missing"
end
end
- it 'cannot have empty child_folders AND document_ids' do
- basic_subject.should be_invalid
+ it 'can have empty child_folders AND document_ids' do
+ #puts basic_subject.inspect
+ basic_subject.should be_valid
end
it 'is valid when document_ids are present' do
+ #puts subject.inspect
subject.should be_valid
end
it 'is valid when child_folders are present' do
+ #puts subject_with_folders.inspect
+ #puts subject_with_folders.child_folders.inspect
subject_with_folders.should be_valid
end
+
+ it 'is valid to have duplicate folder_ids' do
+ basic_subject.child_folders.push [a_folder, dupe_folder]
+ basic_subject.should be_valid
+ end
end
context 'selectors' do
subject { FactoryGirl.build :content_folder_with_document_ids }
@@ -47,14 +78,15 @@
end
context 'db operations' do
let(:subject_with_folders) { FactoryGirl.build :content_folder_with_child_folders }
- it 'saves and can be retrieved' do
- id = subject_with_folders.folder_id
+ it 'saved content folders can be retrieved' do
+ ContentFolder.delete_all
+ id = subject_with_folders.child_folders.first.folder_id
subject_with_folders.save
- found = ContentFolder.find(id)
+ found = ContentFolder.find_folder(id)
found.should_not be_nil
end
end
context 'folder retrieval' do
@@ -62,10 +94,12 @@
ContentFolder.delete_all
root = FactoryGirl.build :content_folder_with_document_ids
lit_center = FactoryGirl.build :content_folder_with_document_ids, :folder_id => ContentFolder::FolderIds::LIT_CENTER
merrill_lynch = FactoryGirl.build :content_folder_with_document_ids, :folder_id => ContentFolder::FolderIds::MERRILL_LYNCH
plan_529 = FactoryGirl.build :content_folder_with_document_ids, :folder_id => ContentFolder::FolderIds::PLANS_529
+ ttpf = FactoryGirl.build :content_folder_with_document_ids, :folder_id => "ttpf"
+ plan_529.child_folders = [ttpf]
other = FactoryGirl.build :content_folder_with_document_ids, :folder_id => 'abcdefg'
root.child_folders = [lit_center, merrill_lynch, plan_529, other]
root.save
end
@@ -89,7 +123,66 @@
it 'should return nil for an unknown folder' do
result = ContentFolder.find_folder('zyxw')
result.should be_nil
end
+
+ it 'should return folder by relative path' do
+ path = ContentFolder::FolderIds::PLANS_529 + "/ttpf"
+ result = ContentFolder.find_folder_by_relative_path(path)
+ result.should_not be_nil
+ end
+
+ it 'should return child folder' do
+ root = ContentFolder.last
+ result = ContentFolder.find_child_folder(root, [ContentFolder::FolderIds::PLANS_529, "ttpf"])
+ result.should_not be_nil
+ end
end
+
+
+ context 'content folder and asset association' do
+ before do
+ ContentFolder.delete_all
+ root = FactoryGirl.build :content_folder_with_document_ids
+ lit_center = FactoryGirl.build :content_folder, :folder_id => ContentFolder::FolderIds::LIT_CENTER
+ merrill_lynch = FactoryGirl.build :content_folder, :folder_id => ContentFolder::FolderIds::MERRILL_LYNCH
+ plan_529 = FactoryGirl.build :content_folder, :folder_id => ContentFolder::FolderIds::PLANS_529
+ asset_one = FactoryGirl.create :digital_asset, :digital_asset_id => "guid_1111"
+ asset_two = FactoryGirl.create :digital_asset, :digital_asset_id => "guid_2222"
+ asset_three = FactoryGirl.create :digital_asset, :digital_asset_id => "guid_3333"
+ lit_center.documents << [asset_one, asset_two, asset_three]
+ merrill_lynch.documents << [asset_two, asset_three]
+ plan_529.documents << [asset_three]
+ root.child_folders = [lit_center, merrill_lynch, plan_529]
+ root.save
+ end
+
+ it 'should return the lit center folder with document count of 3' do
+ result = ContentFolder.lit_center_folder
+ result.should_not be_nil
+ result.document_ids.count.should == 3
+ result.folder_id.should == ContentFolder::FolderIds::LIT_CENTER
+ end
+
+ it 'should return the merrill_lynch folder with document count of 2' do
+ result = ContentFolder.merrill_lynch_folder
+ result.should_not be_nil
+ result.document_ids.count.should == 2
+ result.folder_id.should == ContentFolder::FolderIds::MERRILL_LYNCH
+ end
+
+
+ it 'delete an asset record from database, associated with a folder' do
+ result = ContentFolder.plan_529_folder
+ #puts "==== #{result.inspect}"
+ #puts "Documents: #{result.documents.inspect}"
+ result.documents.count.should == 1
+ asset3 = DigitalAsset.where(digital_asset_id: "guid_3333").exists?
+ DigitalAsset.where(digital_asset_id: "guid_3333").delete_all
+ #puts "Documents: #{result.documents.inspect}"
+ result.documents.count.should == 0
+ result.folder_id.should == ContentFolder::FolderIds::PLANS_529
+ end
+ end
+
end
\ No newline at end of file