* Remove deprecated analytics role * Make anchor tag a bit more readable * Add OrganizationMembership table and model * Add organization_membership associations * Add unique indices for user_id and org_id * Wrap update and create calls in transactions * Remove specs of deprecated analytics_beta_tester
103 lines
3.6 KiB
Ruby
103 lines
3.6 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "UserOrganization", type: :request do
|
|
let(:user) { create(:user) }
|
|
let(:organization) { create(:organization, secret: "SECRET", approved: true) }
|
|
|
|
context "when joining an org" do
|
|
before { sign_in user }
|
|
|
|
it "joins org with proper secret" do
|
|
post "/users/join_org", params: { org_secret: organization.secret }
|
|
expect(user.organization_id).to eq(organization.id)
|
|
end
|
|
|
|
it "creates an organization_membership association" do
|
|
post "/users/join_org", params: { org_secret: organization.secret }
|
|
org_membership = OrganizationMembership.first
|
|
expect(org_membership.persisted?).to eq true
|
|
expect(org_membership.user_id).to eq user.id
|
|
expect(org_membership.organization_id).to eq organization.id
|
|
expect(org_membership.type_of_user).to eq "member"
|
|
end
|
|
|
|
it "returns 404 if secret is wrong" do
|
|
expect { post "/users/join_org", params: { org_secret: "NOT SECRET" } }.
|
|
to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
|
|
context "when leaving an org" do
|
|
let(:org_member) { create(:user, :org_member) }
|
|
|
|
before { sign_in org_member }
|
|
|
|
it "leaves org" do
|
|
post "/users/leave_org"
|
|
expect(org_member.organization_id).to eq(nil)
|
|
end
|
|
|
|
it "deletes the org_membership association" do
|
|
create(:organization_membership, user_id: org_member.id, organization_id: org_member.organization_id)
|
|
post "/users/leave_org"
|
|
expect(OrganizationMembership.count).to eq 0
|
|
end
|
|
end
|
|
|
|
context "when adding an org admin" do
|
|
let(:org_admin) { create(:user, :org_admin) }
|
|
let(:user2) { create(:user, organization_id: org_admin.organization_id) }
|
|
|
|
def add_org_admin
|
|
org_admin
|
|
sign_in org_admin
|
|
post "/users/add_org_admin", params: { user_id: user2.id }
|
|
end
|
|
|
|
it "adds org admin" do
|
|
add_org_admin
|
|
expect(User.last.org_admin).to eq(true)
|
|
end
|
|
|
|
it "creates the org_membership association" do
|
|
add_org_admin
|
|
org_membership = OrganizationMembership.first
|
|
expect(org_membership.persisted?).to eq true
|
|
expect(org_membership.user_id).to eq user2.id
|
|
expect(org_membership.organization_id).to eq org_admin.organization_id
|
|
expect(org_membership.type_of_user).to eq "admin"
|
|
end
|
|
|
|
it "raises if user not org_admin" do
|
|
user.update(organization_id: organization.id)
|
|
expect { post "/users/add_org_admin", params: { user_id: user2.id } }.
|
|
to raise_error Pundit::NotAuthorizedError
|
|
end
|
|
end
|
|
|
|
context "when removing an org admin" do
|
|
let(:org_admin) { create(:user, :org_admin) }
|
|
|
|
before { sign_in org_admin }
|
|
|
|
it "removes org admin" do
|
|
user2 = create(:user, organization_id: org_admin.organization_id, org_admin: true)
|
|
post "/users/remove_org_admin", params: { user_id: user2.id }
|
|
expect(User.last.org_admin).to eq(false)
|
|
end
|
|
|
|
it "updates the correct org_membership association to a member level" do
|
|
user2 = create(:user, organization_id: org_admin.organization_id, org_admin: true)
|
|
org_membership = create(:organization_membership, organization_id: user2.organization_id, user_id: user2.id, type_of_user: "admin")
|
|
post "/users/remove_org_admin", params: { user_id: user2.id }
|
|
expect(org_membership.reload.type_of_user).to eq "member"
|
|
end
|
|
|
|
it "remove_org_admin raises if user not org_admin" do
|
|
user.update(organization_id: organization.id)
|
|
user2 = create(:user, organization_id: organization.id, org_admin: true)
|
|
expect { post "/users/remove_org_admin", params: { user_id: user2.id } }.
|
|
to raise_error Pundit::NotAuthorizedError
|
|
end
|
|
end
|
|
end
|