mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 04:03:43 +08:00
3e50313fdc
Since rspec-rails 3, the default installation creates two helper files: * `spec_helper.rb` * `rails_helper.rb` `spec_helper.rb` is intended as a way of running specs that do not require Rails, whereas `rails_helper.rb` loads Rails (as Discourse's current `spec_helper.rb` does). For more information: https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files In this commit, I've simply replaced all instances of `spec_helper` with `rails_helper`, and renamed the original `spec_helper.rb`. This brings the Discourse project closer to the standard usage of RSpec in a Rails app. At present, every spec relies on loading Rails, but there are likely many that don't need to. In a future pull request, I hope to introduce a separate, minimal `spec_helper.rb` which can be used in tests which don't rely on Rails.
132 lines
4.0 KiB
Ruby
132 lines
4.0 KiB
Ruby
require 'rails_helper'
|
|
require_dependency 'user'
|
|
|
|
describe UserSerializer do
|
|
|
|
context "with a TL0 user seen as anonymous" do
|
|
let(:user) { Fabricate.build(:user, trust_level: 0, user_profile: Fabricate.build(:user_profile)) }
|
|
let(:serializer) { UserSerializer.new(user, scope: Guardian.new, root: false) }
|
|
let(:json) { serializer.as_json }
|
|
|
|
let(:untrusted_attributes) { %i{bio_raw bio_cooked bio_excerpt location website profile_background card_background} }
|
|
|
|
it "doesn't serialize untrusted attributes" do
|
|
untrusted_attributes.each { |attr| expect(json).not_to have_key(attr) }
|
|
end
|
|
end
|
|
|
|
context "with a user" do
|
|
let(:user) { Fabricate.build(:user, user_profile: Fabricate.build(:user_profile) ) }
|
|
let(:serializer) { UserSerializer.new(user, scope: Guardian.new, root: false) }
|
|
let(:json) { serializer.as_json }
|
|
|
|
it "produces json" do
|
|
expect(json).to be_present
|
|
end
|
|
|
|
context "with `enable_names` true" do
|
|
before do
|
|
SiteSetting.stubs(:enable_names?).returns(true)
|
|
end
|
|
|
|
it "has a name" do
|
|
expect(json[:name]).to be_present
|
|
end
|
|
end
|
|
|
|
context "with `enable_names` false" do
|
|
before do
|
|
SiteSetting.stubs(:enable_names?).returns(false)
|
|
end
|
|
|
|
it "has a name" do
|
|
expect(json[:name]).to be_blank
|
|
end
|
|
end
|
|
|
|
context "with filled out card background" do
|
|
before do
|
|
user.user_profile.card_background = 'http://card.com'
|
|
end
|
|
|
|
it "has a profile background" do
|
|
expect(json[:card_background]).to eq 'http://card.com'
|
|
end
|
|
end
|
|
|
|
context "with filled out profile background" do
|
|
before do
|
|
user.user_profile.profile_background = 'http://background.com'
|
|
end
|
|
|
|
it "has a profile background" do
|
|
expect(json[:profile_background]).to eq 'http://background.com'
|
|
end
|
|
end
|
|
|
|
context "with filled out website" do
|
|
before do
|
|
user.user_profile.website = 'http://example.com/user'
|
|
end
|
|
|
|
it "has a website" do
|
|
expect(json[:website]).to eq 'http://example.com/user'
|
|
end
|
|
|
|
context "has a website name" do
|
|
it "returns website host name when instance domain is not same as website domain" do
|
|
Discourse.stubs(:current_hostname).returns('discourse.org')
|
|
expect(json[:website_name]).to eq 'example.com'
|
|
end
|
|
|
|
it "returns complete website path when instance domain is same as website domain" do
|
|
Discourse.stubs(:current_hostname).returns('example.com')
|
|
expect(json[:website_name]).to eq 'example.com/user'
|
|
end
|
|
|
|
it "returns complete website path when website domain is parent of instance domain" do
|
|
Discourse.stubs(:current_hostname).returns('forums.example.com')
|
|
expect(json[:website_name]).to eq 'example.com/user'
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with filled out bio" do
|
|
before do
|
|
user.user_profile.bio_raw = 'my raw bio'
|
|
user.user_profile.bio_cooked = 'my cooked bio'
|
|
end
|
|
|
|
it "has a bio" do
|
|
expect(json[:bio_raw]).to eq 'my raw bio'
|
|
end
|
|
|
|
it "has a cooked bio" do
|
|
expect(json[:bio_cooked]).to eq 'my cooked bio'
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with custom_fields" do
|
|
let(:user) { Fabricate(:user) }
|
|
let(:json) { UserSerializer.new(user, scope: Guardian.new, root: false).as_json }
|
|
|
|
before do
|
|
user.custom_fields['secret_field'] = 'Only for me to know'
|
|
user.custom_fields['public_field'] = 'Everyone look here'
|
|
user.save
|
|
end
|
|
|
|
it "doesn't serialize the fields by default" do
|
|
json[:custom_fields]
|
|
expect(json[:custom_fields]).to be_empty
|
|
end
|
|
|
|
it "serializes the fields listed in public_user_custom_fields site setting" do
|
|
SiteSetting.stubs(:public_user_custom_fields).returns('public_field')
|
|
expect(json[:custom_fields]['public_field']).to eq(user.custom_fields['public_field'])
|
|
expect(json[:custom_fields]['secret_field']).to eq(nil)
|
|
end
|
|
end
|
|
end
|