diff --git a/.codeclimate.yml b/.codeclimate.yml
index 294b9335c..de5285aa5 100644
--- a/.codeclimate.yml
+++ b/.codeclimate.yml
@@ -19,6 +19,7 @@ plugins:
enabled: true
rubocop:
enabled: true
+ channel: rubocop-0-58
exclude_patterns:
- "bin/"
- "config/"
diff --git a/Gemfile.lock b/Gemfile.lock
index 3285380f7..cc5fc4511 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -217,7 +217,8 @@ GEM
httpi (2.4.2)
rack
socksify
- i18n (0.8.6)
+ i18n (0.9.5)
+ concurrent-ruby (~> 1.0)
i18n_data (0.7.0)
ice_nine (0.11.2)
isikukood (0.1.2)
@@ -252,15 +253,14 @@ GEM
mini_mime (1.0.0)
mini_portile2 (2.3.0)
minitest (5.11.3)
- monetize (1.6.0)
- money (~> 6.8)
- money (6.8.3)
- i18n (>= 0.6.4, < 0.9)
- sixarm_ruby_unaccent (>= 1.1.1, < 2)
- money-rails (1.8.0)
+ monetize (1.9.0)
+ money (~> 6.12)
+ money (6.12.0)
+ i18n (>= 0.6.4, < 1.1)
+ money-rails (1.12.0)
activesupport (>= 3.0)
- monetize (~> 1.6.0)
- money (~> 6.8.1)
+ monetize (~> 1.9.0)
+ money (~> 6.12.0)
railties (>= 3.0)
multi_json (1.13.1)
mustermann (1.0.2)
@@ -360,7 +360,7 @@ GEM
rspec-support (3.6.0)
ruby_parser (3.8.4)
sexp_processor (~> 4.1)
- rubyzip (1.2.1)
+ rubyzip (1.2.2)
safe_yaml (1.0.4)
sass (3.4.23)
sass-rails (5.0.6)
@@ -397,7 +397,7 @@ GEM
rack (~> 1.5)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
- sixarm_ruby_unaccent (1.1.1)
+ sixarm_ruby_unaccent (1.2.0)
slop (3.6.0)
socksify (1.7.1)
sprockets (3.7.2)
@@ -508,4 +508,4 @@ DEPENDENCIES
whenever (= 0.9.4)
BUNDLED WITH
- 1.16.2
+ 1.16.4
diff --git a/app/assets/stylesheets/registrant/registrant.sass b/app/assets/stylesheets/registrant/registrant.sass
index 6937c4b49..ebe9f4974 100644
--- a/app/assets/stylesheets/registrant/registrant.sass
+++ b/app/assets/stylesheets/registrant/registrant.sass
@@ -1,6 +1,7 @@
html
position: relative
min-height: 100%
+ overflow-y: scroll
body
padding-bottom: 130px
@@ -30,9 +31,6 @@ h1, h2, h3, h4
color: white !important
background-size: 100%
-.semifooter
- padding: 42px 0 80px 0
-
.confirmation
padding: 40px 0 20px 0
.column-keys
diff --git a/app/controllers/admin/domains/force_delete_controller.rb b/app/controllers/admin/domains/force_delete_controller.rb
index 5d72739d5..946231077 100644
--- a/app/controllers/admin/domains/force_delete_controller.rb
+++ b/app/controllers/admin/domains/force_delete_controller.rb
@@ -6,7 +6,8 @@ module Admin
domain.transaction do
domain.schedule_force_delete
- domain.registrar.messages.create!(body: t('force_delete_set_on_domain', domain_name: domain.name))
+ domain.registrar.notifications.create!(text: t('force_delete_set_on_domain',
+ domain_name: domain.name))
if notify_by_email?
DomainDeleteMailer.forced(domain: domain,
diff --git a/app/controllers/epp/polls_controller.rb b/app/controllers/epp/polls_controller.rb
index cb1f3d2f2..57961eb82 100644
--- a/app/controllers/epp/polls_controller.rb
+++ b/app/controllers/epp/polls_controller.rb
@@ -9,12 +9,12 @@ class Epp::PollsController < EppController
private
def req_poll
- @message = current_user.queued_messages.order('created_at DESC').take
+ @notification = current_user.unread_notifications.order('created_at DESC').take
- render_epp_response 'epp/poll/poll_no_messages' and return unless @message
- if @message.attached_obj_type && @message.attached_obj_id
+ render_epp_response 'epp/poll/poll_no_messages' and return unless @notification
+ if @notification.attached_obj_type && @notification.attached_obj_id
begin
- @object = Object.const_get(@message.attached_obj_type).find(@message.attached_obj_id)
+ @object = Object.const_get(@notification.attached_obj_type).find(@notification.attached_obj_id)
rescue => problem
# the data model might be inconsistent; or ...
# this could happen if the registrar does not dequeue messages, and then the domain was deleted
@@ -28,7 +28,7 @@ class Epp::PollsController < EppController
end
end
- if @message.attached_obj_type == 'Keyrelay'
+ if @notification.attached_obj_type == 'Keyrelay'
render_epp_response 'epp/poll/poll_keyrelay'
else
render_epp_response 'epp/poll/poll_req'
@@ -36,9 +36,9 @@ class Epp::PollsController < EppController
end
def ack_poll
- @message = current_user.queued_messages.find_by(id: params[:parsed_frame].css('poll').first['msgID'])
+ @notification = current_user.unread_notifications.find_by(id: params[:parsed_frame].css('poll').first['msgID'])
- unless @message
+ unless @notification
epp_errors << {
code: '2303',
msg: I18n.t('message_was_not_found'),
@@ -47,7 +47,7 @@ class Epp::PollsController < EppController
handle_errors and return
end
- handle_errors(@message) and return unless @message.dequeue
+ handle_errors(@notification) and return unless @notification.mark_as_read
render_epp_response 'epp/poll/poll_ack'
end
@@ -56,6 +56,6 @@ class Epp::PollsController < EppController
end
def resource
- @message
+ @notification
end
end
diff --git a/app/controllers/registrant/contacts_controller.rb b/app/controllers/registrant/contacts_controller.rb
index 9defa8bd6..b2ebad344 100644
--- a/app/controllers/registrant/contacts_controller.rb
+++ b/app/controllers/registrant/contacts_controller.rb
@@ -1,5 +1,6 @@
class Registrant::ContactsController < RegistrantController
helper_method :domain_ids
+ helper_method :domain
def show
@contact = Contact.where(id: contacts).find_by(id: params[:id])
@@ -25,4 +26,19 @@ class Registrant::ContactsController < RegistrantController
BusinessRegistryCache.fetch_by_ident_and_cc(ident, ident_cc).associated_domain_ids
end
end
-end
+
+ def domain
+ current_user_domains.find(params[:domain_id])
+ end
+
+ def current_user_domains
+ ident_cc, ident = current_registrant_user.registrant_ident.split '-'
+ begin
+ BusinessRegistryCache.fetch_associated_domains ident, ident_cc
+ rescue Soap::Arireg::NotAvailableError => error
+ flash[:notice] = I18n.t(error.json[:message])
+ Rails.logger.fatal("[EXCEPTION] #{error.to_s}")
+ current_registrant_user.domains
+ end
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/registrar/payments_controller.rb b/app/controllers/registrar/payments_controller.rb
index 57565b9c2..466f5a865 100644
--- a/app/controllers/registrar/payments_controller.rb
+++ b/app/controllers/registrar/payments_controller.rb
@@ -3,7 +3,8 @@ class Registrar
protect_from_forgery except: [:back, :callback]
skip_authorization_check # actually anyone can pay, no problems at all
- skip_before_action :authenticate_user!, :check_ip_restriction, only: [:back, :callback]
+ skip_before_action :authenticate_registrar_user!, :check_ip_restriction,
+ only: [:back, :callback]
before_action :check_supported_payment_method
def pay
diff --git a/app/jobs/domain_delete_confirm_job.rb b/app/jobs/domain_delete_confirm_job.rb
index 3cc13bcd3..28a46dbbe 100644
--- a/app/jobs/domain_delete_confirm_job.rb
+++ b/app/jobs/domain_delete_confirm_job.rb
@@ -7,13 +7,13 @@ class DomainDeleteConfirmJob < Que::Job
case action
when RegistrantVerification::CONFIRMED
- domain.poll_message!(:poll_pending_delete_confirmed_by_registrant)
+ domain.notify_registrar(:poll_pending_delete_confirmed_by_registrant)
domain.apply_pending_delete!
raise_errors!(domain)
when RegistrantVerification::REJECTED
domain.statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION)
- domain.poll_message!(:poll_pending_delete_rejected_by_registrant)
+ domain.notify_registrar(:poll_pending_delete_rejected_by_registrant)
domain.cancel_pending_delete
domain.save(validate: false)
diff --git a/app/jobs/domain_delete_job.rb b/app/jobs/domain_delete_job.rb
index 7d86e9885..b45f96713 100644
--- a/app/jobs/domain_delete_job.rb
+++ b/app/jobs/domain_delete_job.rb
@@ -8,8 +8,8 @@ class DomainDeleteJob < Que::Job
domain.destroy
bye_bye = domain.versions.last
- domain.registrar.messages.create!(
- body: "#{I18n.t(:domain_deleted)}: #{domain.name}",
+ domain.registrar.notifications.create!(
+ text: "#{I18n.t(:domain_deleted)}: #{domain.name}",
attached_obj_id: bye_bye.id,
attached_obj_type: bye_bye.class.to_s
)
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index c661c7b6b..376858c42 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -8,7 +8,7 @@ class DomainUpdateConfirmJob < Que::Job
case action
when RegistrantVerification::CONFIRMED
old_registrant = domain.registrant
- domain.poll_message!(:poll_pending_update_confirmed_by_registrant)
+ domain.notify_registrar(:poll_pending_update_confirmed_by_registrant)
raise_errors!(domain)
domain.apply_pending_update!
@@ -22,7 +22,7 @@ class DomainUpdateConfirmJob < Que::Job
registrar: domain.registrar,
registrant: domain.registrant).deliver_now
- domain.poll_message!(:poll_pending_update_rejected_by_registrant)
+ domain.notify_registrar(:poll_pending_update_rejected_by_registrant)
domain.preclean_pendings
domain.clean_pendings!
diff --git a/app/mailers/invoice_mailer.rb b/app/mailers/invoice_mailer.rb
index c3eb20f6f..74821c25a 100644
--- a/app/mailers/invoice_mailer.rb
+++ b/app/mailers/invoice_mailer.rb
@@ -5,7 +5,7 @@ class InvoiceMailer < ApplicationMailer
@invoice = Invoice.find_by(id: invoice_id)
billing_email ||= @invoice.billing_email
return unless @invoice
- return if whitelist_blocked?(@invoice.billing_email)
+ return if whitelist_blocked?(billing_email)
kit = PDFKit.new(html)
pdf = kit.to_pdf
diff --git a/app/models/account_activity.rb b/app/models/account_activity.rb
index b014ea5b8..c5857631e 100644
--- a/app/models/account_activity.rb
+++ b/app/models/account_activity.rb
@@ -1,5 +1,3 @@
-require 'csv'
-
class AccountActivity < ActiveRecord::Base
include Versions
belongs_to :account, required: true
diff --git a/app/models/api_user.rb b/app/models/api_user.rb
index a7c8c022d..7a04bf53f 100644
--- a/app/models/api_user.rb
+++ b/app/models/api_user.rb
@@ -81,8 +81,8 @@ class ApiUser < User
username
end
- def queued_messages
- registrar.messages.queued
+ def unread_notifications
+ registrar.notifications.unread
end
def registrar_pki_ok?(crt, cn)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 511f36006..50ab62242 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -265,9 +265,9 @@ class Domain < ActiveRecord::Base
true
end
- def poll_message!(message_key)
- registrar.messages.create!(
- body: "#{I18n.t(message_key)}: #{name}",
+ def notify_registrar(message_key)
+ registrar.notifications.create!(
+ text: "#{I18n.t(message_key)}: #{name}",
attached_obj_id: id,
attached_obj_type: self.class.to_s
)
diff --git a/app/models/domain_transfer.rb b/app/models/domain_transfer.rb
index 6982f36b6..91cdb2d67 100644
--- a/app/models/domain_transfer.rb
+++ b/app/models/domain_transfer.rb
@@ -73,8 +73,8 @@ class DomainTransfer < ActiveRecord::Base
old_contacts_codes = domain.contacts.pluck(:code).sort.uniq.join(', ')
old_registrant_code = domain.registrant.code
- old_registrar.messages.create!(
- body: I18n.t('messages.texts.domain_transfer',
+ old_registrar.notifications.create!(
+ text: I18n.t('notifications.texts.domain_transfer',
domain_name: domain.name,
old_contacts_codes: old_contacts_codes,
old_registrant_code: old_registrant_code),
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 749f5310c..2f25f3da5 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -625,8 +625,8 @@ class Epp::Domain < Domain
)
if dt.pending?
- registrar.messages.create!(
- body: I18n.t('transfer_requested'),
+ registrar.notifications.create!(
+ text: I18n.t('transfer_requested'),
attached_obj_id: dt.id,
attached_obj_type: dt.class.to_s
)
@@ -727,8 +727,8 @@ class Epp::Domain < Domain
return false unless valid?
- registrar.messages.create!(
- body: 'Key Relay action completed successfully.',
+ registrar.notifications.create!(
+ text: 'Key Relay action completed successfully.',
attached_obj_type: kr.class.to_s,
attached_obj_id: kr.id
)
diff --git a/app/models/message.rb b/app/models/message.rb
deleted file mode 100644
index 1f01842c8..000000000
--- a/app/models/message.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class Message < ActiveRecord::Base
- include Versions # version/message_version.rb
- belongs_to :registrar, required: true
-
- before_create -> { self.queued = true }
-
- scope :queued, -> { where(queued: true) }
-
- validates :body, presence: true
-
- def dequeue
- self.queued = false
- save
- end
-
- def name
- "-"
- end
-end
diff --git a/app/models/notification.rb b/app/models/notification.rb
new file mode 100644
index 000000000..0b1829267
--- /dev/null
+++ b/app/models/notification.rb
@@ -0,0 +1,31 @@
+class Notification < ActiveRecord::Base
+ include Versions # version/notification_version.rb
+ belongs_to :registrar
+
+ scope :unread, -> { where(read: false) }
+
+ validates :text, presence: true
+
+ after_initialize :set_defaults
+
+ def mark_as_read
+ raise 'Read notification cannot be marked as read again' if read?
+ self.read = true
+ save
+ end
+
+ def unread?
+ !read?
+ end
+
+ # Needed for EPP log
+ def name
+ "-"
+ end
+
+ private
+
+ def set_defaults
+ self.read = false if read.nil?
+ end
+end
diff --git a/app/models/registrar.rb b/app/models/registrar.rb
index de02d42a7..611dfc562 100644
--- a/app/models/registrar.rb
+++ b/app/models/registrar.rb
@@ -4,7 +4,7 @@ class Registrar < ActiveRecord::Base
has_many :domains, dependent: :restrict_with_error
has_many :contacts, dependent: :restrict_with_error
has_many :api_users, dependent: :restrict_with_error
- has_many :messages
+ has_many :notifications
has_many :invoices, foreign_key: 'buyer_id'
has_many :accounts, dependent: :destroy
has_many :nameservers, through: :domains
diff --git a/app/models/version/message_version.rb b/app/models/version/message_version.rb
deleted file mode 100644
index 548c11dd6..000000000
--- a/app/models/version/message_version.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class MessageVersion < PaperTrail::Version
- include VersionSession
- self.table_name = :log_messages
- self.sequence_name = :log_messages_id_seq
-end
diff --git a/app/models/version/notification_version.rb b/app/models/version/notification_version.rb
new file mode 100644
index 000000000..0b66aabe5
--- /dev/null
+++ b/app/models/version/notification_version.rb
@@ -0,0 +1,5 @@
+class NotificationVersion < PaperTrail::Version
+ include VersionSession
+ self.table_name = :log_notifications
+ self.sequence_name = :log_notifications_id_seq
+end
diff --git a/app/views/admin/registrars/_contacts.html.erb b/app/views/admin/registrars/_contacts.html.erb
index 190e48458..7599c68c3 100644
--- a/app/views/admin/registrars/_contacts.html.erb
+++ b/app/views/admin/registrars/_contacts.html.erb
@@ -16,9 +16,6 @@
<%= t(:contact_email) %>
<%= @registrar.email %>
-
- <%= Registrar.human_attribute_name :billing_email %>
- <%= @registrar.billing_email %>
diff --git a/app/views/epp/domains/partials/_delete_complete.xml.builder b/app/views/epp/domains/partials/_delete_complete.xml.builder
deleted file mode 100644
index 509ac6953..000000000
--- a/app/views/epp/domains/partials/_delete_complete.xml.builder
+++ /dev/null
@@ -1,4 +0,0 @@
-builder.tag!('domain:delData', 'xmlns:domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd') do
- builder.tag!('domain:name', bye_bye.object['name'])
- builder.tag!('domain:exDate', bye_bye.created_at)
-end
diff --git a/app/views/epp/poll/poll_ack.xml.builder b/app/views/epp/poll/poll_ack.xml.builder
index 05ea8b8d0..835f13b86 100644
--- a/app/views/epp/poll/poll_ack.xml.builder
+++ b/app/views/epp/poll/poll_ack.xml.builder
@@ -4,7 +4,7 @@ xml.epp_head do
xml.msg 'Command completed successfully'
end
- xml.tag!('msgQ', 'count' => current_user.queued_messages.count, 'id' => @message.id)
+ xml.tag!('msgQ', 'count' => current_user.unread_notifications.count, 'id' => @notification.id)
render('epp/shared/trID', builder: xml)
end
diff --git a/app/views/epp/poll/poll_keyrelay.xml.builder b/app/views/epp/poll/poll_keyrelay.xml.builder
index 7c2ca6c5a..c5415273a 100644
--- a/app/views/epp/poll/poll_keyrelay.xml.builder
+++ b/app/views/epp/poll/poll_keyrelay.xml.builder
@@ -10,9 +10,9 @@ xml.epp(
xml.msg 'Command completed successfully; ack to dequeue'
end
- xml.tag!('msgQ', 'count' => current_user.queued_messages.count, 'id' => @message.id) do
- xml.qDate @message.created_at.try(:iso8601)
- xml.msg @message.body
+ xml.tag!('msgQ', 'count' => current_user.unread_notifications.count, 'id' => @notification.id) do
+ xml.qDate @notification.created_at.try(:iso8601)
+ xml.msg @notification.text
end
xml.resData do
diff --git a/app/views/epp/poll/poll_req.xml.builder b/app/views/epp/poll/poll_req.xml.builder
index 9981e8be6..9ddef8d09 100644
--- a/app/views/epp/poll/poll_req.xml.builder
+++ b/app/views/epp/poll/poll_req.xml.builder
@@ -4,12 +4,12 @@ xml.epp_head do
xml.msg 'Command completed successfully; ack to dequeue'
end
- xml.tag!('msgQ', 'count' => current_user.queued_messages.count, 'id' => @message.id) do
- xml.qDate @message.created_at.utc.xmlschema
- xml.msg @message.body
+ xml.tag!('msgQ', 'count' => current_user.unread_notifications.count, 'id' => @notification.id) do
+ xml.qDate @notification.created_at.utc.xmlschema
+ xml.msg @notification.text
end
- if @message.attached_obj_type == 'DomainTransfer'
+ if @notification.attached_obj_type == 'DomainTransfer'
xml.resData do
xml << render('epp/domains/partials/transfer', builder: xml, dt: @object)
end if @object
diff --git a/app/views/registrant/contacts/show.html.erb b/app/views/registrant/contacts/show.html.erb
index 6d08feccc..f9a8a86fa 100644
--- a/app/views/registrant/contacts/show.html.erb
+++ b/app/views/registrant/contacts/show.html.erb
@@ -1,3 +1,9 @@
+
+ - <%= link_to t('registrant.domains.index.header'), registrant_domains_path %>
+ - <%= link_to domain, registrant_domain_path(domain) %>
+ - <%= t 'registrant.contacts.contact_index' %>
+
+
diff --git a/app/views/registrant/domains/_domain.html.erb b/app/views/registrant/domains/_domain.html.erb
index b3bf4d334..8cc8a490b 100644
--- a/app/views/registrant/domains/_domain.html.erb
+++ b/app/views/registrant/domains/_domain.html.erb
@@ -1,6 +1,9 @@
-
+
<%= link_to domain, registrant_domain_path(domain) %> |
- <%= link_to domain.registrant.name, registrant_contact_path(domain.registrant) %> |
+
+ <%= link_to domain.registrant.name,
+ registrant_domain_contact_path(domain, domain.registrant) %>
+ |
<%= l domain.expire_time %> |
<%= link_to domain.registrar, registrant_registrar_path(domain.registrar) %> |
diff --git a/app/views/registrant/domains/index.html.erb b/app/views/registrant/domains/index.html.erb
index 43a9122eb..acb9afcff 100644
--- a/app/views/registrant/domains/index.html.erb
+++ b/app/views/registrant/domains/index.html.erb
@@ -76,7 +76,7 @@
-
+
diff --git a/app/views/registrant/domains/partials/_admin_contacts.haml b/app/views/registrant/domains/partials/_admin_contacts.haml
deleted file mode 100644
index 5ee50c31d..000000000
--- a/app/views/registrant/domains/partials/_admin_contacts.haml
+++ /dev/null
@@ -1,22 +0,0 @@
-- panel_class = @domain.errors.messages[:admin_contacts] ? 'panel-danger' : 'panel-default'
-.panel{class: panel_class}
- .panel-heading.clearfix
- = t('.title')
- .table-responsive
- %table.table.table-hover.table-bordered.table-condensed
- %thead
- %tr
- %th{class: 'col-xs-4'}= t(:name)
- %th{class: 'col-xs-4'}= t(:id)
- %th{class: 'col-xs-4'}= t(:email)
- %tbody
- - @domain.admin_contacts.each do |ac|
- %tr
- %td= link_to(ac, registrant_contact_path(ac))
- %td= ac.code
- %td= ac.email
- - if @domain.errors.messages[:admin_contacts]
- %tfoot
- - @domain.errors.messages[:admin_contacts].each do |x|
- %tr
- %td{colspan: 4}= x
diff --git a/app/views/registrant/domains/partials/_domain_contact.html.erb b/app/views/registrant/domains/partials/_domain_contact.html.erb
new file mode 100644
index 000000000..e4eaf7115
--- /dev/null
+++ b/app/views/registrant/domains/partials/_domain_contact.html.erb
@@ -0,0 +1,7 @@
+<% contact = domain_contact.contact %>
+
+ |
+ <%= link_to contact, registrant_domain_contact_path(domain, contact) %> |
+ <%= contact.code %> |
+ <%= contact.email %> |
+
\ No newline at end of file
diff --git a/app/views/registrant/domains/partials/_domain_contacts.html.erb b/app/views/registrant/domains/partials/_domain_contacts.html.erb
new file mode 100644
index 000000000..3876e2546
--- /dev/null
+++ b/app/views/registrant/domains/partials/_domain_contacts.html.erb
@@ -0,0 +1,24 @@
+
+
+ <%= t ".header_#{domain_contacts.model_name.plural.underscore}" %>
+
+
+
+
+
+
+ <%= Contact.human_attribute_name :name %> |
+ <%= Contact.human_attribute_name :code %> |
+ <%= Contact.human_attribute_name :email %> |
+
+
+
+
+ <%= render partial: 'registrant/domains/partials/domain_contact',
+ collection: domain_contacts,
+ locals: { domain: domain } %>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/registrant/domains/partials/_general.html.erb b/app/views/registrant/domains/partials/_general.html.erb
index 5dff93331..46d55bd85 100644
--- a/app/views/registrant/domains/partials/_general.html.erb
+++ b/app/views/registrant/domains/partials/_general.html.erb
@@ -13,7 +13,7 @@
<%= t(:registered_at) %>
<%= l(@domain.registered_at) %>
- <%= t(:registrar_name) %>
+ <%= Registrar.model_name.human %>
<%= link_to(@domain.registrar, registrant_registrar_path(@domain.registrar)) %>
<%= Domain.human_attribute_name :transfer_code %>
diff --git a/app/views/registrant/domains/partials/_owner.haml b/app/views/registrant/domains/partials/_owner.haml
deleted file mode 100644
index 01bfa9ea9..000000000
--- a/app/views/registrant/domains/partials/_owner.haml
+++ /dev/null
@@ -1,19 +0,0 @@
-.panel.panel-default
- .panel-heading
- %h3.panel-title= t('.title')
- .panel-body
- %dl.dl-horizontal
- %dt= t(:name)
- %dd= link_to(@domain.registrant.name, registrant_contact_path(@domain.registrant))
-
- %dt= t(:id)
- %dd= @domain.registrant_code
-
- %dt= t(:identity_code)
- %dd= @domain.registrant_ident
-
- %dt= t(:email)
- %dd= @domain.registrant_email
-
- %dt= t(:phone)
- %dd= @domain.registrant_phone
diff --git a/app/views/registrant/domains/partials/_registrant.html.erb b/app/views/registrant/domains/partials/_registrant.html.erb
new file mode 100644
index 000000000..f02a2eb4e
--- /dev/null
+++ b/app/views/registrant/domains/partials/_registrant.html.erb
@@ -0,0 +1,26 @@
+
+
+ <%= t '.header' %>
+
+
+
+
+ - <%= Registrant.human_attribute_name :name %>
+ -
+ <%= link_to registrant.name, registrant_domain_contact_path(domain, registrant) %>
+
+
+ - <%= Registrant.human_attribute_name :code %>
+ - <%= registrant.code %>
+
+ - <%= Registrant.human_attribute_name :ident %>
+ - <%= registrant.ident %>
+
+ - <%= Registrant.human_attribute_name :email %>
+ - <%= registrant.email %>
+
+ - <%= Registrant.human_attribute_name :phone %>
+ - <%= registrant.phone %>
+
+
+
\ No newline at end of file
diff --git a/app/views/registrant/domains/partials/_tech_contacts.haml b/app/views/registrant/domains/partials/_tech_contacts.haml
deleted file mode 100644
index c1177ae4b..000000000
--- a/app/views/registrant/domains/partials/_tech_contacts.haml
+++ /dev/null
@@ -1,22 +0,0 @@
-- panel_class = @domain.errors.messages[:tech_contacts] ? 'panel-danger' : 'panel-default'
-#tech_contacts.panel{class: panel_class}
- .panel-heading.clearfix
- = t('.title')
- .table-responsive
- %table.table.table-hover.table-bordered.table-condensed
- %thead
- %tr
- %th{class: 'col-xs-4'}= t(:name)
- %th{class: 'col-xs-4'}= t(:id)
- %th{class: 'col-xs-4'}= t(:email)
- %tbody
- - @domain.tech_contacts.each do |tc|
- %tr
- %td= link_to(tc, registrant_contact_path(tc))
- %td= tc.code
- %td= tc.email
- - if @domain.errors.messages[:tech_contacts]
- %tfoot
- - @domain.errors.messages[:tech_contacts].each do |x|
- %tr
- %td{colspan: 4}= x
diff --git a/app/views/registrant/domains/show.html.erb b/app/views/registrant/domains/show.html.erb
index 32dc2584a..d09253b6b 100644
--- a/app/views/registrant/domains/show.html.erb
+++ b/app/views/registrant/domains/show.html.erb
@@ -1,23 +1,35 @@
-<%= render 'shared/title', name: @domain.name %>
+
+ - <%= link_to t('registrant.domains.index.header'), registrant_domains_path %>
+
+
+
<%= render 'registrant/domains/partials/general' %>
+
- <%= render 'registrant/domains/partials/owner' %>
+ <%= render partial: 'registrant/domains/partials/registrant',
+ locals: { registrant: @domain.registrant, domain: @domain } %>
- <%= render 'registrant/domains/partials/tech_contacts' %>
+ <%= render 'registrant/domains/partials/domain_contacts',
+ domain: @domain,
+ domain_contacts: @domain.tech_domain_contacts %>
- <%= render 'registrant/domains/partials/admin_contacts' %>
+ <%= render 'registrant/domains/partials/domain_contacts',
+ domain: @domain,
+ domain_contacts: @domain.admin_domain_contacts %>
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index c2f89e691..56791c45d 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -173,7 +173,7 @@ Devise.setup do |config|
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
- # config.timeout_in = 30.minutes
+ config.timeout_in = ENV['user_session_timeout'].to_i.seconds if ENV['user_session_timeout']
# ==> Configuration for :lockable
# Defines which strategy will be used to lock an account.
diff --git a/config/initializers/money.rb b/config/initializers/money.rb
index bd14a3f3d..cb476b589 100644
--- a/config/initializers/money.rb
+++ b/config/initializers/money.rb
@@ -1,69 +1,4 @@
-# encoding : utf-8
-
MoneyRails.configure do |config|
- # To set the default currency
- #
+ # Wrapper for Money#default_currency with additional functionality
config.default_currency = :eur
-
- # Set default bank object
- #
- # Example:
- # config.default_bank = EuCentralBank.new
-
- # Add exchange rates to current money bank object.
- # (The conversion rate refers to one direction only)
- #
- # Example:
- # config.add_rate "USD", "CAD", 1.24515
- # config.add_rate "CAD", "USD", 0.803115
-
- # To handle the inclusion of validations for monetized fields
- # The default value is true
- #
- # config.include_validations = true
-
- # Default ActiveRecord migration configuration values for columns:
- #
- # config.amount_column = { prefix: '', # column name prefix
- # postfix: '_cents', # column name postfix
- # column_name: nil, # full column name (overrides prefix, postfix and accessor name)
- # type: :integer, # column type
- # present: true, # column will be created
- # null: false, # other options will be treated as column options
- # default: 0
- # }
- #
- # config.currency_column = { prefix: '',
- # postfix: '_currency',
- # column_name: nil,
- # type: :string,
- # present: true,
- # null: false,
- # default: 'USD'
- # }
-
- # Register a custom currency
- #
- # Example:
- # config.register_currency = {
- # :priority => 1,
- # :iso_code => "EU4",
- # :name => "Euro with subunit of 4 digits",
- # :symbol => "€",
- # :symbol_first => true,
- # :subunit => "Subcent",
- # :subunit_to_unit => 10000,
- # :thousands_separator => ".",
- # :decimal_mark => ","
- # }
-
- # Set default money format globally.
- # Default value is nil meaning "ignore this option".
- # Example:
- #
- # config.default_format = {
- # :no_cents_if_whole => nil,
- # :symbol => nil,
- # :sign_before_symbol => nil
- # }
-end
+end
\ No newline at end of file
diff --git a/config/locales/en.yml b/config/locales/en.yml
index d2af3cc01..f204e336e 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -474,7 +474,6 @@ en:
message: 'Message'
message_no: 'Message #%{id}'
queue_date: 'Queue date'
- messages_in_queue: 'Messages in queue'
you_have_no_new_messages: 'You have no new messages'
message_id: 'Message ID'
trStatus: 'Status'
diff --git a/config/locales/messages.en.yml b/config/locales/notifications.en.yml
similarity index 92%
rename from config/locales/messages.en.yml
rename to config/locales/notifications.en.yml
index 0c85bb49c..46e03c689 100644
--- a/config/locales/messages.en.yml
+++ b/config/locales/notifications.en.yml
@@ -1,5 +1,5 @@
en:
- messages:
+ notifications:
texts:
domain_transfer: >-
Transfer of domain %{domain_name} has been approved.
diff --git a/config/locales/registrant/contacts.en.yml b/config/locales/registrant/contacts.en.yml
index ef6ea173f..a44755832 100644
--- a/config/locales/registrant/contacts.en.yml
+++ b/config/locales/registrant/contacts.en.yml
@@ -1,6 +1,8 @@
en:
registrant:
contacts:
+ contact_index: Contacts
+
show:
general:
header: General
diff --git a/config/locales/registrant/domains.en.yml b/config/locales/registrant/domains.en.yml
index be0a1c638..5016f3f4e 100644
--- a/config/locales/registrant/domains.en.yml
+++ b/config/locales/registrant/domains.en.yml
@@ -8,12 +8,11 @@ en:
download_list:
registrant: Registrant
+
partials:
- owner:
- title: Registrant
+ registrant:
+ header: Registrant
- admin_contacts:
- title: Admin. contacts
-
- tech_contacts:
- title: Tech. contacts
+ domain_contacts:
+ header_admin_domain_contacts: Administrative contacts
+ header_tech_domain_contacts: Technical contacts
diff --git a/config/routes.rb b/config/routes.rb
index f173ccad4..ff33ec652 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -136,8 +136,9 @@ Rails.application.routes.draw do
end
resources :registrars, only: :show
- resources :contacts, only: :show
resources :domains, only: %i[index show] do
+ resources :contacts, only: %i[show]
+
collection do
get :download_list
end
diff --git a/db/migrate/20180823161237_rename_messages_to_notifications.rb b/db/migrate/20180823161237_rename_messages_to_notifications.rb
new file mode 100644
index 000000000..ecd0e9b1e
--- /dev/null
+++ b/db/migrate/20180823161237_rename_messages_to_notifications.rb
@@ -0,0 +1,5 @@
+class RenameMessagesToNotifications < ActiveRecord::Migration
+ def change
+ rename_table :messages, :notifications
+ end
+end
diff --git a/db/migrate/20180823163548_rename_log_messages_to_log_notifications.rb b/db/migrate/20180823163548_rename_log_messages_to_log_notifications.rb
new file mode 100644
index 000000000..70dcbf50a
--- /dev/null
+++ b/db/migrate/20180823163548_rename_log_messages_to_log_notifications.rb
@@ -0,0 +1,5 @@
+class RenameLogMessagesToLogNotifications < ActiveRecord::Migration
+ def change
+ rename_table :log_messages, :log_notifications
+ end
+end
diff --git a/db/migrate/20180823174331_rename_notifications_body_to_text.rb b/db/migrate/20180823174331_rename_notifications_body_to_text.rb
new file mode 100644
index 000000000..d0b5e0514
--- /dev/null
+++ b/db/migrate/20180823174331_rename_notifications_body_to_text.rb
@@ -0,0 +1,5 @@
+class RenameNotificationsBodyToText < ActiveRecord::Migration
+ def change
+ rename_column :notifications, :body, :text
+ end
+end
diff --git a/db/migrate/20180823212823_rename_notifications_queued_to_read.rb b/db/migrate/20180823212823_rename_notifications_queued_to_read.rb
new file mode 100644
index 000000000..e0cc8f7bd
--- /dev/null
+++ b/db/migrate/20180823212823_rename_notifications_queued_to_read.rb
@@ -0,0 +1,5 @@
+class RenameNotificationsQueuedToRead < ActiveRecord::Migration
+ def change
+ rename_column :notifications, :queued, :read
+ end
+end
diff --git a/db/migrate/20180824102834_change_notifications_read_to_not_null.rb b/db/migrate/20180824102834_change_notifications_read_to_not_null.rb
new file mode 100644
index 000000000..916a32b28
--- /dev/null
+++ b/db/migrate/20180824102834_change_notifications_read_to_not_null.rb
@@ -0,0 +1,5 @@
+class ChangeNotificationsReadToNotNull < ActiveRecord::Migration
+ def change
+ change_column_null :notifications, :read, false
+ end
+end
diff --git a/db/structure.sql b/db/structure.sql
index 668e96be5..21d39236e 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -1652,44 +1652,6 @@ CREATE SEQUENCE public.log_keyrelays_id_seq
ALTER SEQUENCE public.log_keyrelays_id_seq OWNED BY public.log_keyrelays.id;
---
--- Name: log_messages; Type: TABLE; Schema: public; Owner: -; Tablespace:
---
-
-CREATE TABLE public.log_messages (
- id integer NOT NULL,
- item_type character varying NOT NULL,
- item_id integer NOT NULL,
- event character varying NOT NULL,
- whodunnit character varying,
- object json,
- object_changes json,
- created_at timestamp without time zone,
- session character varying,
- children json,
- uuid character varying
-);
-
-
---
--- Name: log_messages_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.log_messages_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: log_messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.log_messages_id_seq OWNED BY public.log_messages.id;
-
-
--
-- Name: log_nameservers; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -1728,6 +1690,44 @@ CREATE SEQUENCE public.log_nameservers_id_seq
ALTER SEQUENCE public.log_nameservers_id_seq OWNED BY public.log_nameservers.id;
+--
+-- Name: log_notifications; Type: TABLE; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE TABLE public.log_notifications (
+ id integer NOT NULL,
+ item_type character varying NOT NULL,
+ item_id integer NOT NULL,
+ event character varying NOT NULL,
+ whodunnit character varying,
+ object json,
+ object_changes json,
+ created_at timestamp without time zone,
+ session character varying,
+ children json,
+ uuid character varying
+);
+
+
+--
+-- Name: log_notifications_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.log_notifications_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: log_notifications_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.log_notifications_id_seq OWNED BY public.log_notifications.id;
+
+
--
-- Name: log_registrars; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -1955,43 +1955,6 @@ CREATE SEQUENCE public.mail_templates_id_seq
ALTER SEQUENCE public.mail_templates_id_seq OWNED BY public.mail_templates.id;
---
--- Name: messages; Type: TABLE; Schema: public; Owner: -; Tablespace:
---
-
-CREATE TABLE public.messages (
- id integer NOT NULL,
- registrar_id integer NOT NULL,
- body character varying NOT NULL,
- attached_obj_type character varying,
- attached_obj_id integer,
- queued boolean,
- created_at timestamp without time zone,
- updated_at timestamp without time zone,
- creator_str character varying,
- updator_str character varying
-);
-
-
---
--- Name: messages_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE public.messages_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE public.messages_id_seq OWNED BY public.messages.id;
-
-
--
-- Name: nameservers; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -2030,6 +1993,43 @@ CREATE SEQUENCE public.nameservers_id_seq
ALTER SEQUENCE public.nameservers_id_seq OWNED BY public.nameservers.id;
+--
+-- Name: notifications; Type: TABLE; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE TABLE public.notifications (
+ id integer NOT NULL,
+ registrar_id integer NOT NULL,
+ text character varying NOT NULL,
+ attached_obj_type character varying,
+ attached_obj_id integer,
+ read boolean NOT NULL,
+ created_at timestamp without time zone,
+ updated_at timestamp without time zone,
+ creator_str character varying,
+ updator_str character varying
+);
+
+
+--
+-- Name: notifications_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE public.notifications_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: notifications_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE public.notifications_id_seq OWNED BY public.notifications.id;
+
+
--
-- Name: prices; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -2715,14 +2715,14 @@ ALTER TABLE ONLY public.log_keyrelays ALTER COLUMN id SET DEFAULT nextval('publi
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
-ALTER TABLE ONLY public.log_messages ALTER COLUMN id SET DEFAULT nextval('public.log_messages_id_seq'::regclass);
+ALTER TABLE ONLY public.log_nameservers ALTER COLUMN id SET DEFAULT nextval('public.log_nameservers_id_seq'::regclass);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
-ALTER TABLE ONLY public.log_nameservers ALTER COLUMN id SET DEFAULT nextval('public.log_nameservers_id_seq'::regclass);
+ALTER TABLE ONLY public.log_notifications ALTER COLUMN id SET DEFAULT nextval('public.log_notifications_id_seq'::regclass);
--
@@ -2771,14 +2771,14 @@ ALTER TABLE ONLY public.mail_templates ALTER COLUMN id SET DEFAULT nextval('publ
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
-ALTER TABLE ONLY public.messages ALTER COLUMN id SET DEFAULT nextval('public.messages_id_seq'::regclass);
+ALTER TABLE ONLY public.nameservers ALTER COLUMN id SET DEFAULT nextval('public.nameservers_id_seq'::regclass);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
-ALTER TABLE ONLY public.nameservers ALTER COLUMN id SET DEFAULT nextval('public.nameservers_id_seq'::regclass);
+ALTER TABLE ONLY public.notifications ALTER COLUMN id SET DEFAULT nextval('public.notifications_id_seq'::regclass);
--
@@ -3130,14 +3130,6 @@ ALTER TABLE ONLY public.log_keyrelays
ADD CONSTRAINT log_keyrelays_pkey PRIMARY KEY (id);
---
--- Name: log_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
---
-
-ALTER TABLE ONLY public.log_messages
- ADD CONSTRAINT log_messages_pkey PRIMARY KEY (id);
-
-
--
-- Name: log_nameservers_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -3146,6 +3138,14 @@ ALTER TABLE ONLY public.log_nameservers
ADD CONSTRAINT log_nameservers_pkey PRIMARY KEY (id);
+--
+-- Name: log_notifications_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
+--
+
+ALTER TABLE ONLY public.log_notifications
+ ADD CONSTRAINT log_notifications_pkey PRIMARY KEY (id);
+
+
--
-- Name: log_registrars_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -3194,14 +3194,6 @@ ALTER TABLE ONLY public.mail_templates
ADD CONSTRAINT mail_templates_pkey PRIMARY KEY (id);
---
--- Name: messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
---
-
-ALTER TABLE ONLY public.messages
- ADD CONSTRAINT messages_pkey PRIMARY KEY (id);
-
-
--
-- Name: nameservers_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -3210,6 +3202,14 @@ ALTER TABLE ONLY public.nameservers
ADD CONSTRAINT nameservers_pkey PRIMARY KEY (id);
+--
+-- Name: notifications_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
+--
+
+ALTER TABLE ONLY public.notifications
+ ADD CONSTRAINT notifications_pkey PRIMARY KEY (id);
+
+
--
-- Name: prices_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -3789,20 +3789,6 @@ CREATE INDEX index_log_keyrelays_on_item_type_and_item_id ON public.log_keyrelay
CREATE INDEX index_log_keyrelays_on_whodunnit ON public.log_keyrelays USING btree (whodunnit);
---
--- Name: index_log_messages_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_log_messages_on_item_type_and_item_id ON public.log_messages USING btree (item_type, item_id);
-
-
---
--- Name: index_log_messages_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_log_messages_on_whodunnit ON public.log_messages USING btree (whodunnit);
-
-
--
-- Name: index_log_nameservers_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -3817,6 +3803,20 @@ CREATE INDEX index_log_nameservers_on_item_type_and_item_id ON public.log_namese
CREATE INDEX index_log_nameservers_on_whodunnit ON public.log_nameservers USING btree (whodunnit);
+--
+-- Name: index_log_notifications_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_log_notifications_on_item_type_and_item_id ON public.log_notifications USING btree (item_type, item_id);
+
+
+--
+-- Name: index_log_notifications_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_log_notifications_on_whodunnit ON public.log_notifications USING btree (whodunnit);
+
+
--
-- Name: index_log_registrars_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -3873,13 +3873,6 @@ CREATE INDEX index_log_users_on_item_type_and_item_id ON public.log_users USING
CREATE INDEX index_log_users_on_whodunnit ON public.log_users USING btree (whodunnit);
---
--- Name: index_messages_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_messages_on_registrar_id ON public.messages USING btree (registrar_id);
-
-
--
-- Name: index_nameservers_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -3887,6 +3880,13 @@ CREATE INDEX index_messages_on_registrar_id ON public.messages USING btree (regi
CREATE INDEX index_nameservers_on_domain_id ON public.nameservers USING btree (domain_id);
+--
+-- Name: index_notifications_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_notifications_on_registrar_id ON public.notifications USING btree (registrar_id);
+
+
--
-- Name: index_prices_on_zone_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4102,7 +4102,7 @@ ALTER TABLE ONLY public.account_activities
-- Name: messages_registrar_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-ALTER TABLE ONLY public.messages
+ALTER TABLE ONLY public.notifications
ADD CONSTRAINT messages_registrar_id_fk FOREIGN KEY (registrar_id) REFERENCES public.registrars(id);
@@ -4766,5 +4766,15 @@ INSERT INTO schema_migrations (version) VALUES ('20180808064402');
INSERT INTO schema_migrations (version) VALUES ('20180816123540');
+INSERT INTO schema_migrations (version) VALUES ('20180823161237');
+
+INSERT INTO schema_migrations (version) VALUES ('20180823163548');
+
+INSERT INTO schema_migrations (version) VALUES ('20180823174331');
+
+INSERT INTO schema_migrations (version) VALUES ('20180823212823');
+
INSERT INTO schema_migrations (version) VALUES ('20180824092855');
+INSERT INTO schema_migrations (version) VALUES ('20180824102834');
+
diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb
index 000a7be97..075f9ea02 100644
--- a/spec/models/domain_spec.rb
+++ b/spec/models/domain_spec.rb
@@ -251,10 +251,11 @@ RSpec.describe Domain do
@domain.statuses = DomainStatus::OK # restore
end
- it 'should add poll message to registrar' do
+ it 'should notify registrar' do
+ text = 'Registrant confirmed domain update: testpollmessage123.ee'
domain = create(:domain, name: 'testpollmessage123.ee')
- domain.poll_message!(:poll_pending_update_confirmed_by_registrant)
- domain.registrar.messages.first.body.should == 'Registrant confirmed domain update: testpollmessage123.ee'
+ domain.notify_registrar(:poll_pending_update_confirmed_by_registrant)
+ domain.registrar.notifications.first.text.should == text
end
context 'about registrant update confirm' do
diff --git a/test/fixtures/contacts.yml b/test/fixtures/contacts.yml
index 06bd2c90e..8a1232326 100644
--- a/test/fixtures/contacts.yml
+++ b/test/fixtures/contacts.yml
@@ -9,6 +9,8 @@ john:
code: john-001
auth_info: cacb5b
uuid: eb2f2766-b44c-4e14-9f16-32ab1a7cb957
+ created_at: <%= Time.zone.parse('2010-07-05').to_s(:db) %>
+ updated_at: <%= Time.zone.parse('2010-07-06').to_s(:db) %>
william: &william
name: William
@@ -24,7 +26,7 @@ william: &william
street: Main Street
zip: 12345
city: New York
- state: New York
+ state: New York State
country_code: US
statuses:
- ok
diff --git a/test/fixtures/domains.yml b/test/fixtures/domains.yml
index 4d6468c92..5c4744e49 100644
--- a/test/fixtures/domains.yml
+++ b/test/fixtures/domains.yml
@@ -4,7 +4,11 @@ shop:
registrar: bestnames
registrant: john
transfer_code: 65078d5
- valid_to: 2010-07-05
+ registered_at: <%= Time.zone.parse('2010-07-04').to_s(:db) %>
+ valid_to: <%= Time.zone.parse('2010-07-05').to_s(:db) %>
+ outzone_at: <%= Time.zone.parse('2010-07-06').to_s(:db) %>
+ delete_at: <%= Time.zone.parse('2010-07-07').to_s(:db) %>
+ force_delete_at: <%= Time.zone.parse('2010-07-08').to_s(:db) %>
period: 1
period_unit: m
uuid: 1b3ee442-e8fe-4922-9492-8fcb9dccc69c
diff --git a/test/fixtures/messages.yml b/test/fixtures/notifications.yml
similarity index 64%
rename from test/fixtures/messages.yml
rename to test/fixtures/notifications.yml
index c20a4b023..79acd4781 100644
--- a/test/fixtures/messages.yml
+++ b/test/fixtures/notifications.yml
@@ -1,16 +1,16 @@
greeting:
- body: Welcome!
- queued: true
+ text: Welcome!
+ read: false
registrar: bestnames
created_at: <%= Time.zone.parse('2010-07-04') %>
domain_deleted:
- body: Your domain has been deleted
- queued: true
+ text: Your domain has been deleted
+ read: false
registrar: bestnames
created_at: <%= Time.zone.parse('2010-07-05') %>
farewell:
- body: Good bye!
- queued: true
+ text: Good bye!
+ read: false
registrar: goodnames
\ No newline at end of file
diff --git a/test/fixtures/registrars.yml b/test/fixtures/registrars.yml
index 65400bf13..d3d6b1c20 100644
--- a/test/fixtures/registrars.yml
+++ b/test/fixtures/registrars.yml
@@ -40,4 +40,5 @@ complete:
accounting_customer_code: US0001
language: en
vat_no: US12345
- vat_rate: 0.05
\ No newline at end of file
+ vat_rate: 0.05
+ billing_email: billing@bestnames.test
\ No newline at end of file
diff --git a/test/integration/api/domain_transfers_test.rb b/test/integration/api/domain_transfers_test.rb
index d439a64e5..12c8351f6 100644
--- a/test/integration/api/domain_transfers_test.rb
+++ b/test/integration/api/domain_transfers_test.rb
@@ -47,7 +47,7 @@ class APIDomainTransfersTest < ApplicationIntegrationTest
def test_notifies_old_registrar
@old_registrar = @domain.registrar
- assert_difference -> { @old_registrar.messages.count } do
+ assert_difference -> { @old_registrar.notifications.count } do
post '/repp/v1/domain_transfers', request_params, { 'HTTP_AUTHORIZATION' => http_auth_key }
end
end
diff --git a/test/integration/epp/domain/transfer/request_test.rb b/test/integration/epp/domain/transfer/request_test.rb
index 1a9f9ae75..e54c65b16 100644
--- a/test/integration/epp/domain/transfer/request_test.rb
+++ b/test/integration/epp/domain/transfer/request_test.rb
@@ -48,7 +48,7 @@ class EppDomainTransferRequestTest < ApplicationIntegrationTest
def test_notifies_old_registrar
@old_registrar = @domain.registrar
- assert_difference -> { @old_registrar.messages.count } do
+ assert_difference -> { @old_registrar.notifications.count } do
post '/epp/command/transfer', { frame: request_xml }, { 'HTTP_COOKIE' => 'session=api_goodnames' }
end
end
diff --git a/test/integration/epp/poll_test.rb b/test/integration/epp/poll_test.rb
index acd75167d..884872720 100644
--- a/test/integration/epp/poll_test.rb
+++ b/test/integration/epp/poll_test.rb
@@ -1,9 +1,9 @@
require 'test_helper'
class EppPollTest < ApplicationIntegrationTest
- # Deliberately does not conform to RFC5730, which requires the first message to be returned
- def test_return_latest_message_when_queue_is_not_empty
- message = messages(:domain_deleted)
+ # Deliberately does not conform to RFC5730, which requires the first notification to be returned
+ def test_return_latest_notification_when_queue_is_not_empty
+ notification = notifications(:domain_deleted)
request_xml = <<-XML
@@ -19,16 +19,15 @@ class EppPollTest < ApplicationIntegrationTest
assert_equal 1301.to_s, response_xml.at_css('result')[:code]
assert_equal 1, response_xml.css('result').size
assert_equal 2.to_s, response_xml.at_css('msgQ')[:count]
- assert_equal message.id.to_s, response_xml.at_css('msgQ')[:id]
+ assert_equal notification.id.to_s, response_xml.at_css('msgQ')[:id]
assert_equal Time.zone.parse('2010-07-05').utc.xmlschema, response_xml.at_css('msgQ qDate').text
assert_equal 'Your domain has been deleted', response_xml.at_css('msgQ msg').text
end
- def test_no_messages_in_queue
- registrars(:bestnames).messages.delete_all(:delete_all)
+ def test_no_notifications
+ registrars(:bestnames).notifications.delete_all(:delete_all)
- request_xml =
- <<-XML
+ request_xml = <<-XML
@@ -37,55 +36,55 @@ class EppPollTest < ApplicationIntegrationTest
XML
post '/epp/command/poll', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
- response_xml = Nokogiri::XML(response.body)
- assert_equal 1300.to_s, response_xml.at_css('result')[:code]
- assert_equal 1, response_xml.css('result').size
+ xml_doc = Nokogiri::XML(response.body)
+ assert_equal 1300.to_s, xml_doc.at_css('result')[:code]
+ assert_equal 1, xml_doc.css('result').size
end
- def test_dequeue_message
- message = messages(:greeting)
+ def test_mark_as_read
+ notification = notifications(:greeting)
request_xml = <<-XML
-
+
XML
post '/epp/command/poll', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
- message.reload
- response_xml = Nokogiri::XML(response.body)
+ notification.reload
- assert_not message.queued?
- assert_equal 1000.to_s, response_xml.at_css('result')[:code]
- assert_equal 1, response_xml.css('result').size
- assert_equal 1.to_s, response_xml.at_css('msgQ')[:count]
- assert_equal message.id.to_s, response_xml.at_css('msgQ')[:id]
+ xml_doc = Nokogiri::XML(response.body)
+ assert notification.read?
+ assert_equal 1000.to_s, xml_doc.at_css('result')[:code]
+ assert_equal 1, xml_doc.css('result').size
+ assert_equal 1.to_s, xml_doc.at_css('msgQ')[:count]
+ assert_equal notification.id.to_s, xml_doc.at_css('msgQ')[:id]
end
- def test_message_of_other_registrars_cannot_be_dequeued
- message = messages(:farewell)
+ def test_notification_of_other_registrars_cannot_be_marked_as_read
+ notification = notifications(:farewell)
request_xml = <<-XML
-
+
XML
post '/epp/command/poll', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
- response_xml = Nokogiri::XML(response.body)
- message.reload
+ notification.reload
- assert message.queued?
- assert_equal 2303.to_s, response_xml.at_css('result')[:code]
+ xml_doc = Nokogiri::XML(response.body)
+ assert notification.unread?
+ assert_equal 2303.to_s, xml_doc.at_css('result')[:code]
end
- def test_message_not_found
+ def test_notification_not_found
request_xml = <<-XML
@@ -95,8 +94,8 @@ class EppPollTest < ApplicationIntegrationTest
XML
post '/epp/command/poll', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames'
- response_xml = Nokogiri::XML(response.body)
- assert_equal 2303.to_s, response_xml.at_css('result')[:code]
+ xml_doc = Nokogiri::XML(response.body)
+ assert_equal 2303.to_s, xml_doc.at_css('result')[:code]
end
end
\ No newline at end of file
diff --git a/test/jobs/domain_delete_confirm_job_test.rb b/test/jobs/domain_delete_confirm_job_test.rb
index 9127ca628..51af58c24 100644
--- a/test/jobs/domain_delete_confirm_job_test.rb
+++ b/test/jobs/domain_delete_confirm_job_test.rb
@@ -18,19 +18,19 @@ class DomainDeleteConfirmJobTest < ActiveSupport::TestCase
super
end
- def test_rejected_registrant_verification_polls_a_message
+ def test_rejected_registrant_verification_notifies_registrar
DomainDeleteConfirmJob.enqueue(@domain.id, RegistrantVerification::REJECTED)
- last_registrar_message = @domain.registrar.messages.last
- assert_equal(last_registrar_message.attached_obj_id, @domain.id)
- assert_equal(last_registrar_message.body, 'Registrant rejected domain deletion: shop.test')
+ last_registrar_notification = @domain.registrar.notifications.last
+ assert_equal(last_registrar_notification.attached_obj_id, @domain.id)
+ assert_equal(last_registrar_notification.text, 'Registrant rejected domain deletion: shop.test')
end
- def test_accepted_registrant_verification_polls_a_message
+ def test_accepted_registrant_verification_notifies_registrar
DomainDeleteConfirmJob.enqueue(@domain.id, RegistrantVerification::CONFIRMED)
- last_registrar_message = @domain.registrar.messages.last
- assert_equal(last_registrar_message.attached_obj_id, @domain.id)
- assert_equal(last_registrar_message.body, 'Registrant confirmed domain deletion: shop.test')
+ last_registrar_notification = @domain.registrar.notifications.last
+ assert_equal(last_registrar_notification.attached_obj_id, @domain.id)
+ assert_equal(last_registrar_notification.text, 'Registrant confirmed domain deletion: shop.test')
end
end
diff --git a/test/jobs/domain_update_confirm_job_test.rb b/test/jobs/domain_update_confirm_job_test.rb
index c507e2c98..070b5d5f7 100644
--- a/test/jobs/domain_update_confirm_job_test.rb
+++ b/test/jobs/domain_update_confirm_job_test.rb
@@ -18,19 +18,19 @@ class DomainUpdateConfirmJobTest < ActiveSupport::TestCase
super
end
- def test_rejected_registrant_verification_polls_a_message
+ def test_rejected_registrant_verification_notifies_registrar
DomainUpdateConfirmJob.enqueue(@domain.id, RegistrantVerification::REJECTED)
- last_registrar_message = @domain.registrar.messages.last
- assert_equal(last_registrar_message.attached_obj_id, @domain.id)
- assert_equal(last_registrar_message.body, 'Registrant rejected domain update: shop.test')
+ last_registrar_notification = @domain.registrar.notifications.last
+ assert_equal(last_registrar_notification.attached_obj_id, @domain.id)
+ assert_equal(last_registrar_notification.text, 'Registrant rejected domain update: shop.test')
end
- def test_accepted_registrant_verification_polls_a_message
+ def test_accepted_registrant_verification_notifies_registrar
DomainUpdateConfirmJob.enqueue(@domain.id, RegistrantVerification::CONFIRMED)
- last_registrar_message = @domain.registrar.messages.last
- assert_equal(last_registrar_message.attached_obj_id, @domain.id)
- assert_equal(last_registrar_message.body, 'Registrant confirmed domain update: shop.test')
+ last_registrar_notification = @domain.registrar.notifications.last
+ assert_equal(last_registrar_notification.attached_obj_id, @domain.id)
+ assert_equal(last_registrar_notification.text, 'Registrant confirmed domain update: shop.test')
end
end
diff --git a/test/learning/money_test.rb b/test/learning/money_test.rb
new file mode 100644
index 000000000..89fdeb917
--- /dev/null
+++ b/test/learning/money_test.rb
@@ -0,0 +1,8 @@
+require 'test_helper'
+
+class MoneyLearningTest < ActiveSupport::TestCase
+ def test_default_currency_is_euro
+ money = Money.from_amount(1)
+ assert_equal Money::Currency.new(:eur), money.currency
+ end
+end
\ No newline at end of file
diff --git a/test/models/domain_transfer_test.rb b/test/models/domain_transfer_test.rb
index 8c7494571..943fc2a0a 100644
--- a/test/models/domain_transfer_test.rb
+++ b/test/models/domain_transfer_test.rb
@@ -14,19 +14,19 @@ class DomainTransferTest < ActiveSupport::TestCase
def test_notifies_old_registrar_on_approval
old_registrar = @domain_transfer.old_registrar
- assert_difference -> { old_registrar.messages.count } do
+ assert_difference -> { old_registrar.notifications.count } do
@domain_transfer.approve
end
- body = 'Transfer of domain shop.test has been approved.' \
+ text = 'Transfer of domain shop.test has been approved.' \
' It was associated with registrant john-001' \
' and contacts acme-ltd-001, jane-001, william-001.'
id = @domain_transfer.id
class_name = @domain_transfer.class.name
- message = old_registrar.messages.last
- assert_equal body, message.body
- assert_equal id, message.attached_obj_id
- assert_equal class_name, message.attached_obj_type
+ notification = old_registrar.notifications.last
+ assert_equal text, notification.text
+ assert_equal id, notification.attached_obj_id
+ assert_equal class_name, notification.attached_obj_type
end
end
diff --git a/test/models/message_test.rb b/test/models/message_test.rb
deleted file mode 100644
index ba2203d8a..000000000
--- a/test/models/message_test.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require 'test_helper'
-
-class MessageTest < ActiveSupport::TestCase
- setup do
- @message = messages(:greeting)
- end
-
- def test_valid
- assert @message.valid?
- end
-
- def test_invalid_without_body
- @message.body = nil
- assert @message.invalid?
- end
-
- def test_invalid_without_registrar
- @message.registrar = nil
- assert @message.invalid?
- end
-
- def test_dequeue
- @message.dequeue
- @message.reload
- assert_not @message.queued?
- end
-end
\ No newline at end of file
diff --git a/test/models/notification_test.rb b/test/models/notification_test.rb
new file mode 100644
index 000000000..3db685e0c
--- /dev/null
+++ b/test/models/notification_test.rb
@@ -0,0 +1,42 @@
+require 'test_helper'
+
+class NotificationTest < ActiveSupport::TestCase
+ setup do
+ @notification = notifications(:greeting)
+ end
+
+ def test_valid
+ assert @notification.valid?
+ end
+
+ def test_invalid_without_text
+ @notification.text = ''
+ assert @notification.invalid?
+ end
+
+ def test_unread_by_default
+ notification = Notification.new(registrar: registrars(:bestnames), text: 'test')
+ assert notification.unread?
+
+ notification.save!
+ assert notification.unread?
+ end
+
+ def test_honor_given_read_state
+ notification = Notification.new(read: true)
+ assert notification.read?
+ end
+
+ def test_mark_as_read
+ @notification.mark_as_read
+ @notification.reload
+ assert @notification.read?
+ end
+
+ def test_read_notification_cannot_be_marked_as_read_again
+ @notification.mark_as_read
+ assert_raises do
+ @notification.mark_as_read
+ end
+ end
+end
\ No newline at end of file
diff --git a/test/system/admin_area/contacts_test.rb b/test/system/admin_area/contacts_test.rb
index c72004988..7ace0b7ec 100644
--- a/test/system/admin_area/contacts_test.rb
+++ b/test/system/admin_area/contacts_test.rb
@@ -20,6 +20,6 @@ class AdminContactsTest < ApplicationSystemTestCase
visit admin_contact_path(@contact)
assert_text('Street Main Street City New York Postcode 12345 ' \
- 'State New York Country United States of America')
+ 'State New York State Country United States of America')
end
end
diff --git a/test/system/admin_area/domains/force_delete_test.rb b/test/system/admin_area/domains/force_delete_test.rb
index 75835cf59..561e4d47a 100644
--- a/test/system/admin_area/domains/force_delete_test.rb
+++ b/test/system/admin_area/domains/force_delete_test.rb
@@ -22,7 +22,7 @@ class AdminAreaDomainForceDeleteTest < ApplicationSystemTestCase
end
def test_notifies_registrar
- assert_difference '@domain.registrar.messages.size' do
+ assert_difference '@domain.registrar.notifications.size' do
visit edit_admin_domain_url(@domain)
click_link_or_button 'Force delete domain'
end
diff --git a/test/system/admin_area/registrars/details_test.rb b/test/system/admin_area/registrars/details_test.rb
index 1dfb4b03a..c8eb27829 100644
--- a/test/system/admin_area/registrars/details_test.rb
+++ b/test/system/admin_area/registrars/details_test.rb
@@ -14,5 +14,6 @@ class AdminAreaRegistrarDetailsTest < ApplicationSystemTestCase
assert_text 'VAT number US12345'
assert_text 'VAT rate 5.0%'
assert_text 'Language English'
+ assert_text 'billing@bestnames.test'
end
end
diff --git a/test/system/registrant_area/contacts/details_test.rb b/test/system/registrant_area/contacts/details_test.rb
new file mode 100644
index 000000000..c63a7d58e
--- /dev/null
+++ b/test/system/registrant_area/contacts/details_test.rb
@@ -0,0 +1,35 @@
+require 'test_helper'
+
+class RegistrantAreaContactDetailsTest < ApplicationSystemTestCase
+ setup do
+ sign_in users(:registrant)
+ @contact = contacts(:john)
+
+ Setting.days_to_keep_business_registry_cache = 1
+ travel_to Time.zone.parse('2010-07-05')
+ end
+
+ def test_general_data
+ visit registrant_domain_contact_url(domains(:shop), @contact)
+ assert_text 'Code john-001'
+ assert_text 'Name John'
+
+ assert_text 'Auth info'
+ assert_css('[value="cacb5b"]')
+
+ assert_text 'Ident 1234'
+ assert_text 'Email john@inbox.test'
+ assert_text 'Phone +555.555'
+
+ assert_text "Created at #{l Time.zone.parse('2010-07-05')}"
+ assert_text "Updated at #{l Time.zone.parse('2010-07-06')}"
+ end
+
+ def test_registrant_user_cannot_access_contact_when_given_domain_belongs_to_another_user
+ suppress(ActionView::Template::Error) do
+ visit registrant_domain_contact_url(domains(:metro), @contact)
+ assert_response :not_found
+ assert_no_text 'Name John'
+ end
+ end
+end
\ No newline at end of file
diff --git a/test/system/registrant_area/domains/details_test.rb b/test/system/registrant_area/domains/details_test.rb
new file mode 100644
index 000000000..de3db7e7d
--- /dev/null
+++ b/test/system/registrant_area/domains/details_test.rb
@@ -0,0 +1,65 @@
+require 'test_helper'
+
+class RegistrantAreaDomainDetailsTest < ApplicationSystemTestCase
+ setup do
+ sign_in users(:registrant)
+ @domain = domains(:shop)
+
+ Setting.days_to_keep_business_registry_cache = 1
+ travel_to Time.zone.parse('2010-07-05')
+ end
+
+ def test_general_data
+ visit registrant_domain_url(@domain)
+ assert_text 'Name shop.test'
+ assert_text "Registered at #{l Time.zone.parse('2010-07-04')}"
+ assert_link 'Best Names', href: registrant_registrar_path(@domain.registrar)
+
+ assert_text 'Transfer code'
+ assert_css('[value="65078d5"]')
+
+ assert_text "Valid to #{l Time.zone.parse('2010-07-05')}"
+ assert_text "Outzone at #{l Time.zone.parse('2010-07-06')}"
+ assert_text "Delete at #{l Time.zone.parse('2010-07-07')}"
+ assert_text "Force delete at #{l Time.zone.parse('2010-07-08')}"
+ end
+
+ def test_registrant
+ visit registrant_domain_url(@domain)
+ assert_link 'John', href: registrant_domain_contact_path(@domain, @domain.registrant)
+ assert_text 'Code john-001'
+ assert_text 'Ident 1234'
+ assert_text 'Email john@inbox.test'
+ assert_text 'Phone +555.555'
+ end
+
+ def test_admin_contacts
+ visit registrant_domain_url(@domain)
+
+ within('.admin-domain-contacts') do
+ assert_link 'Jane', href: registrant_domain_contact_path(@domain, contacts(:jane))
+ assert_text 'jane-001'
+ assert_text 'jane@mail.test'
+ assert_css '.admin-domain-contact', count: 1
+ end
+ end
+
+ def test_tech_contacts
+ visit registrant_domain_url(@domain)
+
+ within('.tech-domain-contacts') do
+ assert_link 'William', href: registrant_domain_contact_path(@domain, contacts(:william))
+ assert_text 'william-001'
+ assert_text 'william@inbox.test'
+ assert_css '.tech-domain-contact', count: 2
+ end
+ end
+
+ def test_registrant_user_cannot_access_domains_of_other_users
+ suppress(ActiveRecord::RecordNotFound) do
+ visit registrant_domain_url(domains(:metro))
+ assert_response :not_found
+ assert_no_text 'metro.test'
+ end
+ end
+end
\ No newline at end of file
diff --git a/test/system/registrant_area/domains/list_test.rb b/test/system/registrant_area/domains/list_test.rb
new file mode 100644
index 000000000..592cb7021
--- /dev/null
+++ b/test/system/registrant_area/domains/list_test.rb
@@ -0,0 +1,25 @@
+require 'test_helper'
+
+class RegistrantAreaDomainListTest < ApplicationSystemTestCase
+ setup do
+ sign_in users(:registrant)
+ @domain = domains(:shop)
+
+ Setting.days_to_keep_business_registry_cache = 1
+ travel_to Time.zone.parse('2010-07-05')
+ end
+
+ def test_show_domain_list
+ visit registrant_domains_url
+ assert_link 'shop.test', href: registrant_domain_path(@domain)
+ assert_link 'John', href: registrant_domain_contact_path(@domain, @domain.registrant)
+ assert_link 'Best Names', href: registrant_registrar_path(@domain.registrar)
+ assert_text l(Time.zone.parse('2010-07-05'))
+ assert_css '.domains .domain', count: 4
+ end
+
+ def test_do_not_show_domains_of_other_registrant_users
+ visit registrant_domains_url
+ assert_no_text 'metro.test'
+ end
+end
\ No newline at end of file