Skip to content
Snippets Groups Projects
Commit ad177410 authored by Long Nguyen's avatar Long Nguyen
Browse files

Remove todos when destroy project member and specs

parent ed9b6497
No related branches found
No related tags found
No related merge requests found
Loading
@@ -3,9 +3,9 @@ class ProjectMember < Member
Loading
@@ -3,9 +3,9 @@ class ProjectMember < Member
   
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
   
has_many :todos, through: :user
belongs_to :project, class_name: 'Project', foreign_key: 'source_id' belongs_to :project, class_name: 'Project', foreign_key: 'source_id'
   
# Make sure project member points only to project as it source # Make sure project member points only to project as it source
default_value_for :source_type, SOURCE_TYPE default_value_for :source_type, SOURCE_TYPE
validates_format_of :source_type, with: /\AProject\z/ validates_format_of :source_type, with: /\AProject\z/
Loading
@@ -15,6 +15,8 @@ class ProjectMember < Member
Loading
@@ -15,6 +15,8 @@ class ProjectMember < Member
scope :in_projects, ->(projects) { where(source_id: projects.pluck(:id)) } scope :in_projects, ->(projects) { where(source_id: projects.pluck(:id)) }
scope :with_user, ->(user) { where(user_id: user.id) } scope :with_user, ->(user) { where(user_id: user.id) }
   
before_destroy { todos.each(&:destroy) }
class << self class << self
   
# Add users to project teams with passed access option # Add users to project teams with passed access option
Loading
Loading
Loading
@@ -77,7 +77,7 @@ class User < ActiveRecord::Base
Loading
@@ -77,7 +77,7 @@ class User < ActiveRecord::Base
has_one :abuse_report, dependent: :destroy has_one :abuse_report, dependent: :destroy
has_many :spam_logs, dependent: :destroy has_many :spam_logs, dependent: :destroy
has_many :builds, dependent: :nullify, class_name: 'Ci::Build' has_many :builds, dependent: :nullify, class_name: 'Ci::Build'
has_many :todos, -> { joins("join members on members.source_id = todos.project_id and members.user_id = todos.user_id") }, dependent: :destroy has_many :todos, dependent: :destroy
has_many :notification_settings, dependent: :destroy has_many :notification_settings, dependent: :destroy
   
# #
Loading
Loading
Loading
@@ -20,6 +20,49 @@
Loading
@@ -20,6 +20,49 @@
require 'spec_helper' require 'spec_helper'
   
describe ProjectMember, models: true do describe ProjectMember, models: true do
describe 'associations' do
it { is_expected.to have_many(:todos).through(:user) }
it { is_expected.to belong_to(:project).class_name('Project').with_foreign_key(:source_id) }
end
describe 'validations' do
it { is_expected.to allow_value('Project').for(:source_type) }
it { is_expected.not_to allow_value('project').for(:source_type) }
end
describe 'modules' do
it { is_expected.to include_module(Gitlab::ShellAdapter) }
end
describe "#destroy" do
let(:owner) { create(:project_member, access_level: ProjectMember::OWNER) }
let(:project) { owner.project }
let(:master) { create(:project_member, project: project) }
let(:owner_todos) { (0...2).map { create(:todo, user: owner.user, project: project) } }
let(:master_todos) { (0...3).map { create(:todo, user: master.user, project: project) } }
before do
owner_todos
master_todos
end
it "destroy itself and delete associated todos" do
expect(owner.todos.size).to eq(2)
expect(master.todos.size).to eq(3)
expect(Todo.count).to eq(5)
master_todo_ids = master_todos.map(&:id)
master.destroy
expect(owner.todos.size).to eq(2)
expect(Todo.count).to eq(2)
master_todo_ids.each do |id|
expect(Todo.exists?(id)).to eq(false)
end
end
end
describe :import_team do describe :import_team do
before do before do
@abilities = Six.new @abilities = Six.new
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment