1
0
مراية لـ 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.
هذا الالتزام موجود في:
Adam Cooke
2024-02-19 22:27:22 +00:00
ملتزم من قبل Adam Cooke
الأصل 465f4d8247
التزام b4016f6b49
21 ملفات معدلة مع 1658 إضافات و84 حذوفات

عرض الملف

@@ -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

عرض الملف

@@ -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