예제 #1
0
    def test_delete_share(self):
        u = push_dummy_user()
        v = push_dummy_user('test', 'test')
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)

            # set up the new share
            list_ = List.query.first()
            v = User.query.filter_by(username='******').first()
            db.session.add(
                ListPermission(list_id=list_.id,
                               user_id=v.id,
                               permission_level='member'))
            db.session.commit()
            listperm = ListPermission.query.filter_by(user_id=v.id).first()

            # delete the share
            rsp = self.test_client.delete('/api/lists/1/shares/' +
                                          str(listperm.id))
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [{
                'id': 1,
                'username': '******',
                'permission_level': 'owner'
            }])

            # and now it's gone
            rsp = self.test_client.delete('/api/lists/1/shares/' +
                                          str(listperm.id))
            self.assertEqual(rsp.status, '404 NOT FOUND')
예제 #2
0
    def test_get_meals(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)
            rsp = self.test_client.get('/api/lists/1/meals')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [{
                'id': 1,
                'name': 'Lunch'
            }, {
                'id': 2,
                'name': 'Dinner'
            }])

            list_ = List.query.first()
            db.session.add(Meal(list_id=list_.id, name='Test', order=2))
            db.session.commit()

            rsp = self.test_client.get('/api/lists/1/meals')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [{
                'id': 1,
                'name': 'Lunch'
            }, {
                'id': 2,
                'name': 'Dinner'
            }, {
                'id': 3,
                'name': 'Test'
            }])
예제 #3
0
    def test_patch_meals(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)
            rsp = self.test_client.post('/api/lists/1/meals',
                                        json=dict(name="MyMeal"))
            self.assertEqual(rsp.status, '201 CREATED')

            rsp = self.test_client.patch('/api/lists/1/meals/1',
                                         json=dict(name="NEW_STUFF"))
            self.assertEqual(rsp.status, '200 OK')
            data = rsp.get_json()
            self.assertEqual(data, [{'id': 1, 'name': 'NEW_STUFF'}])

            rsp = self.test_client.patch('/api/lists/1/meals/1',
                                         json=dict(no_name="NEW_STUFF"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            rsp = self.test_client.patch('/api/lists/1/meals/1',
                                         data=dict(name="NEW_STUFF"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            rsp = self.test_client.patch('/api/lists/1/meals/6',
                                         json=dict(name="NEW_STUFF"))
            self.assertEqual(rsp.status, '404 NOT FOUND')
예제 #4
0
 def test_get_days_limit(self):
     u = push_dummy_user()
     push_dummy_list(u, 'TestyList')
     with self.test_client:
         self.login(u.username)
         rsp = self.test_client.get('/api/days?limit=1')
         data = rsp.get_json()
         self.assertEqual(rsp.status, '200 OK')
         self.assertEqual(data, [{
             'id': 1,
             'day': date.today().isoformat(),
             'entries': [1, 2]
         }])
         rsp = self.test_client.get('/api/days?limit=30')
         data = rsp.get_json()
         self.assertEqual(rsp.status, '400 BAD REQUEST')
         rsp = self.test_client.get('/api/lists/1/days?limit=1')
         data = rsp.get_json()
         self.assertEqual(rsp.status, '200 OK')
         self.assertEqual(
             data,
             [{
                 'id': 1,
                 'day': date.today().strftime('%a, %d %b %Y 00:00:00 GMT'),
                 'entries': [1, 2]
             }])
         rsp = self.test_client.get('/api/lists/1/days?limit=30')
         data = rsp.get_json()
         self.assertEqual(rsp.status, '400 BAD REQUEST')
예제 #5
0
    def test_delete_users(self):
        u = push_dummy_user('user1', 'user1')
        push_dummy_user('user2', 'user2')

        # can't delete user when not authenticated
        rsp = self.test_client.delete('/api/users/1')
        self.assertEqual(rsp.status, '401 UNAUTHORIZED')

        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)

            # can't delete user that does not exist
            rsp = self.test_client.delete('/api/users/10')
            self.assertEqual(rsp.status, '404 NOT FOUND')

            # can't delete another user
            rsp = self.test_client.delete('/api/users/2')
            self.assertEqual(rsp.status, '403 FORBIDDEN')

            # can delete self
            rsp = self.test_client.delete('/api/users/1')
            self.assertEqual(rsp.status, '401 UNAUTHORIZED')
            data = rsp.get_json()
            self.assertEqual(data['msg'], 'User deleted')

        with self.test_client:
            self.login('user2')

            rsp = self.test_client.get('/api/users')
            data = rsp.get_json()
            self.assertFalse('user1' in [i['username'] for i in data])
            self.assertTrue('user2' in [i['username'] for i in data])
    def test_post_categories(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)
            rsp = self.test_client.post('/api/lists/1/categories',
                                        json=dict(name="NewCat"))
            data = rsp.get_json()
            self.assertEqual(rsp.status, '201 CREATED')
            self.assertEqual(data, [{'id': 1, 'name': 'NewCat'}])

            rsp = self.test_client.get('/api/lists/1/categories')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [{'id': 1, 'name': 'NewCat'}])

            # same category can't be created again
            rsp = self.test_client.post('/api/lists/1/categories',
                                        json=dict(name="NewCat"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            # mssing Name parameter
            rsp = self.test_client.post('/api/lists/1/categories',
                                        json=dict(asdasd="NewCat"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            # not json
            rsp = self.test_client.post('/api/lists/1/categories',
                                        data=dict(name="NewCat"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')
예제 #7
0
    def test_entries_access_control(self):
        u = push_dummy_user()
        no_access_user = push_dummy_user(email='test', username='******')
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)
            rsp = self.test_client.get('/api/entries')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.logout()

        with self.test_client:
            no_access_user = User.query.filter_by(username='******').first()
            self.login(no_access_user.username)

            rsp = self.test_client.get('/api/entries')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [])

            rsp = self.test_client.get('/api/lists/1/entries')
            self.assertEqual(rsp.status, '403 FORBIDDEN')

            rsp = self.test_client.patch('/api/entries/1')
            self.assertEqual(rsp.status, '403 FORBIDDEN')
예제 #8
0
    def test_patch_entries(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')

        with self.test_client:
            self.login(u.username)

            rsp = self.test_client.get('/api/entries')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertTrue(len(data) == 14)

            rsp = self.test_client.patch('/api/entries/1',
                                         json=dict(value='Test'))
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, {'key': 'Lunch', 'id': 1, 'value': 'Test'})

            rsp = self.test_client.get('/api/entries')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertTrue(data[0]['value'], 'Test')

            rsp = self.test_client.patch('/api/entries/1',
                                         data=dict(value='Test'))
            self.assertEqual(rsp.status, '400 BAD REQUEST')
예제 #9
0
 def test_put_list_settings_anonymous(self):
     u = push_dummy_user()
     push_dummy_list(u, 'TestyList')
     rsp = self.test_client.put('/api/lists/1/settings',
                                json=dict(days_to_display=5,
                                          start_day_of_week="Friday"))
     self.assertEqual(rsp.status, '401 UNAUTHORIZED')
예제 #10
0
 def test_get_shares(self):
     u = push_dummy_user()
     v = push_dummy_user('test', 'test')
     push_dummy_list(u, 'TestyList')
     with self.test_client:
         self.login(u.username)
         rsp = self.test_client.get('/api/lists/1/shares')
         data = rsp.get_json()
         self.assertEqual(rsp.status, '200 OK')
         self.assertEqual(data, [{
             'id': 1,
             'username': '******',
             'permission_level': 'owner'
         }])
         list_ = List.query.first()
         v = User.query.filter_by(username='******').first()
         db.session.add(
             ListPermission(list_id=list_.id,
                            user_id=v.id,
                            permission_level='member'))
         db.session.commit()
         rsp = self.test_client.get('/api/lists/1/shares')
         data = rsp.get_json()
         self.assertEqual(rsp.status, '200 OK')
         self.assertEqual(data, [{
             'id': 1,
             'username': '******',
             'permission_level': 'owner'
         }, {
             'id': 2,
             'username': '******',
             'permission_level': 'member'
         }])
    def test_get_category_by_food(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)

            rsp = self.test_client.get('/api/foods/1/categories')
            self.assertEqual(rsp.status, '404 NOT FOUND')

            list_ = List.query.first()
            food = Food(list_id=list_.id, name='Food')
            db.session.add(food)
            db.session.commit()

            rsp = self.test_client.get('/api/foods/1/categories')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [])

            foodcat = FoodCategory(list_id=list_.id, name='Cat')
            db.session.add(foodcat)
            db.session.commit()
            foodcatass = FoodCategoryAssociation(food_id=food.id,
                                                 category_id=foodcat.id)
            db.session.add(foodcatass)
            db.session.commit()

            rsp = self.test_client.get('/api/foods/1/categories')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [{'id': 1, 'name': 'Cat'}])
예제 #12
0
 def test_get_days(self):
     u = push_dummy_user()
     push_dummy_list(u, 'TestyList')
     with self.test_client:
         self.login(u.username)
         rsp = self.test_client.get('/api/days')
         data = rsp.get_json()
         self.assertEqual(rsp.status, '200 OK')
         self.assertEqual(data[0]['day'], date.today().isoformat())
예제 #13
0
 def test_days_unauthenticated(self):
     rsp = self.test_client.get('/api/days')
     self.assertEqual(rsp.status, '401 UNAUTHORIZED')
     rsp = self.test_client.get('/api/lists/1/days')
     self.assertEqual(rsp.status, '401 UNAUTHORIZED')
     u = push_dummy_user()
     push_dummy_list(u, 'Listy')
     rsp = self.test_client.get('/api/lists/1/days')
     self.assertEqual(rsp.status, '401 UNAUTHORIZED')
 def test_list_permission_to_dict(self):
     u = push_dummy_user()
     push_dummy_list(u, 'List')
     listperm = ListPermission.query.first()
     self.assertEqual(listperm.to_dict(), {
         'id': 1,
         'username': u.username,
         'permission_level': 'owner'
     })
예제 #15
0
 def test_put_list_settings_for_other_users_list(self):
     u = push_dummy_user()
     no_access_user = push_dummy_user(email='test', username='******')
     push_dummy_list(u, 'TestyList')
     with self.test_client:
         self.login(no_access_user.username)
         rsp = self.test_client.put('/api/lists/1/settings',
                                    json=dict(days_to_display=5,
                                              start_day_of_week="Friday"))
         self.assertEqual(rsp.status, '403 FORBIDDEN')
예제 #16
0
    def test_put_list_settings(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)
            rsp = self.test_client.put('/api/lists/1/settings',
                                       json=dict(days_to_display=5,
                                                 start_day_of_week="Friday"))
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data[0]['settings']['days_to_display'], 5)
            self.assertEqual(data[0]['settings']['start_day_of_week'],
                             'Friday')

            rsp = self.test_client.put('/api/lists/1/settings',
                                       json=dict(days_to_display=20,
                                                 start_day_of_week="Today"))
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data[0]['settings']['days_to_display'], 20)
            self.assertEqual(data[0]['settings']['start_day_of_week'], 'Today')

            # missing params
            rsp = self.test_client.put('/api/lists/1/settings',
                                       json=dict(start_day_of_week="Friday"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            # missing param
            rsp = self.test_client.put('/api/lists/1/settings',
                                       json=dict(days_to_display=5))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            # too high displaydays
            rsp = self.test_client.put('/api/lists/1/settings',
                                       json=dict(days_to_display=28,
                                                 start_day_of_week="Today"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            # incorrect start day
            rsp = self.test_client.put('/api/lists/1/settings',
                                       json=dict(days_to_display=21,
                                                 start_day_of_week=-9))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            # negative days
            rsp = self.test_client.put('/api/lists/1/settings',
                                       json=dict(days_to_display=-5,
                                                 start_day_of_week="Today"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')

            # not json
            rsp = self.test_client.put('/api/lists/1/settings',
                                       data=dict(days_to_display=-5,
                                                 start_day_of_week="Today"))
            self.assertEqual(rsp.status, '400 BAD REQUEST')
예제 #17
0
 def test_500(self):
     u = push_dummy_user()
     push_dummy_list(u, 'TestyList')
     with self.test_client:
         self.login(u.username)
         self.app.config['DEBUG'] = False
         self.app.config['TESTING'] = False
         self.app.config['TESTING_500'] = True
         rsp = self.test_client.get('/api/zerodivision')
         self.assertEqual(rsp.status, '500 INTERNAL SERVER ERROR')
         self.app.config['TESTING_500'] = False
         rsp = self.test_client.get('/api/zerodivision')
         self.assertEqual(rsp.status, '404 NOT FOUND')
예제 #18
0
 def test_get_users_with_access(self):
     u = push_dummy_user()
     list_ = push_dummy_list(u, 'list_')
     self.assertEqual(list_.get_users_with_access(), [u])
     v = User(email='poodle', username='******', is_confirmed=True)
     db.session.add(v)
     db.session.commit()
     x = push_dummy_list(v, 'x')
     self.assertEqual(x.get_users_with_access(), [v])
     s = ListPermission(user_id=u.id, list_id=x.id,
                        permission_level='member')
     db.session.add(s)
     db.session.commit()
     self.assertEqual(x.get_users_with_access(), [v, u])
예제 #19
0
    def test_days_access_control(self):
        u = push_dummy_user()
        no_access_user = push_dummy_user(email='test', username='******')
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(no_access_user.username)

            rsp = self.test_client.get('/api/days')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [])

            rsp = self.test_client.get('/api/lists/1/days')
            self.assertEqual(rsp.status, '403 FORBIDDEN')
예제 #20
0
 def test_entries_unauthenticated(self):
     u = push_dummy_user()
     push_dummy_list(u, 'Listy')
     with self.test_client:
         self.login(u.username)
         rsp = self.test_client.get('/api/entries')
         self.assertEqual(rsp.status, '200 OK')
         self.logout()
     rsp = self.test_client.get('/api/entries')
     self.assertEqual(rsp.status, '401 UNAUTHORIZED')
     rsp = self.test_client.get('/api/lists/1/entries')
     self.assertEqual(rsp.status, '401 UNAUTHORIZED')
     rsp = self.test_client.patch('/api/entries/1')
     self.assertEqual(rsp.status, '401 UNAUTHORIZED')
예제 #21
0
 def test_get_start_day(self, patched_current_user):
     u = push_dummy_user()
     patched_current_user.return_value = u
     list_with_minus_one = push_dummy_list(u, 'List')
     list_with_five = push_dummy_list(u, 'List')
     a = ListSettings(list_id=list_with_minus_one.id,
                      user_id=u.id, start_day_of_week=-1)
     b = ListSettings(list_id=list_with_five.id,
                      user_id=u.id, start_day_of_week=5)
     db.session.add_all([a, b])
     db.session.commit()
     c = 5 - date.today().weekday() if 5 - date.today().weekday() <= 0 else 5 - \
         date.today().weekday() - 7
     self.assertEqual(list_with_minus_one.get_start_day(), 0)
     self.assertEqual(list_with_five.get_start_day(), c)
예제 #22
0
 def test_meal_to_dict(self):
     u = push_dummy_user()
     list_ = push_dummy_list(u, 'List')
     a = Meal(list_id=list_.id, name='Meal', order=0)
     db.session.add(a)
     db.session.commit()
     self.assertEqual(a.to_dict(), {'id': 1, 'name': 'Meal'})
예제 #23
0
 def test_delete_user(self):
     a = push_dummy_user('a', 'a')
     b = push_dummy_user('b', 'b')
     list_ = push_dummy_list(a, 'list_')
     d = list_.get_or_create_days()
     e = Entry(day_id=d[0].id)
     ls = ListSettings(list_id=list_.id, user_id=a.id)
     s = ListPermission(list_id=list_.id, user_id=b.id)
     db.session.add_all([e, ls, s])
     db.session.commit()
     self.assertEqual(User.query.first(), a)
     self.assertEqual(List.query.first(), list_)
     self.assertEqual(Entry.query.first(), e)
     self.assertEqual(Day.query.first(), d[0])
     self.assertEqual(ListSettings.query.first(), ls)
     self.assertEqual(ListPermission.query.filter_by(
         user_id=b.id).first(), s)
     db.session.delete(a)
     db.session.commit()
     self.assertEqual(User.query.first(), b)
     self.assertEqual(List.query.first(), None)
     self.assertEqual(Entry.query.first(), None)
     self.assertEqual(Day.query.first(), None)
     self.assertEqual(ListSettings.query.first(), None)
     self.assertEqual(ListPermission.query.filter_by(
         user_id=a.id).first(), None)
 def test_foodcat_repr(self):
     u = push_dummy_user()
     list_ = push_dummy_list(u, 'List')
     a = FoodCategory(list_id=list_.id, name='Category')
     db.session.add(a)
     db.session.commit()
     self.assertEqual(a.__repr__(), '<FoodCategory Category of List List>')
예제 #25
0
 def test_meal_repr(self):
     u = push_dummy_user()
     list_ = push_dummy_list(u, 'List')
     a = Meal(list_id=list_.id, name='Meal', order=0)
     db.session.add(a)
     db.session.commit()
     self.assertEqual(a.__repr__(), '<Meal Meal of List List>')
예제 #26
0
    def test_get_entries(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)
            rsp = self.test_client.get('/api/entries')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data[0]['key'], 'Lunch')
            self.assertEqual(data[0]['value'], '')

            rsp = self.test_client.get('/api/lists/1/entries')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data[0]['key'], 'Lunch')
            self.assertEqual(data[0]['value'], '')
예제 #27
0
 def test_food_repr(self):
     u = push_dummy_user()
     list_ = push_dummy_list(u, 'List')
     a = Food(list_id=list_.id, name='Food')
     db.session.add(a)
     db.session.commit()
     self.assertEqual(a.__repr__(), '<Food Food of List List>')
예제 #28
0
 def test_delete_list(self, mock_get_settings):
     mock_get_settings.return_value = ListSettings(
         start_day_of_week=-1, days_to_display=7)
     a = push_dummy_user('a', 'a')
     b = push_dummy_user('b', 'b')
     list_ = push_dummy_list(a, 'list_')
     d = list_.get_or_create_days()
     e = Entry(day_id=d[0].id)
     ls = ListSettings(list_id=list_.id, user_id=a.id)
     s = ListPermission(
         list_id=list_.id, permission_level='member', user_id=b.id)
     db.session.add_all([e, ls, s])
     db.session.commit()
     self.assertEqual(List.query.first(), list_)
     self.assertEqual(Entry.query.first(), e)
     self.assertEqual(Day.query.first(), d[0])
     self.assertEqual(ListSettings.query.first(), ls)
     self.assertEqual(ListPermission.query.filter_by(
         user_id=b.id).first(), s)
     db.session.delete(list_)
     db.session.commit()
     self.assertEqual(List.query.first(), None)
     self.assertEqual(Entry.query.first(), None)
     self.assertEqual(Day.query.first(), None)
     self.assertEqual(ListSettings.query.first(), None)
     self.assertEqual(ListPermission.query.first(), None)
    def test_get_categories(self):
        u = push_dummy_user()
        push_dummy_list(u, 'TestyList')
        with self.test_client:
            self.login(u.username)
            rsp = self.test_client.get('/api/lists/1/categories')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [])

            list_ = List.query.first()
            db.session.add(FoodCategory(list_id=list_.id, name='Test'))

            rsp = self.test_client.get('/api/lists/1/categories')
            data = rsp.get_json()
            self.assertEqual(rsp.status, '200 OK')
            self.assertEqual(data, [{'id': 1, 'name': 'Test'}])
 def test_repr_listsettings(self):
     a = push_dummy_user('a', 'a')
     list_ = push_dummy_list(a, 'list_')
     ls = ListSettings(list_id=list_.id, user_id=a.id)
     db.session.add(ls)
     db.session.commit()
     self.assertEqual(ls.__repr__(),
                      '<ListSettings 1 of List list_ for User a>')