From fd344726477a9d2a45de82023c1846b1c75df721 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Tue, 3 Jan 2017 02:01:21 +0100 Subject: [PATCH] Add validators for events --- lib/diaspora_federation/validators.rb | 2 + .../event_participation_validator.rb | 12 ++++ .../validators/event_validator.rb | 21 +++++++ .../event_participation_validator_spec.rb | 17 +++++ .../validators/event_validator_spec.rb | 62 +++++++++++++++++++ 5 files changed, 114 insertions(+) create mode 100644 lib/diaspora_federation/validators/event_participation_validator.rb create mode 100644 lib/diaspora_federation/validators/event_validator.rb create mode 100644 spec/lib/diaspora_federation/validators/event_participation_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/event_validator_spec.rb diff --git a/lib/diaspora_federation/validators.rb b/lib/diaspora_federation/validators.rb index e9c54f5..6fea7e4 100644 --- a/lib/diaspora_federation/validators.rb +++ b/lib/diaspora_federation/validators.rb @@ -44,6 +44,8 @@ require "diaspora_federation/validators/account_deletion_validator" require "diaspora_federation/validators/comment_validator" require "diaspora_federation/validators/contact_validator" require "diaspora_federation/validators/conversation_validator" +require "diaspora_federation/validators/event_participation_validator" +require "diaspora_federation/validators/event_validator" require "diaspora_federation/validators/h_card_validator" require "diaspora_federation/validators/like_validator" require "diaspora_federation/validators/location_validator" diff --git a/lib/diaspora_federation/validators/event_participation_validator.rb b/lib/diaspora_federation/validators/event_participation_validator.rb new file mode 100644 index 0000000..f7588a4 --- /dev/null +++ b/lib/diaspora_federation/validators/event_participation_validator.rb @@ -0,0 +1,12 @@ +module DiasporaFederation + module Validators + # This validates a {Entities::EventParticipation}. + class EventParticipationValidator < Validation::Validator + include Validation + + include RelayableValidator + + rule :status, regular_expression: {regex: /\A(accepted|declined|tentative)\z/} + end + end +end diff --git a/lib/diaspora_federation/validators/event_validator.rb b/lib/diaspora_federation/validators/event_validator.rb new file mode 100644 index 0000000..f6a20c8 --- /dev/null +++ b/lib/diaspora_federation/validators/event_validator.rb @@ -0,0 +1,21 @@ +module DiasporaFederation + module Validators + # This validates a {Entities::Event}. + class EventValidator < Validation::Validator + include Validation + + rule :author, %i(not_empty diaspora_id) + + rule :guid, :guid + + rule :summary, [:not_empty, length: {maximum: 255}] + rule :description, length: {maximum: 65_535} + + rule :start, :not_nil + + rule :all_day, :boolean + + rule :timezone, regular_expression: {regex: %r{\A[A-Za-z_-]{,14}(/[A-Za-z_-]{,14}){1,2}\z}} + end + end +end diff --git a/spec/lib/diaspora_federation/validators/event_participation_validator_spec.rb b/spec/lib/diaspora_federation/validators/event_participation_validator_spec.rb new file mode 100644 index 0000000..3296d86 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/event_participation_validator_spec.rb @@ -0,0 +1,17 @@ +module DiasporaFederation + describe Validators::EventParticipationValidator do + let(:entity) { :event_participation_entity } + + it_behaves_like "a common validator" + + it_behaves_like "a relayable validator" + + describe "#status" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :status } + let(:wrong_values) { ["", "yes", "foobar"] } + let(:correct_values) { %w(accepted declined tentative) } + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/event_validator_spec.rb b/spec/lib/diaspora_federation/validators/event_validator_spec.rb new file mode 100644 index 0000000..1bd3864 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/event_validator_spec.rb @@ -0,0 +1,62 @@ +module DiasporaFederation + describe Validators::EventValidator do + let(:entity) { :event_entity } + + it_behaves_like "a common validator" + + it_behaves_like "a diaspora* ID validator" do + let(:property) { :author } + let(:mandatory) { true } + end + + it_behaves_like "a guid validator" do + let(:property) { :guid } + end + + describe "#summary" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :summary } + let(:wrong_values) { ["a" * 256, nil, ""] } + let(:correct_values) { ["a" * 255] } + end + end + + describe "#description" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :description } + let(:wrong_values) { ["a" * 65_536] } + let(:correct_values) { ["a" * 65_535, nil, ""] } + end + end + + describe "#start" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :start } + let(:wrong_values) { [nil] } + let(:correct_values) { [Time.now.utc] } + end + end + + describe "#end" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :end } + let(:wrong_values) { [] } + let(:correct_values) { [nil, Time.now.utc] } + end + end + + describe "#all_day" do + it_behaves_like "a boolean validator" do + let(:property) { :all_day } + end + end + + describe "#timezone" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :timezone } + let(:wrong_values) { ["foobar"] } + let(:correct_values) { [nil, "Europe/Berlin", "America/Argentina/ComodRivadavia"] } + end + end + end +end