Commit b4a1809

mokha <mokha@cisco.com>
2019-03-05 22:51:01
add specs for sending 1 or more emails.
1 parent fd225a2
lib/minbox/client.rb
@@ -60,7 +60,7 @@ module Minbox
     def ehlo(line)
       _ehlo, _client_domain = line.split(" ")
       write "250-#{host}"
-      write "250 AUTH PLAIN LOGIN"
+      #write "250 AUTH PLAIN LOGIN"
       write "250 OK"
     end
 
spec/minbox/server_spec.rb
@@ -1,42 +1,42 @@
-require 'net/smtp'
+require 'spec_helper'
 
 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
+    let(:port) { 8080 }
 
     context "when handling a simple client" do
-      let(:mail) do
+      def create_mail(to: Faker::Internet.email, from: Faker::Internet.email)
         Mail.new do
-          from 'Your Name <me@example.org>'
-          to 'Destination Address <them@example.com>'
+          from from
+          to to
           subject 'test message'
           body "#{Time.now} This is a test message."
         end
       end
 
-      specify do
-        Net::SMTP.start(host, port) do |smtp|
-          smtp.send_message(mail.to_s, 'me@example.org', 'them@example.com')
+      context "when sending a single email" do
+        let(:result) do
+          Net::SMTP.start(host, port) do |smtp|
+            smtp.send_message(create_mail.to_s, Faker::Internet.email, Faker::Internet.email)
+          end
+        end
+
+        specify { expect(result).to be_success }
+        specify { expect(result.status.to_i).to eql(250) }
+      end
+
+      context "when sending multiple emails" do
+        let(:n) { rand(10) }
+        let(:result) do
+          Net::SMTP.start(host, port) do |smtp|
+            n.times do
+              smtp.send_message(create_mail.to_s, Faker::Internet.email, Faker::Internet.email)
+            end
+          end
         end
+
+        specify { expect(result).to eql(n) }
       end
     end
   end
spec/spec_helper.rb
@@ -1,5 +1,8 @@
 require "bundler/setup"
 require "minbox"
+require 'net/smtp'
+require 'mail'
+require 'faker'
 
 RSpec.configure do |config|
   # Enable flags like --only-failures and --next-failure
Gemfile.lock
@@ -9,7 +9,12 @@ PATH
 GEM
   remote: https://rubygems.org/
   specs:
+    concurrent-ruby (1.1.4)
     diff-lcs (1.3)
+    faker (1.9.3)
+      i18n (>= 0.7)
+    i18n (1.6.0)
+      concurrent-ruby (~> 1.0)
     mail (2.7.1)
       mini_mime (>= 0.1.1)
     mini_mime (1.0.1)
@@ -35,6 +40,7 @@ PLATFORMS
 
 DEPENDENCIES
   bundler (~> 2.0)
+  faker (~> 1.9)
   minbox!
   rake (~> 10.0)
   rspec (~> 3.0)
minbox.gemspec
@@ -38,6 +38,7 @@ Gem::Specification.new do |spec|
   spec.add_dependency "redis", "~> 4.1"
   spec.add_dependency "thor", "~> 0.20"
   spec.add_development_dependency "bundler", "~> 2.0"
+  spec.add_development_dependency "faker", "~> 1.9"
   spec.add_development_dependency "rake", "~> 10.0"
   spec.add_development_dependency "rspec", "~> 3.0"
 end