Skip to content

Commit

Permalink
Merge pull request #1096 from concord-consortium/186125987-create-pro…
Browse files Browse the repository at this point in the history
…ject-admin-model

feat: Added project_admin model [PT-186125987]
  • Loading branch information
dougmartin authored Nov 21, 2023
2 parents ed3fcf0 + c9958b7 commit 3f1bf9c
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 1 deletion.
1 change: 1 addition & 0 deletions app/models/project.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class Project < ActiveRecord::Base
validates :project_key, uniqueness: true
has_many :sequences
has_many :lightweight_activities
has_many :project_admins, include: [:user]

protected
def self.create_default
Expand Down
6 changes: 6 additions & 0 deletions app/models/project_admin.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class ProjectAdmin < ActiveRecord::Base
attr_accessible :user, :project

belongs_to :user
belongs_to :project
end
1 change: 1 addition & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class User < ActiveRecord::Base
has_many :runs
has_many :imports
has_many :glossaries, order: :name
has_many :admined_projects, :class_name => ProjectAdmin, include: [:project]

# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me,
Expand Down
12 changes: 12 additions & 0 deletions db/migrate/20231113215504_add_project_admins.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class AddProjectAdmins < ActiveRecord::Migration
def change
create_table :project_admins do |t|
t.references :user, index: true
t.references :project, index: true

t.timestamps
end

add_index :project_admins, [:user_id, :project_id], unique: true
end
end
11 changes: 10 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.

ActiveRecord::Schema.define(:version => 20230614193153) do
ActiveRecord::Schema.define(:version => 20231113215504) do

create_table "admin_events", :force => true do |t|
t.string "kind"
Expand Down Expand Up @@ -622,6 +622,15 @@

add_index "portal_publications", ["publishable_id", "publishable_type"], :name => "index_portal_publications_on_publishable_id_and_publishable_type"

create_table "project_admins", :force => true do |t|
t.integer "user_id"
t.integer "project_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

add_index "project_admins", ["user_id", "project_id"], :name => "index_project_admins_on_user_id_and_project_id", :unique => true

create_table "projects", :force => true do |t|
t.string "title"
t.string "logo_lara"
Expand Down
4 changes: 4 additions & 0 deletions spec/factories/project_admins.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FactoryGirl.define do
factory :project_admin do
end
end
21 changes: 21 additions & 0 deletions spec/models/project_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,25 @@
expect(new_project.project_key).to eq("new-project")
end
end

describe "Project admins" do
let(:project) { FactoryGirl.create(:project) }
let(:user1) { FactoryGirl.create(:user) }
let(:user2) { FactoryGirl.create(:user) }
let(:project_admin1) { FactoryGirl.create(:project_admin, project: project, user: user1) }
let(:project_admin2) { FactoryGirl.create(:project_admin, project: project, user: user2) }

it "should be empty by default" do
expect(project.project_admins.length).to be(0)
end

it "should return an array when set" do
project.project_admins = [project_admin1, project_admin2]
expect(project.project_admins.length).to be(2)
expect(project.project_admins[0].project.id).to be(project.id)
expect(project.project_admins[1].project.id).to be(project.id)
expect(project.project_admins[0].user.id).to be(user1.id)
expect(project.project_admins[1].user.id).to be(user2.id)
end
end
end
21 changes: 21 additions & 0 deletions spec/models/user_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -268,4 +268,25 @@

end

describe "admined_projects" do
let(:user) { FactoryGirl.create(:user) }
let(:project1) { FactoryGirl.create(:project) }
let(:project2) { FactoryGirl.create(:project) }
let(:project_admin1) { FactoryGirl.create(:project_admin, project: project1, user: user) }
let(:project_admin2) { FactoryGirl.create(:project_admin, project: project2, user: user) }

it "should be empty by default" do
expect(user.admined_projects.length).to be(0)
end

it "should return an array when set" do
user.admined_projects = [project_admin1, project_admin2]
expect(user.admined_projects.length).to be(2)
expect(user.admined_projects[0].project.id).to be(project1.id)
expect(user.admined_projects[1].project.id).to be(project2.id)
expect(user.admined_projects[0].user.id).to be(user.id)
expect(user.admined_projects[1].user.id).to be(user.id)
end
end

end

0 comments on commit 3f1bf9c

Please sign in to comment.