Add more tests, undo some changes to fixture files

Was causing Email::Reciever tests to fail
This commit is contained in:
riking 2014-08-01 12:40:28 -07:00
parent 0faea8ee0b
commit 63cdde3d96
7 changed files with 322 additions and 101 deletions

View File

@ -67,6 +67,19 @@ module Email
end end
end end
def is_in_email?
@allow_strangers = false
return false unless SiteSetting.email_in
category = Category.find_by_email(@message.to.first)
return false unless category
@category_id = category.id
@allow_strangers = category.email_in_allow_strangers
true
end
private private
def parse_body def parse_body
@ -135,19 +148,6 @@ module Email
@body.strip! @body.strip!
end end
def is_in_email?
@allow_strangers = false
return false unless SiteSetting.email_in
category = Category.find_by_email(@message.to.first)
return false unless category
@category_id = category.id
@allow_strangers = category.email_in_allow_strangers
true
end
def wrap_body_in_quote def wrap_body_in_quote
@body = "[quote=\"#{@message.from.first}\"] @body = "[quote=\"#{@message.from.first}\"]
#{@body} #{@body}

160
spec/fixtures/emails/bottom_reply.eml vendored Normal file
View File

@ -0,0 +1,160 @@
Received: by 10.107.19.29 with SMTP id b29csp111716ioj;
Wed, 30 Jul 2014 17:52:05 -0700 (PDT)
X-Received: by 10.194.238.6 with SMTP id vg6mr11340975wjc.24.1406767925330;
Wed, 30 Jul 2014 17:52:05 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1])
by bendel.debian.org (Postfix) with QMQP
id 18F5C417; Thu, 31 Jul 2014 00:52:04 +0000 (UTC)
Old-Return-Path: <vorlon@debian.org>
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on bendel.debian.org
X-Spam-Level:
X-Spam-Status: No, score=-25.9 required=4.0 tests=FOURLA,LDOSUBSCRIBER,
LDO_WHITELIST,MURPHY_DEBIAN_MESSAGE,PGPSIGNATURE autolearn=unavailable
version=3.3.2
X-Original-To: lists-debian-ctte@bendel.debian.org
Delivered-To: lists-debian-ctte@bendel.debian.org
Received: from localhost (localhost [127.0.0.1])
by bendel.debian.org (Postfix) with ESMTP id CE6CDEE
for <lists-debian-ctte@bendel.debian.org>; Thu, 31 Jul 2014 00:51:52 +0000 (UTC)
X-Virus-Scanned: at lists.debian.org with policy bank en-lt
X-Amavis-Spam-Status: No, score=-11.9 tagged_above=-10000 required=5.3
tests=[BAYES_00=-2, FOURLA=0.1, LDO_WHITELIST=-5, PGPSIGNATURE=-5]
autolearn=ham
Received: from bendel.debian.org ([127.0.0.1])
by localhost (lists.debian.org [127.0.0.1]) (amavisd-new, port 2525)
with ESMTP id SB451DwGZCOe for <lists-debian-ctte@bendel.debian.org>;
Thu, 31 Jul 2014 00:51:47 +0000 (UTC)
X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_EQ_HELO_IP=-2 (check from: .debian. - helo: .becquer.dodds. - helo-domain: .dodds.) FROM/MX_MATCHES_NOT_HELO(DOMAIN)=0; rate: -5
Received: from becquer.dodds.net (becquer.dodds.net [207.224.24.209])
by bendel.debian.org (Postfix) with ESMTP id 8E89A2B4
for <debian-ctte@lists.debian.org>; Thu, 31 Jul 2014 00:51:47 +0000 (UTC)
Received: from virgil.dodds.net (unknown [192.168.15.59])
by becquer.dodds.net (Postfix) with ESMTPA id 9B0A9256EB
for <debian-ctte@lists.debian.org>; Wed, 30 Jul 2014 17:51:19 -0700 (PDT)
Received: by virgil.dodds.net (Postfix, from userid 1000)
id 942FB60199; Wed, 30 Jul 2014 17:51:15 -0700 (PDT)
Date: Wed, 30 Jul 2014 17:51:15 -0700
From: Jake <jake@adventuretime.ooo>
To: incoming+amazing@appmail.adventuretime.ooo
Subject: Re: Next Debian CTTE IRC Meeting at date -d'Thu Jul 31 17:00:00 UTC
2014'
Message-ID: <20140731005115.GA19044@virgil.dodds.net>
Mail-Followup-To: debian-ctte@lists.debian.org
References: <20140730213924.GA12356@teltox.donarmstrong.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="qMm9M+Fa2AknHoGS"
Content-Disposition: inline
In-Reply-To: <20140730213924.GA12356@teltox.donarmstrong.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Debian-Message: Signature check passed for Debian member
X-Rc-Virus: 2007-09-13_01
X-Rc-Spam: 2008-11-04_01
Resent-Message-ID: <c_LGA2C2wUK.A.URD.zMZ2TB@bendel>
Resent-From: debian-ctte@lists.debian.org
X-Mailing-List: <debian-ctte@lists.debian.org> archive/latest/4791
X-Loop: debian-ctte@lists.debian.org
List-Id: <debian-ctte.lists.debian.org>
List-Post: <mailto:debian-ctte@lists.debian.org>
List-Help: <mailto:debian-ctte-request@lists.debian.org?subject=help>
List-Subscribe: <mailto:debian-ctte-request@lists.debian.org?subject=subscribe>
List-Unsubscribe: <mailto:debian-ctte-request@lists.debian.org?subject=unsubscribe>
Precedence: list
Resent-Sender: debian-ctte-request@lists.debian.org
Resent-Date: Thu, 31 Jul 2014 00:52:04 +0000 (UTC)
--qMm9M+Fa2AknHoGS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, Jul 30, 2014 at 02:39:24PM -0700, Don Armstrong wrote:
> The next Debian CTTE IRC meeting is at=20
> date -d 'Thu Jul 31 17:00:00 UTC 2014' on irc.debian.org in
> #debian-ctte.
> The current meeting agenda is here, and more up-to-date ones may be
> found in the git repository.
> #startmeeting
> #topic Who is here?
> #topic Next Meeting?
> #topic #717076 Decide between libjpeg-turbo and libjpeg8 et al.
This has been voted on; should probably be removed from the agenda, someone
just needs to confirm the vote results and get it on the website. (AIUI the
archive has already begun moving on accordingly.)
> #topic #636783 constitution: super-majority bug
> #topic #636783 constitution: casting vote
> #topic #636783 constitution: minimum discussion period
> #topic #636783 constitution: TC member retirement/rollover
> #topic #636783 constitution: TC chair retirement/rollover
> #topic #681419 Depends: foo | foo-nonfree
> #topic #741573 menu systems and mime-support
> #topic #746715 init system fallout
Also voted and just needs to be confirmed.
> #topic #750135 Maintainer of aptitude package
>=20
> #topic #752400 Advice on util-linux
This has been closed by mutual agreement of the people involved and doesn't
require any action from the TC. Removed from the agenda.
There's also bug #744246, which was assigned to the TC at my request but
without any preamble so it may have escaped notice. However, that situation
has been evolving constructively among the related parties (apparently, an
informal comment from a member of the release team was mistaken for a
release team position, so that's now being revisited), so I don't believe
this is anything we need to put on the agenda for tomorrow despite being on
the open bug list.
--=20
Steve Langasek Give me a lever long enough and a Free OS
Debian Developer to set it on, and I can move the world.
Ubuntu Developer http://www.debian.org/
slangasek@ubuntu.com vorlon@debian.org
--qMm9M+Fa2AknHoGS
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAEBCAAGBQJT2ZMDAAoJEFaNMPMhshM9GLsP/244S3wtYZEeVgJWIdB5PE0A
sZVezEA692y++/0oVZVecwV67yBOyfSjPPetdAph2UDMRtfurwxfj2BkbOFA2+Y6
++MErbmC3V7IGpd/L/fFGdXgvMQT2MNBpw0fnMA7bLpNjCvoj+Hr1HXRUcWoJSlj
WmHWwWSTVRcHg8a3iWYJzY6XfLyEEgHlahrlKvJExsTx/9mc1qg7g8KGdnhzHFBl
ttdH2fxpAk/624dReCcw5RKmOLfZ1HsEl9XcVe1cb4K+MDaQiXmoEK5v3xaNz1tS
NK5v2D5gDs229zoxKzQnnzOPLHxqI5E0L9PpI/mu4T9z7H2bHR3U5BvhnT99t5uw
ydf2cZNGY0uFCV3Rvn07BfAIW5WSXhOfN/5IymRKmdhjsTiwZ/wFjFrK8tVjtERu
yeyA7RIYiblGCEKYIYLWSxhoXeEdmAdfp6EA2/IA1CpgMB+ZdSfaeMgFY7xosgmG
ax3NTnaKyhr1QEUJ2gjAwHnKjuGbRVDAinYrSvP0o8Bh9sAs2BN2negWBCZVwwkN
S9hWTjVqsBmpaPOt5SEDwDo9O9dfzkmaamDsxOuUEz9F7v5jYg0mxA/WbogGty9R
vOMKxdxRkzflL/CferVbkzL/EkZRDfWDp9SleZggrpz7miiNDbS7jdRzJ4EttmJ8
gHBAVrOzcnbIPOIkk9pw
=KXIu
-----END PGP SIGNATURE-----
--qMm9M+Fa2AknHoGS--
--
To UNSUBSCRIBE, email to debian-ctte-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: https://lists.debian.org/20140731005115.GA19044@virgil.dodds.net

21
spec/fixtures/emails/empty.eml vendored Normal file
View File

@ -0,0 +1,21 @@
Return-Path: <jake@adventuretime.ooo>
Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; Thu, 13 Jun 2013 17:03:50 -0400
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; Thu, 13 Jun 2013 14:03:48 -0700
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
Date: Thu, 13 Jun 2013 17:03:48 -0400
From: Jake the Dog <jake@adventuretime.ooo>
To: reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
Subject: re: [Discourse Meta] eviltrout posted in 'Adventure Time Sux'
Mime-Version: 1.0
Content-Type: text/plain;
charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
X-Sieve: CMU Sieve 2.2
X-Received: by 10.0.0.1 with SMTP id n7mr11234144ipb.85.1371157428600; Thu,
13 Jun 2013 14:03:48 -0700 (PDT)
X-Scanned-By: MIMEDefang 2.69 on IPv6:2001:470:1d:165::1

View File

@ -4,8 +4,8 @@ Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <TO>; Thu, 13 Jun 2013 14:03:48 -0700 Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <TO>; Thu, 13 Jun 2013 14:03:48 -0700
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700 Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
Date: Thu, 13 Jun 2013 17:03:48 -0400 Date: Thu, 13 Jun 2013 17:03:48 -0400
From: Jake the Dog <jake@email.example.com> From: Jake the Dog <FROM>
To: Foo Discourse <incoming+amazing@discourse.example.com> To: <TO>
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com> Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
Subject: We should have a post-by-email-feature. Subject: We should have a post-by-email-feature.
Mime-Version: 1.0 Mime-Version: 1.0

View File

@ -4,8 +4,8 @@ Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700 Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700 Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
Date: Thu, 13 Jun 2013 17:03:48 -0400 Date: Thu, 13 Jun 2013 17:03:48 -0400
From: Jake the Dog <jake@email.example.com> From: Jake the Dog <jake@adventuretime.ooo>
To: reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com To: reply+59d8df8370b7e95c5a49fbf86aeb2c93@appmail.adventuretime.ooo
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com> Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
Subject: re: [Discourse Meta] eviltrout posted in 'Adventure Time Sux' Subject: re: [Discourse Meta] eviltrout posted in 'Adventure Time Sux'
Mime-Version: 1.0 Mime-Version: 1.0

View File

@ -0,0 +1,40 @@
Return-Path: <jake@adventuretime.ooo>
Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; Thu, 13 Jun 2013 17:03:50 -0400
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; Thu, 13 Jun 2013 14:03:48 -0700
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
Date: Thu, 13 Jun 2013 17:03:48 -0400
From: Jake the Dog <jake@adventuretime.ooo>
To: reply+QQd8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
Subject: re: [Discourse Meta] eviltrout posted in 'Adventure Time Sux'
Mime-Version: 1.0
Content-Type: text/plain;
charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
X-Sieve: CMU Sieve 2.2
X-Received: by 10.0.0.1 with SMTP id n7mr11234144ipb.85.1371157428600; Thu,
13 Jun 2013 14:03:48 -0700 (PDT)
X-Scanned-By: MIMEDefang 2.69 on IPv6:2001:470:1d:165::1
I could not disagree more. I am obviously biased but adventure time is the
greatest show ever created. Everyone should watch it.
- Jake out
On Sun, Jun 9, 2013 at 1:39 PM, eviltrout via Discourse Meta
<reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com> wrote:
>
>
>
> eviltrout posted in 'Adventure Time Sux' on Discourse Meta:
>
> ---
> hey guys everyone knows adventure time sucks!
>
> ---
> Please visit this link to respond: http://localhost:3000/t/adventure-time-sux/1234/3
>
> To unsubscribe from these emails, visit your [user preferences](http://localhost:3000/user_preferences).
>

View File

@ -64,7 +64,11 @@ describe Jobs::PollMailbox do
end end
def expect_success def expect_success
Jobs::PollMailbox.expects(:handle_failure).never poller.expects(:handle_failure).never
end
def expect_exception(clazz)
poller.expects(:handle_failure).with(anything, instance_of(clazz))
end end
describe "processing emails" do describe "processing emails" do
@ -73,30 +77,65 @@ describe Jobs::PollMailbox do
before do before do
SiteSetting.email_in = true SiteSetting.email_in = true
SiteSetting.reply_by_email_address = 'reply+%{reply_key}@discourse.example.com' SiteSetting.reply_by_email_address = "reply+%{reply_key}@appmail.adventuretime.ooo"
category.email_in = 'incoming+amazing@discourse.example.com' category.email_in = 'incoming+amazing@appmail.adventuretime.ooo'
category.save category.save
user.change_trust_level! :regular user.change_trust_level! :regular
user.username = 'Jake' user.username = 'Jake'
user.email = 'jake@email.example.com' user.email = 'jake@adventuretime.ooo'
user.save user.save
end end
describe "a valid incoming email" do describe "a valid incoming email" do
let(:email) { MockPop3EmailObject.new fixture_file('emails/valid_incoming.eml')} let(:email) {
# this string replacing is kinda dumb
str = fixture_file('emails/valid_incoming.eml')
str = str.gsub("FROM", 'jake@adventuretime.ooo').gsub("TO", 'incoming+amazing@appmail.adventuretime.ooo')
MockPop3EmailObject.new str
}
let(:expected_post) { fixture_file('emails/valid_incoming.cooked') } let(:expected_post) { fixture_file('emails/valid_incoming.cooked') }
it "posts a new topic" do it "posts a new topic with the correct content" do
expect_success expect_success
poller.handle_mail(email) poller.handle_mail(email)
topic = Topic.where(category: category).where.not(id: category.topic_id).first topic = Topic.where(category: category).where.not(id: category.topic_id).last
assert topic.present? topic.should be_present
post = topic.posts.first topic.title.should == "We should have a post-by-email-feature"
assert_equal expected_post.strip, post.cooked.strip
assert email.deleted? post = topic.posts.first
post.cooked.strip.should == expected_post.strip
email.should be_deleted
end
describe "with insufficient trust" do
before do
user.change_trust_level! :newuser
end
it "raises a UserNotSufficientTrustLevelError" do
expect_exception Email::Receiver::UserNotSufficientTrustLevelError
poller.handle_mail(email)
end
it "posts the topic if allow_strangers is true" do
begin
category.email_in_allow_strangers = true
category.save
expect_success
poller.handle_mail(email)
topic = Topic.where(category: category).where.not(id: category.topic_id).last
topic.should be_present
topic.title.should == "We should have a post-by-email-feature"
ensure
category.email_in_allow_strangers = false
category.save
end
end
end end
end end
@ -125,86 +164,47 @@ describe Jobs::PollMailbox do
assert new_post.present? assert new_post.present?
assert_equal expected_post.strip, new_post.cooked.strip assert_equal expected_post.strip, new_post.cooked.strip
assert email.deleted? email.should be_deleted
end
end end
describe "without an email log" do describe "with the wrong reply key" do
let(:email) { MockPop3EmailObject.new fixture_file('emails/valid_reply.eml')} let(:email) { MockPop3EmailObject.new fixture_file('emails/wrong_reply_key.eml')}
it "handles an EmailLogNotFound error" do it "raises an EmailLogNotFound error" do
poller.expects(:handle_failure).with { |mail_string, ex| ex.is_a? Email::Receiver::EmailLogNotFound } expect_exception Email::Receiver::EmailLogNotFound
poller.handle_mail(email) poller.handle_mail(email)
assert email.deleted? email.should be_deleted
end end
end end
end end
describe "processing email A" do describe "in failure conditions" do
let!(:receiver) { mock } it "a valid reply without an email log raises an EmailLogNotFound error" do
let!(:email_string) { fixture_file("emails/valid_incoming.eml") } email = MockPop3EmailObject.new fixture_file('emails/valid_reply.eml')
let!(:email) { mock } expect_exception Email::Receiver::EmailLogNotFound
before do
email.stubs(:pop).returns(email_string)
Email::Receiver.expects(:new).with(email_string).returns(receiver)
end
describe "all goes fine" do
it "email gets deleted" do
receiver.expects(:process)
email.expects(:delete)
poller.handle_mail(email) poller.handle_mail(email)
end email.should be_deleted
end end
describe "raises Untrusted error" do it "a no content reply raises an EmailUnparsableError" do
email = MockPop3EmailObject.new fixture_file('emails/no_content_reply.eml')
it "sends a reply and deletes the email" do expect_exception Email::Receiver::EmailUnparsableError
receiver.expects(:process).raises(Email::Receiver::UserNotSufficientTrustLevelError)
email.expects(:delete)
message = Mail::Message.new(email_string)
Mail::Message.expects(:new).with(email_string).returns(message)
client_message = mock
sender_object = mock
RejectionMailer.expects(:send_rejection).with(
message.from, message.body, message.subject, message.to, :email_reject_trust_level
).returns(client_message)
Email::Sender.expects(:new).with(client_message, :email_reject_trust_level).returns(sender_object)
sender_object.expects(:send)
poller.handle_mail(email) poller.handle_mail(email)
end email.should be_deleted
end end
describe "raises error" do it "a fully empty email raises an EmptyEmailError" do
email = MockPop3EmailObject.new fixture_file('emails/empty.eml')
[ Email::Receiver::ProcessingError, expect_exception Email::Receiver::EmptyEmailError
Email::Receiver::EmailUnparsableError,
Email::Receiver::EmptyEmailError,
Email::Receiver::UserNotFoundError,
Email::Receiver::EmailLogNotFound,
ActiveRecord::Rollback,
TypeError
].each do |exception|
it "deletes email on #{exception}" do
receiver.expects(:process).raises(exception)
email.expects(:delete)
Discourse.stubs(:handle_exception)
poller.handle_mail(email) poller.handle_mail(email)
email.should be_deleted
end end
end
end end
end end