Commit f145acd

mokha <mokha@cisco.com>
2019-03-03 19:32:58
attempt to write spec to send message to smtp server.
1 parent 0545189
Changed files (2)
lib
spec
lib/minbox/server.rb
@@ -10,17 +10,23 @@ module Minbox
 
     def listen!
       logger.debug("Starting server on port #{port}...")
-      server = TCPServer.new(port.to_i)
+      @server = TCPServer.new(port.to_i)
       logger.debug("Server started!")
+
       loop do
-        yield handle(server.accept)
+        yield handle(@server.accept)
       rescue StandardError => error
         logger.error(error)
       end
     end
 
     def handle(socket)
+      logger.debug("client connected: #{socket.inspect}")
       Client.new(host, socket).mail_message
     end
+
+    def shutdown!
+      @server&.close
+    end
   end
 end
spec/minbox/server_spec.rb
@@ -1,13 +1,42 @@
+require 'net/smtp'
+
 RSpec.describe Minbox::Server do
   subject { described_class.new }
 
   describe "#handle" do
+    let(:publisher) { ->(mail) { inbox << mail } }
+    let(:inbox) { [] }
+    let(:server) { described_class.new(host, port) }
+    let(:host) { 'localhost' }
+    let(:port) { (9000..9999).to_a.sample }
+
+    before :example do
+      server_thread = Thread.new do
+        server.listen! do |mail|
+          publisher.publish(mail)
+        end
+      end
+      server_thread.join(5)
+    end
+
+    after :example do
+      server.shutdown!
+    end
+
     context "when handling a simple client" do
-      let(:client) { StringIO.new }
+      let(:mail) do
+        Mail.new do
+          from 'Your Name <me@example.org>'
+          to 'Destination Address <them@example.com>'
+          subject 'test message'
+          body "#{Time.now} This is a test message."
+        end
+      end
 
       specify do
-        client.puts("EHLO localhost")
-        subject.handle(client)
+        Net::SMTP.start(host, port) do |smtp|
+          smtp.send_message(mail.to_s, 'me@example.org', 'them@example.com')
+        end
       end
     end
   end