فهرست منبع

HUE-2059 [core] Only display history documents in their home section

Make sure that trashed or history documents does not appear in the main list.
We filter them from the mine document list.
Added some tests.
Romain Rigaux 11 سال پیش
والد
کامیت
8d72adb

+ 8 - 4
desktop/core/src/desktop/api.py

@@ -34,13 +34,13 @@ LOG = logging.getLogger(__name__)
 
 
 def _get_docs(user):
-  history_tag = DocumentTag.objects.get_history_tag(user)  
+  history_tag = DocumentTag.objects.get_history_tag(user)
   trash_tag = DocumentTag.objects.get_trash_tag(user)
   docs = itertools.chain(
-      Document.objects.get_docs(user).exclude(tags__in=[trash_tag]).filter(tags__in=[history_tag]).order_by('-last_modified')[:500],
-      Document.objects.get_docs(user).exclude(tags__in=[history_tag]).order_by('-last_modified')[:100]
+      Document.objects.get_docs(user).exclude(tags__in=[trash_tag]).filter(tags__in=[history_tag]).select_related('DocumentTag', 'User', 'DocumentPermission').order_by('-last_modified')[:500],
+      Document.objects.get_docs(user).exclude(tags__in=[history_tag]).select_related('DocumentTag', 'User', 'DocumentPermission').order_by('-last_modified')[:100]
   )
-  return list(docs)  
+  return list(docs)
 
 
 def massaged_tags_for_json(docs, user):
@@ -84,6 +84,10 @@ def massaged_tags_for_json(docs, user):
       sharers[tag.owner].append(massaged_tag)
 
   ts['notmine'] = [{'name': sharer.username, 'projects': projects} for sharer, projects in sharers.iteritems()]
+  # Remove from my tags the trashed and history ones
+  mine_filter = set(ts['trash']['docs'] + ts['history']['docs'])
+  for tag in ts['mine']:
+    tag['docs'] = [doc_id for doc_id in tag['docs'] if doc_id not in mine_filter]
 
   return ts
 

+ 1 - 4
desktop/core/src/desktop/models.py

@@ -389,8 +389,6 @@ class Document(models.Model):
   def add_to_history(self):
     tag = DocumentTag.objects.get_history_tag(user=self.owner)
     self.tags.add(tag)
-    #default_tag = DocumentTag.objects.get_default_tag(user=self.owner)
-    #self.tags.remove(default_tag)
 
   def share_to_default(self, name='read'):
     DocumentPermission.objects.share_to_default(self, name=name)
@@ -570,8 +568,7 @@ class DocumentPermission(models.Model):
 
   users = models.ManyToManyField(auth_models.User, db_index=True)
   groups = models.ManyToManyField(auth_models.Group, db_index=True)
-  # @TODO(Abe): Rename to "perm"
-  perms = models.TextField(default=READ_PERM, choices=(
+  perms = models.TextField(default=READ_PERM, choices=( # one perm
     (READ_PERM, 'read'),
     (WRITE_PERM, 'write'),
   ))

+ 1 - 1
desktop/core/src/desktop/templates/home.mako

@@ -160,7 +160,7 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
            <!-- ko template: { name: 'tag-template', foreach: myTags } -->
            <!-- /ko -->
            <li data-bind="visible: myTags().length == 0">
-             <a href="javascript:void(0)" class="edit-tags" style="line-height:24px">
+             <a href="javascript:void(0)" class="edit-tags" style="line-height:24px" data-bind="click: addTag">
                <i class="fa fa-plus-circle"></i> ${_('You currently own no projects. Click here to add one now!')}
              </a>
            </li>

+ 46 - 3
desktop/core/src/desktop/tests.py

@@ -20,6 +20,7 @@ import desktop
 import desktop.urls
 import desktop.conf
 import logging
+import json
 import os
 import time
 
@@ -37,6 +38,7 @@ from django.db.models import query, CharField, SmallIntegerField
 
 from useradmin.models import GroupPermission
 
+from beeswax.conf import HIVE_SERVER_HOST
 from desktop.lib import django_mako
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.paginator import Paginator
@@ -44,8 +46,9 @@ from desktop.lib.conf import validate_path
 from desktop.lib.django_util import TruncatingModel
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.test_utils import grant_access
+from desktop.models import Document
 from desktop.views import check_config, home
-from beeswax.conf import HIVE_SERVER_HOST
+from pig.models import PigScript
 
 
 def setup_test_environment():
@@ -81,12 +84,52 @@ def teardown_test_environment():
   django_mako.render_to_string = django_mako.render_to_string_normal
 teardown_test_environment.__test__ = False
 
+
 def test_home():
-  c = make_logged_in_client()
-  response = c.get(reverse(home))
+  c = make_logged_in_client(username="test_home", groupname="test_home", recreate=True, is_superuser=False)
+  user = User.objects.get(username="test_home")
 
+  response = c.get(reverse(home))
+  assert_equal(["notmine", "trash", "mine", "history"], json.loads(response.context['json_tags']).keys())
   assert_equal(200, response.status_code)
 
+  script, created = PigScript.objects.get_or_create(owner=user)
+  doc = Document.objects.link(script, owner=script.owner, name='test_home')
+
+  response = c.get(reverse(home))
+  assert_true(str(doc.id) in json.loads(response.context['json_documents']))
+
+  response = c.get(reverse(home))
+  tags = json.loads(response.context['json_tags'])
+  assert_equal([doc.id], tags['mine'][0]['docs'], tags)
+  assert_equal([], tags['trash']['docs'], tags)
+  assert_equal([], tags['history']['docs'], tags)
+
+  doc.send_to_trash()
+
+  response = c.get(reverse(home))
+  tags = json.loads(response.context['json_tags'])
+  assert_equal([], tags['mine'][0]['docs'], tags)
+  assert_equal([doc.id], tags['trash']['docs'], tags)
+  assert_equal([], tags['history']['docs'], tags)
+
+  doc.restore_from_trash()
+
+  response = c.get(reverse(home))
+  tags = json.loads(response.context['json_tags'])
+  assert_equal([doc.id], tags['mine'][0]['docs'], tags)
+  assert_equal([], tags['trash']['docs'], tags)
+  assert_equal([], tags['history']['docs'], tags)
+
+  doc.add_to_history()
+
+  response = c.get(reverse(home))
+  tags = json.loads(response.context['json_tags'])
+  assert_equal([], tags['mine'][0]['docs'], tags)
+  assert_equal([], tags['trash']['docs'], tags)
+  assert_equal([doc.id], tags['history']['docs'], tags)
+
+
 def test_skip_wizard():
   c = make_logged_in_client() # is_superuser