117 lines
2.8 KiB
Ruby
117 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "integration/federation/federation_helper"
|
|
|
|
shared_context "validators shared context" do
|
|
let(:author_id) { author.diaspora_handle }
|
|
let(:archive_private_key) { OpenSSL::PKey::RSA.generate(512).export }
|
|
let(:archive_hash) { base_archive_hash }
|
|
let(:validator) { described_class.new(input_hash) }
|
|
|
|
def input_hash
|
|
Yajl::Parser.new.parse(json_file)
|
|
end
|
|
|
|
def json_file
|
|
StringIO.new(json_string)
|
|
end
|
|
|
|
def json_string
|
|
archive_hash.to_json
|
|
end
|
|
|
|
def base_archive_hash
|
|
{
|
|
user: {
|
|
profile: {
|
|
entity_type: "profile",
|
|
entity_data: {
|
|
author: author_id
|
|
}
|
|
},
|
|
username: "aaaa",
|
|
email: "aaaa@aa.com",
|
|
private_key: archive_private_key,
|
|
contacts: [], contact_groups: [], posts: [], relayables: [], followed_tags: [], post_subscriptions: []
|
|
},
|
|
others_data: {relayables: []},
|
|
version: "2.0"
|
|
}
|
|
end
|
|
|
|
def include_in_input_archive(hash)
|
|
archive_hash.deep_merge!(hash)
|
|
end
|
|
end
|
|
|
|
shared_context "with known author" do
|
|
let(:author) { FactoryGirl.create(:person) }
|
|
end
|
|
|
|
shared_examples "validation result is valid" do
|
|
it "is valid" do
|
|
expect(validator.valid?).to be_truthy
|
|
expect(validator.messages).to be_empty
|
|
end
|
|
end
|
|
|
|
shared_context "relayable validator context" do
|
|
let(:validator) { described_class.new(input_hash, relayable) }
|
|
|
|
let(:relayable_author) {
|
|
remote_user_on_pod_b.diaspora_handle
|
|
}
|
|
let(:relayable_attributes) {
|
|
{
|
|
author: relayable_author
|
|
}
|
|
}
|
|
|
|
let(:relayable) {
|
|
Fabricate(relayable_entity, relayable_attributes).to_json.as_json
|
|
}
|
|
|
|
let(:guid) {
|
|
relayable["entity_data"]["guid"]
|
|
}
|
|
|
|
let(:parent_guid) {
|
|
relayable["entity_data"]["parent_guid"]
|
|
}
|
|
end
|
|
|
|
shared_examples "a relayable validator" do
|
|
context "with a correct comment" do
|
|
include_examples "validation result is valid"
|
|
end
|
|
|
|
context "when the comment is already known" do
|
|
let!(:original_comment) {
|
|
FactoryGirl.create(:comment, guid: guid, author: Person.by_account_identifier(relayable_author))
|
|
}
|
|
|
|
include_examples "validation result is valid"
|
|
end
|
|
end
|
|
|
|
shared_examples "a collection validator" do
|
|
context "with correct elements in the collection" do
|
|
before do
|
|
include_in_input_archive(correct_archive)
|
|
end
|
|
|
|
include_examples "validation result is valid"
|
|
end
|
|
|
|
context "with incorrect elements in the collection" do
|
|
before do
|
|
include_in_input_archive(archive_with_error)
|
|
end
|
|
|
|
it "filters collection from invalid elements" do
|
|
expect(validator.valid?).to be_falsey
|
|
expect(validator.messages).to eq(element_validator_class.new(input_hash, incorrect_item).messages)
|
|
expect(validator.collection).to eq([correct_item])
|
|
end
|
|
end
|
|
end
|