From f81d0fb9f530bf7d2ef10bbea940b27f9ccbc4d5 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 11 Jul 2013 09:47:46 +0300 Subject: [PATCH] ProjectGroupLink model with migration and specs --- app/models/project.rb | 3 +++ app/models/project_group_link.rb | 20 ++++++++++++++++++ ...130711063759_create_project_group_links.rb | 10 +++++++++ db/schema.rb | 9 +++++++- spec/factories/project_group_links.rb | 6 ++++++ spec/models/project_group_link_spec.rb | 21 +++++++++++++++++++ 6 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 app/models/project_group_link.rb create mode 100644 db/migrate/20130711063759_create_project_group_links.rb create mode 100644 spec/factories/project_group_links.rb create mode 100644 spec/models/project_group_link_spec.rb diff --git a/app/models/project.rb b/app/models/project.rb index 4beba83df2..5b1874435a 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -67,6 +67,9 @@ class Project < ActiveRecord::Base has_many :deploy_keys_projects, dependent: :destroy has_many :deploy_keys, through: :deploy_keys_projects + has_many :project_group_links_path, dependent: :destroy + has_many :invited_groups, through: :project_group_links, source: 'group' + delegate :name, to: :owner, allow_nil: true, prefix: true delegate :members, to: :team, prefix: true diff --git a/app/models/project_group_link.rb b/app/models/project_group_link.rb new file mode 100644 index 0000000000..a431dc28f0 --- /dev/null +++ b/app/models/project_group_link.rb @@ -0,0 +1,20 @@ +#------------------------------------------------------------------- +# +# The GitLab Enterprise Edition (EE) license +# +# Copyright (c) 2013 GitLab.com +# +# All Rights Reserved. No part of this software may be reproduced without +# prior permission of GitLab.com. By using this software you agree to be +# bound by the GitLab Enterprise Support Subscription Terms. +# +#------------------------------------------------------------------- + +class ProjectGroupLink < ActiveRecord::Base + belongs_to :project + belongs_to :group + + validates :project_id, presence: true + validates :group_id, presence: true + validates :group_id, uniqueness: { scope: [:project_id], message: "already shared with this group" } +end diff --git a/db/migrate/20130711063759_create_project_group_links.rb b/db/migrate/20130711063759_create_project_group_links.rb new file mode 100644 index 0000000000..395083f2a0 --- /dev/null +++ b/db/migrate/20130711063759_create_project_group_links.rb @@ -0,0 +1,10 @@ +class CreateProjectGroupLinks < ActiveRecord::Migration + def change + create_table :project_group_links do |t| + t.integer :project_id, null: false + t.integer :group_id, null: false + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 3208e8c235..586b0f127d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130624162710) do +ActiveRecord::Schema.define(:version => 20130711063759) do create_table "deploy_keys_projects", :force => true do |t| t.integer "deploy_key_id", :null => false @@ -157,6 +157,13 @@ ActiveRecord::Schema.define(:version => 20130624162710) do add_index "notes", ["project_id", "noteable_type"], :name => "index_notes_on_project_id_and_noteable_type" add_index "notes", ["project_id"], :name => "index_notes_on_project_id" + create_table "project_group_links", :force => true do |t| + t.integer "project_id", :null => false + t.integer "group_id", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "projects", :force => true do |t| t.string "name" t.string "path" diff --git a/spec/factories/project_group_links.rb b/spec/factories/project_group_links.rb new file mode 100644 index 0000000000..e73cc05f9d --- /dev/null +++ b/spec/factories/project_group_links.rb @@ -0,0 +1,6 @@ +FactoryGirl.define do + factory :project_group_link do + project + group + end +end diff --git a/spec/models/project_group_link_spec.rb b/spec/models/project_group_link_spec.rb new file mode 100644 index 0000000000..c75d6b8f3d --- /dev/null +++ b/spec/models/project_group_link_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +describe ProjectGroupLink do + describe "Associations" do + it { should belong_to(:group) } + it { should belong_to(:project) } + end + + describe "Mass assignment" do + it { should_not allow_mass_assignment_of(:group_id) } + it { should_not allow_mass_assignment_of(:project_id) } + end + + describe "Validation" do + let!(:project_group_link) { create(:project_group_link) } + + it { should validate_presence_of(:project_id) } + it { should validate_uniqueness_of(:group_id).scoped_to(:project_id).with_message(/already shared/) } + it { should validate_presence_of(:group_id) } + end +end