require 'spec_helper'

feature 'Signing up:' do
  let(:user_email) { generate :user_email }
  let(:user_password) { 'testpassword' }

  scenario 'a new user can sign-up' do
    visit root_path
    click_on 'Connexion'
    click_on 'Créer un compte'

    sign_up_with user_email, user_password
    expect(page).to have_content "nous avons besoin de vérifier votre adresse #{user_email}"

    click_confirmation_link_for user_email
    expect(page).to have_content 'Votre compte a été activé'
    expect(page).to have_current_path dossiers_path
  end

  scenario 'a new user can’t sign-up with too short password' do
    visit root_path
    click_on 'Connexion'
    click_on 'Créer un compte'

    expect(page).to have_current_path new_user_registration_path
    sign_up_with user_email, '1234567'
    expect(page).to have_current_path user_registration_path
    expect(page).to have_content 'Le mot de passe est trop court'

    # Then with a good password
    sign_up_with user_email, user_password
    expect(page).to have_current_path new_user_confirmation_path user: { email: user_email }
    expect(page).to have_content "nous avons besoin de vérifier votre adresse #{user_email}"
  end

  context 'when visiting a procedure' do
    let(:procedure) { create :simple_procedure, :with_service }

    before do
      visit commencer_path(path: procedure.path)
    end

    scenario 'a new user can sign-up and fill the procedure' do
      expect(page).to have_current_path new_user_session_path
      click_on 'Créer un compte'
      expect_page_to_have_procedure_description(procedure)

      sign_up_with user_email, user_password
      expect(page).to have_content "nous avons besoin de vérifier votre adresse #{user_email}"

      click_confirmation_link_for user_email
      expect(page).to have_content 'Votre compte a été activé'
      expect_page_to_have_procedure_description(procedure)
    end
  end

  context 'when a user is not confirmed yet' do
    before do
      visit root_path
      click_on 'Connexion'
      click_on 'Créer un compte'

      sign_up_with user_email, user_password
    end

    # Ideally, when signing-in with an unconfirmed account,
    # the user would be redirected to the "resend email confirmation" page.
    #
    # However the check for unconfirmed accounts is made by Warden every time a page is loaded –
    # and much earlier than SessionsController#create.
    #
    # For now only test the default behavior (an error message is displayed).
    scenario 'they get an error message' do
      visit root_path
      click_on 'Connexion'

      sign_in_with user_email, user_password
      expect(page).to have_content 'Vous devez confirmer votre adresse email pour continuer'
    end
  end
end
