Esempio n. 1
0
 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
         }
     ]
Esempio n. 2
0
 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': '*****@*****.**'}
     ]
Esempio n. 3
0
 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
Esempio n. 4
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
Esempio n. 5
0
    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
Esempio n. 6
0
 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
Esempio n. 7
0
 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.']}
     }
Esempio n. 8
0
    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'
        }]
Esempio n. 9
0
 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
Esempio n. 10
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
Esempio n. 11
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
Esempio n. 12
0
    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
Esempio n. 13
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.']
            }
        }
Esempio n. 14
0
 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'
Esempio n. 15
0
 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'
Esempio n. 16
0
 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}
     ]
Esempio n. 17
0
    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
Esempio n. 18
0
    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 == []
Esempio n. 19
0
 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
Esempio n. 20
0
    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
        }
Esempio n. 21
0
 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
Esempio n. 22
0
    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
            }]
        }
Esempio n. 23
0
    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
            }]
        }
Esempio n. 24
0
 def logged_in_user(self, team):
     user = UserFactory()
     TeamMembershipFactory(team=team, user=user)
     return user
Esempio n. 25
0
 def logged_in_user(self, team):
     return UserFactory(memberships=[
         TeamMembershipFactory.build(team=team, is_admin=False)
     ])