Add workspace due indicators and todo assignment
This commit is contained in:
@@ -104,6 +104,70 @@ class WorkspaceTenancyTests(TestCase):
|
||||
self.client.force_login(outsider)
|
||||
self.assertNotContains(self.client.get(reverse('index')), 'Workspace public')
|
||||
|
||||
def test_workspace_switcher_shows_due_counts_for_other_workspaces(self):
|
||||
user = get_user_model().objects.create_user(username='workspace-due', password='secret')
|
||||
personal = get_or_create_personal_workspace(user)
|
||||
company = Workspace.objects.create(owner=user, name='Company Due', slug='company-due')
|
||||
WorkspaceMembership.objects.create(workspace=company, user=user, role=WorkspaceMembership.Role.OWNER)
|
||||
due = timezone.make_aware(datetime.combine(timezone.localdate(), time(12, 0)))
|
||||
Item.objects.create(workspace=company, owner=user, kind=Item.Kind.TODO, content='Due elsewhere', due_at=due)
|
||||
self.client.force_login(user)
|
||||
self.client.post(reverse('workspace_switch', args=[personal.id]), {'next': reverse('index')})
|
||||
|
||||
response = self.client.get(reverse('index'))
|
||||
|
||||
self.assertContains(response, 'Company Due')
|
||||
self.assertContains(response, 'text-bg-danger">1</span>')
|
||||
self.assertNotContains(response, 'Due elsewhere')
|
||||
|
||||
def test_todo_can_be_assigned_to_workspace_member_with_mention(self):
|
||||
owner = get_user_model().objects.create_user(username='assign-owner', password='secret')
|
||||
assignee = get_user_model().objects.create_user(username='alice', password='secret')
|
||||
workspace = Workspace.objects.create(owner=owner, name='Assign Co', slug='assign-co')
|
||||
WorkspaceMembership.objects.create(workspace=workspace, user=owner, role=WorkspaceMembership.Role.OWNER)
|
||||
WorkspaceMembership.objects.create(workspace=workspace, user=assignee, role=WorkspaceMembership.Role.MEMBER)
|
||||
self.client.force_login(owner)
|
||||
self.client.post(reverse('workspace_switch', args=[workspace.id]), {'next': reverse('index')})
|
||||
|
||||
response = self.client.post(reverse('index'), {'content': '/todo Prepare report @alice'})
|
||||
|
||||
self.assertRedirects(response, reverse('index'))
|
||||
item = Item.objects.get(content='Prepare report @alice')
|
||||
self.assertEqual(item.workspace, workspace)
|
||||
self.assertEqual(item.assignee, assignee)
|
||||
|
||||
def test_assigned_private_todo_is_visible_to_assignee(self):
|
||||
owner = get_user_model().objects.create_user(username='assign-owner2', password='secret')
|
||||
assignee = get_user_model().objects.create_user(username='bob', password='secret')
|
||||
workspace = Workspace.objects.create(owner=owner, name='Assign Co 2', slug='assign-co-2')
|
||||
WorkspaceMembership.objects.create(workspace=workspace, user=owner, role=WorkspaceMembership.Role.OWNER)
|
||||
WorkspaceMembership.objects.create(workspace=workspace, user=assignee, role=WorkspaceMembership.Role.MEMBER)
|
||||
Item.objects.create(workspace=workspace, owner=owner, assignee=assignee, kind=Item.Kind.TODO, content='Assigned private')
|
||||
self.client.force_login(assignee)
|
||||
self.client.post(reverse('workspace_switch', args=[workspace.id]), {'next': reverse('index')})
|
||||
|
||||
response = self.client.get(reverse('index'))
|
||||
|
||||
self.assertContains(response, 'Assigned private')
|
||||
self.assertContains(response, '@bob')
|
||||
|
||||
def test_team_todo_assignment_requires_team_membership(self):
|
||||
owner = get_user_model().objects.create_user(username='assign-owner3', password='secret')
|
||||
non_team_member = get_user_model().objects.create_user(username='charlie', password='secret')
|
||||
workspace = Workspace.objects.create(owner=owner, name='Assign Co 3', slug='assign-co-3')
|
||||
WorkspaceMembership.objects.create(workspace=workspace, user=owner, role=WorkspaceMembership.Role.OWNER)
|
||||
WorkspaceMembership.objects.create(workspace=workspace, user=non_team_member, role=WorkspaceMembership.Role.MEMBER)
|
||||
team = Team.objects.create(workspace=workspace, owner=owner, name='Ops', slug='ops')
|
||||
TeamMembership.objects.create(team=team, user=owner, role=TeamMembership.Role.OWNER)
|
||||
self.client.force_login(owner)
|
||||
self.client.post(reverse('workspace_switch', args=[workspace.id]), {'next': reverse('index')})
|
||||
|
||||
self.client.post(reverse('index'), {'content': '/todo Team task @charlie #ops'})
|
||||
|
||||
item = Item.objects.get(content='Team task @charlie #ops')
|
||||
self.assertEqual(item.team, team)
|
||||
self.assertIsNone(item.assignee)
|
||||
|
||||
def test_authenticated_overview_is_limited_to_current_workspace(self):
|
||||
user = get_user_model().objects.create_user(username='tenant-visible', password='secret')
|
||||
other = get_user_model().objects.create_user(username='tenant-other', password='secret')
|
||||
|
||||
Reference in New Issue
Block a user