def test_returns_correct_data(self, client, logged_in_user): team1 = TeamFactory() TeamMembershipFactory( team=team1, user=logged_in_user, is_admin=True ) team2 = TeamFactory() TeamMembershipFactory( team=team2, user=logged_in_user, is_admin=False ) response = client.get(url_for('api.teams')) assert response.status_code == 200 assert response.json == [ { 'slug': team1.slug, 'name': 'Beer drinkers', 'id': team1.id, 'is_admin': True }, { 'slug': team2.slug, 'name': 'Beer drinkers', 'id': team2.id, 'is_admin': False } ]
def test_returns_correct_data(self, client, logged_in_user): team = TeamFactory(slug='my-team') TeamMembershipFactory(user=logged_in_user, team=team) TeamMembershipFactory( user=UserFactory(email='*****@*****.**'), team=team, is_admin=True ) user = UserFactory(email='*****@*****.**') TeamMembershipFactory( user=user, team=team, is_admin=False ) TeamMembershipFactory( user=user, team=TeamFactory(), is_admin=True ) TeamMembershipFactory( user=UserFactory(), team=TeamFactory() ) response = client.get( url_for('api.users', team_slug='my-team') ) assert response.status_code == 200 assert response.json == [ {'id': 1, 'is_admin': False, 'email': '*****@*****.**'}, {'id': 2, 'is_admin': True, 'email': '*****@*****.**'}, {'id': 3, 'is_admin': False, 'email': '*****@*****.**'} ]
def test_deletes_membership(self, client, logged_in_user): team = TeamFactory(slug='mine') user = UserFactory() TeamMembershipFactory(user=user, team=team) TeamMembershipFactory(user=logged_in_user, team=team) response = client.delete(url_for( 'api.remove_user', team_slug='mine', user_id=user.id )) assert response.status_code == 200 assert TeamMembership.query.filter_by(user=user).count() == 0
def test_returns_404_for_tab_type_not_part_of_team(self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) other_team = TeamFactory(slug='other') TeamMembershipFactory(team=other_team, user=logged_in_user, is_admin=True) tab_type = TabTypeFactory(team=team) response = client.delete( url_for('api.delete_tab_type', team_slug='other', tab_type_id=tab_type.id)) assert response.status_code == 404
def test_returns_404_for_unexisting_tab_type(self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) response = client.delete( url_for('api.delete_tab_type', team_slug='mine', tab_type_id=666)) assert response.status_code == 404
def test_returns_404_for_team_not_part_of(self, client, logged_in_user): team = TeamFactory(slug='not-mine') user = UserFactory() TeamMembershipFactory(user=user, team=team) response = client.delete(url_for( 'api.remove_user', team_slug='not-mine', user_id=user.id )) assert response.status_code == 404
def test_returns_400_when_inviting_already_invited_user( self, client, logged_in_user, data ): data['is_admin'] = False team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) other_user = UserFactory(email='*****@*****.**') TeamMembershipFactory(team=team, user=other_user) response = client.post( url_for('api.users_invite', team_slug='mine'), data=json.dumps(data), content_type='application/json' ) assert response.status_code == 400 assert response.json == { 'errors': {'email': ['User is already part of the team.']} }
def test_doesnt_return_extra_data(self, client, logged_in_user): team = TeamFactory(slug='mine') tab_type = TabTypeFactory(team=team) TeamMembershipFactory(team=team, user=logged_in_user) team2 = TeamFactory(slug='second') TabTypeFactory(team=team2) TeamMembershipFactory(team=team2, user=logged_in_user) team3 = TeamFactory(slug='third') TabTypeFactory(team=team3) response = client.get(url_for('api.tab_types', team_slug='mine')) assert response.status_code == 200 assert response.json == [{ 'id': tab_type.id, 'price': '2.00', 'name': 'Beer' }]
def test_returns_403_and_doesnt_create_tab_type_when_not_admin( self, client, data, logged_in_user): team = TeamFactory(slug='bread-eaters') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=False) response = client.post(url_for('api.create_tab_type', team_slug='bread-eaters'), data=json.dumps(data), content_type='application/json') assert response.status_code == 403 assert TabType.query.count() == 0
def test_returns_error_when_no_user_exists( self, client, logged_in_user, data ): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) response = client.post( url_for('api.users_invite', team_slug='mine'), data=json.dumps(data), content_type='application/json' ) assert response.status_code == 400 assert User.query.filter_by(email='*****@*****.**').count() == 0
def test_returns_403_and_doesnt_delete_tab_type_when_not_admin( self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=False) tab_type = TabTypeFactory(team=team) response = client.delete( url_for('api.delete_tab_type', team_slug='mine', tab_type_id=tab_type.id)) assert response.status_code == 403 assert TabType.query.count() == 1
def test_returns_200_and_deletes_tab_type_when_succesfull( self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) tab_type = TabTypeFactory(team=team) response = client.delete( url_for('api.delete_tab_type', team_slug='mine', tab_type_id=tab_type.id)) assert response.status_code == 200 assert TabType.query.count() == 0
def test_pagination_with_invalid_page_param(self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user) response = client.get( url_for('api.tab_items', team_slug='mine', page='a')) assert response.status_code == 400 assert response.json == { 'errors': { 'page': ['Invalid page parameter.'] } }
def test_returns_200_and_creates_tab_type_when_succesfull( self, client, data, logged_in_user): team = TeamFactory(slug='bread-eaters') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) response = client.post(url_for('api.create_tab_type', team_slug='bread-eaters'), data=json.dumps(data), content_type='application/json') assert response.status_code == 200 tab_type = TabType.query.one() assert tab_type.team == team assert tab_type.price == 10 assert tab_type.name == 'Big bread'
def test_creates_decimal_string_tab_type(self, client, data, logged_in_user): data['price'] = '1.111111' team = TeamFactory(slug='bread-eaters') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) response = client.post(url_for('api.create_tab_type', team_slug='bread-eaters'), data=json.dumps(data), content_type='application/json') assert response.status_code == 200 tab_type = TabType.query.one() assert tab_type.team == team assert tab_type.price == Decimal('1.11') assert tab_type.name == 'Big bread'
def test_returns_correct_data(self, client, logged_in_user, data): team = TeamFactory(slug='mine') UserFactory(email='*****@*****.**') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) response = client.post( url_for('api.users_invite', team_slug='mine'), data=json.dumps(data), content_type='application/json' ) assert response.status_code == 201 assert response.json == [ {'is_admin': True, 'email': '*****@*****.**', 'id': 1}, {'is_admin': False, 'email': '*****@*****.**', 'id': 2} ]
def test_searching_by_username_returns_correct_items( self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user) person1 = PersonFactory(team=team, name='Jaska Jokunen') person2 = PersonFactory(team=team, name='Pekka Puupää') tab_item = TabItemFactory(team=team, adder=logged_in_user, person=person1, name='Oldest', added_at=datetime.datetime.now() - datetime.timedelta(days=1)) TabItemFactory(team=team, adder=logged_in_user, person=person2, name='Oldest', added_at=datetime.datetime.now() - datetime.timedelta(days=1)) response = client.get( url_for('api.tab_items', team_slug='mine', search='joku')) assert response.status_code == 200 expected_data = { 'meta': { 'page': 0, 'per_page': 50, 'count': 1 }, 'data': [{ 'adder': { 'name': 'Pekka Puupää', 'id': 1 }, 'price': '2.00', 'total': '2.00', 'person': { 'name': 'Jaska Jokunen', 'id': 1 }, 'name': 'Oldest', 'added_at': tab_item.added_at.isoformat(), 'id': tab_item.id, 'amount': 1, 'can_be_deleted': False }] } assert response.json == expected_data
def test_doesnt_return_persons_from_wrong_teams( self, client, logged_in_user, team ): other_users_team = TeamFactory() TeamMembershipFactory( team=other_users_team, user=logged_in_user ) other_team = TeamFactory() PersonFactory(team=other_team) PersonFactory(team=other_users_team) response = client.get(url_for('api.persons', team_slug=team.slug)) assert response.status_code == 200 assert response.json == []
def test_user_from_other_team_cant_delete(self, logged_in_user, client, team): other_team = TeamFactory() tab_item = TabItemFactory( team=other_team, person=PersonFactory(team=other_team), adder=UserFactory( memberships=[TeamMembershipFactory.build(team=other_team)]), added_at=datetime.datetime.now()) assert TabItem.query.count() == 1 response = client.delete( url_for('api.tab_items_delete', team_slug=other_team.slug, tab_item_id=tab_item.id)) assert response.status_code == 404 assert TabItem.query.count() == 1
def test_pagination_returns_at_most_50_items(self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user) person = PersonFactory(team=team, name='Jaska Jokunen') for i in range(55): TabItemFactory(team=team, adder=logged_in_user, person=person) response = client.get(url_for('api.tab_items', team_slug='mine')) assert response.status_code == 200 assert len(response.json['data']) == 50 assert response.json['meta'] == { 'page': 0, 'per_page': 50, 'count': 55 }
def test_invites_existing_user( self, client, logged_in_user, data ): data['is_admin'] = True team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user, is_admin=True) UserFactory(email='*****@*****.**') response = client.post( url_for('api.users_invite', team_slug='mine'), data=json.dumps(data), content_type='application/json' ) assert response.status_code == 201 user = User.query.filter_by(email='*****@*****.**').one() assert user.is_invite is False assert user.first_name == 'Pekka' assert user.last_name == 'Puupää' membership = TeamMembership.query.filter_by(user=user).one() assert membership.is_admin is True
def test_pagination_with_params_returns_correct_items( self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user) person = PersonFactory(team=team, name='Jaska Jokunen') for i in range(50): TabItemFactory(team=team, adder=logged_in_user, person=person) tab_item = TabItemFactory(team=team, adder=logged_in_user, person=person, name='Oldest', added_at=datetime.datetime.now() - datetime.timedelta(days=1)) response = client.get( url_for('api.tab_items', team_slug='mine', page=1)) assert response.status_code == 200 assert response.json == { 'meta': { 'page': 1, 'per_page': 50, 'count': 51 }, 'data': [{ 'adder': { 'name': 'Pekka Puupää', 'id': 1 }, 'price': '2.00', 'total': '2.00', 'person': { 'name': 'Jaska Jokunen', 'id': 1 }, 'name': 'Oldest', 'added_at': tab_item.added_at.isoformat(), 'id': tab_item.id, 'amount': 1, 'can_be_deleted': False }] }
def test_doesnt_return_extra_data(self, client, logged_in_user): team = TeamFactory(slug='mine') TeamMembershipFactory(team=team, user=logged_in_user) person = PersonFactory(team=team, name='Jaska Jokunen') tab_item = TabItemFactory(team=team, adder=logged_in_user, person=person) new_team = TeamFactory() new_user = UserFactory() new_person = PersonFactory(team=new_team) TabItemFactory(team=new_team, adder=new_user, person=new_person) response = client.get(url_for('api.tab_items', team_slug='mine')) assert response.status_code == 200 assert response.json == { 'meta': { 'page': 0, 'per_page': 50, 'count': 1 }, 'data': [{ 'adder': { 'name': 'Pekka Puupää', 'id': 1 }, 'price': '2.00', 'total': '2.00', 'person': { 'name': 'Jaska Jokunen', 'id': 1 }, 'name': 'Beer', 'added_at': tab_item.added_at.isoformat(), 'id': 1, 'amount': 1, 'can_be_deleted': True }] }
def logged_in_user(self, team): user = UserFactory() TeamMembershipFactory(team=team, user=user) return user
def logged_in_user(self, team): return UserFactory(memberships=[ TeamMembershipFactory.build(team=team, is_admin=False) ])