瀏覽代碼

Export Agents in GUID order so that the result is amenable to version control tracking

eric 9 年之前
父節點
當前提交
d233946feb
共有 2 個文件被更改,包括 11 次插入7 次删除
  1. 1 1
      lib/agents_exporter.rb
  2. 10 6
      spec/lib/agents_exporter_spec.rb

+ 1 - 1
lib/agents_exporter.rb

@@ -27,7 +27,7 @@ class AgentsExporter
   end
   end
 
 
   def agents
   def agents
-    options[:agents].to_a
+    options[:agents].sort_by{|agent| agent.guid}.to_a
   end
   end
 
 
   def links
   def links

+ 10 - 6
spec/lib/agents_exporter_spec.rb

@@ -23,27 +23,27 @@ describe AgentsExporter do
       expect(data[:tag_fg_color]).to eq(tag_fg_color)
       expect(data[:tag_fg_color]).to eq(tag_fg_color)
       expect(data[:tag_bg_color]).to eq(tag_bg_color)
       expect(data[:tag_bg_color]).to eq(tag_bg_color)
       expect(Time.parse(data[:exported_at])).to be_within(2).of(Time.now.utc)
       expect(Time.parse(data[:exported_at])).to be_within(2).of(Time.now.utc)
-      expect(data[:links]).to eq([{ :source => 0, :receiver => 1 }])
+      expect(data[:links]).to eq([{ :source => guid_order(agent_list, :jane_weather_agent), :receiver => guid_order(agent_list, :jane_rain_notifier_agent)}])
       expect(data[:control_links]).to eq([])
       expect(data[:control_links]).to eq([])
-      expect(data[:agents]).to eq(agent_list.map { |agent| exporter.agent_as_json(agent) })
+      expect(data[:agents]).to eq(agent_list.sort_by{|a| a.guid}.map { |agent| exporter.agent_as_json(agent) })
       expect(data[:agents].all? { |agent_json| agent_json[:guid].present? && agent_json[:type].present? && agent_json[:name].present? }).to be_truthy
       expect(data[:agents].all? { |agent_json| agent_json[:guid].present? && agent_json[:type].present? && agent_json[:name].present? }).to be_truthy
 
 
-      expect(data[:agents][0]).not_to have_key(:propagate_immediately) # can't receive events
-      expect(data[:agents][1]).not_to have_key(:schedule) # can't be scheduled
+      expect(data[:agents][guid_order(agent_list, :jane_weather_agent)]).not_to have_key(:propagate_immediately) # can't receive events
+      expect(data[:agents][guid_order(agent_list, :jane_rain_notifier_agent)]).not_to have_key(:schedule) # can't be scheduled
     end
     end
 
 
     it "does not output links to other agents outside of the incoming set" do
     it "does not output links to other agents outside of the incoming set" do
       Link.create!(:source_id => agents(:jane_weather_agent).id, :receiver_id => agents(:jane_website_agent).id)
       Link.create!(:source_id => agents(:jane_weather_agent).id, :receiver_id => agents(:jane_website_agent).id)
       Link.create!(:source_id => agents(:jane_website_agent).id, :receiver_id => agents(:jane_rain_notifier_agent).id)
       Link.create!(:source_id => agents(:jane_website_agent).id, :receiver_id => agents(:jane_rain_notifier_agent).id)
 
 
-      expect(exporter.as_json[:links]).to eq([{ :source => 0, :receiver => 1 }])
+      expect(exporter.as_json[:links]).to eq([{ :source => guid_order(agent_list, :jane_weather_agent), :receiver => guid_order(agent_list, :jane_rain_notifier_agent) }])
     end
     end
 
 
     it "outputs control links to agents within the incoming set, but not outside it" do
     it "outputs control links to agents within the incoming set, but not outside it" do
       agents(:jane_rain_notifier_agent).control_targets = [agents(:jane_weather_agent), agents(:jane_basecamp_agent)]
       agents(:jane_rain_notifier_agent).control_targets = [agents(:jane_weather_agent), agents(:jane_basecamp_agent)]
       agents(:jane_rain_notifier_agent).save!
       agents(:jane_rain_notifier_agent).save!
 
 
-      expect(exporter.as_json[:control_links]).to eq([{ :controller => 1, :control_target => 0 }])
+      expect(exporter.as_json[:control_links]).to eq([{ :controller => guid_order(agent_list, :jane_rain_notifier_agent), :control_target => guid_order(agent_list, :jane_weather_agent) }])
     end
     end
   end
   end
 
 
@@ -71,4 +71,8 @@ describe AgentsExporter do
       expect(AgentsExporter.new(:name => ",,").filename).to eq("exported-agents.json")
       expect(AgentsExporter.new(:name => ",,").filename).to eq("exported-agents.json")
     end
     end
   end
   end
+
+  def guid_order(agent_list, agent_name)
+    agent_list.map{|a|a.guid}.sort.find_index(agents(agent_name).guid)
+  end
 end
 end