151e5744e6
Before the specs mocked entire controller methods–which caused them not to be tested. Now we use finer mocks (or no mocks at all), to actually run more code.
142 lines
4 KiB
Ruby
142 lines
4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe SupportController, type: :controller do
|
|
render_views
|
|
|
|
context 'signed in' do
|
|
before do
|
|
sign_in user
|
|
end
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
it 'should not have email field' do
|
|
get :index
|
|
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).not_to have_content("Email *")
|
|
end
|
|
|
|
describe "with dossier" do
|
|
let(:user) { dossier.user }
|
|
let(:dossier) { create(:dossier) }
|
|
|
|
it 'should fill dossier_id' do
|
|
get :index, params: { dossier_id: dossier.id }
|
|
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include((dossier.id).to_s)
|
|
end
|
|
end
|
|
|
|
describe "with tag" do
|
|
let(:tag) { 'yolo' }
|
|
|
|
it 'should fill tags' do
|
|
get :index, params: { tags: [tag] }
|
|
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include(tag)
|
|
end
|
|
end
|
|
|
|
describe "with multiple tags" do
|
|
let(:tags) { ['yolo', 'toto'] }
|
|
|
|
it 'should fill tags' do
|
|
get :index, params: { tags: tags }
|
|
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include(tags.join(','))
|
|
end
|
|
end
|
|
|
|
describe "send form" do
|
|
subject do
|
|
post :create, params: { subject: 'bonjour', text: 'un message' }
|
|
end
|
|
|
|
it 'creates a conversation on HelpScout' do
|
|
expect_any_instance_of(Helpscout::FormAdapter).to receive(:send_form).and_return(true)
|
|
|
|
expect { subject }.to change(Commentaire, :count).by(0)
|
|
|
|
expect(flash[:notice]).to match('Votre message a été envoyé.')
|
|
expect(response).to redirect_to root_path(formulaire_contact_general_submitted: true)
|
|
end
|
|
|
|
context 'when a drafted dossier is mentionned' do
|
|
let(:dossier) { create(:dossier) }
|
|
let(:user) { dossier.user }
|
|
|
|
subject do
|
|
post :create, params: {
|
|
dossier_id: dossier.id,
|
|
type: Helpscout::FormAdapter::TYPE_INSTRUCTION,
|
|
subject: 'bonjour',
|
|
text: 'un message'
|
|
}
|
|
end
|
|
|
|
it 'creates a conversation on HelpScout' do
|
|
expect_any_instance_of(Helpscout::FormAdapter).to receive(:send_form).and_return(true)
|
|
|
|
expect { subject }.to change(Commentaire, :count).by(0)
|
|
|
|
expect(flash[:notice]).to match('Votre message a été envoyé.')
|
|
expect(response).to redirect_to root_path(formulaire_contact_general_submitted: true)
|
|
end
|
|
end
|
|
|
|
context 'when a submitted dossier is mentionned' do
|
|
let(:dossier) { create(:dossier, :en_construction) }
|
|
let(:user) { dossier.user }
|
|
|
|
subject do
|
|
post :create, params: {
|
|
dossier_id: dossier.id,
|
|
type: Helpscout::FormAdapter::TYPE_INSTRUCTION,
|
|
subject: 'bonjour',
|
|
text: 'un message'
|
|
}
|
|
end
|
|
|
|
it 'posts the message to the dossier messagerie' do
|
|
expect_any_instance_of(Helpscout::FormAdapter).not_to receive(:send_form)
|
|
|
|
expect { subject }.to change(Commentaire, :count).by(1)
|
|
|
|
expect(Commentaire.last.email).to eq(user.email)
|
|
expect(Commentaire.last.dossier).to eq(dossier)
|
|
expect(Commentaire.last.body).to include('[bonjour]')
|
|
expect(Commentaire.last.body).to include('un message')
|
|
|
|
expect(flash[:notice]).to match('Votre message a été envoyé sur la messagerie de votre dossier.')
|
|
expect(response).to redirect_to messagerie_dossier_path(dossier)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'signed out' do
|
|
describe "with dossier" do
|
|
it 'should have email field' do
|
|
get :index
|
|
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to have_text("Email")
|
|
end
|
|
end
|
|
|
|
describe "with dossier" do
|
|
let(:tag) { 'yolo' }
|
|
|
|
it 'should fill tags' do
|
|
get :index, params: { tags: [tag] }
|
|
|
|
expect(response.status).to eq(200)
|
|
expect(response.body).to include(tag)
|
|
end
|
|
end
|
|
end
|
|
end
|