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 }