def setUp(self): django.setup() from storymanager.tests_utils import create_user, login_user_into_client self.client = APIClient() self.user = create_user() login_user_into_client(self.user, self.client) self.room_title = 'a-b'
def _another_user_joins_room(self, username='******') -> 'User': from storymanager.tests_utils import create_user, login_user_into_client another_user = create_user(username) login_user_into_client(another_user, self.client) self.room.add_user(another_user) return another_user
def create_many_users_in_room(self, room): from storymanager.tests_utils import login_user_into_client, create_user usernames = list(map(str, range(10))) for username in usernames: another_user = create_user(username) login_user_into_client(another_user, self.client) room.add_user(another_user) usernames = [self.user.username] + usernames return usernames
def _assert_user_can_write(self, user, post=True): from rooms.models import get_user_room_membership, Membership from storymanager.tests_utils import login_user_into_client login_user_into_client(user, self.client) this_membership = get_user_room_membership(user, self.room) self.assertTrue(this_membership.status == Membership.CAN_WRITE, this_membership.status) if post: response = post_text_from_client_to_room(self.full_data, self.client, self.room) self.assertEqual(status.HTTP_201_CREATED, response.status_code)
def _assert_user_cannot_write(self, user, membership_status='waiting'): from rooms.models import get_user_room_membership, Membership from storymanager.tests_utils import login_user_into_client membership_status = (Membership.WAITING if membership_status == 'waiting' else Membership.STOPPED) login_user_into_client(user, self.client) this_membership = get_user_room_membership(user, self.room) self.assertTrue(this_membership.status == membership_status, this_membership.status) response = post_text_from_client_to_room(self.full_data, self.client, self.room) self.assertEqual(status.HTTP_403_FORBIDDEN, response.status_code, response.data)
def test_user_can_join_room(self): from storymanager.tests_utils import create_user_room, create_user, login_user_into_client room = create_user_room(self.user, self.room_title) usernames = list(map(str, range(10))) responses = [] for username in usernames: another_user = create_user(username) login_user_into_client(another_user, self.client) response = self.client.post( reverse('room_users', kwargs={'room_title': room.room_title})) self.assertIsNone(response.data) responses.append(response) self.assertTrue(all(r.status_code == status.HTTP_200_OK for r in responses)) usernames = [self.user.username] + usernames response_users_list = self.client.get( reverse('room_users', kwargs={'room_title': room.room_title})) self.assertEqual(usernames, [u['username'] for u in response_users_list.data])
def test_user_list_updates_current_turn_user(self): from storymanager.tests_utils import create_user_room, login_user_into_client, create_user from rooms.models import get_user_room_membership, Membership room = create_user_room(self.user, self.room_title) usernames = list(map(str, range(3))) users = [] first_author_index = 0 for i, username in enumerate(usernames): another_user = create_user(username) login_user_into_client(another_user, self.client) room.add_user(another_user) if i == first_author_index: post_text_from_client_to_room({'visible_text': 'x'}, self.client, room) users.append(another_user) expected_curr_user = users[(first_author_index + 1) % len(users)] self.client.get(reverse('room_users', kwargs={'room_title': room.room_title})) expected_curr_membership = get_user_room_membership(expected_curr_user, room) self.assertTrue(expected_curr_membership.status == Membership.CAN_WRITE)
def setUp(self): django.setup() from storymanager.tests_utils import create_user from storymanager.tests_utils import login_user_into_client from storymanager.tests_utils import create_user_room self.client = APIClient() self.user = create_user() login_user_into_client(self.user, self.client) self.room_title = 'a-b' self.room = create_user_room(self.user, self.room_title) self.full_data = { 'visible_text': 'visible_text', 'hidden_text': 'hidden_text' } self.visible_only_data = {'visible_text': 'visible_text'} self.hidden_only_data = {'hidden_text': 'hidden_text'}
def ws_create_login_user_with_group(client: APIClient, group: str = ROOM_TITLE, **kwargs) -> Tuple[User, str]: user = create_user(**kwargs) user_group, _ = Group.objects.get_or_create(name=group) user.groups.add(user_group) user.save() token = login_user_into_client(user, client) return user, token
def test_current_turn_user_is_chronologically_after_previous_author(self): from storymanager.tests_utils import login_user_into_client authors_count = 10 other_usernames = [f'user-{i}' for i in range(authors_count, 0, -1)] first_author_index = authors_count // 2 users = [] for i, another_username in enumerate(other_usernames): users.append(self._another_user_joins_room(another_username)) if i == first_author_index: post_text_from_client_to_room(self.full_data, self.client, self.room) users = [self.user] + users exp_current_turn_index = (first_author_index + 1 + 1) % authors_count for i, user in enumerate(users): login_user_into_client(user, self.client) if i < exp_current_turn_index: # users before are not allowed to write self._assert_user_cannot_write(user) else: # users after are allowed to write one after another self._assert_user_can_write(user) # next user should be correctly named: current_turn_username = self._get_current_turn_username() self.assertEqual(users[(i + 1) % len(users)].username, current_turn_username)
def test_user_can_log_out(self): from storymanager.tests_utils import create_user, login_user_into_client user = create_user() login_user_into_client(user, self.client) response = self.client.post(reverse('knox_logout')) self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)