require 'rails_helper' # https://github.com/internetee/registry/issues/576 RSpec.describe 'EPP contact:update' do let(:registrar) { create(:registrar) } let(:user) { create(:api_user_epp, registrar: registrar) } let(:session_id) { create(:epp_session, user: user).session_id } let(:ident) { contact.identifier } let(:request) { post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" } let(:request_xml) { <<-XML TEST test test XML } before do login_as user end context 'when contact ident is valid' do context 'when submitted ident matches current one' do let!(:contact) { create(:contact, code: 'TEST', ident: 'test', ident_type: 'priv', ident_country_code: 'US') } specify do request expect(epp_response).to have_result(:success) end end context 'when submitted ident does not match current one' do let!(:contact) { create(:contact, code: 'TEST', ident: 'another-test', ident_type: 'priv', ident_country_code: 'US') } it 'does not update code' do expect do request contact.reload end.to_not change { ident.code } end it 'does not update type' do expect do request contact.reload end.to_not change { ident.type } end it 'does not update country code' do expect do request contact.reload end.to_not change { ident.country_code } end specify do request expect(epp_response).to have_result(:data_management_policy_violation, t('epp.contacts.errors.valid_ident')) end end end context 'when contact ident is invalid' do let(:contact) { build(:contact, code: 'TEST', ident: 'test', ident_type: nil, ident_country_code: nil) } before do contact.save(validate: false) end context 'when submitted ident is the same as current one' do let(:request_xml) { <<-XML TEST test test XML } it 'does not update code' do expect do request contact.reload end.to_not change { ident.code } end it 'updates type' do request contact.reload expect(ident.type).to eq('priv') end it 'updates country code' do request contact.reload expect(ident.country_code).to eq('US') end specify do request expect(epp_response).to have_result(:success) end end context 'when submitted ident is different from current one' do let(:request_xml) { <<-XML TEST test another-test XML } it 'does not update code' do expect do request contact.reload end.to_not change { ident.code } end it 'does not update type' do expect do request contact.reload end.to_not change { ident.type } end it 'does not update country code' do expect do request contact.reload end.to_not change { ident.country_code } end specify do request expect(epp_response).to have_result(:data_management_policy_violation, t('epp.contacts.errors.ident_update')) end end end end