mirror of
https://github.com/internetee/registry.git
synced 2025-06-09 06:04:56 +02:00
updated tests
This commit is contained in:
parent
ab26100e78
commit
a896e78e51
9 changed files with 75 additions and 28 deletions
|
@ -6,6 +6,11 @@ module Domains
|
||||||
DomainStatus::SERVER_RENEW_PROHIBITED,
|
DomainStatus::SERVER_RENEW_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
||||||
DomainStatus::CLIENT_HOLD]
|
DomainStatus::CLIENT_HOLD]
|
||||||
|
domain.force_delete_domain_statuses_history += [ DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
||||||
|
DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED,
|
||||||
|
DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
|
] if domain.locked_by_registrant?
|
||||||
|
domain.admin_store_statuses_history -= domain_statuses unless domain.admin_store_statuses_history.nil?
|
||||||
rejected_statuses = domain.statuses.reject { |a| domain_statuses.include? a }
|
rejected_statuses = domain.statuses.reject { |a| domain_statuses.include? a }
|
||||||
domain.statuses = rejected_statuses
|
domain.statuses = rejected_statuses
|
||||||
domain.save(validate: false)
|
domain.save(validate: false)
|
||||||
|
|
|
@ -2,9 +2,13 @@ module Domains
|
||||||
module CancelForceDelete
|
module CancelForceDelete
|
||||||
class RestoreStatusesBeforeForceDelete < Base
|
class RestoreStatusesBeforeForceDelete < Base
|
||||||
def execute
|
def execute
|
||||||
domain.statuses = domain.force_delete_domain_statuses_history || []
|
domain.statuses += domain.force_delete_domain_statuses_history || []
|
||||||
|
domain.statuses += domain.admin_store_statuses_history || []
|
||||||
|
domain.statuses.uniq!
|
||||||
|
|
||||||
domain.statuses_before_force_delete = nil
|
domain.statuses_before_force_delete = nil
|
||||||
domain.force_delete_domain_statuses_history = nil
|
domain.force_delete_domain_statuses_history = nil
|
||||||
|
domain.admin_store_statuses_history = nil
|
||||||
domain.save(validate: false)
|
domain.save(validate: false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,6 +23,7 @@ module Domain::RegistryLockable
|
||||||
end
|
end
|
||||||
|
|
||||||
def apply_statuses_locked_statuses(extensions_prohibited:)
|
def apply_statuses_locked_statuses(extensions_prohibited:)
|
||||||
|
self.admin_store_statuses_history = self.statuses
|
||||||
self.statuses |= LOCK_STATUSES
|
self.statuses |= LOCK_STATUSES
|
||||||
self.statuses |= EXTENSIONS_STATUS if Feature.obj_and_extensions_statuses_enabled? && extensions_prohibited
|
self.statuses |= EXTENSIONS_STATUS if Feature.obj_and_extensions_statuses_enabled? && extensions_prohibited
|
||||||
self.locked_by_registrant_at = Time.zone.now
|
self.locked_by_registrant_at = Time.zone.now
|
||||||
|
@ -53,6 +54,8 @@ module Domain::RegistryLockable
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_statuses_from_locked_domain
|
def remove_statuses_from_locked_domain
|
||||||
|
# binding.pry
|
||||||
|
# self.admin_store_statuses_history = self.statuses
|
||||||
LOCK_STATUSES.each do |domain_status|
|
LOCK_STATUSES.each do |domain_status|
|
||||||
statuses.delete([domain_status])
|
statuses.delete([domain_status])
|
||||||
end
|
end
|
||||||
|
|
|
@ -59,8 +59,8 @@ contact_org_enabled: 'false'
|
||||||
# System default for legal document types is: pdf,asice,sce,asics,scs,adoc,edoc,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx
|
# System default for legal document types is: pdf,asice,sce,asics,scs,adoc,edoc,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx
|
||||||
# legal_document_types: "pdf,asice,sce,asics,scs,adoc,edoc,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx"
|
# legal_document_types: "pdf,asice,sce,asics,scs,adoc,edoc,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx"
|
||||||
|
|
||||||
# obj_and_extensions_prohibited: 'true'
|
obj_and_extensions_prohibited: 'true'
|
||||||
# enable_lock_domain_with_new_statuses: 'true'
|
enable_lock_domain_with_new_statuses: 'true'
|
||||||
|
|
||||||
#
|
#
|
||||||
# REGISTRAR configuration (DEPP)
|
# REGISTRAR configuration (DEPP)
|
||||||
|
|
|
@ -18,7 +18,7 @@ class RegistrantApiRegistryLocksTest < ApplicationIntegrationTest
|
||||||
|
|
||||||
assert(response_json[:statuses].include?(DomainStatus::SERVER_DELETE_PROHIBITED))
|
assert(response_json[:statuses].include?(DomainStatus::SERVER_DELETE_PROHIBITED))
|
||||||
assert(response_json[:statuses].include?(DomainStatus::SERVER_TRANSFER_PROHIBITED))
|
assert(response_json[:statuses].include?(DomainStatus::SERVER_TRANSFER_PROHIBITED))
|
||||||
assert(response_json[:statuses].include?(DomainStatus::SERVER_UPDATE_PROHIBITED))
|
assert(response_json[:statuses].include?(DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED))
|
||||||
|
|
||||||
@domain.reload
|
@domain.reload
|
||||||
assert(@domain.locked_by_registrant?)
|
assert(@domain.locked_by_registrant?)
|
||||||
|
@ -115,7 +115,7 @@ class RegistrantApiRegistryLocksTest < ApplicationIntegrationTest
|
||||||
|
|
||||||
assert(response_json[:statuses].include?(DomainStatus::SERVER_DELETE_PROHIBITED))
|
assert(response_json[:statuses].include?(DomainStatus::SERVER_DELETE_PROHIBITED))
|
||||||
assert(response_json[:statuses].include?(DomainStatus::SERVER_TRANSFER_PROHIBITED))
|
assert(response_json[:statuses].include?(DomainStatus::SERVER_TRANSFER_PROHIBITED))
|
||||||
assert(response_json[:statuses].include?(DomainStatus::SERVER_UPDATE_PROHIBITED))
|
assert(response_json[:statuses].include?(DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED))
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_locking_domains_returns_serialized_domain_object
|
def test_locking_domains_returns_serialized_domain_object
|
||||||
|
|
|
@ -23,7 +23,7 @@ class ReplaceUpdToObjUpdProhibitedJobTest < ActiveSupport::TestCase
|
||||||
def test_start_adding_new_status_for_locked_domains
|
def test_start_adding_new_status_for_locked_domains
|
||||||
@domain.apply_registry_lock(extensions_prohibited: false)
|
@domain.apply_registry_lock(extensions_prohibited: false)
|
||||||
assert @domain.locked_by_registrant?
|
assert @domain.locked_by_registrant?
|
||||||
assert @domain.statuses.include? "serverUpdateProhibited"
|
assert @domain.statuses.include? "serverObjUpdateProhibited"
|
||||||
|
|
||||||
# @domain.statuses += ["serverObjUpdateProhibited"]
|
# @domain.statuses += ["serverObjUpdateProhibited"]
|
||||||
# @domain.save
|
# @domain.save
|
||||||
|
|
|
@ -30,23 +30,23 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
assert @domain.locked_by_registrant?
|
assert @domain.locked_by_registrant?
|
||||||
@domain.remove_registry_lock
|
@domain.remove_registry_lock
|
||||||
|
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_restore_domain_statuses_after_unlock
|
def test_restore_domain_statuses_after_unlock
|
||||||
@domain.statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED]
|
@domain.statuses = [DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED]
|
||||||
@domain.admin_store_statuses_history = [DomainStatus::SERVER_UPDATE_PROHIBITED]
|
@domain.admin_store_statuses_history = [DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED]
|
||||||
@domain.save
|
@domain.save
|
||||||
assert @domain.admin_store_statuses_history.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert @domain.admin_store_statuses_history.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
|
||||||
@domain.apply_registry_lock(extensions_prohibited: false)
|
@domain.apply_registry_lock(extensions_prohibited: false)
|
||||||
assert @domain.locked_by_registrant?
|
assert @domain.locked_by_registrant?
|
||||||
assert_equal @domain.statuses.sort, Domain::RegistryLockable::LOCK_STATUSES.sort
|
assert_equal @domain.statuses.sort, Domain::RegistryLockable::LOCK_STATUSES.sort
|
||||||
|
|
||||||
@domain.remove_registry_lock
|
@domain.remove_registry_lock
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
assert_not @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
assert_not @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
end
|
end
|
||||||
|
@ -62,7 +62,7 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
@domain.remove_registry_lock
|
@domain.remove_registry_lock
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
||||||
assert_not @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert_not @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
assert_not @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
assert_not @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
assert_not @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
end
|
end
|
||||||
|
@ -73,12 +73,12 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
check_statuses_lockable_domain
|
check_statuses_lockable_domain
|
||||||
assert(@domain.locked_by_registrant?)
|
assert(@domain.locked_by_registrant?)
|
||||||
|
|
||||||
statuses = @domain.statuses - [DomainStatus::SERVER_UPDATE_PROHIBITED]
|
statuses = @domain.statuses - [DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED]
|
||||||
@domain.update(statuses: statuses)
|
@domain.update(statuses: statuses)
|
||||||
|
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
assert_not @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert_not @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
|
||||||
assert_not(@domain.locked_by_registrant?)
|
assert_not(@domain.locked_by_registrant?)
|
||||||
end
|
end
|
||||||
|
@ -88,7 +88,7 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
@domain.apply_registry_lock(extensions_prohibited: false)
|
@domain.apply_registry_lock(extensions_prohibited: false)
|
||||||
|
|
||||||
assert_equal(
|
assert_equal(
|
||||||
[DomainStatus::SERVER_UPDATE_PROHIBITED,
|
[DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED,
|
||||||
DomainStatus::SERVER_DELETE_PROHIBITED,
|
DomainStatus::SERVER_DELETE_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED],
|
DomainStatus::SERVER_TRANSFER_PROHIBITED],
|
||||||
@domain.statuses
|
@domain.statuses
|
||||||
|
@ -116,7 +116,7 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
@domain.apply_registry_lock(extensions_prohibited: false)
|
@domain.apply_registry_lock(extensions_prohibited: false)
|
||||||
|
|
||||||
assert_equal(
|
assert_equal(
|
||||||
[DomainStatus::SERVER_UPDATE_PROHIBITED,
|
[DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED,
|
||||||
DomainStatus::SERVER_DELETE_PROHIBITED,
|
DomainStatus::SERVER_DELETE_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED],
|
DomainStatus::SERVER_TRANSFER_PROHIBITED],
|
||||||
@domain.statuses
|
@domain.statuses
|
||||||
|
@ -139,7 +139,7 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_registry_lock_cannot_be_removed_if_statuses_were_set_by_admin
|
def test_registry_lock_cannot_be_removed_if_statuses_were_set_by_admin
|
||||||
@domain.statuses << DomainStatus::SERVER_UPDATE_PROHIBITED
|
@domain.statuses << DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
@domain.statuses << DomainStatus::SERVER_DELETE_PROHIBITED
|
@domain.statuses << DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
@domain.statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED
|
@domain.statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
|
|
||||||
|
@ -152,11 +152,17 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
assert @domain.force_delete_scheduled?
|
assert @domain.force_delete_scheduled?
|
||||||
|
|
||||||
assert @domain.apply_registry_lock
|
assert @domain.statuses.include? DomainStatus::FORCE_DELETE
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
|
|
||||||
|
assert @domain.apply_registry_lock(extensions_prohibited: false)
|
||||||
|
|
||||||
|
assert @domain.statuses.include? DomainStatus::FORCE_DELETE
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
||||||
|
|
||||||
@domain.remove_registry_lock
|
@domain.remove_registry_lock
|
||||||
|
|
||||||
|
@ -165,8 +171,37 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_set_force_delete_for_locked_domain
|
def test_set_lock_for_domain_with_fd_status_and_remov_fd
|
||||||
assert @domain.apply_registry_lock
|
@domain.schedule_force_delete(type: :soft)
|
||||||
|
@domain.reload
|
||||||
|
|
||||||
|
assert @domain.force_delete_scheduled?
|
||||||
|
|
||||||
|
assert @domain.statuses.include? DomainStatus::FORCE_DELETE
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
|
|
||||||
|
assert @domain.apply_registry_lock(extensions_prohibited: false)
|
||||||
|
|
||||||
|
assert @domain.statuses.include? DomainStatus::FORCE_DELETE
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
||||||
|
|
||||||
|
@domain.cancel_force_delete
|
||||||
|
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_set_force_delete_for_locked_domain__and_remove_fc
|
||||||
|
assert @domain.apply_registry_lock(extensions_prohibited: false)
|
||||||
|
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
|
|
||||||
@domain.schedule_force_delete(type: :soft)
|
@domain.schedule_force_delete(type: :soft)
|
||||||
@domain.reload
|
@domain.reload
|
||||||
|
@ -176,19 +211,19 @@ class DomainRegistryLockableTest < ActiveSupport::TestCase
|
||||||
assert @domain.statuses.include? DomainStatus::FORCE_DELETE
|
assert @domain.statuses.include? DomainStatus::FORCE_DELETE
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_RENEW_PROHIBITED
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
|
||||||
@domain.cancel_force_delete
|
@domain.cancel_force_delete
|
||||||
|
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_TRANSFER_PROHIBITED
|
||||||
assert @domain.statuses.include? DomainStatus::SERVER_UPDATE_PROHIBITED
|
assert @domain.statuses.include? DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED
|
||||||
|
assert @domain.statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def check_statuses_lockable_domain
|
def check_statuses_lockable_domain
|
||||||
lock_statuses = [DomainStatus::SERVER_UPDATE_PROHIBITED,
|
lock_statuses = [DomainStatus::SERVER_OBJ_UPDATE_PROHIBITED,
|
||||||
DomainStatus::SERVER_DELETE_PROHIBITED,
|
DomainStatus::SERVER_DELETE_PROHIBITED,
|
||||||
DomainStatus::SERVER_TRANSFER_PROHIBITED]
|
DomainStatus::SERVER_TRANSFER_PROHIBITED]
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class FeatureTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
assert_not Feature.enable_lock_domain_with_new_statuses?
|
assert_not Feature.enable_lock_domain_with_new_statuses?
|
||||||
|
|
||||||
assert_equal @domain.statuses, ["serverUpdateProhibited", "serverDeleteProhibited", "serverTransferProhibited"]
|
assert_equal @domain.statuses, ["serverObjUpdateProhibited", "serverDeleteProhibited", "serverTransferProhibited"]
|
||||||
assert @domain.locked_by_registrant?
|
assert @domain.locked_by_registrant?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class FeatureTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
assert_not Feature.enable_lock_domain_with_new_statuses?
|
assert_not Feature.enable_lock_domain_with_new_statuses?
|
||||||
|
|
||||||
assert_equal @domain.statuses, ["serverUpdateProhibited", "serverDeleteProhibited", "serverTransferProhibited"]
|
assert_equal @domain.statuses, ["serverObjUpdateProhibited", "serverDeleteProhibited", "serverTransferProhibited"]
|
||||||
assert @domain.locked_by_registrant?
|
assert @domain.locked_by_registrant?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue