diff --git a/lib/diaspora_federation/entities/conversation.rb b/lib/diaspora_federation/entities/conversation.rb
index 9745ffb..6726dfd 100644
--- a/lib/diaspora_federation/entities/conversation.rb
+++ b/lib/diaspora_federation/entities/conversation.rb
@@ -4,6 +4,12 @@ module DiasporaFederation
#
# @see Validators::ConversationValidator
class Conversation < Entity
+ # @!attribute [r] author
+ # The diaspora* ID of the person initiated the conversation
+ # @see Person#author
+ # @return [String] diaspora* ID
+ property :author, xml_name: :diaspora_handle
+
# @!attribute [r] guid
# A random string of at least 16 chars
# @see Validation::Rule::Guid
@@ -18,21 +24,15 @@ module DiasporaFederation
# @return [Time] Conversation creation time
property :created_at, default: -> { Time.now.utc }
- # @!attribute [r] messages
- # @return [[Entities::Message]] Messages of this conversation
- entity :messages, [Entities::Message], default: []
-
- # @!attribute [r] author
- # The diaspora* ID of the person initiated the conversation
- # @see Person#author
- # @return [String] diaspora* ID
- property :author, xml_name: :diaspora_handle
-
# @!attribute [r] participants
# The diaspora* IDs of the persons participating the conversation separated by ";"
# @return [String] participants diaspora* IDs
property :participants, xml_name: :participant_handles
+ # @!attribute [r] messages
+ # @return [[Entities::Message]] Messages of this conversation
+ entity :messages, [Entities::Message], default: []
+
private
def validate
diff --git a/lib/diaspora_federation/validators/conversation_validator.rb b/lib/diaspora_federation/validators/conversation_validator.rb
index 0001787..1aa4727 100644
--- a/lib/diaspora_federation/validators/conversation_validator.rb
+++ b/lib/diaspora_federation/validators/conversation_validator.rb
@@ -4,13 +4,13 @@ module DiasporaFederation
class ConversationValidator < Validation::Validator
include Validation
+ rule :author, %i(not_empty diaspora_id)
rule :guid, :guid
- rule :messages, :not_nil
-
- rule :author, %i(not_empty diaspora_id)
+ rule :subject, [:not_empty, length: {maximum: 255}]
rule :participants, diaspora_id_count: {maximum: 20}
+ rule :messages, :not_nil
end
end
end
diff --git a/spec/lib/diaspora_federation/entities/conversation_spec.rb b/spec/lib/diaspora_federation/entities/conversation_spec.rb
index 9a794a5..bdb4746 100644
--- a/spec/lib/diaspora_federation/entities/conversation_spec.rb
+++ b/spec/lib/diaspora_federation/entities/conversation_spec.rb
@@ -22,12 +22,12 @@ module DiasporaFederation
let(:xml) {
<<-XML
+ #{data[:author]}
#{parent.guid}
#{data[:subject]}
#{data[:created_at]}
-#{data[:messages].map {|a| a.to_xml.to_s.indent(2) }.join("\n")}
- #{data[:author]}
#{data[:participants]}
+#{data[:messages].map {|a| a.to_xml.to_s.indent(2) }.join("\n")}
XML
}
@@ -41,10 +41,10 @@ XML
let(:minimal_xml) {
<<-XML
+ #{data[:author]}
#{parent.guid}
#{data[:subject]}
#{data[:created_at]}
- #{data[:author]}
#{data[:participants]}
XML
diff --git a/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb
index ee2e221..2c32182 100644
--- a/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb
+++ b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb
@@ -13,6 +13,14 @@ module DiasporaFederation
let(:property) { :guid }
end
+ describe "#subject" do
+ it_behaves_like "a property with a value validation/restriction" do
+ let(:property) { :subject }
+ let(:wrong_values) { [nil, "", "a" * 256] }
+ let(:correct_values) { ["a" * 255] }
+ end
+ end
+
describe "#messages" do
it_behaves_like "a property with a value validation/restriction" do
let(:property) { :messages }