summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuda Dornelles <ddornell@thoughtworks.com>2014-08-12 14:34:27 -0300
committerDuda Dornelles <ddornell@thoughtworks.com>2014-08-12 14:54:29 -0300
commitcce7b837e4180167d426224ef625e12a8abc4994 (patch)
tree33716957d809f3345317ee91c9fb067c996eb761
parent103180329b3aad65fa816056c2ca2e9f51424507 (diff)
updating tags on py-fake-service
-rw-r--r--py-fake-service/app/adapter/mail_service.py22
-rw-r--r--py-fake-service/app/adapter/mailset.py16
-rw-r--r--py-fake-service/app/adapter/tag.py3
-rw-r--r--py-fake-service/app/adapter/tagsset.py7
-rw-r--r--py-fake-service/app/pixelated_user_agent.py15
-rw-r--r--py-fake-service/app/search/search_query.py8
6 files changed, 61 insertions, 10 deletions
diff --git a/py-fake-service/app/adapter/mail_service.py b/py-fake-service/app/adapter/mail_service.py
index 7073e549..c6bd3ab4 100644
--- a/py-fake-service/app/adapter/mail_service.py
+++ b/py-fake-service/app/adapter/mail_service.py
@@ -40,5 +40,27 @@ class MailService:
self.mailset.mark_as_read(mail_id)
self.tagsset.mark_as_read(self.mail(mail_id).tags)
+ def delete_mail(self, mail_id):
+ purged = self.mailset.delete(mail_id)
+ if not purged:
+ self.tagsset.increment_tag_total_count('trash')
+
+
+ def update_tags_for(self, mail_id, new_tags):
+ mail = self.mail(mail_id)
+
+ new_tags_set = set(new_tags)
+ old_tags_set = set(mail.tags)
+
+ increment_set = new_tags_set - old_tags_set
+ decrement_set = old_tags_set - new_tags_set
+
+ map(lambda x : self.tagsset.increment_tag_total_count(x), increment_set)
+ map(lambda x : self.tagsset.decrement_tag_total_count(x), decrement_set)
+
+ mail.tags = new_tags
+
+
+
diff --git a/py-fake-service/app/adapter/mailset.py b/py-fake-service/app/adapter/mailset.py
index 2568e33b..5a6f27a4 100644
--- a/py-fake-service/app/adapter/mailset.py
+++ b/py-fake-service/app/adapter/mailset.py
@@ -15,8 +15,20 @@ class MailSet:
return self.mails.values()
def get(self, mail_id):
- return self.mails.get(int(mail_id))
+ return self.mails.get(mail_id)
def mark_as_read(self, mail_id):
- mail = self.mails.get(int(mail_id))
+ mail = self.get(mail_id)
mail.status.append('read')
+
+ def delete(self, mail_id):
+ """ Returns True if the email got purged, else returns False meaning the email got moved to trash """
+
+ mail = self.get(mail_id)
+ if 'trash' in mail.tags:
+ del self.mails[mail_id]
+ return True
+ mail.tags.append('trash')
+ return False
+
+
diff --git a/py-fake-service/app/adapter/tag.py b/py-fake-service/app/adapter/tag.py
index 73103490..a0f3ec1b 100644
--- a/py-fake-service/app/adapter/tag.py
+++ b/py-fake-service/app/adapter/tag.py
@@ -18,3 +18,6 @@ class Tag:
def increment_read(self):
self.counts['read'] += 1
+
+ def decrement_count(self):
+ self.counts['total'] -= 1
diff --git a/py-fake-service/app/adapter/tagsset.py b/py-fake-service/app/adapter/tagsset.py
index 04c712d4..abe7ef7e 100644
--- a/py-fake-service/app/adapter/tagsset.py
+++ b/py-fake-service/app/adapter/tagsset.py
@@ -19,3 +19,10 @@ class TagsSet:
for tag in tags:
tag = self.tags.get(tag)
tag.increment_read()
+
+ def increment_tag_total_count(self, tag):
+ self.tags.get(tag).increment_count()
+
+ def decrement_tag_total_count(self, tag):
+ self.tags.get(tag).decrement_count()
+
diff --git a/py-fake-service/app/pixelated_user_agent.py b/py-fake-service/app/pixelated_user_agent.py
index 48081bda..41188b01 100644
--- a/py-fake-service/app/pixelated_user_agent.py
+++ b/py-fake-service/app/pixelated_user_agent.py
@@ -53,8 +53,9 @@ def mails():
return respond_json(response)
-@app.route('/mail/<mail_id>', methods=['DELETE'])
+@app.route('/mail/<int:mail_id>', methods=['DELETE'])
def delete_mails(mail_id):
+ mail_service.delete_mail(mail_id)
return respond_json(None)
@@ -64,17 +65,19 @@ def tags():
return respond_json([tag.__dict__ for tag in tags])
-@app.route('/mail/<mail_id>')
+@app.route('/mail/<int:mail_id>')
def mail(mail_id):
return respond_json(mail_service.mail(mail_id).__dict__)
-@app.route('/mail/<mail_id>/tags')
+@app.route('/mail/<int:mail_id>/tags', methods=['POST'])
def mail_tags(mail_id):
- return respond_json([])
+ new_tags = request.json['newtags']
+ mail_service.update_tags_for(mail_id, new_tags)
+ return respond_json(request.json['newtags'])
-@app.route('/mail/<mail_id>/read', methods=['POST'])
+@app.route('/mail/<int:mail_id>/read', methods=['POST'])
def mark_mail_as_read(mail_id):
mail_service.mark_as_read(mail_id)
return ""
@@ -85,7 +88,7 @@ def contacts():
return respond_json({'contacts': mail_service.search_contacts(contacts_query)})
-@app.route('/draft_reply_for/<mail_id>')
+@app.route('/draft_reply_for/<int:mail_id>')
def draft_reply_for(mail_id):
return respond_json(None)
diff --git a/py-fake-service/app/search/search_query.py b/py-fake-service/app/search/search_query.py
index cb8d5f57..e8da89d8 100644
--- a/py-fake-service/app/search/search_query.py
+++ b/py-fake-service/app/search/search_query.py
@@ -48,8 +48,11 @@ class SearchQuery:
self.compiled = compiled
def test(self, mail):
- if set(self.compiled.get('tags')).intersection(mail.tags) or 'all' in self.compiled.get('tags'):
- return True
+ if set(self.compiled.get('not_tags')).intersection(set(mail.tags)):
+ return False
+
+ if set(self.compiled.get('tags')).intersection(set(mail.tags)) or 'all' in self.compiled.get('tags'):
+ return True
if self.compiled.get('general'):
search_terms = re.compile(self.compiled['general'])
@@ -59,6 +62,7 @@ class SearchQuery:
if not self.compiled.get('tags') and not self.compiled.get('not_tags'):
return True
+
return False