Fiddling around with labels and boxes
[erd-marker.git] / spec / erd_handler / erd_spec.rb
index 0c32a815805b1c7afcd93be5809f4ac88b5ba8f8..6b33dd8e3dbfc92238b3c76aadcb5b5201103079 100644 (file)
@@ -79,61 +79,124 @@ module ErdHandler
         erd.should have(6).edges
         
         b0 = erd.vertices.find {|b| b.id == 0}
-        b0.name.should == "Unit"
+        b0.name.original.should == "Unit"
         b0.should have(2).neighbours
         
         b1 = erd.vertices.find {|b| b.id == 1}
-        b1.name.should == "Employee"
+        b1.name.original.should == "Employee"
         b1.should have(2).neighbours
         
         b2 = erd.vertices.find {|b| b.id == 2}
-        b2.name.should == "Course"
+        b2.name.original.should == "Course"
         b2.should have(3).neighbours
 
         b3 = erd.vertices.find {|b| b.id == 3}
-        b3.name.should == "Presentation"
+        b3.name.original.should == "Presentation"
         b3.should have(3).neighbours
         
         b4 = erd.vertices.find {|b| b.id == 4}
-        b4.name.should == "Client"
+        b4.name.original.should == "Client"
         b4.should have(1).neighbours
 
         l0 = erd.edges.find {|e| e.id == 0}
+        l0.name.original.should == "ConsistsOf"
         l0.connections.find {|c| c.end == b0}.blob.should be :closed
         l0.connections.find {|c| c.end == b0}.crowsfoot.should be :yes
         l0.connections.find {|c| c.end == b2}.blob.should be :closed
         l0.connections.find {|c| c.end == b2}.crowsfoot.should be :no
 
         l1 = erd.edges.find {|e| e.id == 1}
+        l1.name.original.should == "Prepares"
         l1.connections.find {|c| c.end == b0}.blob.should be :open
         l1.connections.find {|c| c.end == b0}.crowsfoot.should be :yes
         l1.connections.find {|c| c.end == b1}.blob.should be :closed
         l1.connections.find {|c| c.end == b1}.crowsfoot.should be :no
 
         l2 = erd.edges.find {|e| e.id == 2}
+        l2.name.original.should == "Presents"
         l2.connections.find {|c| c.end == b1}.blob.should be :closed
         l2.connections.find {|c| c.end == b1}.crowsfoot.should be :no
         l2.connections.find {|c| c.end == b3}.blob.should be :closed
         l2.connections.find {|c| c.end == b3}.crowsfoot.should be :yes
 
         l3 = erd.edges.find {|e| e.id == 3}
+        l3.name.original.should == "Presented"
         l3.connections.find {|c| c.end == b2}.blob.should be :open
         l3.connections.find {|c| c.end == b2}.crowsfoot.should be :no
         l3.connections.find {|c| c.end == b3}.blob.should be :closed
         l3.connections.find {|c| c.end == b3}.crowsfoot.should be :yes
 
         l4 = erd.edges.find {|e| e.id == 4}
+        l4.name.original.should == "Recieves"
         l4.connections.find {|c| c.end == b3}.blob.should be :closed
         l4.connections.find {|c| c.end == b3}.crowsfoot.should be :yes
         l4.connections.find {|c| c.end == b4}.blob.should be :closed
         l4.connections.find {|c| c.end == b4}.crowsfoot.should be :no
 
         l5 = erd.edges.find {|e| e.id == 5}
+        l5.name.original.should == "IsPrerequisiteOf"
         l5.connections.find {|c| c.crowsfoot == :yes}.blob.should be :open
         l5.connections.find {|c| c.crowsfoot == :no}.blob.should be :open
         l5.connections.find {|c| c.crowsfoot == :yes}.end.should be b2
         l5.connections.find {|c| c.crowsfoot == :no}.end.should be b2
       end
     end # #read
+    
+    describe "#mmus" do
+      it "finds three MMUs in a simple ERD" do
+        erd = Erd.new
+        erd.read(File.new("spec/fixtures/two_boxes_one_link_erd.xml"))
+        mmus = erd.mmus
+        
+        mmus.should have(3).items
+        single_box_mmus = mmus.select {|m| m.vertices.length == 1}
+        single_link_mmus = mmus.select {|m| m.edges.length == 1}
+        
+        single_box_mmus.should have(2).items
+        single_box_mmus.each do |m|
+          m.should have(1).vertices
+          m.should have(0).edges
+        end
+        
+        single_link_mmus.should have(1).items
+        single_link_mmus.each do |m|
+          m.should have(2).vertices
+          m.should have(1).edges
+          m.edges.first.should have(2).connections
+          m.vertices.each do |v|
+            m.vertices.should include(v)
+          end
+        end
+      end
+      
+      it "finds many MMUs in a complex ERD" do
+        erd = Erd.new
+        erd.read(File.new("spec/fixtures/complex_erd.xml"))
+        mmus = erd.mmus
+        
+        mmus.should have(11).items
+        single_box_mmus = mmus.select {|m| m.vertices.length == 1}
+        single_link_mmus = mmus.select {|m| m.edges.length == 1}
+
+        single_box_mmus.should have(5).items
+        single_box_mmus.each do |m|
+          m.should have(1).vertices
+          m.should have(0).edges
+        end
+        single_box_mmus.map {|m| m.vertices.first.name.original}.uniq.should have(5).items
+        
+        single_link_mmus.should have(6).items
+        single_link_mmus.each do |m|
+          m.should have(2).vertices
+          m.should have(1).edges
+          m.edges.first.should have(2).connections
+          m.vertices.each do |v|
+            m.vertices.should include(v)
+          end
+        end
+        single_link_mmus.map {|m| m.edges.first.name.original}.uniq.should have(6).items
+      end
+
+    end # #mmus
   end
 end