137 lines
4.4 KiB
Ruby
137 lines
4.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe AspectsMembershipService do
|
|
before do
|
|
@alice_aspect1 = alice.aspects.first
|
|
@alice_aspect2 = alice.aspects.create(name: "another aspect")
|
|
@bob_aspect1 = bob.aspects.first
|
|
end
|
|
|
|
describe "#create" do
|
|
context "with valid IDs" do
|
|
it "succeeds" do
|
|
membership = aspects_membership_service.create(@alice_aspect2.id, bob.person.id)
|
|
expect(membership[:aspect_id]).to eq(@alice_aspect2.id)
|
|
expect(@alice_aspect2.contacts.find_by(person_id: bob.person.id)).not_to be_nil
|
|
end
|
|
|
|
it "fails if already in aspect" do
|
|
aspects_membership_service.create(@alice_aspect2.id, bob.person.id)
|
|
expect {
|
|
aspects_membership_service.create(@alice_aspect2.id, bob.person.id)
|
|
}.to raise_error ActiveRecord::RecordNotUnique
|
|
end
|
|
end
|
|
|
|
context "with invalid IDs" do
|
|
it "fails with invalid User ID" do
|
|
expect {
|
|
aspects_membership_service.create(@alice_aspect2.id, -1)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "fails with invalid Aspect ID" do
|
|
expect {
|
|
aspects_membership_service.create(-1, bob.person.id)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "fails with aspect ID that isn't user's" do
|
|
expect {
|
|
aspects_membership_service.create(@bob_aspect1.id, eve.person.id)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#destroy" do
|
|
before do
|
|
@membership = aspects_membership_service.create(@alice_aspect2.id, bob.person.id)
|
|
end
|
|
|
|
context "with aspect/user valid IDs" do
|
|
it "succeeds if in aspect" do
|
|
aspects_membership_service.destroy_by_ids(@alice_aspect2.id, bob.person.id)
|
|
expect(@alice_aspect2.contacts.find_by(person_id: bob.person.id)).to be_nil
|
|
end
|
|
|
|
it "fails if not in aspect" do
|
|
expect {
|
|
aspects_membership_service.destroy_by_ids(@alice_aspect2.id, eve.person.id)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
|
|
context "with a membership ID" do
|
|
it "succeeds if their membership" do
|
|
aspects_membership_service.destroy_by_membership_id(@membership.id)
|
|
expect(@alice_aspect2.contacts.find_by(person_id: bob.person.id)).to be_nil
|
|
end
|
|
|
|
it "fails if not their membership" do
|
|
expect {
|
|
aspects_membership_service(eve).destroy_by_membership_id(@membership.id)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "fails if invalid membership ID" do
|
|
expect {
|
|
aspects_membership_service(eve).destroy_by_membership_id(-1)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
|
|
context "with invalid IDs" do
|
|
it "fails with invalid User ID" do
|
|
expect {
|
|
aspects_membership_service.destroy_by_ids(@alice_aspect2.id, -1)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "fails with invalid Aspect ID" do
|
|
expect {
|
|
aspects_membership_service.destroy_by_ids(-1, eve.person.id)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
|
|
it "fails with aspect ID that isn't user's" do
|
|
expect {
|
|
aspects_membership_service(eve).destroy_by_ids(@alice_aspect2.id, bob.person.id)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#list" do
|
|
before do
|
|
aspects_membership_service.create(@alice_aspect2.id, bob.person.id)
|
|
aspects_membership_service.create(@alice_aspect2.id, eve.person.id)
|
|
@alice_aspect3 = alice.aspects.create(name: "empty aspect")
|
|
end
|
|
|
|
context "with valid aspect ID" do
|
|
it "returns users in full aspect" do
|
|
contacts = aspects_membership_service.contacts_in_aspect(@alice_aspect2.id)
|
|
expect(contacts.length).to eq(2)
|
|
expect(contacts.map {|c| c.person.guid }.sort).to eq([bob.person.guid, eve.person.guid].sort)
|
|
end
|
|
|
|
it "returns empty array in empty aspect" do
|
|
contacts = aspects_membership_service.contacts_in_aspect(@alice_aspect3.id)
|
|
expect(contacts.length).to eq(0)
|
|
end
|
|
end
|
|
|
|
context "with invalid aspect ID" do
|
|
it "fails" do
|
|
expect {
|
|
aspects_membership_service.contacts_in_aspect(-1)
|
|
}.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
end
|
|
|
|
def aspects_membership_service(user=alice)
|
|
AspectsMembershipService.new(user)
|
|
end
|
|
end
|