describe Manager::UsersController, type: :controller do
  let(:super_admin) { create(:super_admin) }

  describe '#show' do
    render_views

    let(:super_admin) { create(:super_admin) }
    let(:user) { create(:user) }

    before do
      sign_in(super_admin)
      get :show, params: { id: user.id }
    end

    it { expect(response.body).to include(user.email) }
  end

  describe '#update' do
    let!(:user) { create(:user, email: 'ancien.email@domaine.fr') }

    before {
      sign_in super_admin
    }
    subject { patch :update, params: { id: user.id, user: { email: nouvel_email } } }

    describe 'with a valid email' do
      let(:nouvel_email) { 'nouvel.email@domaine.fr' }

      it 'updates the user email' do
        subject

        expect(User.find_by(id: user.id).email).to eq(nouvel_email)
      end
    end

    describe 'with an invalid email' do
      let(:nouvel_email) { 'plop' }

      it 'does not update the user email' do
        subject

        expect(User.find_by(id: user.id).email).not_to eq(nouvel_email)
        expect(flash[:error]).to match("« #{nouvel_email} » n'est pas une adresse valide.")
      end
    end
  end

  describe '#delete' do
    let!(:user) { create(:user) }

    before { sign_in super_admin }

    subject { delete :delete, params: { id: user.id } }

    it 'deletes the user' do
      subject

      expect(User.find_by(id: user.id)).to be_nil
    end
  end
end
