2015-10-11 17:41:23 +08:00
require 'rails_helper'
2014-05-28 01:54:04 +08:00
describe UserProfile do
2014-06-10 13:19:08 +08:00
it 'is created automatically when a user is created' do
2014-05-28 01:54:04 +08:00
user = Fabricate ( :evil_trout )
2014-12-31 22:55:03 +08:00
expect ( user . user_profile ) . to be_present
2014-05-28 01:54:04 +08:00
end
2014-06-10 13:19:08 +08:00
2016-07-29 01:54:17 +08:00
context " url validation " do
let ( :user ) { Fabricate ( :user ) }
let ( :upload ) { Fabricate ( :upload ) }
it " ensures profile_background is valid " do
expect ( Fabricate . build ( :user_profile , user : user , profile_background : " ---% " ) ) . not_to be_valid
expect ( Fabricate . build ( :user_profile , user : user , profile_background : " http://example.com/made-up.jpg " ) ) . not_to be_valid
expect ( Fabricate . build ( :user_profile , user : user , profile_background : upload . url ) ) . to be_valid
end
it " ensures background_url is valid " do
expect ( Fabricate . build ( :user_profile , user : user , card_background : " ;test " ) ) . not_to be_valid
expect ( Fabricate . build ( :user_profile , user : user , card_background : " http://example.com/no.jpg " ) ) . not_to be_valid
expect ( Fabricate . build ( :user_profile , user : user , card_background : upload . url ) ) . to be_valid
end
end
2014-08-05 14:37:56 +08:00
describe 'rebaking' do
it 'correctly rebakes bio' do
user_profile = Fabricate ( :evil_trout ) . user_profile
user_profile . update_columns ( bio_raw : " test " , bio_cooked : " broken " , bio_cooked_version : nil )
problems = UserProfile . rebake_old ( 10 )
2014-12-31 22:55:03 +08:00
expect ( problems . length ) . to eq ( 0 )
2014-08-05 14:37:56 +08:00
user_profile . reload
2014-12-31 22:55:03 +08:00
expect ( user_profile . bio_cooked ) . to eq ( " <p>test</p> " )
expect ( user_profile . bio_cooked_version ) . to eq ( UserProfile :: BAKED_VERSION )
2014-08-05 14:37:56 +08:00
end
end
2014-06-10 13:19:08 +08:00
describe 'new' do
let ( :user_profile ) { Fabricate . build ( :user_profile ) }
it 'is not valid without user' do
2014-11-01 01:44:26 +08:00
expect ( user_profile . valid? ) . to be false
2014-06-10 13:19:08 +08:00
end
it 'is is valid with user' do
user_profile . user = Fabricate . build ( :user )
2014-11-01 01:44:26 +08:00
expect ( user_profile . valid? ) . to be true
2014-06-10 13:19:08 +08:00
end
2014-09-09 03:17:31 +08:00
it " doesn't support really long bios " do
user_profile = Fabricate . build ( :user_profile_long )
2014-12-31 22:55:03 +08:00
expect ( user_profile ) . not_to be_valid
2014-09-09 03:17:31 +08:00
end
2016-02-06 04:49:48 +08:00
it " doesn't support invalid website " do
user_profile = Fabricate . build ( :user_profile , website : " http://https://google.com " )
user_profile . user = Fabricate . build ( :user )
expect ( user_profile ) . not_to be_valid
end
it " supports valid website " do
user_profile = Fabricate . build ( :user_profile , website : " https://google.com " )
user_profile . user = Fabricate . build ( :user )
expect ( user_profile . valid? ) . to be true
end
2014-06-10 13:19:08 +08:00
describe 'after save' do
let ( :user ) { Fabricate ( :user ) }
before do
user . user_profile . bio_raw = 'my bio'
user . user_profile . save
end
it 'has cooked bio' do
expect ( user . user_profile . bio_cooked ) . to be_present
end
it 'has bio summary' do
expect ( user . user_profile . bio_summary ) . to be_present
end
end
end
describe 'changing bio' do
let ( :user ) { Fabricate ( :user ) }
before do
user . user_profile . bio_raw = " **turtle power!** "
user . user_profile . save
user . user_profile . reload
end
it 'should markdown the raw_bio and put it in cooked_bio' do
2014-12-31 22:55:03 +08:00
expect ( user . user_profile . bio_cooked ) . to eq ( " <p><strong>turtle power!</strong></p> " )
2014-06-10 13:19:08 +08:00
end
end
describe 'bio link stripping' do
it 'returns an empty string with no bio' do
expect ( Fabricate . build ( :user_profile ) . bio_excerpt ) . to be_blank
end
context 'with a user that has a link in their bio' do
2014-07-25 10:15:43 +08:00
let ( :user_profile ) { Fabricate . build ( :user_profile , bio_raw : " I love http://discourse.org " ) }
2014-06-10 13:19:08 +08:00
let ( :user ) do
user = Fabricate . build ( :user , user_profile : user_profile )
user_profile . user = user
user
end
let ( :created_user ) do
user = Fabricate ( :user )
2014-07-25 10:15:43 +08:00
user . user_profile . bio_raw = 'I love http://discourse.org'
2014-06-10 13:19:08 +08:00
user . user_profile . save!
user
end
it 'includes the link as nofollow if the user is not new' do
user . user_profile . send ( :cook )
2014-07-25 10:15:43 +08:00
expect ( user_profile . bio_excerpt ) . to match_html ( " I love <a href='http://discourse.org' rel='nofollow'>http://discourse.org</a> " )
expect ( user_profile . bio_processed ) . to match_html ( " <p>I love <a href= \" http://discourse.org \" rel= \" nofollow \" >http://discourse.org</a></p> " )
2014-06-10 13:19:08 +08:00
end
it 'removes the link if the user is new' do
2014-09-05 13:20:39 +08:00
user . trust_level = TrustLevel [ 0 ]
2014-06-10 13:19:08 +08:00
user_profile . send ( :cook )
2014-07-25 10:15:43 +08:00
expect ( user_profile . bio_excerpt ) . to match_html ( " I love http://discourse.org " )
expect ( user_profile . bio_processed ) . to eq ( " <p>I love http://discourse.org</p> " )
2014-06-10 13:19:08 +08:00
end
2014-11-26 05:14:21 +08:00
it 'removes the link if the user is suspended' do
user . suspended_till = 1 . month . from_now
user_profile . send ( :cook )
expect ( user_profile . bio_excerpt ) . to match_html ( " I love http://discourse.org " )
expect ( user_profile . bio_processed ) . to eq ( " <p>I love http://discourse.org</p> " )
end
2014-09-05 04:16:46 +08:00
context 'tl3_links_no_follow is false' do
before { SiteSetting . stubs ( :tl3_links_no_follow ) . returns ( false ) }
2014-07-15 01:34:21 +08:00
it 'includes the link without nofollow if the user is trust level 3 or higher' do
2014-09-05 13:20:39 +08:00
user . trust_level = TrustLevel [ 3 ]
2014-07-15 01:34:21 +08:00
user_profile . send ( :cook )
2014-07-25 10:15:43 +08:00
expect ( user_profile . bio_excerpt ) . to match_html ( " I love <a href='http://discourse.org'>http://discourse.org</a> " )
expect ( user_profile . bio_processed ) . to match_html ( " <p>I love <a href= \" http://discourse.org \" >http://discourse.org</a></p> " )
2014-07-15 01:34:21 +08:00
end
it 'removes nofollow from links in bio when trust level is increased' do
2014-09-05 13:20:39 +08:00
created_user . change_trust_level! ( TrustLevel [ 3 ] )
2014-07-25 10:15:43 +08:00
expect ( created_user . user_profile . bio_excerpt ) . to match_html ( " I love <a href='http://discourse.org'>http://discourse.org</a> " )
expect ( created_user . user_profile . bio_processed ) . to match_html ( " <p>I love <a href= \" http://discourse.org \" >http://discourse.org</a></p> " )
2014-07-15 01:34:21 +08:00
end
it 'adds nofollow to links in bio when trust level is decreased' do
2014-09-05 13:20:39 +08:00
created_user . trust_level = TrustLevel [ 3 ]
2014-07-15 01:34:21 +08:00
created_user . save
2014-09-28 07:38:00 +08:00
created_user . reload
2014-09-05 13:20:39 +08:00
created_user . change_trust_level! ( TrustLevel [ 2 ] )
2014-07-25 10:15:43 +08:00
expect ( created_user . user_profile . bio_excerpt ) . to match_html ( " I love <a href='http://discourse.org' rel='nofollow'>http://discourse.org</a> " )
expect ( created_user . user_profile . bio_processed ) . to match_html ( " <p>I love <a href= \" http://discourse.org \" rel= \" nofollow \" >http://discourse.org</a></p> " )
2014-07-15 01:34:21 +08:00
end
2014-06-10 13:19:08 +08:00
end
2014-09-05 04:16:46 +08:00
context 'tl3_links_no_follow is true' do
before { SiteSetting . stubs ( :tl3_links_no_follow ) . returns ( true ) }
2014-06-10 13:19:08 +08:00
2014-07-15 01:34:21 +08:00
it 'includes the link with nofollow if the user is trust level 3 or higher' do
2014-09-05 13:20:39 +08:00
user . trust_level = TrustLevel [ 3 ]
2014-07-15 01:34:21 +08:00
user_profile . send ( :cook )
2014-07-25 10:15:43 +08:00
expect ( user_profile . bio_excerpt ) . to match_html ( " I love <a href='http://discourse.org' rel='nofollow'>http://discourse.org</a> " )
expect ( user_profile . bio_processed ) . to match_html ( " <p>I love <a href= \" http://discourse.org \" rel= \" nofollow \" >http://discourse.org</a></p> " )
2014-07-15 01:34:21 +08:00
end
2014-06-10 13:19:08 +08:00
end
end
end
2014-05-28 01:54:04 +08:00
end