Fixes #3203 - Removal of Google-Channel not possible via UI when having a normal email channel of same account.
This commit is contained in:
parent
bbbb923119
commit
05fa609eb5
2 changed files with 52 additions and 2 deletions
|
@ -54,8 +54,8 @@ class ChannelsGoogleController < ApplicationController
|
|||
|
||||
def destroy
|
||||
channel = Channel.find_by(id: params[:id], area: 'Google::Account')
|
||||
email = EmailAddress.find_by(channel_id: channel.id)
|
||||
email.destroy!
|
||||
email = EmailAddress.find_by(channel_id: channel.id)
|
||||
email&.destroy!
|
||||
channel.destroy!
|
||||
render json: {}
|
||||
end
|
||||
|
|
50
spec/requests/channels_google_spec.rb
Normal file
50
spec/requests/channels_google_spec.rb
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'Google channel API endpoints', type: :request do
|
||||
let(:admin) { create(:admin) }
|
||||
let!(:google_channel) { create(:google_channel) }
|
||||
|
||||
describe 'DELETE /api/v1/channels_google', authenticated_as: :admin do
|
||||
context 'without a email address relation' do
|
||||
let(:params) do
|
||||
{
|
||||
id: google_channel.id
|
||||
}
|
||||
end
|
||||
|
||||
it 'responds 200 OK' do
|
||||
delete '/api/v1/channels_google', params: params, as: :json
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
end
|
||||
|
||||
it 'google channel deleted' do
|
||||
expect { delete '/api/v1/channels_google', params: params, as: :json }.to change(Channel, :count).by(-1)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a email address relation' do
|
||||
let(:params) do
|
||||
{
|
||||
id: google_channel.id
|
||||
}
|
||||
end
|
||||
|
||||
before do
|
||||
create(:email_address, channel: google_channel)
|
||||
end
|
||||
|
||||
it 'responds 200 OK' do
|
||||
delete '/api/v1/channels_google', params: params, as: :json
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
end
|
||||
|
||||
it 'google channel and related email address deleted' do
|
||||
expect { delete '/api/v1/channels_google', params: params, as: :json }.to change(Channel, :count).by(-1).and change(EmailAddress, :count).by(-1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue