From 3e01a1075855b8e69357e59e5c30b4c39ef59def Mon Sep 17 00:00:00 2001 From: EthanBlackburn Date: Fri, 31 Jul 2015 08:23:03 -0700 Subject: [PATCH] Fixed bug where items in sent folder have "invalid date" --- .../message-list/lib/message-item.cjsx | 2 +- spec-nylas/stores/event-store-spec.coffee | 1 + spec-nylas/utils-spec.coffee | 135 ++++++++++++++++++ src/flux/models/utils.coffee | 6 +- src/flux/stores/event-store.coffee | 1 + 5 files changed, 142 insertions(+), 3 deletions(-) diff --git a/internal_packages/message-list/lib/message-item.cjsx b/internal_packages/message-list/lib/message-item.cjsx index c91e42796..571cfd104 100644 --- a/internal_packages/message-list/lib/message-item.cjsx +++ b/internal_packages/message-list/lib/message-item.cjsx @@ -153,7 +153,7 @@ class MessageItem extends React.Component _renderEvents: => events = @_eventComponents() - if events.length > 0 and Utils.looksLikeGmailInvite(@props.message) + if events.length > 0 and not Utils.looksLikeGmailInvite(@props.message)
{events}
else
diff --git a/spec-nylas/stores/event-store-spec.coffee b/spec-nylas/stores/event-store-spec.coffee index b2f5a47cb..42f61dcaf 100644 --- a/spec-nylas/stores/event-store-spec.coffee +++ b/spec-nylas/stores/event-store-spec.coffee @@ -19,6 +19,7 @@ describe "EventStore", -> it "initializes the cache from the DB", -> spyOn(DatabaseStore, "findAll").andCallFake -> Promise.resolve([]) + advanceClock(30) EventStore.constructor() advanceClock(30) expect(Object.keys(EventStore._eventCache).length).toBe 0 diff --git a/spec-nylas/utils-spec.coffee b/spec-nylas/utils-spec.coffee index 9909d23a4..300ae6918 100644 --- a/spec-nylas/utils-spec.coffee +++ b/spec-nylas/utils-spec.coffee @@ -348,6 +348,141 @@ describe "isEqual", -> other = {a: 1} ok(!Utils.isEqual(new Foo, other)) +describe "looksLikeGmailInvite", -> + it "should return false for an exchange invite", -> + message = { + body: """ + + + + +
+ + + + + + + + + +
+ +
+ + + + +

+ (No Subject)

+ + + + + + + + + + + + + + + +
+
When
+
+ Thu Jul 30, 2015 10pm – 11pm + GMT (no daylight saving)
+
Calendar
+
+ ethan@nylas.com
+
Who
+
+ + + + + + + + + + + +
+ +
+
Ethan Blackburn + + - organizer
+
+
+ +
+
ethan@nylas.com + +
+
+
+
+
+

Going? + + + + - + + + - + + +

+
+

Invitation from + Google Calendar

+

You are receiving this email at the account ethan@nylas.com because you are subscribed for invitations on calendar ethan@nylas.com.

+

To stop receiving these emails, please log in to https://www.google.com/calendar/ and change your notification settings for this calendar.

+

Forwarding this invitation could allow any recipient to modify your RSVP response. + Learn More.

+
+
+ + """ + } + + expect(Utils.looksLikeGmailInvite(message)).toEqual(true) + + it "should return true for a gmail invite", -> + message = { + body: """ + + + + +
+
+
+ Begin forwarded message:
+
+ From: Originator <originator@nylas.com>
+ Subject: <> Nylas E-mail Call and Webhooks review
+ Date: Jul 28 2015, at 2:32 pm
+ To: random@guy.com <random@guy.com>, Someone Else <someone@else.com> +
+
+ +
+ Call to review Pipeline Deals email tool and webhooks support.
+
+ + """ + } + describe "subjectWithPrefix", -> it "should replace an existing Re:", -> expect(Utils.subjectWithPrefix("Re: Test Case", "Fwd:")).toEqual("Fwd: Test Case") diff --git a/src/flux/models/utils.coffee b/src/flux/models/utils.coffee index dcd3a6db8..48616d2bf 100644 --- a/src/flux/models/utils.coffee +++ b/src/flux/models/utils.coffee @@ -67,8 +67,10 @@ Utils = looksLikeGmailInvite: (message={}) -> - if 'PRODID:-//Google Inc//Google Calendar' in message.body - return true + idx = message.body.search('itemtype="http://schema.org/Event"') + if idx == -1 + return false + return true # Escapes potentially dangerous html characters diff --git a/src/flux/stores/event-store.coffee b/src/flux/stores/event-store.coffee index d7fede0b6..c031f5250 100644 --- a/src/flux/stores/event-store.coffee +++ b/src/flux/stores/event-store.coffee @@ -48,6 +48,7 @@ class EventStore extends NylasStore Actions.queueTask(task) __refreshCache: => + console.log('here') new Promise (resolve, reject) => DatabaseStore.findAll(Event) .then (events=[]) =>