Reduce the entity stubs initialization calls to a single entity_stub
to make the code more DRY
This commit is contained in:
parent
9cb6fe4d1b
commit
9391d4b9eb
7 changed files with 46 additions and 83 deletions
|
|
@ -3,15 +3,10 @@ module DiasporaFederation
|
|||
let(:entity) { :h_card }
|
||||
|
||||
def hcard_stub(data={})
|
||||
OpenStruct.new(FactoryGirl.attributes_for(:h_card).merge(data))
|
||||
entity_stub(entity, data)
|
||||
end
|
||||
|
||||
it "validates a well-formed instance" do
|
||||
validator = Validators::HCardValidator.new(hcard_stub)
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
it_behaves_like "a common validator"
|
||||
|
||||
describe "#full_name" do
|
||||
it_behaves_like "a name validator" do
|
||||
|
|
|
|||
|
|
@ -6,10 +6,7 @@ module DiasporaFederation
|
|||
context "#lat and #lng" do
|
||||
%i(lat lng).each do |prop|
|
||||
it "must not be empty" do
|
||||
entity = OpenStruct.new(FactoryGirl.attributes_for(:location_entity))
|
||||
entity.public_send("#{prop}=", "")
|
||||
|
||||
validator = Validators::LocationValidator.new(entity)
|
||||
validator = Validators::LocationValidator.new(entity_stub(entity, prop => ""))
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(prop)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -11,8 +11,7 @@ module DiasporaFederation
|
|||
|
||||
context "#target_type" do
|
||||
it "must not be empty" do
|
||||
entity = OpenStruct.new(FactoryGirl.attributes_for(:participation_entity, target_type: ""))
|
||||
validator = Validators::ParticipationValidator.new(entity)
|
||||
validator = Validators::ParticipationValidator.new(entity_stub(entity, target_type: ""))
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(:target_type)
|
||||
end
|
||||
|
|
@ -29,12 +28,9 @@ module DiasporaFederation
|
|||
context "#author_signature and #parent_author_signature" do
|
||||
%i(author_signature parent_author_signature).each do |prop|
|
||||
it "must not be empty" do
|
||||
p = OpenStruct.new(FactoryGirl.attributes_for(:participation_entity))
|
||||
p.public_send("#{prop}=", "")
|
||||
|
||||
v = Validators::ParticipationValidator.new(p)
|
||||
expect(v).not_to be_valid
|
||||
expect(v.errors).to include(prop)
|
||||
validator = Validators::ParticipationValidator.new(entity_stub(entity, prop => ""))
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(prop)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -24,12 +24,9 @@ module DiasporaFederation
|
|||
context "#remote_photo_path, #remote_photo_name" do
|
||||
%i(remote_photo_name remote_photo_path).each do |prop|
|
||||
it "must not be empty" do
|
||||
p = OpenStruct.new(FactoryGirl.attributes_for(:photo_entity))
|
||||
p.public_send("#{prop}=", "")
|
||||
|
||||
v = Validators::PhotoValidator.new(p)
|
||||
expect(v).not_to be_valid
|
||||
expect(v.errors).to include(prop)
|
||||
validator = Validators::PhotoValidator.new(entity_stub(entity, prop => ""))
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(prop)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -38,23 +35,17 @@ module DiasporaFederation
|
|||
%i(height width).each do |prop|
|
||||
it "validates an integer" do
|
||||
[123, "123"].each do |val|
|
||||
p = OpenStruct.new(FactoryGirl.attributes_for(:photo_entity))
|
||||
p.public_send("#{prop}=", val)
|
||||
|
||||
v = Validators::PhotoValidator.new(p)
|
||||
expect(v).to be_valid
|
||||
expect(v.errors).to be_empty
|
||||
validator = Validators::PhotoValidator.new(entity_stub(entity, prop => val))
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
end
|
||||
|
||||
it "fails for non numeric types" do
|
||||
[true, :num, "asdf"].each do |val|
|
||||
p = OpenStruct.new(FactoryGirl.attributes_for(:photo_entity))
|
||||
p.public_send("#{prop}=", val)
|
||||
|
||||
v = Validators::PhotoValidator.new(p)
|
||||
expect(v).not_to be_valid
|
||||
expect(v.errors).to include(prop)
|
||||
validator = Validators::PhotoValidator.new(entity_stub(entity, prop => val))
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(prop)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,15 +3,10 @@ module DiasporaFederation
|
|||
let(:entity) { :profile_entity }
|
||||
|
||||
def profile_stub(data={})
|
||||
OpenStruct.new(FactoryGirl.attributes_for(:profile_entity).merge(data))
|
||||
entity_stub(entity, data)
|
||||
end
|
||||
|
||||
it "validates a well-formed instance" do
|
||||
validator = Validators::ProfileValidator.new(profile_stub)
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
it_behaves_like "a common validator"
|
||||
|
||||
it_behaves_like "a diaspora id validator" do
|
||||
let(:property) { :diaspora_id }
|
||||
|
|
|
|||
|
|
@ -3,15 +3,10 @@ module DiasporaFederation
|
|||
let(:entity) { :webfinger }
|
||||
|
||||
def webfinger_stub(data={})
|
||||
OpenStruct.new(FactoryGirl.attributes_for(:webfinger).merge(data))
|
||||
entity_stub(entity, data)
|
||||
end
|
||||
|
||||
it "validates a well-formed instance" do
|
||||
validator = Validators::WebFingerValidator.new(webfinger_stub)
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
it_behaves_like "a common validator"
|
||||
|
||||
describe "#acct_uri" do
|
||||
it "fails if it is nil or empty" do
|
||||
|
|
|
|||
|
|
@ -1,10 +1,4 @@
|
|||
def entity_stub(entity, property, val)
|
||||
instance = OpenStruct.new(FactoryGirl.attributes_for(entity))
|
||||
instance.public_send("#{property}=", val)
|
||||
instance
|
||||
end
|
||||
|
||||
def entity_stub_data(entity, data={})
|
||||
def entity_stub(entity, data={})
|
||||
OpenStruct.new(FactoryGirl.attributes_for(entity).merge(data))
|
||||
end
|
||||
|
||||
|
|
@ -16,7 +10,7 @@ end
|
|||
|
||||
shared_examples "a common validator" do
|
||||
it "validates a well-formed instance" do
|
||||
validator = described_class.new(entity_stub_data(entity))
|
||||
validator = described_class.new(entity_stub(entity))
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
|
|
@ -25,7 +19,7 @@ end
|
|||
shared_examples "a diaspora id validator" do
|
||||
it "must not be nil or empty if mandatory" do
|
||||
[nil, ""].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
if mandatory
|
||||
expect(validator).not_to be_valid
|
||||
|
|
@ -38,7 +32,7 @@ shared_examples "a diaspora id validator" do
|
|||
end
|
||||
|
||||
it "must be a valid diaspora id" do
|
||||
validator = described_class.new(entity_stub(entity, property, "i am a weird diaspora id @@@ ### 12345"))
|
||||
validator = described_class.new(entity_stub(entity, property => "i am a weird diaspora id @@@ ### 12345"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -47,21 +41,21 @@ end
|
|||
|
||||
shared_examples "a guid validator" do
|
||||
it "validates a well-formed guid from redmatrix" do
|
||||
validator = described_class.new(entity_stub(entity, property, "1234567890ABCDefgh_ijkl-mnopQR@example.com:3000"))
|
||||
validator = described_class.new(entity_stub(entity, property => "1234567890ABCDefgh_ijkl-mnopQR@example.com:3000"))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
|
||||
it "must be at least 16 chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, "aaaaaa"))
|
||||
validator = described_class.new(entity_stub(entity, property => "aaaaaa"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
end
|
||||
|
||||
it "must only contain [0-9a-z-_@.:]" do
|
||||
validator = described_class.new(entity_stub(entity, property, "zzz+-#*$$"))
|
||||
validator = described_class.new(entity_stub(entity, property => "zzz+-#*$$"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -69,7 +63,7 @@ shared_examples "a guid validator" do
|
|||
|
||||
it "must not be nil or empty" do
|
||||
[nil, ""].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -80,7 +74,7 @@ end
|
|||
shared_examples "a boolean validator" do
|
||||
it "validates a well-formed boolean" do
|
||||
[true, "true", false, "false"].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
|
|
@ -89,7 +83,7 @@ shared_examples "a boolean validator" do
|
|||
|
||||
it "must not be an arbitrary string or other object" do
|
||||
["asdf", Time.zone.today, 1234].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -99,7 +93,7 @@ end
|
|||
|
||||
shared_examples "a public key validator" do
|
||||
it "fails for malformed rsa key" do
|
||||
validator = described_class.new(entity_stub(entity, property, "ASDF"))
|
||||
validator = described_class.new(entity_stub(entity, property => "ASDF"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -107,7 +101,7 @@ shared_examples "a public key validator" do
|
|||
|
||||
it "must not be nil or empty" do
|
||||
[nil, ""].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -118,7 +112,7 @@ end
|
|||
shared_examples "a name validator" do
|
||||
it "is allowed to be nil or empty" do
|
||||
[nil, ""].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
|
|
@ -126,28 +120,28 @@ shared_examples "a name validator" do
|
|||
end
|
||||
|
||||
it "is allowed to contain special chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, "cool name ©"))
|
||||
validator = described_class.new(entity_stub(entity, property => "cool name ©"))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
|
||||
it "validates the maximum number of chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, alphanumeric_string(length)))
|
||||
validator = described_class.new(entity_stub(entity, property => alphanumeric_string(length)))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
|
||||
it "must not exceed the maximum number of chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, alphanumeric_string(length + 1)))
|
||||
validator = described_class.new(entity_stub(entity, property => alphanumeric_string(length + 1)))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
end
|
||||
|
||||
it "must not contain semicolons" do
|
||||
validator = described_class.new(entity_stub(entity, property, "asdf;qwer;yxcv"))
|
||||
validator = described_class.new(entity_stub(entity, property => "asdf;qwer;yxcv"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -157,7 +151,7 @@ end
|
|||
shared_examples "a length validator" do
|
||||
it "is allowed to be nil or empty" do
|
||||
[nil, ""].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
|
|
@ -165,21 +159,21 @@ shared_examples "a length validator" do
|
|||
end
|
||||
|
||||
it "is allowed to contain special chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, "cool name ©;:#%"))
|
||||
validator = described_class.new(entity_stub(entity, property => "cool name ©;:#%"))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
|
||||
it "validates the maximum number of chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, alphanumeric_string(length)))
|
||||
validator = described_class.new(entity_stub(entity, property => alphanumeric_string(length)))
|
||||
|
||||
expect(validator).to be_valid
|
||||
expect(validator.errors).to be_empty
|
||||
end
|
||||
|
||||
it "must not exceed the maximum number of chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, alphanumeric_string(length + 1)))
|
||||
validator = described_class.new(entity_stub(entity, property => alphanumeric_string(length + 1)))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -189,7 +183,7 @@ end
|
|||
shared_examples "a url validator without path" do
|
||||
it "must not be nil or empty" do
|
||||
[nil, ""].each do |val|
|
||||
validator = described_class.new(entity_stub(entity, property, val))
|
||||
validator = described_class.new(entity_stub(entity, property => val))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -197,14 +191,14 @@ shared_examples "a url validator without path" do
|
|||
end
|
||||
|
||||
it "fails for url with special chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, "https://asdf$%.com"))
|
||||
validator = described_class.new(entity_stub(entity, property => "https://asdf$%.com"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
end
|
||||
|
||||
it "fails for url without scheme" do
|
||||
validator = described_class.new(entity_stub(entity, property, "example.com"))
|
||||
validator = described_class.new(entity_stub(entity, property => "example.com"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
@ -213,14 +207,14 @@ end
|
|||
|
||||
shared_examples "a url path validator" do
|
||||
it "fails for url with special chars" do
|
||||
validator = described_class.new(entity_stub(entity, property, "https://asdf$%.com/some/path"))
|
||||
validator = described_class.new(entity_stub(entity, property => "https://asdf$%.com/some/path"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
end
|
||||
|
||||
it "fails for url without path" do
|
||||
validator = described_class.new(entity_stub(entity, property, "https://example.com"))
|
||||
validator = described_class.new(entity_stub(entity, property => "https://example.com"))
|
||||
|
||||
expect(validator).not_to be_valid
|
||||
expect(validator.errors).to include(property)
|
||||
|
|
|
|||
Loading…
Reference in a new issue