Add blocking flag to contact message
This commit is contained in:
parent
9d72c9855a
commit
db1034904d
6 changed files with 58 additions and 1 deletions
|
|
@ -4,6 +4,8 @@ title: Contact
|
||||||
|
|
||||||
This entity represents a contact state with another person.
|
This entity represents a contact state with another person.
|
||||||
|
|
||||||
|
When `blocking` is `true`, `following` and `sharing` need to be `false` (and the other way around).
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
| Property | Type | Description |
|
| Property | Type | Description |
|
||||||
|
|
@ -13,6 +15,12 @@ This entity represents a contact state with another person.
|
||||||
| `following` | [Boolean][boolean] | `true` if the author is following the recipient. |
|
| `following` | [Boolean][boolean] | `true` if the author is following the recipient. |
|
||||||
| `sharing` | [Boolean][boolean] | `true` if the author is sharing with the recipient. |
|
| `sharing` | [Boolean][boolean] | `true` if the author is sharing with the recipient. |
|
||||||
|
|
||||||
|
## Optional Properties
|
||||||
|
|
||||||
|
| Property | Type | Description |
|
||||||
|
| ---------- | ------------------ | ----------------------------------------------- |
|
||||||
|
| `blocking` | [Boolean][boolean] | `true` if the author is blocking the recipient. |
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
~~~xml
|
~~~xml
|
||||||
|
|
@ -21,6 +29,7 @@ This entity represents a contact state with another person.
|
||||||
<recipient>bob@example.com</recipient>
|
<recipient>bob@example.com</recipient>
|
||||||
<following>true</following>
|
<following>true</following>
|
||||||
<sharing>true</sharing>
|
<sharing>true</sharing>
|
||||||
|
<blocking>false</blocking>
|
||||||
</contact>
|
</contact>
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,25 @@ module DiasporaFederation
|
||||||
# @return [Boolean] if the author is sharing with the person
|
# @return [Boolean] if the author is sharing with the person
|
||||||
property :sharing, :boolean, default: true
|
property :sharing, :boolean, default: true
|
||||||
|
|
||||||
|
# @!attribute [r] blocking
|
||||||
|
# @return [Boolean] if the author is blocking the person
|
||||||
|
property :blocking, :boolean, optional: true, default: false
|
||||||
|
|
||||||
# @return [String] string representation of this object
|
# @return [String] string representation of this object
|
||||||
def to_s
|
def to_s
|
||||||
"Contact:#{author}:#{recipient}"
|
"Contact:#{author}:#{recipient}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def validate
|
||||||
|
super
|
||||||
|
|
||||||
|
return unless (following || sharing) && blocking
|
||||||
|
|
||||||
|
raise ValidationError,
|
||||||
|
"flags invalid: following:#{following}/sharing:#{sharing} and blocking:#{blocking} can't both be true"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,7 @@ module DiasporaFederation
|
||||||
recipient { Fabricate.sequence(:diaspora_id) }
|
recipient { Fabricate.sequence(:diaspora_id) }
|
||||||
following true
|
following true
|
||||||
sharing true
|
sharing true
|
||||||
|
blocking false
|
||||||
end
|
end
|
||||||
|
|
||||||
Fabricator(:comment_entity, class_name: DiasporaFederation::Entities::Comment, from: :relayable_entity) do
|
Fabricator(:comment_entity, class_name: DiasporaFederation::Entities::Comment, from: :relayable_entity) do
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ module DiasporaFederation
|
||||||
rule :recipient, %i[not_empty diaspora_id]
|
rule :recipient, %i[not_empty diaspora_id]
|
||||||
rule :following, :boolean
|
rule :following, :boolean
|
||||||
rule :sharing, :boolean
|
rule :sharing, :boolean
|
||||||
|
rule :blocking, :boolean
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ module DiasporaFederation
|
||||||
<recipient>#{data[:recipient]}</recipient>
|
<recipient>#{data[:recipient]}</recipient>
|
||||||
<following>#{data[:following]}</following>
|
<following>#{data[:following]}</following>
|
||||||
<sharing>#{data[:sharing]}</sharing>
|
<sharing>#{data[:sharing]}</sharing>
|
||||||
|
<blocking>#{data[:blocking]}</blocking>
|
||||||
</contact>
|
</contact>
|
||||||
XML
|
XML
|
||||||
|
|
||||||
|
|
@ -16,5 +17,35 @@ XML
|
||||||
it_behaves_like "an Entity subclass"
|
it_behaves_like "an Entity subclass"
|
||||||
|
|
||||||
it_behaves_like "an XML Entity"
|
it_behaves_like "an XML Entity"
|
||||||
|
|
||||||
|
describe "#validate" do
|
||||||
|
it "allows 'following' and 'sharing' to be true" do
|
||||||
|
combinations = [
|
||||||
|
{following: true, sharing: true, blocking: false},
|
||||||
|
{following: true, sharing: false, blocking: false},
|
||||||
|
{following: false, sharing: true, blocking: false}
|
||||||
|
]
|
||||||
|
combinations.each do |combination|
|
||||||
|
expect { Entities::Contact.new(data.merge(combination)) }.not_to raise_error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "allows 'blocking' to be true" do
|
||||||
|
expect {
|
||||||
|
Entities::Contact.new(data.merge(following: false, sharing: false, blocking: true))
|
||||||
|
}.not_to raise_error
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't allow 'following'/'sharing' and 'blocking' to be true" do
|
||||||
|
combinations = [
|
||||||
|
{following: true, sharing: true, blocking: true},
|
||||||
|
{following: true, sharing: false, blocking: true},
|
||||||
|
{following: false, sharing: true, blocking: true}
|
||||||
|
]
|
||||||
|
combinations.each do |combination|
|
||||||
|
expect { Entities::Contact.new(data.merge(combination)) }.to raise_error Entity::ValidationError
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ module DiasporaFederation
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
%i[following sharing].each do |prop|
|
%i[following sharing blocking].each do |prop|
|
||||||
describe "##{prop}" do
|
describe "##{prop}" do
|
||||||
it_behaves_like "a boolean validator" do
|
it_behaves_like "a boolean validator" do
|
||||||
let(:property) { prop }
|
let(:property) { prop }
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue