Skip to content

Commit 25d75d4

Browse files
committed
🧪 Add Net::IMAP::FakeServer::TestHelper
This simplifies using Net::IMAP::FakeServer in multiple test suites.
1 parent 24c5f0f commit 25d75d4

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

test/net/imap/fake_server.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class Net::IMAP::FakeServer
4242
autoload :ResponseWriter, "#{dir}/response_writer"
4343
autoload :Socket, "#{dir}/socket"
4444
autoload :Session, "#{dir}/session"
45+
autoload :TestHelper, "#{dir}/test_helper"
4546

4647
# Returns the server's FakeServer::Configuration
4748
attr_reader :config
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
require_relative "../fake_server"
4+
5+
module Net::IMAP::FakeServer::TestHelper
6+
7+
def with_fake_server(select: nil, timeout: 5, **opts)
8+
Timeout.timeout(timeout) do
9+
server = Net::IMAP::FakeServer.new(timeout: timeout, **opts)
10+
@threads << Thread.new do server.run end if @threads
11+
tls = opts[:implicit_tls]
12+
tls = {ca_file: server.config.tls[:ca_file]} if tls == true
13+
client = Net::IMAP.new("localhost", port: server.port, ssl: tls)
14+
begin
15+
if select
16+
client.select(select)
17+
server.commands.pop
18+
end
19+
yield server, client
20+
ensure
21+
client.logout rescue pp $!
22+
client.disconnect if !client.disconnected?
23+
end
24+
ensure
25+
server&.shutdown
26+
end
27+
end
28+
29+
end

0 commit comments

Comments
 (0)