Remove not_nil for diaspora IDs from validators

The diaspora ID validator now is not nil by default.

Also:
* mark root_author as optional for reshares.
* make author for profiles mandatory (I don't remember why this was
optional, we never generate a profile without author and we wouldn't
receive a profile without author anyway, because we validate that the
author is the sender).
* refactor validator specs for diaspora IDs
This commit is contained in:
Benjamin Neff 2017-09-12 22:09:06 +02:00
parent 5e3f510a88
commit e663a65c7e
No known key found for this signature in database
GPG key ID: 971464C3F1A90194
30 changed files with 28 additions and 40 deletions

View file

@ -10,7 +10,7 @@ module DiasporaFederation
# The diaspora* ID of the person who posted the original post
# @see Person#author
# @return [String] diaspora* ID
property :root_author, :string, xml_name: :root_diaspora_id
property :root_author, :string, optional: true, xml_name: :root_diaspora_id
# @!attribute [r] root_guid
# Guid of the original post

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class AccountDeletionValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
end
end
end

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class AccountMigrationValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :profile, :not_nil
end

View file

@ -4,8 +4,8 @@ module DiasporaFederation
class ContactValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :recipient, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :recipient, :diaspora_id
rule :following, :boolean
rule :sharing, :boolean
end

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class ConversationValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :guid, :guid
rule :subject, [:not_empty, length: {maximum: 255}]

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class EventValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :guid, :guid

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class MessageValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :guid, :guid
rule :conversation_guid, :guid

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class ParticipationValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :guid, :guid
rule :parent_guid, :guid
rule :parent_type, [:not_empty, regular_expression: {regex: /\APost\z/}]

View file

@ -6,7 +6,7 @@ module DiasporaFederation
rule :guid, :guid
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :url, %i[not_nil URI]

View file

@ -6,7 +6,7 @@ module DiasporaFederation
rule :guid, :guid
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :public, :boolean

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class RelatedEntityValidator < Validation::Validator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :local, :boolean
rule :public, :boolean
end

View file

@ -6,7 +6,7 @@ module DiasporaFederation
# @param [Validation::Validator] validator the validator in which it is included
def self.included(validator)
validator.class_eval do
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :guid, :guid
rule :parent_guid, :guid
rule :parent, :not_nil

View file

@ -8,7 +8,7 @@ module DiasporaFederation
rule :root_guid, :guid
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :guid, :guid

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class RetractionValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :target_guid, :guid
rule :target_type, :not_empty

View file

@ -4,7 +4,7 @@ module DiasporaFederation
class StatusMessageValidator < OptionalAwareValidator
include Validation
rule :author, %i[not_empty diaspora_id]
rule :author, :diaspora_id
rule :guid, :guid

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
end
end

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
describe "#person" do

View file

@ -8,7 +8,6 @@ module DiasporaFederation
describe "##{prop}" do
it_behaves_like "a diaspora* ID validator" do
let(:property) { prop }
let(:mandatory) { true }
end
end
end

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
it_behaves_like "a guid validator" do

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
it_behaves_like "a guid validator" do

View file

@ -5,7 +5,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
describe "#guid" do

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
describe "#guid" do

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
it_behaves_like "a guid validator" do

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
describe "#guid" do

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { false }
end
%i[first_name last_name].each do |prop|

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
%i[local public].each do |prop|

View file

@ -6,7 +6,6 @@ module DiasporaFederation
describe "#author" do
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
end
@ -23,9 +22,10 @@ module DiasporaFederation
end
describe "#root_author" do
it_behaves_like "a diaspora* ID validator" do
it_behaves_like "a property with a value validation/restriction" do
let(:property) { :root_author }
let(:mandatory) { false }
let(:wrong_values) { ["i am a weird diaspora* ID @@@ ### 12345"] }
let(:correct_values) { [nil, "alice@example.org"] }
end
end

View file

@ -9,7 +9,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
describe "#target_type" do

View file

@ -6,7 +6,6 @@ module DiasporaFederation
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
it_behaves_like "a guid validator" do

View file

@ -20,7 +20,6 @@ end
shared_examples "a relayable validator" do
it_behaves_like "a diaspora* ID validator" do
let(:property) { :author }
let(:mandatory) { true }
end
describe "#guid" do
@ -74,16 +73,18 @@ shared_examples "a diaspora* ID validator" do
[nil, ""].each do |val|
validator = described_class.new(entity_stub(entity, property => val))
if mandatory
expect(validator).not_to be_valid
expect(validator.errors).to include(property)
else
expect(validator).to be_valid
expect(validator.errors).to be_empty
end
expect(validator).not_to be_valid
expect(validator.errors).to include(property)
end
end
it "validates a well-formed diaspora* ID" do
validator = described_class.new(entity_stub(entity, property => "alice@example.org"))
expect(validator).to be_valid
expect(validator.errors).to be_empty
end
it "must be a valid diaspora* ID" do
validator = described_class.new(entity_stub(entity, property => "i am a weird diaspora* ID @@@ ### 12345"))