def get(self, request): """lets see your cute faces""" filters = {} software = request.GET.get("software") if not software or software == "bookwyrm": filters["bookwyrm_user"] = True scope = request.GET.get("scope") if scope == "local": filters["local"] = True users = suggested_users.get_annotated_users(request.user, **filters) sort = request.GET.get("sort") if sort == "recent": users = users.order_by("-last_active_date") else: users = users.order_by("-mutuals", "-last_active_date") paginated = Paginator(users, 12) page = paginated.get_page(request.GET.get("page")) data = { "page_range": paginated.get_elided_page_range(page.number, on_each_side=2, on_ends=1), "users": page, } return TemplateResponse(request, "directory/directory.html", data)
def test_get_annotated_users(self, *_): """list of people you might know""" user_1 = models.User.objects.create_user( "*****@*****.**", "*****@*****.**", "nutriaword", local=True, localname="nutria", discoverable=True, ) user_2 = models.User.objects.create_user( "*****@*****.**", "*****@*****.**", "fishword", local=True, localname="fish", ) work = models.Work.objects.create(title="Test Work") book = models.Edition.objects.create( title="Test Book", remote_id="https://example.com/book/1", parent_work=work, ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): # 1 shared follow self.local_user.following.add(user_2) user_1.followers.add(user_2) # 1 shared book models.ShelfBook.objects.create( user=self.local_user, book=book, shelf=self.local_user.shelf_set.first(), ) models.ShelfBook.objects.create( user=user_1, book=book, shelf=user_1.shelf_set.first() ) result = get_annotated_users(self.local_user) self.assertEqual(result.count(), 1) self.assertTrue(user_1 in result) self.assertFalse(user_2 in result) user_1_annotated = result.get(id=user_1.id) self.assertEqual(user_1_annotated.mutuals, 1)
def test_get_annotated_users_counts(self, *_): """correct counting for multiple shared attributed""" user_1 = models.User.objects.create_user( "*****@*****.**", "*****@*****.**", "nutriaword", local=True, localname="nutria", discoverable=True, ) for i in range(3): user = models.User.objects.create_user( "{:d}@local.com".format(i), "{:d}@nutria.com".format(i), "password", local=True, localname=i, ) user.following.add(user_1) user.followers.add(self.local_user) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): for i in range(3): book = models.Edition.objects.create( title=i, parent_work=models.Work.objects.create(title=i), ) models.ShelfBook.objects.create( user=self.local_user, book=book, shelf=self.local_user.shelf_set.first(), ) models.ShelfBook.objects.create( user=user_1, book=book, shelf=user_1.shelf_set.first() ) result = get_annotated_users( self.local_user, ~Q(id=self.local_user.id), ~Q(followers=self.local_user), ) user_1_annotated = result.get(id=user_1.id) self.assertEqual(user_1_annotated.mutuals, 3)