active-fedora 2.3.4 → 2.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +5 -4
- data/History.txt +16 -0
- data/README.textile +1 -1
- data/active-fedora.gemspec +1 -1
- data/lib/active_fedora.rb +4 -4
- data/lib/active_fedora/relationships_helper.rb +889 -0
- data/lib/active_fedora/semantic_node.rb +53 -383
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/base_spec.rb +87 -170
- data/spec/integration/datastream_spec.rb +3 -3
- data/spec/integration/datastreams_crud_spec.rb +1 -1
- data/spec/integration/rels_ext_datastream_spec.rb +4 -4
- data/spec/integration/semantic_node_spec.rb +369 -10
- data/spec/unit/active_fedora_spec.rb +42 -19
- data/spec/unit/base_extra_spec.rb +1 -0
- data/spec/unit/base_spec.rb +16 -20
- data/spec/unit/relationships_helper_spec.rb +842 -0
- data/spec/unit/semantic_node_spec.rb +49 -323
- metadata +88 -85
@@ -309,11 +309,11 @@ describe ActiveFedora::Base do
|
|
309
309
|
@test_object5 = MockAFBaseRelationship.new
|
310
310
|
@test_object5.new_object = true
|
311
311
|
@test_object5.save
|
312
|
-
#append to
|
313
|
-
@test_object2.
|
314
|
-
@test_object2.
|
315
|
-
@test_object5.
|
316
|
-
@test_object5.
|
312
|
+
#append to relationship by 'testing'
|
313
|
+
@test_object2.add_relationship_by_name("testing",@test_object3)
|
314
|
+
@test_object2.add_relationship_by_name("testing2",@test_object4)
|
315
|
+
@test_object5.add_relationship_by_name("testing",@test_object2)
|
316
|
+
@test_object5.add_relationship_by_name("testing2",@test_object3)
|
317
317
|
@test_object2.save
|
318
318
|
@test_object5.save
|
319
319
|
r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
|
@@ -322,43 +322,18 @@ describe ActiveFedora::Base do
|
|
322
322
|
r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
|
323
323
|
model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
|
324
324
|
#check inbound correct, testing goes to :has_part and testing2 goes to :has_member
|
325
|
-
@test_object2.
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
@test_object3.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
330
|
-
:inbound=>{"testing_inbound"=>[r2.object],
|
331
|
-
"testing_inbound2"=>[r5.object],
|
332
|
-
"testing_bidirectional_inbound"=>[],
|
333
|
-
"testing_inbound3"=>[]}}
|
334
|
-
@test_object4.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
335
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[r2.object],
|
336
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
337
|
-
@test_object5.named_relationships(false).should == {:self=>{"testing"=>[r2.object],
|
338
|
-
"testing2"=>[r3.object],
|
339
|
-
"testing_bidirectional_outbound"=>[],
|
340
|
-
"testing3"=>[]},
|
341
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[],
|
342
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
325
|
+
@test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
|
326
|
+
@test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
327
|
+
@test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
328
|
+
@test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
|
343
329
|
@test_object2.delete
|
344
330
|
#need to reload since removed from rels_ext in memory
|
345
331
|
@test_object5 = MockAFBaseRelationship.load_instance(@test_object5.pid)
|
346
332
|
|
347
333
|
#check any test_object2 inbound rels gone from source
|
348
|
-
@test_object3.
|
349
|
-
|
350
|
-
|
351
|
-
"testing_bidirectional_inbound"=>[],
|
352
|
-
"testing_inbound3"=>[]}}
|
353
|
-
@test_object4.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
354
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[],
|
355
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
356
|
-
@test_object5.named_relationships(false).should == {:self=>{"testing"=>[],
|
357
|
-
"testing2"=>[r3.object],
|
358
|
-
"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
359
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[],
|
360
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
361
|
-
|
334
|
+
@test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
335
|
+
@test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
336
|
+
@test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
362
337
|
end
|
363
338
|
end
|
364
339
|
|
@@ -481,7 +456,7 @@ describe ActiveFedora::Base do
|
|
481
456
|
end
|
482
457
|
end
|
483
458
|
|
484
|
-
describe '#
|
459
|
+
describe '#inbound_relationships_by_name' do
|
485
460
|
it 'should return a hash of inbound relationship names to array of objects' do
|
486
461
|
@test_object2 = MockAFBaseRelationship.new
|
487
462
|
@test_object2.new_object = true
|
@@ -508,18 +483,18 @@ describe ActiveFedora::Base do
|
|
508
483
|
r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
|
509
484
|
model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
|
510
485
|
#check inbound correct, testing goes to :has_part and testing2 goes to :has_member
|
511
|
-
@test_object2.
|
512
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}
|
513
|
-
@test_object3.
|
514
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}
|
515
|
-
@test_object4.
|
516
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}
|
517
|
-
@test_object5.
|
518
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}
|
486
|
+
@test_object2.inbound_relationships_by_name.should == {"testing_inbound"=>[r5.object],"testing_inbound2"=>[],
|
487
|
+
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
|
488
|
+
@test_object3.inbound_relationships_by_name.should == {"testing_inbound"=>[r2.object],"testing_inbound2"=>[r5.object],
|
489
|
+
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
|
490
|
+
@test_object4.inbound_relationships_by_name.should == {"testing_inbound"=>[],"testing_inbound2"=>[r2.object],
|
491
|
+
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
|
492
|
+
@test_object5.inbound_relationships_by_name.should == {"testing_inbound"=>[],"testing_inbound2"=>[],
|
493
|
+
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
|
519
494
|
end
|
520
495
|
end
|
521
496
|
|
522
|
-
describe '#
|
497
|
+
describe '#relationships_by_name' do
|
523
498
|
it '' do
|
524
499
|
@test_object2 = MockAFBaseRelationship.new
|
525
500
|
@test_object2.new_object = true
|
@@ -546,37 +521,19 @@ describe ActiveFedora::Base do
|
|
546
521
|
r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
|
547
522
|
model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
|
548
523
|
#check inbound correct, testing goes to :has_part and testing2 goes to :has_member
|
549
|
-
@test_object2.
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
@test_object3.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
554
|
-
:inbound=>{"testing_inbound"=>[r2.object],
|
555
|
-
"testing_inbound2"=>[r5.object],
|
556
|
-
"testing_bidirectional_inbound"=>[],
|
557
|
-
"testing_inbound3"=>[]}}
|
558
|
-
@test_object4.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
559
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[r2.object],
|
560
|
-
"testing_bidirectional_inbound"=>[], "testing_inbound3"=>[]}}
|
561
|
-
@test_object5.named_relationships(false).should == {:self=>{"testing"=>[r2.object],
|
562
|
-
"testing2"=>[r3.object],
|
563
|
-
"testing_bidirectional_outbound"=>[],
|
564
|
-
"testing3"=>[]},
|
565
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[],
|
566
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
524
|
+
@test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
|
525
|
+
@test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
526
|
+
@test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
527
|
+
@test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
|
567
528
|
#all inbound should now be empty if no parameter supplied to relationships
|
568
|
-
@test_object2.
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
@test_object3.named_relationships.should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]}}
|
573
|
-
@test_object4.named_relationships.should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]}}
|
574
|
-
@test_object5.named_relationships.should == {:self=>{"testing"=>[r2.object],
|
575
|
-
"testing2"=>[r3.object],"testing_bidirectional_outbound"=>[],"testing3"=>[]}}
|
529
|
+
@test_object2.relationships_by_name.should == {:self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
|
530
|
+
@test_object3.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
531
|
+
@test_object4.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
532
|
+
@test_object5.relationships_by_name.should == {:self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
|
576
533
|
end
|
577
534
|
end
|
578
535
|
|
579
|
-
describe '#
|
536
|
+
describe '#add_relationship_by_name' do
|
580
537
|
it 'should add a named relationship to an object' do
|
581
538
|
@test_object2 = MockAFBaseRelationship.new
|
582
539
|
@test_object2.new_object = true
|
@@ -591,10 +548,10 @@ describe ActiveFedora::Base do
|
|
591
548
|
@test_object5.new_object = true
|
592
549
|
@test_object5.save
|
593
550
|
#append to named relationship 'testing'
|
594
|
-
@test_object2.
|
595
|
-
@test_object2.
|
596
|
-
@test_object5.
|
597
|
-
@test_object5.
|
551
|
+
@test_object2.add_relationship_by_name("testing",@test_object3)
|
552
|
+
@test_object2.add_relationship_by_name("testing2",@test_object4)
|
553
|
+
@test_object5.add_relationship_by_name("testing",@test_object2)
|
554
|
+
@test_object5.add_relationship_by_name("testing2",@test_object3)
|
598
555
|
@test_object2.save
|
599
556
|
@test_object5.save
|
600
557
|
r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
|
@@ -603,24 +560,10 @@ describe ActiveFedora::Base do
|
|
603
560
|
r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
|
604
561
|
model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
|
605
562
|
#check inbound correct, testing goes to :has_part and testing2 goes to :has_member
|
606
|
-
@test_object2.
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
@test_object3.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
611
|
-
:inbound=>{"testing_inbound"=>[r2.object],
|
612
|
-
"testing_inbound2"=>[r5.object],
|
613
|
-
"testing_bidirectional_inbound"=>[],
|
614
|
-
"testing_inbound3"=>[]}}
|
615
|
-
@test_object4.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
616
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[r2.object],
|
617
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
618
|
-
@test_object5.named_relationships(false).should == {:self=>{"testing"=>[r2.object],
|
619
|
-
"testing2"=>[r3.object],
|
620
|
-
"testing_bidirectional_outbound"=>[],
|
621
|
-
"testing3"=>[]},
|
622
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[],
|
623
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
563
|
+
@test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
|
564
|
+
@test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
565
|
+
@test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
566
|
+
@test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
|
624
567
|
end
|
625
568
|
end
|
626
569
|
|
@@ -639,10 +582,10 @@ describe ActiveFedora::Base do
|
|
639
582
|
@test_object5.new_object = true
|
640
583
|
@test_object5.save
|
641
584
|
#append to named relationship 'testing'
|
642
|
-
@test_object2.
|
643
|
-
@test_object2.
|
644
|
-
@test_object5.
|
645
|
-
@test_object5.
|
585
|
+
@test_object2.add_relationship_by_name("testing",@test_object3)
|
586
|
+
@test_object2.add_relationship_by_name("testing2",@test_object4)
|
587
|
+
@test_object5.add_relationship_by_name("testing",@test_object2)
|
588
|
+
@test_object5.add_relationship_by_name("testing2",@test_object3)
|
646
589
|
@test_object2.save
|
647
590
|
@test_object5.save
|
648
591
|
r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
|
@@ -651,51 +594,26 @@ describe ActiveFedora::Base do
|
|
651
594
|
r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
|
652
595
|
model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
|
653
596
|
#check inbound correct, testing goes to :has_part and testing2 goes to :has_member
|
654
|
-
@test_object2.
|
597
|
+
@test_object2.relationships_by_name(false).should == {:self=>{"testing"=>[r3.object],
|
655
598
|
"testing2"=>[r4.object],
|
656
|
-
"testing_bidirectional_outbound"=>[],"testing3"=>[]
|
599
|
+
"testing_bidirectional_outbound"=>[],"testing3"=>[],
|
600
|
+
"collection_members"=>[], "part_of"=>[], "parts_outbound"=>[r3.object]},
|
657
601
|
:inbound=>{"testing_inbound"=>[r5.object],"testing_inbound2"=>[],
|
658
|
-
|
659
|
-
@test_object3.
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
"testing_inbound3"=>[]}}
|
664
|
-
@test_object4.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
665
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[r2.object],
|
666
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
667
|
-
@test_object5.named_relationships(false).should == {:self=>{"testing"=>[r2.object],
|
668
|
-
"testing2"=>[r3.object],
|
669
|
-
"testing_bidirectional_outbound"=>[],
|
670
|
-
"testing3"=>[]},
|
671
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[],
|
672
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
673
|
-
@test_object2.remove_named_relationship("testing",@test_object3)
|
602
|
+
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound"=>[]}}
|
603
|
+
@test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
604
|
+
@test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
605
|
+
@test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
|
606
|
+
@test_object2.remove_relationship_by_name("testing",@test_object3)
|
674
607
|
@test_object2.save
|
675
608
|
#check now removed for both outbound and inbound
|
676
|
-
@test_object2.
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
:inbound=>{"testing_inbound"=>[r5.object],"testing_inbound2"=>[],
|
681
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
682
|
-
@test_object3.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
683
|
-
:inbound=>{"testing_inbound"=>[],
|
684
|
-
"testing_inbound2"=>[r5.object],
|
685
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
686
|
-
@test_object4.named_relationships(false).should == {:self=>{"testing"=>[],"testing2"=>[],"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
687
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[r2.object],
|
688
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
689
|
-
@test_object5.named_relationships(false).should == {:self=>{"testing"=>[r2.object],
|
690
|
-
"testing2"=>[r3.object],
|
691
|
-
"testing_bidirectional_outbound"=>[],"testing3"=>[]},
|
692
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[],
|
693
|
-
"testing_bidirectional_inbound"=>[],"testing_inbound3"=>[]}}
|
694
|
-
|
609
|
+
@test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
610
|
+
@test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
611
|
+
@test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
|
612
|
+
@test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
|
695
613
|
end
|
696
614
|
end
|
697
615
|
|
698
|
-
describe '#
|
616
|
+
describe '#find_relationship_by_name' do
|
699
617
|
it 'should find relationships based on name passed in for inbound or outbound' do
|
700
618
|
@test_object2 = MockAFBaseRelationship.new
|
701
619
|
@test_object2.new_object = true
|
@@ -710,10 +628,10 @@ describe ActiveFedora::Base do
|
|
710
628
|
@test_object5.new_object = true
|
711
629
|
@test_object5.save
|
712
630
|
#append to named relationship 'testing'
|
713
|
-
@test_object2.
|
714
|
-
@test_object2.
|
715
|
-
@test_object5.
|
716
|
-
@test_object5.
|
631
|
+
@test_object2.add_relationship_by_name("testing",@test_object3)
|
632
|
+
@test_object2.add_relationship_by_name("testing2",@test_object4)
|
633
|
+
@test_object5.add_relationship_by_name("testing",@test_object2)
|
634
|
+
@test_object5.add_relationship_by_name("testing2",@test_object3)
|
717
635
|
@test_object2.save
|
718
636
|
@test_object5.save
|
719
637
|
r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
|
@@ -721,22 +639,22 @@ describe ActiveFedora::Base do
|
|
721
639
|
r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
|
722
640
|
r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
|
723
641
|
model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
|
724
|
-
@test_object2.
|
725
|
-
@test_object2.
|
726
|
-
@test_object2.
|
727
|
-
@test_object2.
|
728
|
-
@test_object3.
|
729
|
-
@test_object3.
|
730
|
-
@test_object3.
|
731
|
-
@test_object3.
|
732
|
-
@test_object4.
|
733
|
-
@test_object4.
|
734
|
-
@test_object4.
|
735
|
-
@test_object4.
|
736
|
-
@test_object5.
|
737
|
-
@test_object5.
|
738
|
-
@test_object5.
|
739
|
-
@test_object5.
|
642
|
+
@test_object2.find_relationship_by_name("testing").should == [r3.object]
|
643
|
+
@test_object2.find_relationship_by_name("testing2").should == [r4.object]
|
644
|
+
@test_object2.find_relationship_by_name("testing_inbound").should == [r5.object]
|
645
|
+
@test_object2.find_relationship_by_name("testing_inbound2").should == []
|
646
|
+
@test_object3.find_relationship_by_name("testing").should == []
|
647
|
+
@test_object3.find_relationship_by_name("testing2").should == []
|
648
|
+
@test_object3.find_relationship_by_name("testing_inbound").should == [r2.object]
|
649
|
+
@test_object3.find_relationship_by_name("testing_inbound2").should == [r5.object]
|
650
|
+
@test_object4.find_relationship_by_name("testing").should == []
|
651
|
+
@test_object4.find_relationship_by_name("testing2").should == []
|
652
|
+
@test_object4.find_relationship_by_name("testing_inbound").should == []
|
653
|
+
@test_object4.find_relationship_by_name("testing_inbound2").should == [r2.object]
|
654
|
+
@test_object5.find_relationship_by_name("testing").should == [r2.object]
|
655
|
+
@test_object5.find_relationship_by_name("testing2").should == [r3.object]
|
656
|
+
@test_object5.find_relationship_by_name("testing_inbound").should == []
|
657
|
+
@test_object5.find_relationship_by_name("testing_inbound2").should == []
|
740
658
|
|
741
659
|
end
|
742
660
|
end
|
@@ -951,34 +869,33 @@ describe ActiveFedora::Base do
|
|
951
869
|
:has_part=>[r3.object],
|
952
870
|
:has_member=>[r4.object]},
|
953
871
|
:inbound=>{:has_part=>[r5.object]}}
|
954
|
-
test_from_solr_object2.
|
955
|
-
|
872
|
+
test_from_solr_object2.relationships_by_name(false).should == {:self=>{"testing"=>[r3.object],"testing2"=>[r4.object],
|
873
|
+
"collection_members"=>[],"part_of"=>[],"parts_outbound"=>[r3.object]},
|
874
|
+
:inbound=>{"testing_inbound"=>[r5.object],"testing_inbound2"=>[],"parts_inbound"=>[]}}
|
956
875
|
test_from_solr_object3.relationships(false).should == {:self=>{:has_model=>[model_rel.object]},
|
957
876
|
:inbound=>{:has_part=>[r2.object],
|
958
877
|
:has_member=>[r5.object]}}
|
959
|
-
test_from_solr_object3.
|
960
|
-
:inbound=>{"testing_inbound"=>[r2.object],"testing_inbound2"=>[r5.object]}}
|
878
|
+
test_from_solr_object3.relationships_by_name(false).should == {:self=>{"testing"=>[],"testing2"=>[], "collection_members"=>[],"part_of"=>[],"parts_outbound"=>[]},
|
879
|
+
:inbound=>{"testing_inbound"=>[r2.object],"testing_inbound2"=>[r5.object], "parts_inbound"=>[]}}
|
961
880
|
test_from_solr_object4.relationships(false).should == {:self=>{:has_model=>[model_rel.object]},
|
962
881
|
:inbound=>{:has_member=>[r2.object]}}
|
963
|
-
test_from_solr_object4.
|
964
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[r2.object]}}
|
882
|
+
test_from_solr_object4.relationships_by_name(false).should == {:inbound=>{"parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
|
965
883
|
test_from_solr_object5.relationships(false).should == {:self=>{:has_model=>[model_rel.object],
|
966
884
|
:has_part=>[r2.object],
|
967
885
|
:has_member=>[r3.object]},
|
968
886
|
:inbound=>{}}
|
969
|
-
test_from_solr_object5.
|
970
|
-
:inbound=>{"testing_inbound"=>[],"testing_inbound2"=>[]}}
|
887
|
+
test_from_solr_object5.relationships_by_name(false).should == {:inbound=>{"parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object]}}
|
971
888
|
#all inbound should now be empty if no parameter supplied to relationships
|
972
889
|
test_from_solr_object2.relationships.should == {:self=>{:has_part=>[r3.object],:has_member=>[r4.object],:has_model=>[model_rel.object]}}
|
973
|
-
test_from_solr_object2.
|
890
|
+
test_from_solr_object2.relationships_by_name.should == {:self=>{"testing2"=>[r4.object], "collection_members"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object]}}
|
974
891
|
test_from_solr_object3.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
|
975
|
-
test_from_solr_object3.
|
892
|
+
test_from_solr_object3.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
|
976
893
|
test_from_solr_object4.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
|
977
|
-
test_from_solr_object4.
|
894
|
+
test_from_solr_object4.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
|
978
895
|
test_from_solr_object5.relationships.should == {:self=>{:has_model=>[model_rel.object],
|
979
896
|
:has_part=>[r2.object],
|
980
897
|
:has_member=>[r3.object]}}
|
981
|
-
test_from_solr_object5.
|
898
|
+
test_from_solr_object5.relationships_by_name.should == {:self=>{"testing2"=>[r3.object], "collection_members"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object]}}
|
982
899
|
# need to check metadata
|
983
900
|
test_from_solr_object2.fields[:language][:values].should == ["Italian"]
|
984
901
|
test_from_solr_object2.fields[:creator][:values].should == ["Linguist, A."]
|
@@ -44,15 +44,15 @@ describe ActiveFedora::Datastream do
|
|
44
44
|
it "should be able to update Blob Datastream content and save to Fedora" do
|
45
45
|
dsid = "ds#{Time.now.to_i}"
|
46
46
|
ds = ActiveFedora::Datastream.new(:dsID => dsid, :dsLabel => 'hello', :altIDs => '3333',
|
47
|
-
:controlGroup => 'M', :blob => fixture('dino.jpg'))
|
48
|
-
|
47
|
+
:controlGroup => 'M', :blob => fixture('dino.jpg').read)
|
48
|
+
ds.blob.should == fixture('dino.jpg').read
|
49
49
|
@test_object.add_datastream(ds).should be_true
|
50
50
|
@test_object.save
|
51
51
|
to = ActiveFedora::Base.load_instance(@test_object.pid)
|
52
52
|
to.should_not be_nil
|
53
53
|
to.datastreams[dsid].should_not be_nil
|
54
54
|
# to.datastreams[dsid].control_group.should == "M"
|
55
|
-
to.datastreams[dsid].content.
|
55
|
+
to.datastreams[dsid].content.should == fixture('dino.jpg').read
|
56
56
|
|
57
57
|
end
|
58
58
|
|
@@ -141,7 +141,7 @@ end
|
|
141
141
|
|
142
142
|
it "should create/update image/file datastream" do
|
143
143
|
ds = Fedora::Datastream.new(:pid => @test_object.pid, :dsID => 'DS1', :dsLabel => 'hello', :altIDs => '3333',
|
144
|
-
:controlGroup => 'M', :blob => fixture('dino.jpg'))
|
144
|
+
:controlGroup => 'M', :blob => fixture('dino.jpg').read, :mimeType=>'image/jpeg')
|
145
145
|
|
146
146
|
@fedora.save(ds).should be_true
|
147
147
|
|
@@ -139,15 +139,15 @@ describe ActiveFedora::RelsExtDatastream do
|
|
139
139
|
test_from_solr_object5.rels_ext.from_solr(solr_doc)
|
140
140
|
|
141
141
|
test_from_solr_object2.relationships.should == {:self=>{:has_part=>[r3.object],:has_member=>[r4.object],:has_model=>[model_rel.object]}}
|
142
|
-
test_from_solr_object2.
|
142
|
+
test_from_solr_object2.relationships_by_name.should == {:self=>{"testing"=>[r3.object],"testing2"=>[r4.object], "collection_members"=>[], "part_of"=>[], "parts_outbound"=>[r3.object]}}
|
143
143
|
test_from_solr_object3.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
|
144
|
-
test_from_solr_object3.
|
144
|
+
test_from_solr_object3.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
|
145
145
|
test_from_solr_object4.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
|
146
|
-
test_from_solr_object4.
|
146
|
+
test_from_solr_object4.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
|
147
147
|
test_from_solr_object5.relationships.should == {:self=>{:has_model=>[model_rel.object],
|
148
148
|
:has_part=>[r2.object],
|
149
149
|
:has_member=>[r3.object]}}
|
150
|
-
test_from_solr_object5.
|
150
|
+
test_from_solr_object5.relationships_by_name.should == {:self=>{"testing2"=>[r3.object], "collection_members"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object]}}
|
151
151
|
end
|
152
152
|
end
|
153
153
|
end
|
@@ -5,7 +5,7 @@ require 'active_fedora'
|
|
5
5
|
describe ActiveFedora::SemanticNode do
|
6
6
|
|
7
7
|
before(:all) do
|
8
|
-
class SpecNode
|
8
|
+
class SpecNode
|
9
9
|
include ActiveFedora::SemanticNode
|
10
10
|
has_relationship "collection_members", :has_collection_member
|
11
11
|
end
|
@@ -13,8 +13,17 @@ describe ActiveFedora::SemanticNode do
|
|
13
13
|
class SNSpecModel < ActiveFedora::Base
|
14
14
|
has_relationship("parts", :is_part_of, :inbound => true)
|
15
15
|
has_relationship("containers", :is_member_of)
|
16
|
+
has_bidirectional_relationship("bi_containers", :is_member_of, :has_member)
|
16
17
|
end
|
17
|
-
|
18
|
+
class SpecNodeSolrFilterQuery < ActiveFedora::Base
|
19
|
+
has_relationship("parts", :is_part_of, :inbound => true)
|
20
|
+
has_relationship("special_parts", :is_part_of, :inbound => true, :solr_fq=>"has_model_s:info\\:fedora/SpecialPart")
|
21
|
+
has_relationship("containers", :is_member_of)
|
22
|
+
has_relationship("special_containers", :is_member_of, :solr_fq=>"has_model_s:info\\:fedora/SpecialContainer")
|
23
|
+
has_bidirectional_relationship("bi_containers", :is_member_of, :has_member)
|
24
|
+
has_bidirectional_relationship("bi_special_containers", :is_member_of, :has_member, :solr_fq=>"has_model_s:info\\:fedora/SpecialContainer")
|
25
|
+
end
|
26
|
+
|
18
27
|
@test_object = SNSpecModel.new
|
19
28
|
@test_object.save
|
20
29
|
|
@@ -30,19 +39,101 @@ describe ActiveFedora::SemanticNode do
|
|
30
39
|
@container1.save
|
31
40
|
@container2 = ActiveFedora::Base.new()
|
32
41
|
@container2.save
|
42
|
+
@container3 = ActiveFedora::Base.new()
|
43
|
+
@container3.save
|
44
|
+
@container4 = ActiveFedora::Base.new()
|
45
|
+
@container4.save
|
33
46
|
|
34
47
|
@test_object.add_relationship(:is_member_of, @container1)
|
35
48
|
@test_object.add_relationship(:is_member_of, @container2)
|
49
|
+
@test_object.add_relationship(:is_member_of, @container3)
|
36
50
|
@test_object.save
|
51
|
+
|
52
|
+
@container4.add_relationship(:has_member,@test_object)
|
53
|
+
@container4.save
|
54
|
+
|
55
|
+
@special_container = ActiveFedora::Base.new()
|
56
|
+
@special_container.add_relationship(:has_model,"SpecialContainer")
|
57
|
+
@special_container.save
|
58
|
+
|
59
|
+
@special_container3 = ActiveFedora::Base.new()
|
60
|
+
@special_container3.add_relationship(:has_model,"SpecialContainer")
|
61
|
+
@special_container3.save
|
62
|
+
|
63
|
+
@special_container4 = ActiveFedora::Base.new()
|
64
|
+
@special_container4.add_relationship(:has_model,"SpecialContainer")
|
65
|
+
@special_container4.save
|
66
|
+
|
67
|
+
#even though adding container3 and 3 special containers, it should only include the special containers when returning via relationship name finder methods
|
68
|
+
#also should only return special part similarly
|
69
|
+
@test_object_query = SpecNodeSolrFilterQuery.new
|
70
|
+
@test_object_query.add_relationship(:is_member_of, @container3)
|
71
|
+
@test_object_query.add_relationship(:is_member_of, @special_container)
|
72
|
+
@test_object_query.add_relationship(:is_member_of, @special_container3)
|
73
|
+
@test_object_query.add_relationship(:is_member_of, @special_container4)
|
74
|
+
@test_object_query.save
|
75
|
+
|
76
|
+
@special_container2 = ActiveFedora::Base.new()
|
77
|
+
@special_container2.add_relationship(:has_model,"SpecialContainer")
|
78
|
+
@special_container2.add_relationship(:has_member,@test_object_query.pid)
|
79
|
+
@special_container2.save
|
80
|
+
|
81
|
+
@part3 = ActiveFedora::Base.new()
|
82
|
+
@part3.add_relationship(:is_part_of, @test_object_query)
|
83
|
+
@part3.save
|
84
|
+
|
85
|
+
@special_part = ActiveFedora::Base.new()
|
86
|
+
@special_part.add_relationship(:has_model,"SpecialPart")
|
87
|
+
@special_part.add_relationship(:is_part_of, @test_object_query)
|
88
|
+
@special_part.save
|
89
|
+
|
37
90
|
end
|
38
91
|
|
39
92
|
after(:all) do
|
93
|
+
begin
|
40
94
|
@part1.delete
|
95
|
+
rescue
|
96
|
+
end
|
97
|
+
begin
|
41
98
|
@part2.delete
|
99
|
+
rescue
|
100
|
+
end
|
101
|
+
begin
|
102
|
+
@part3.delete
|
103
|
+
rescue
|
104
|
+
end
|
105
|
+
begin
|
42
106
|
@container1.delete
|
107
|
+
rescue
|
108
|
+
end
|
109
|
+
begin
|
43
110
|
@container2.delete
|
111
|
+
rescue
|
112
|
+
end
|
113
|
+
begin
|
114
|
+
@container3.delete
|
115
|
+
rescue
|
116
|
+
end
|
117
|
+
begin
|
44
118
|
@test_object.delete
|
45
|
-
|
119
|
+
rescue
|
120
|
+
end
|
121
|
+
begin
|
122
|
+
@test_object_query.delete
|
123
|
+
rescue
|
124
|
+
end
|
125
|
+
begin
|
126
|
+
@special_part.delete
|
127
|
+
rescue
|
128
|
+
end
|
129
|
+
begin
|
130
|
+
@special_container.delete
|
131
|
+
rescue
|
132
|
+
end
|
133
|
+
begin
|
134
|
+
@special_container2.delete
|
135
|
+
rescue
|
136
|
+
end
|
46
137
|
Object.send(:remove_const, :SNSpecModel)
|
47
138
|
|
48
139
|
end
|
@@ -62,6 +153,84 @@ describe ActiveFedora::SemanticNode do
|
|
62
153
|
end
|
63
154
|
|
64
155
|
describe "inbound relationship finders" do
|
156
|
+
describe "when inheriting from parents" do
|
157
|
+
before do
|
158
|
+
class Test2 < ActiveFedora::Base
|
159
|
+
# has_bidirectional_relationship "components", :has_component, :is_component_of
|
160
|
+
end
|
161
|
+
class Test3 < Test2
|
162
|
+
# has_bidirectional_relationship "components", :has_component, :is_component_of
|
163
|
+
has_relationship "testing", :has_member
|
164
|
+
end
|
165
|
+
|
166
|
+
class Test4 < Test3
|
167
|
+
has_relationship "testing_inbound", :is_member_of, :inbound=>true
|
168
|
+
end
|
169
|
+
|
170
|
+
class Test5 < Test4
|
171
|
+
has_relationship "testing_inbound", :is_part_of, :inbound=>true
|
172
|
+
end
|
173
|
+
|
174
|
+
@test_object2 = Test2.new
|
175
|
+
@test_object2.save
|
176
|
+
@part4 = ActiveFedora::Base.new()
|
177
|
+
end
|
178
|
+
it "should have relationships defined" do
|
179
|
+
# puts "Test2 relationships_desc:"
|
180
|
+
# puts Test2.relationships_desc.inspect
|
181
|
+
# puts "ActiveFedora::Base relationships_desc:"
|
182
|
+
# puts ActiveFedora::Base.relationships_desc.inspect
|
183
|
+
ActiveFedora::Base.relationships_desc.should have_key(:inbound)
|
184
|
+
Test2.relationships_desc.should have_key(:inbound)
|
185
|
+
ActiveFedora::Base.relationships_desc[:inbound].each_pair do |key, value|
|
186
|
+
Test2.relationships_desc[:inbound].should have_key(key)
|
187
|
+
Test2.relationships_desc[:inbound][key].should == value
|
188
|
+
Test2.inbound_relationship_query("foo:1",key.to_s).should_not be_empty
|
189
|
+
end
|
190
|
+
ActiveFedora::Base.relationships_desc[:self].each_pair do |key, value|
|
191
|
+
Test2.relationships_desc[:self].should have_key(key)
|
192
|
+
Test2.relationships_desc[:self][key].should == value
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should have relationships defined from more than one ancestor class" do
|
197
|
+
Test4.relationships_desc[:self].should have_key("collection_members")
|
198
|
+
Test4.relationships_desc[:self].should have_key("testing")
|
199
|
+
Test4.relationships_desc[:inbound].should have_key("testing_inbound")
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should override a parents relationship description if defined in the child" do
|
203
|
+
#check parent description
|
204
|
+
Test4.relationships_desc[:inbound]["testing_inbound"][:predicate].should == :is_member_of
|
205
|
+
#check child with overwritten relationship description has different predicate
|
206
|
+
Test5.relationships_desc[:inbound]["testing_inbound"][:predicate].should == :is_part_of
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should not have relationships bleeding over from other sibling classes" do
|
210
|
+
SpecNodeSolrFilterQuery.relationships_desc[:inbound].should have_key("bi_special_containers_inbound")
|
211
|
+
ActiveFedora::Base.relationships_desc[:inbound].should_not have_key("bi_special_containers_inbound")
|
212
|
+
Test2.relationships_desc[:inbound].should_not have_key("bi_special_containers_inbound")
|
213
|
+
end
|
214
|
+
it "should return an empty set" do
|
215
|
+
@test_object2.parts.should == []
|
216
|
+
@test_object2.parts_outbound.should == []
|
217
|
+
end
|
218
|
+
it "should return stuff" do
|
219
|
+
@part4.add_relationship(:is_part_of, @test_object2)
|
220
|
+
@test_object2.add_relationship(:has_part, @test_object)
|
221
|
+
@part4.save
|
222
|
+
@test_object2.parts_inbound.map(&:pid).should == [@part4.pid]
|
223
|
+
@test_object2.parts_outbound.map(&:pid).should == [@test_object.pid]
|
224
|
+
@test_object2.parts.map(&:pid).should == [@part4.pid, @test_object.pid]
|
225
|
+
end
|
226
|
+
after do
|
227
|
+
@test_object2.delete
|
228
|
+
begin
|
229
|
+
@part4.delete
|
230
|
+
rescue
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
65
234
|
it "should return an array of Base objects" do
|
66
235
|
parts = @test_object.parts
|
67
236
|
parts.each do |part|
|
@@ -70,12 +239,79 @@ describe ActiveFedora::SemanticNode do
|
|
70
239
|
end
|
71
240
|
it "_ids should return an array of pids" do
|
72
241
|
ids = @test_object.parts_ids
|
73
|
-
ids.
|
74
|
-
|
75
|
-
|
242
|
+
ids.size.should == 2
|
243
|
+
ids.include?(@part1.pid).should == true
|
244
|
+
ids.include?(@part2.pid).should == true
|
245
|
+
end
|
246
|
+
it "should return an array of Base objects with some filtered out if using solr_fq" do
|
247
|
+
@test_object_query.special_parts_ids.should == [@special_part.pid]
|
248
|
+
end
|
249
|
+
|
250
|
+
it "should return an array of all Base objects with relationship if not using solr_fq" do
|
251
|
+
@test_object_query.parts_ids.size.should == 2
|
252
|
+
@test_object_query.parts_ids.include?(@special_part.pid).should == true
|
253
|
+
@test_object_query.parts_ids.include?(@part3.pid).should == true
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should return a solr query for an inbound relationship" do
|
257
|
+
@test_object_query.special_parts_query.should == "#{@test_object_query.relationship_predicates[:inbound]['special_parts']}_s:#{@test_object_query.internal_uri.gsub(/(:)/, '\\:')} AND has_model_s:info\\:fedora/SpecialPart"
|
76
258
|
end
|
77
259
|
end
|
78
|
-
|
260
|
+
|
261
|
+
describe "inbound relationship query" do
|
262
|
+
it "should return a properly formatted query for a relationship that has a solr filter query defined" do
|
263
|
+
SpecNodeSolrFilterQuery.inbound_relationship_query(@test_object_query.pid,"special_parts").should == "#{@test_object_query.relationship_predicates[:inbound]['special_parts']}_s:#{@test_object_query.internal_uri.gsub(/(:)/, '\\:')} AND has_model_s:info\\:fedora/SpecialPart"
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should return a properly formatted query for a relationship that does not have a solr filter query defined" do
|
267
|
+
SpecNodeSolrFilterQuery.inbound_relationship_query(@test_object_query.pid,"parts").should == "is_part_of_s:#{@test_object_query.internal_uri.gsub(/(:)/, '\\:')}"
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
describe "outbound relationship query" do
|
272
|
+
it "should return a properly formatted query for a relationship that has a solr filter query defined" do
|
273
|
+
expected_string = ""
|
274
|
+
@test_object_query.containers_ids.each_with_index do |id,index|
|
275
|
+
expected_string << " OR " if index > 0
|
276
|
+
expected_string << "(id:" + id.gsub(/(:)/, '\\:') + " AND has_model_s:info\\:fedora/SpecialContainer)"
|
277
|
+
end
|
278
|
+
SpecNodeSolrFilterQuery.outbound_relationship_query("special_containers",@test_object_query.containers_ids).should == expected_string
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should return a properly formatted query for a relationship that does not have a solr filter query defined" do
|
282
|
+
expected_string = ""
|
283
|
+
@test_object_query.containers_ids.each_with_index do |id,index|
|
284
|
+
expected_string << " OR " if index > 0
|
285
|
+
expected_string << "id:" + id.gsub(/(:)/, '\\:')
|
286
|
+
end
|
287
|
+
SpecNodeSolrFilterQuery.outbound_relationship_query("containers",@test_object_query.containers_ids).should == expected_string
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
describe "bidirectional relationship query" do
|
292
|
+
it "should return a properly formatted query for a relationship that has a solr filter query defined" do
|
293
|
+
expected_string = ""
|
294
|
+
@test_object_query.bi_containers_outbound_ids.each_with_index do |id,index|
|
295
|
+
expected_string << " OR " if index > 0
|
296
|
+
expected_string << "(id:" + id.gsub(/(:)/, '\\:') + " AND has_model_s:info\\:fedora/SpecialContainer)"
|
297
|
+
end
|
298
|
+
expected_string << " OR "
|
299
|
+
expected_string << "(#{@test_object_query.relationship_predicates[:inbound]['bi_special_containers_inbound']}_s:#{@test_object_query.internal_uri.gsub(/(:)/, '\\:')} AND has_model_s:info\\:fedora/SpecialContainer)"
|
300
|
+
SpecNodeSolrFilterQuery.bidirectional_relationship_query(@test_object_query.pid,"bi_special_containers",@test_object_query.bi_containers_outbound_ids).should == expected_string
|
301
|
+
end
|
302
|
+
|
303
|
+
it "should return a properly formatted query for a relationship that does not have a solr filter query defined" do
|
304
|
+
expected_string = ""
|
305
|
+
@test_object_query.bi_containers_outbound_ids.each_with_index do |id,index|
|
306
|
+
expected_string << " OR " if index > 0
|
307
|
+
expected_string << "id:" + id.gsub(/(:)/, '\\:')
|
308
|
+
end
|
309
|
+
expected_string << " OR "
|
310
|
+
expected_string << "(#{@test_object_query.relationship_predicates[:inbound]['bi_special_containers_inbound']}_s:#{@test_object_query.internal_uri.gsub(/(:)/, '\\:')})"
|
311
|
+
SpecNodeSolrFilterQuery.bidirectional_relationship_query(@test_object_query.pid,"bi_containers",@test_object_query.bi_containers_outbound_ids).should == expected_string
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
79
315
|
describe "outbound relationship finders" do
|
80
316
|
it "should return an array of Base objects" do
|
81
317
|
containers = @test_object.containers
|
@@ -86,9 +322,132 @@ describe ActiveFedora::SemanticNode do
|
|
86
322
|
end
|
87
323
|
it "_ids should return an array of pids" do
|
88
324
|
ids = @test_object.containers_ids
|
89
|
-
ids.
|
90
|
-
|
91
|
-
|
325
|
+
ids.size.should == 3
|
326
|
+
ids.include?(@container1.pid).should == true
|
327
|
+
ids.include?(@container2.pid).should == true
|
328
|
+
ids.include?(@container3.pid).should == true
|
329
|
+
ids.include?(@container4.pid).should == false
|
92
330
|
end
|
331
|
+
|
332
|
+
it "should return an array of Base objects with some filtered out if using solr_fq" do
|
333
|
+
@test_object_query.special_containers_ids.size.should == 3
|
334
|
+
@test_object_query.special_containers_ids.include?(@container3.pid).should == false
|
335
|
+
@test_object_query.special_containers_ids.include?(@special_container.pid).should == true
|
336
|
+
@test_object_query.special_containers_ids.include?(@special_container3.pid).should == true
|
337
|
+
@test_object_query.special_containers_ids.include?(@special_container4.pid).should == true
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should return an array of all Base objects with relationship if not using solr_fq" do
|
341
|
+
@test_object_query.containers_ids.size.should == 4
|
342
|
+
@test_object_query.containers_ids.include?(@special_container2.pid).should == false
|
343
|
+
@test_object_query.containers_ids.include?(@special_container.pid).should == true
|
344
|
+
@test_object_query.containers_ids.include?(@container3.pid).should == true
|
345
|
+
@test_object_query.containers_ids.include?(@special_container3.pid).should == true
|
346
|
+
@test_object_query.containers_ids.include?(@special_container4.pid).should == true
|
347
|
+
end
|
348
|
+
|
349
|
+
it "should return a solr query for an outbound relationship" do
|
350
|
+
end
|
351
|
+
|
352
|
+
it "should return an array of Base objects with some filtered out if using solr_fq" do
|
353
|
+
@test_object_query.special_containers_ids.size.should == 3
|
354
|
+
@test_object_query.special_containers_ids.include?(@container3.pid).should == false
|
355
|
+
@test_object_query.special_containers_ids.include?(@special_container.pid).should == true
|
356
|
+
@test_object_query.special_containers_ids.include?(@special_container3.pid).should == true
|
357
|
+
@test_object_query.special_containers_ids.include?(@special_container4.pid).should == true
|
358
|
+
end
|
359
|
+
|
360
|
+
it "should return an array of all Base objects with relationship if not using solr_fq" do
|
361
|
+
@test_object_query.containers_ids.size.should == 4
|
362
|
+
@test_object_query.containers_ids.include?(@special_container2.pid).should == false
|
363
|
+
@test_object_query.containers_ids.include?(@special_container.pid).should == true
|
364
|
+
@test_object_query.containers_ids.include?(@container3.pid).should == true
|
365
|
+
@test_object_query.containers_ids.include?(@special_container3.pid).should == true
|
366
|
+
@test_object_query.containers_ids.include?(@special_container4.pid).should == true
|
367
|
+
end
|
368
|
+
|
369
|
+
it "should return a solr query for an outbound relationship" do
|
370
|
+
expected_string = ""
|
371
|
+
@test_object_query.containers_ids.each_with_index do |id,index|
|
372
|
+
expected_string << " OR " if index > 0
|
373
|
+
expected_string << "(id:" + id.gsub(/(:)/, '\\:') + " AND has_model_s:info\\:fedora/SpecialContainer)"
|
374
|
+
end
|
375
|
+
@test_object_query.special_containers_query.should == expected_string
|
376
|
+
end
|
93
377
|
end
|
378
|
+
|
379
|
+
describe "bidirectional relationship finders" do
|
380
|
+
it "should return an array of Base objects" do
|
381
|
+
containers = @test_object.bi_containers
|
382
|
+
containers.length.should > 0
|
383
|
+
containers.each do |container|
|
384
|
+
container.should be_kind_of(ActiveFedora::Base)
|
385
|
+
end
|
386
|
+
end
|
387
|
+
it "_ids should return an array of pids" do
|
388
|
+
ids = @test_object.bi_containers_ids
|
389
|
+
ids.size.should == 4
|
390
|
+
ids.include?(@container1.pid).should == true
|
391
|
+
ids.include?(@container2.pid).should == true
|
392
|
+
ids.include?(@container3.pid).should == true
|
393
|
+
ids.include?(@container4.pid).should == true
|
394
|
+
end
|
395
|
+
|
396
|
+
it "should return an array of Base objects with some filtered out if using solr_fq" do
|
397
|
+
ids = @test_object_query.bi_special_containers_ids
|
398
|
+
ids.size.should == 4
|
399
|
+
ids.include?(@container1.pid).should == false
|
400
|
+
ids.include?(@container2.pid).should == false
|
401
|
+
ids.include?(@container3.pid).should == false
|
402
|
+
ids.include?(@special_container.pid).should == true
|
403
|
+
ids.include?(@special_container2.pid).should == true
|
404
|
+
ids.include?(@special_container3.pid).should == true
|
405
|
+
ids.include?(@special_container4.pid).should == true
|
406
|
+
end
|
407
|
+
|
408
|
+
it "should return an array of all Base objects with relationship if not using solr_fq" do
|
409
|
+
ids = @test_object_query.bi_containers_ids
|
410
|
+
ids.size.should == 5
|
411
|
+
ids.include?(@container3.pid).should == true
|
412
|
+
ids.include?(@special_container.pid).should == true
|
413
|
+
ids.include?(@special_container2.pid).should == true
|
414
|
+
ids.include?(@special_container3.pid).should == true
|
415
|
+
ids.include?(@special_container4.pid).should == true
|
416
|
+
end
|
417
|
+
|
418
|
+
it "should return a solr query for a bidirectional relationship" do
|
419
|
+
expected_string = ""
|
420
|
+
@test_object_query.bi_containers_outbound_ids.each_with_index do |id,index|
|
421
|
+
expected_string << " OR " if index > 0
|
422
|
+
expected_string << "(id:" + id.gsub(/(:)/, '\\:') + " AND has_model_s:info\\:fedora/SpecialContainer)"
|
423
|
+
end
|
424
|
+
expected_string << " OR "
|
425
|
+
expected_string << "(#{@test_object_query.relationship_predicates[:inbound]['bi_special_containers_inbound']}_s:#{@test_object_query.internal_uri.gsub(/(:)/, '\\:')} AND has_model_s:info\\:fedora/SpecialContainer)"
|
426
|
+
@test_object_query.bi_special_containers_query.should == expected_string
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
#putting this test here instead of relationships_helper because testing that relationships_by_name hash gets refreshed if the relationships hash is changed
|
431
|
+
describe "relationships_by_name" do
|
432
|
+
class MockSemNamedRelationships
|
433
|
+
include ActiveFedora::SemanticNode
|
434
|
+
has_relationship "testing", :has_part
|
435
|
+
has_relationship "testing2", :has_member
|
436
|
+
has_relationship "testing_inbound", :has_part, :inbound=>true
|
437
|
+
end
|
438
|
+
|
439
|
+
it 'should automatically update the relationships_by_name if relationships has changed (no refresh of relationships_by_name hash unless relationships hash has changed' do
|
440
|
+
@test_object2 = MockSemNamedRelationships.new
|
441
|
+
r = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_model,:object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockSemNamedRelationships)})
|
442
|
+
@test_object2.add_relationship(r)
|
443
|
+
#should return expected named relationships
|
444
|
+
@test_object2.relationships_by_name.should == {:self=>{"testing"=>[],"testing2"=>[]},:inbound=>{"testing_inbound"=>[]}}
|
445
|
+
r3 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>@test_object})
|
446
|
+
@test_object2.add_relationship(r3)
|
447
|
+
@test_object2.relationships_by_name.should == {:self=>{"testing"=>[r3.object],"testing2"=>[]},:inbound=>{"testing_inbound"=>[]}}
|
448
|
+
r4 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_member,:object=>"3"})
|
449
|
+
@test_object2.add_relationship(r4)
|
450
|
+
@test_object2.relationships_by_name.should == {:self=>{"testing"=>[r3.object],"testing2"=>[r4.object]},:inbound=>{"testing_inbound"=>[]}}
|
451
|
+
end
|
452
|
+
end
|
94
453
|
end
|