168 lines
5 KiB
Ruby
168 lines
5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
|
|
describe ProfilesController, :type => :controller do
|
|
before do
|
|
sign_in eve, scope: :user
|
|
end
|
|
|
|
describe '#show' do
|
|
let(:mock_person) { FactoryBot.create(:user) }
|
|
let(:mock_presenter) { double(:as_json => {:rock_star => "Jamie Cai"})}
|
|
|
|
it "returns a post Presenter" do
|
|
expect(Person).to receive(:find_by_guid!).with("12345").and_return(mock_person)
|
|
expect(PersonPresenter).to receive(:new).with(mock_person, eve).and_return(mock_presenter)
|
|
|
|
get :show, params: {id: 12_345}, format: :json
|
|
expect(response.body).to eq({:rock_star => "Jamie Cai"}.to_json)
|
|
end
|
|
end
|
|
|
|
describe '#edit' do
|
|
it 'succeeds' do
|
|
get :edit
|
|
expect(response).to be_successful
|
|
end
|
|
|
|
it 'sets the profile to the current users profile' do
|
|
get :edit
|
|
expect(assigns[:profile]).to eq(eve.person.profile)
|
|
end
|
|
|
|
it 'sets the aspect to "person_edit" ' do
|
|
get :edit
|
|
expect(assigns[:aspect]).to eq(:person_edit)
|
|
end
|
|
|
|
it 'sets the person to the current users person' do
|
|
get :edit
|
|
expect(assigns[:person]).to eq(eve.person)
|
|
end
|
|
end
|
|
|
|
describe '#update' do
|
|
it "sets the flash" do
|
|
put :update, params: {
|
|
profile: {
|
|
image_url: "",
|
|
first_name: "Will",
|
|
last_name: "Smith"
|
|
}
|
|
}
|
|
expect(flash[:notice]).not_to be_blank
|
|
end
|
|
|
|
it "sets nsfw" do
|
|
expect(eve.person.reload.profile.nsfw).to eq(false)
|
|
put :update, params: {profile: {id: eve.person.id, nsfw: "1"}}
|
|
expect(eve.person.reload.profile.nsfw).to eq(true)
|
|
end
|
|
|
|
it "unsets nsfw" do
|
|
eve.person.profile.nsfw = true
|
|
eve.person.profile.save
|
|
|
|
expect(eve.person.reload.profile.nsfw).to eq(true)
|
|
put :update, params: {profile: {id: eve.person.id}}
|
|
expect(eve.person.reload.profile.nsfw).to eq(false)
|
|
end
|
|
|
|
it 'sets tags' do
|
|
params = { :id => eve.person.id,
|
|
:tags => '#apples #oranges',
|
|
:profile => {:tag_string => ''} }
|
|
|
|
put :update, params: params
|
|
expect(eve.person.reload.profile.tag_list.to_set).to eq(%w[apples oranges].to_set)
|
|
end
|
|
|
|
it 'sets plaintext tags' do
|
|
params = { :id => eve.person.id,
|
|
:tags => ',#apples,#oranges,',
|
|
:profile => {:tag_string => '#pears'} }
|
|
|
|
put :update, params: params
|
|
expect(eve.person.reload.profile.tag_list.to_set).to eq(%w[apples oranges pears].to_set)
|
|
end
|
|
|
|
it 'sets plaintext tags without #' do
|
|
params = { :id => eve.person.id,
|
|
:tags => ',#apples,#oranges,',
|
|
:profile => {:tag_string => 'bananas'} }
|
|
|
|
put :update, params: params
|
|
expect(eve.person.reload.profile.tag_list.to_set).to eq(%w[apples oranges bananas].to_set)
|
|
end
|
|
|
|
it 'sets valid birthday' do
|
|
params = { :id => eve.person.id,
|
|
:profile => {
|
|
:date => {
|
|
:year => '2001',
|
|
:month => '02',
|
|
:day => '28' } } }
|
|
|
|
put :update, params: params
|
|
birthday = eve.person.reload.profile.birthday
|
|
expect(birthday.year).to eq(2001)
|
|
expect(birthday.month).to eq(2)
|
|
expect(birthday.day).to eq(28)
|
|
end
|
|
|
|
it 'displays error for invalid birthday' do
|
|
params = { :id => eve.person.id,
|
|
:profile => {
|
|
:date => {
|
|
:year => '2001',
|
|
:month => '02',
|
|
:day => '31' } } }
|
|
|
|
put :update, params: params
|
|
expect(flash[:error]).not_to be_blank
|
|
end
|
|
|
|
context 'with a profile photo set' do
|
|
before do
|
|
@params = { :id => eve.person.id,
|
|
:profile =>
|
|
{:image_url => "",
|
|
:last_name => eve.person.profile.last_name,
|
|
:first_name => eve.person.profile.first_name }}
|
|
|
|
eve.person.profile.image_url = "http://tom.joindiaspora.com/images/user/tom.jpg"
|
|
eve.person.profile.save
|
|
end
|
|
|
|
it "doesn't overwrite the profile photo when an empty string is passed in" do
|
|
image_url = eve.person.profile.image_url
|
|
put :update, params: @params
|
|
|
|
expect(Person.find(eve.person.id).profile.image_url).to eq(image_url)
|
|
end
|
|
end
|
|
|
|
context 'mass assignment' do
|
|
before do
|
|
new_person = FactoryBot.create(:person)
|
|
@profile_params = {:profile =>{ :person_id => new_person.id,
|
|
:diaspora_handle => 'abc@a.com'}}
|
|
end
|
|
|
|
it 'person_id' do
|
|
person = eve.person
|
|
profile = person.profile
|
|
put :update, params: @profile_params
|
|
expect(profile.reload.person_id).to eq(person.id)
|
|
end
|
|
|
|
it 'diaspora handle' do
|
|
put :update, params: @profile_params
|
|
expect(Person.find(eve.person.id).profile[:diaspora_handle]).not_to eq('abc@a.com')
|
|
end
|
|
end
|
|
end
|
|
end
|