<commit_before>require 'rails_helper'

feature 'Verify Letter' do

  scenario 'Request a letter' do
    user = create(:user, residence_verified_at: Time.now,
                         confirmed_phone:       "611111111")

    login_as(user)
    visit new_letter_path

    click_link "Send me a letter with the code"

    expect(page).to have_content "Thank you for requesting your maximum security code (only required for the final votes). In a few days we will send it to the address featuring in the data we have on file."

    user.reload

    expect(user.letter_requested_at).to be
    expect(user.letter_verification_code).to be
  end

  scenario 'Go to office instead of send letter' do
    user = create(:user, residence_verified_at: Time.now,
                         confirmed_phone:       "611111111")

    login_as(user)
    visit new_letter_path

    expect(page).to have_link "Citizen Support Offices", href: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD"
  end

  scenario "Deny access unless verified residence" do
    user = create(:user)

    login_as(user)
    visit new_letter_path

    expect(page).to have_content 'You have not yet confirmed your residency'
    expect(current_path).to eq(new_residence_path)
  end

  scenario "Deny access unless verified phone/email" do
    user = create(:user, residence_verified_at: Time.now)

    login_as(user)
    visit new_letter_path

    expect(page).to have_content 'You have not yet entered the confirmation code'
    expect(current_path).to eq(new_sms_path)
  end

  context "Code verification" do

    scenario "Valid verification user logged in" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111",
                           letter_verification_code: "123456")

      login_as(user)
      visit edit_letter_path

      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: <PASSWORD>
      fill_in "verification_letter_verification_code", with: user.letter_verification_code
      click_button "Verify my account"

      expect(page).to have_content "Code correct. Your account is now verified"
      expect(current_path).to eq(account_path)
    end

    scenario "Valid verification of user failing to add trailing zeros" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111",
                           letter_verification_code: "012345")

      login_as(user)
      visit edit_letter_path

      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: <PASSWORD>
      fill_in "verification_letter_verification_code", with: "12345"
      click_button "Verify my account"

      expect(page).to have_content "Account verified"
      expect(current_path).to eq(account_path)
    end

    scenario "Valid verification user not logged in" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111",
                           letter_verification_code: "123456")

      visit edit_letter_path

      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: <PASSWORD>
      fill_in "verification_letter_verification_code", with: user.letter_verification_code
      click_button "Verify my account"

      expect(page).to have_content "Code correct. Your account is now verified"
      expect(current_path).to eq(account_path)
    end

    scenario "Error messages on authentication" do
      visit edit_letter_path

      click_button "Verify my account"

      expect(page).to have_content "Invalid email or password."
    end

    scenario "Error messages on verification" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111")

      visit edit_letter_path
      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: <PASSWORD>
      click_button "Verify my account"

      expect(page).to have_content "can't be blank"
    end

    scenario '6 tries allowed' do
      user = create(:user, residence_verified_at:    Time.now,
                           confirmed_phone:          "611111111",
                           letter_verification_code: "123456")

      visit edit_letter_path

      6.times do
        fill_in "verification_letter_email", with: user.email
        fill_in "verification_letter_password", with: <PASSWORD>
        fill_in "verification_letter_verification_code", with: "1"
        click_button "Verify my account"
      end

      expect(page).to have_content "You have reached the maximum number of attempts. Please try again later."
      expect(current_path).to eq(account_path)
    end

  end
end<commit_msg>adds specs to redeem codes<commit_after>require 'rails_helper'

feature 'Verify Letter' do

  scenario 'Request a letter' do
    user = create(:user, residence_verified_at: Time.now,
                         confirmed_phone:       "611111111")

    login_as(user)
    visit new_letter_path

    click_link "Send me a letter with the code"

    expect(page).to have_content "Thank you for requesting your maximum security code (only required for the final votes). In a few days we will send it to the address featuring in the data we have on file."

    user.reload

    expect(user.letter_requested_at).to be
    expect(user.letter_verification_code).to be
  end

  scenario 'Go to office instead of send letter' do
    user = create(:user, residence_verified_at: Time.now,
                         confirmed_phone:       "611111111")

    login_as(user)
    visit new_letter_path

    expect(page).to have_link "Citizen Support Offices", href: "http://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Atencion-al-ciudadano/Oficinas-de-Atencion-al-Ciudadano?vgnextfmt=default&vgnextchannel=5b99cde2e09a4310VgnVCM1000000b205a0aRCRD"
  end

  scenario "Deny access unless verified residence" do
    user = create(:user)

    login_as(user)
    visit new_letter_path

    expect(page).to have_content 'You have not yet confirmed your residency'
    expect(current_path).to eq(new_residence_path)
  end

  scenario "Deny access unless verified phone/email" do
    user = create(:user, residence_verified_at: Time.now)

    login_as(user)
    visit new_letter_path

    expect(page).to have_content 'You have not yet entered the confirmation code'
    expect(current_path).to eq(new_sms_path)
  end

  context "Code verification" do

    scenario "Valid verification user logged in" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111",
                           letter_verification_code: "123456")

      login_as(user)
      visit edit_letter_path

      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: user.password
      fill_in "verification_letter_verification_code", with: user.letter_verification_code
      click_button "Verify my account"

      expect(page).to have_content "Code correct. Your account is now verified"
      expect(current_path).to eq(account_path)
    end

    scenario "Valid verification of user failing to add trailing zeros" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111",
                           letter_verification_code: "012345")

      login_as(user)
      visit edit_letter_path

      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: <PASSWORD>
      fill_in "verification_letter_verification_code", with: "12345"
      click_button "Verify my account"

      expect(page).to have_content "Account verified"
      expect(current_path).to eq(account_path)
    end

    scenario "Valid verification user not logged in" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111",
                           letter_verification_code: "123456")

      visit edit_letter_path

      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: <PASSWORD>
      fill_in "verification_letter_verification_code", with: user.letter_verification_code
      click_button "Verify my account"

      expect(page).to have_content "Code correct. Your account is now verified"
      expect(current_path).to eq(account_path)
    end

    scenario "Error messages on authentication" do
      visit edit_letter_path

      click_button "Verify my account"

      expect(page).to have_content "Invalid email or password."
    end

    scenario "Error messages on verification" do
      user = create(:user, residence_verified_at: Time.now,
                           confirmed_phone:       "611111111")

      visit edit_letter_path
      fill_in "verification_letter_email", with: user.email
      fill_in "verification_letter_password", with: <PASSWORD>
      click_button "Verify my account"

      expect(page).to have_content "can't be blank"
    end

    scenario '6 tries allowed' do
      user = create(:user, residence_verified_at:    Time.now,
                           confirmed_phone:          "611111111",
                           letter_verification_code: "123456")

      visit edit_letter_path

      6.times do
        fill_in "verification_letter_email", with: user.email
        fill_in "verification_letter_password", with: <PASSWORD>
        fill_in "verification_letter_verification_code", with: "1"
        click_button "Verify my account"
      end

      expect(page).to have_content "You have reached the maximum number of attempts. Please try again later."
      expect(current_path).to eq(account_path)
    end

    context "Redeeamble Code" do

      scenario 'Valid reedeamble code' do
        geozone = create(:geozone)
        token = RedeemableCode.generate_token
        redeemable_code = RedeemableCode.create!(geozone_id: geozone.id, token: token)

        user = create(:user, residence_verified_at: Time.now,
                             confirmed_phone:       "611111111",
                             geozone:               geozone)

        login_as(user)
        visit edit_letter_path

        fill_in "verification_letter_email", with: user.email
        fill_in "verification_letter_password", with: <PASSWORD>
        fill_in "verification_letter_verification_code", with: redeemable_code.token
        click_button "Verify my account"

        expect(page).to have_content "Code correct. Your account is now verified"
        expect(current_path).to eq(account_path)
      end

      scenario 'Error message on incorrect reedeamble code' do
        california = create(:geozone)
        new_york   = create(:geozone)
        token = RedeemableCode.generate_token
        redeemable_code = RedeemableCode.create!(geozone_id: california.id, token: token)

        user = create(:user, residence_verified_at: Time.now,
                             confirmed_phone:       "611111111",
                             geozone:               new_york)

        login_as(user)

        visit edit_letter_path
        fill_in "verification_letter_email", with: user.email
        fill_in "verification_letter_password", with: <PASSWORD>.password
        fill_in "verification_letter_verification_code", with: "1234"
        click_button "Verify my account"

        expect(page).to have_content "Verification code incorrect"
      end

      scenario 'Error message on incorrect geozone' do
        california = create(:geozone)
        new_york   = create(:geozone)
        token = RedeemableCode.generate_token
        redeemable_code = RedeemableCode.create!(geozone: california, token: token)

        user = create(:user, residence_verified_at: Time.now,
                             confirmed_phone:       "611111111",
                             geozone:               new_york)

        login_as(user)

        visit edit_letter_path
        fill_in "verification_letter_email", with: user.email
        fill_in "verification_letter_password", with: <PASSWORD>
        fill_in "verification_letter_verification_code", with: redeemable_code.token
        click_button "Verify my account"

        expect(page).to have_content "Verification code incorrect"
      end

    end

  end
end
{'fraction_non_alphanumeric': 0.07171031871252762, 'fraction_numerical': 0.020747869990533293, 'mean_word_length': 2.790968899521531, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 17, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1356656', 'n_tokens_mistral': 3837, 'n_tokens_neox': 3566, 'n_words': 946}