مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-11-30 21:32:30 +00:00
test: add tests for message unqueueing
This adds a comprehensive set of tests for the message unqueueing service. Additionally, it improves how message databases are used for testing environments.
هذا الالتزام موجود في:
41
spec/helpers/message_db_mocking.rb
Normal file
41
spec/helpers/message_db_mocking.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module GlobalMessageDB
|
||||
|
||||
class << self
|
||||
|
||||
def find_or_create
|
||||
return @db if @db
|
||||
|
||||
@db = Postal::MessageDB::Database.new(1, 1, database_name: "postal-test-message-db")
|
||||
@db.provisioner.provision
|
||||
end
|
||||
|
||||
def exists?
|
||||
!@db.nil?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.before(:example) do
|
||||
@mocked_message_dbs = []
|
||||
allow_any_instance_of(Server).to receive(:message_db).and_wrap_original do |m|
|
||||
GlobalMessageDB.find_or_create
|
||||
|
||||
message_db = m.call
|
||||
@mocked_message_dbs << message_db
|
||||
allow(message_db).to receive(:database_name).and_return("postal-test-message-db")
|
||||
message_db
|
||||
end
|
||||
end
|
||||
|
||||
config.after(:example) do
|
||||
if GlobalMessageDB.exists? && @mocked_message_dbs.present?
|
||||
GlobalMessageDB.find_or_create.provisioner.clean
|
||||
@mocked_message_dbs = []
|
||||
end
|
||||
end
|
||||
end
|
||||
78
spec/helpers/message_factory.rb
Normal file
78
spec/helpers/message_factory.rb
Normal file
@@ -0,0 +1,78 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# This class can be used to generate a message which can be used for the purposes of
|
||||
# testing within the given server.
|
||||
class MessageFactory
|
||||
|
||||
def initialize(server)
|
||||
@server = server
|
||||
end
|
||||
|
||||
def incoming(route: nil, &block)
|
||||
@message = @server.message_db.new_message
|
||||
@message.scope = "incoming"
|
||||
@message.rcpt_to = "test@example.com"
|
||||
@message.mail_from = "john@example.com"
|
||||
|
||||
if route
|
||||
@message.rcpt_to = route.description
|
||||
@message.route_id = route.id
|
||||
end
|
||||
|
||||
create_message(&block)
|
||||
end
|
||||
|
||||
def outgoing(domain: nil, credential: nil, &block)
|
||||
@message = @server.message_db.new_message
|
||||
@message.scope = "outgoing"
|
||||
@message.rcpt_to = "john@example.com"
|
||||
@message.mail_from = "test@example.com"
|
||||
|
||||
if domain
|
||||
@message.mail_from = "test@#{domain.name}"
|
||||
@message.domain_id = domain.id
|
||||
end
|
||||
|
||||
if credential
|
||||
@message.credential_id = credential.id
|
||||
end
|
||||
|
||||
create_message(&block)
|
||||
end
|
||||
|
||||
class << self
|
||||
|
||||
def incoming(server, **kwargs, &block)
|
||||
new(server).incoming(**kwargs, &block)
|
||||
end
|
||||
|
||||
def outgoing(server, **kwargs, &block)
|
||||
new(server).outgoing(**kwargs, &block)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_message
|
||||
mail = create_mail(@message.rcpt_to, @message.mail_from)
|
||||
|
||||
if block_given?
|
||||
yield @message, mail
|
||||
end
|
||||
|
||||
@message.raw_message = mail.to_s
|
||||
@message.save(queue_on_create: false)
|
||||
@message
|
||||
end
|
||||
|
||||
def create_mail(to, from)
|
||||
mail = Mail.new
|
||||
mail.to = to
|
||||
mail.from = from
|
||||
mail.subject = "An example message"
|
||||
mail.body = "Hello world!"
|
||||
mail
|
||||
end
|
||||
|
||||
end
|
||||
المرجع في مشكلة جديدة
حظر مستخدم