Add feature test that tests behaviour of profile name and bio (#12658)

* Add feature test that tests behaviour of profile name and bio

* Fix rubocop style errors in Login Spec.

* DRY log_in_spec by reusing the stories helper

Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
This commit is contained in:
Bèr Kessels 2020-01-03 02:44:06 +01:00 committed by Eugen Rochko
parent 9cbbc50fcd
commit 6c1ba513ee
3 changed files with 118 additions and 16 deletions

View file

@ -1,47 +1,51 @@
require "rails_helper" # frozen_string_literal: true
require 'rails_helper'
feature 'Log in' do
include ProfileStories
feature "Log in" do
given(:email) { "test@example.com" } given(:email) { "test@example.com" }
given(:password) { "password" } given(:password) { "password" }
given(:confirmed_at) { Time.zone.now } given(:confirmed_at) { Time.zone.now }
background do background do
Fabricate(:user, email: email, password: password, confirmed_at: confirmed_at) as_a_registered_user
visit new_user_session_path visit new_user_session_path
end end
subject { page } subject { page }
scenario "A valid email and password user is able to log in" do scenario 'A valid email and password user is able to log in' do
fill_in "user_email", with: email fill_in 'user_email', with: email
fill_in "user_password", with: password fill_in 'user_password', with: password
click_on I18n.t('auth.login') click_on I18n.t('auth.login')
is_expected.to have_css("div.app-holder") is_expected.to have_css('div.app-holder')
end end
scenario "A invalid email and password user is not able to log in" do scenario 'A invalid email and password user is not able to log in' do
fill_in "user_email", with: "invalid_email" fill_in 'user_email', with: 'invalid_email'
fill_in "user_password", with: "invalid_password" fill_in 'user_password', with: 'invalid_password'
click_on I18n.t('auth.login') click_on I18n.t('auth.login')
is_expected.to have_css(".flash-message", text: failure_message("invalid")) is_expected.to have_css('.flash-message', text: failure_message('invalid'))
end end
context do context do
given(:confirmed_at) { nil } given(:confirmed_at) { nil }
scenario "A unconfirmed user is able to log in" do scenario 'A unconfirmed user is able to log in' do
fill_in "user_email", with: email fill_in 'user_email', with: email
fill_in "user_password", with: password fill_in 'user_password', with: password
click_on I18n.t('auth.login') click_on I18n.t('auth.login')
is_expected.to have_css("div.admin-wrapper") is_expected.to have_css('div.admin-wrapper')
end end
end end
def failure_message(message) def failure_message(message)
keys = User.authentication_keys.map { |key| User.human_attribute_name(key) } keys = User.authentication_keys.map { |key| User.human_attribute_name(key) }
I18n.t("devise.failure.#{message}", authentication_keys: keys.join("support.array.words_connector")) I18n.t("devise.failure.#{message}", authentication_keys: keys.join('support.array.words_connector'))
end end
end end

View file

@ -0,0 +1,53 @@
# frozen_string_literal: true
require 'rails_helper'
feature 'Profile' do
include ProfileStories
given(:local_domain) { ENV['LOCAL_DOMAIN'] }
background do
as_a_logged_in_user
with_alice_as_local_user
end
subject { page }
scenario 'I can view Annes public account' do
visit account_path('alice')
is_expected.to have_title("alice (@alice@#{local_domain})")
within('.public-account-header h1') do
is_expected.to have_content("alice @alice@#{local_domain}")
end
bio_elem = first('.public-account-bio')
expect(bio_elem).to have_content(alice_bio)
# The bio has hashtags made clickable
expect(bio_elem).to have_link('cryptology')
expect(bio_elem).to have_link('science')
# Nicknames are make clickable
expect(bio_elem).to have_link('@alice')
expect(bio_elem).to have_link('@bob')
# Nicknames not on server are not clickable
expect(bio_elem).not_to have_link('@pepe')
end
scenario 'I can change my account' do
visit settings_profile_path
fill_in 'Display name', with: 'Bob'
fill_in 'Bio', with: 'Bob is silent'
click_on 'Save changes'
is_expected.to have_content 'Changes successfully saved!'
# View my own public profile and see the changes
click_link "Bob @bob@#{local_domain}"
within('.public-account-header h1') do
is_expected.to have_content("Bob @bob@#{local_domain}")
end
expect(first('.public-account-bio')).to have_content('Bob is silent')
end
end

View file

@ -0,0 +1,45 @@
# frozen_string_literal: true
module ProfileStories
attr_reader :bob, :alice, :alice_bio
def as_a_registered_user
@bob = Fabricate(
:user,
email: email, password: password, confirmed_at: confirmed_at,
account: Fabricate(:account, username: 'bob')
)
end
def as_a_logged_in_user
as_a_registered_user
visit new_user_session_path
fill_in 'user_email', with: email
fill_in 'user_password', with: password
click_on I18n.t('auth.login')
end
def with_alice_as_local_user
@alice_bio = '@alice and @bob are fictional characters commonly used as'\
'placeholder names in #cryptology, as well as #science and'\
'engineering 📖 literature. Not affilated with @pepe.'
@alice = Fabricate(
:user,
email: 'alice@example.com', password: password, confirmed_at: confirmed_at,
account: Fabricate(:account, username: 'alice', note: @alice_bio)
)
end
def confirmed_at
@confirmed_at ||= Time.zone.now
end
def email
@email ||= 'test@example.com'
end
def password
@password ||= 'password'
end
end