예제 #1
0
 def blend(self, *args, **kwargs):
     move = kwargs.get('move')
     if move is None:
         with mixer.ctx():
             move = mixer.blend('geokrety_api_models.Move')
     with mixer.ctx(commit=False):
         move_comment = mixer.blend('geokrety_api_models.MoveComment',
                                    type=MOVE_COMMENT_TYPE_COMMENT,
                                    move=move)
         self.set_obj(move_comment)
         return self
예제 #2
0
 def _blend(self):
     """Create mocked Geokret/User"""
     mixer.init_app(app)
     with mixer.ctx(commit=False):
         self.admin = mixer.blend(User)
         self.user1 = mixer.blend(User)
         self.user2 = mixer.blend(User)
         self.user3 = mixer.blend(User)
         self.geokret1 = mixer.blend(Geokret,
                                     type=GEOKRET_TYPE_TRADITIONAL,
                                     owner=self.user1,
                                     holder=self.user2)
         self.geokret2 = mixer.blend(Geokret,
                                     type=GEOKRET_TYPE_TRADITIONAL,
                                     owner=self.user2,
                                     holder=self.user1)
         self.geokret3 = mixer.blend(Geokret, type=GEOKRET_TYPE_COIN)
         db.session.add(self.admin)
         db.session.add(self.user1)
         db.session.add(self.user2)
         db.session.add(self.user3)
         db.session.add(self.geokret1)
         db.session.add(self.geokret2)
         db.session.add(self.geokret3)
         db.session.commit()
예제 #3
0
    def test_create_minimal(self):
        """Check User: POST request minimal informations"""
        with app.test_request_context():
            with mixer.ctx(commit=False):
                someone = mixer.blend(User)

            payload = {
                "data": {
                    "type": "user",
                    "attributes": {
                        "name": someone.name,
                        "password": someone.password,
                        "email": someone.email
                    }
                }
            }
            response = self._send_post("/v1/users", payload=payload, code=201)
            self._check_user_with_private(response,
                                          someone,
                                          skip_check=['times'])

            users = User.query.all()
            self.assertEqual(len(users), 1)
            user = users[0]
            self.assertEqual(someone.name, user.name)
            self._check_user_with_private(response, user)
예제 #4
0
def before_each(transaction):
    with stash['app'].app_context():
        db.engine.execute("drop database geokrety_unittest")
        db.engine.execute("create database geokrety_unittest")
        db.engine.execute("use geokrety_unittest")
        db.create_all()

        with stash['app'].test_request_context():
            mixer.init_app(stash['app'])
            with mixer.ctx(commit=False):
                user = mixer.blend(User, name=api_username)
                user.password = api_password
                news = mixer.blend(News, author=user)
                news2 = mixer.blend(News, author=None)
                news_comment = mixer.blend(NewsComment, author=user, news=news)
                new_subscription1 = mixer.blend(NewsSubscription, user=user, news=news)

                user2 = mixer.blend(User)
        db.session.add(user)
        db.session.add(user2)
        db.session.add(news)
        db.session.add(news2)
        db.session.add(news_comment)
        db.session.add(new_subscription1)
        db.session.commit()

    if 'token' not in stash:
        stash['token'] = obtain_token()

    transaction['request']['headers']['Authorization'] = "JWT " + stash['token']
예제 #5
0
 def _blend(self):
     """
     Create mocked User/News/NewsComments
     """
     mixer.init_app(app)
     with mixer.ctx(commit=False):
         self.admin = mixer.blend(User)
         self.user1 = mixer.blend(User)
         self.user2 = mixer.blend(User)
         self.news1 = mixer.blend(News, author=self.user1)
         self.news2 = mixer.blend(News)
         self.newscomment1 = mixer.blend(NewsComment,
                                         author=self.user1,
                                         news=self.news1)
         self.newscomment2 = mixer.blend(NewsComment,
                                         author=self.user2,
                                         news=self.news1)
         db.session.add(self.admin)
         db.session.add(self.user1)
         db.session.add(self.user2)
         db.session.add(self.news1)
         db.session.add(self.news2)
         db.session.add(self.newscomment1)
         db.session.add(self.newscomment2)
         db.session.commit()
예제 #6
0
 def test_get_count(self):
     """Check DBHelper: get count"""
     with app.test_request_context():
         with mixer.ctx(commit=False):
             user = mixer.blend(User)
         save_to_db(user)
         self.assertEqual(get_count(User.query), 1)
예제 #7
0
    def test_create_complete(self):
        """Check User: POST request full informations"""
        with app.test_request_context():
            with mixer.ctx(commit=False):
                someone = mixer.blend(User)

            payload = {
                "data": {
                    "type": "user",
                    "attributes": {
                        "name": someone.name,
                        "password": someone.password,
                        "email": someone.email,
                        "hour": someone.hour,
                        "latitude": someone.latitude,
                        "longitude": someone.longitude,
                        "observation-radius": someone.observation_radius,
                        "secid": someone.secid,
                        "statpic-id": someone.statpic_id
                    }
                }
            }
            response = self._send_post("/v1/users", payload=payload, code=201)
            self._check_user_with_private(response,
                                          someone,
                                          skip_check=['times'])

            users = User.query.all()
            self.assertEqual(len(users), 1)
            user = users[0]
            self.assertEqual(someone.name, user.name)
            self._check_user_with_private(response, user)
예제 #8
0
 def blend_geokret(self, *args, **kwargs):
     with mixer.ctx():
         if 'created_on_datetime' not in kwargs:
             kwargs['created_on_datetime'] = "2019-01-12T16:33:46"
         if kwargs.get('count'):
             return mixer.cycle(kwargs.get('count')).blend(Geokret, **kwargs)
         return mixer.blend(Geokret, **kwargs)
예제 #9
0
    def test_create_complete(self):
        """Check Geokret: POST request full informations"""
        with app.test_request_context():
            admin = mixer.blend(User)
            with mixer.ctx(commit=False):
                akret = mixer.blend(Geokret)

            payload = {
                "data": {
                    "type": "geokret",
                    "attributes": {
                        "name": akret.name,
                        "description": akret.description,
                    }
                }
            }
            response = self._send_post("/v1/geokrety",
                                       payload=payload,
                                       code=201,
                                       user=admin)
            self._check_geokret(response['data'],
                                akret,
                                skip_check=['times', 'tracking-code'],
                                with_private=True)

            geokrety = Geokret.query.all()
            self.assertEqual(len(geokrety), 1)
            geokret = geokrety[0]
            self.assertEqual(akret.name, geokret.name)
            self._check_geokret(response['data'], geokret, with_private=True)
예제 #10
0
 def setUp(self):
     super(TestAuthentication, self).setUp()
     with app.test_request_context():
         mixer.init_app(app)
         with mixer.ctx(commit=False):
             user = mixer.blend(User,
                                name=self.username,
                                _password=self.password)
             db.session.add(user)
             db.session.commit()
예제 #11
0
    def test_save_to_db(self):
        """Check DBHelper: save to db"""
        with app.test_request_context():
            with mixer.ctx(commit=False):
                mixer.init_app(app)
                obj = mixer.blend(User)

            save_to_db(obj)
            user = db.session.query(User).filter(User.id == obj.id).first()
            self.assertEqual(obj.name, user.name)
예제 #12
0
 def blend_move_comment(self, *args, **kwargs):
     with mixer.ctx():
         if kwargs.get('count'):
             move_comments = mixer.cycle(kwargs.get('count')).blend(MoveComment, **kwargs)
             for move_comment in move_comments:
                 update_geokret_and_moves(db.session, move_comment.move.geokret_id, move_comment.move.id)
             return move_comments
         move_comment = mixer.blend(MoveComment, **kwargs)
         update_geokret_and_moves(db.session, move_comment.move.geokret_id, move_comment.move.id)
         return move_comment
예제 #13
0
 def _blend_users(self):
     """Create mocked User/News/NewsComments"""
     mixer.init_app(app)
     with mixer.ctx(commit=False):
         self.admin = mixer.blend(User)
         self.user1 = mixer.blend(User)
         self.user2 = mixer.blend(User)
         db.session.add(self.admin)
         db.session.add(self.user1)
         db.session.add(self.user2)
         db.session.commit()
예제 #14
0
 def _blend(self):
     """Create mocked User/News/NewsComments"""
     with mixer.ctx(commit=False):
         self.news1 = mixer.blend(News, author=self.user1)
         self.orphan_news = mixer.blend(News, author=None)
         self.newscomment1 = mixer.blend(NewsComment, author=self.user1, news=self.news1)
         self.newscomment2 = mixer.blend(NewsComment, author=self.user2, news=self.news1)
         db.session.add(self.news1)
         db.session.add(self.orphan_news)
         db.session.add(self.newscomment1)
         db.session.add(self.newscomment2)
         db.session.commit()
예제 #15
0
    def test_create_user(self):
        """Check User: POST and Read back an user"""
        with app.test_request_context():
            mixer.init_app(app)
            admin = mixer.blend(User)
            someone = mixer.blend(User)
            with mixer.ctx(commit=False):
                user1 = mixer.blend(User)

            # Test inserting first user
            payload = {
                "data": {
                    "type": "user",
                    "attributes": {
                        "name": user1.name,
                        "password": user1.password,
                        "email": user1.email
                    }
                }
            }
            response = self._send_post('/v1/users', payload=payload, code=201)
            self._check_user_with_private(response,
                                          user1,
                                          skip_check=['times'])
            user1.id = response['data']['id']

            response = self._send_get('/v1/users/%s' % user1.id, code=200)
            self._check_user_without_private(response,
                                             user1,
                                             skip_check=['times'])

            response = self._send_get('/v1/users/%s' % user1.id,
                                      code=200,
                                      user=user1)
            self._check_user_with_private(response,
                                          user1,
                                          skip_check=['times'])

            response = self._send_get('/v1/users/%s' % user1.id,
                                      code=200,
                                      user=admin)
            self._check_user_with_private(response,
                                          user1,
                                          skip_check=['times'])

            response = self._send_get('/v1/users/%s' % user1.id,
                                      code=200,
                                      user=someone)
            self._check_user_without_private(response,
                                             user1,
                                             skip_check=['times'])
 def _blend_users(self):
     """Create mocked Users"""
     mixer.init_app(app)
     with mixer.ctx(commit=False):
         self.admin = mixer.blend(User, username="******")
         self.user1 = mixer.blend(User, username="******")
         self.user2 = mixer.blend(User, username="******")
         self.user3 = mixer.blend(User, username="******")
         self.user4 = mixer.blend(User, username="******")
         db.session.add(self.admin)
         db.session.add(self.user1)
         db.session.add(self.user2)
         db.session.add(self.user3)
         db.session.add(self.user4)
         db.session.commit()
예제 #17
0
 def _blend(self):
     """Create mocked User"""
     mixer.init_app(app)
     with mixer.ctx(commit=False):
         self.admin = mixer.blend(User)
         self.user1 = mixer.blend(User)
         self.user2 = mixer.blend(User)
         self.geokret1 = mixer.blend(Geokret, type="0")
         self.geokret2 = mixer.blend(Geokret, type="3")
         db.session.add(self.admin)
         db.session.add(self.user1)
         db.session.add(self.user2)
         db.session.add(self.geokret1)
         db.session.add(self.geokret2)
         db.session.commit()
예제 #18
0
 def blend_move(self, *args, **kwargs):
     with mixer.ctx():
         if 'geokret' not in kwargs:
             kwargs['geokret'] = mixer.blend(Geokret, created_on_datetime="2019-01-12T16:33:46")
         if kwargs.get('count'):
             last_date = kwargs['geokret'].created_on_datetime
             moves = []
             for _ in range(kwargs.get('count')):
                 last_date = last_date + timedelta(seconds=1)
                 move = mixer.blend(Move, moved_on_datetime=last_date, **kwargs)
                 update_geokret_and_moves(db.session, move.geokret_id, move.id)
                 moves.append(move)
             return moves
         move = mixer.blend(Move, **kwargs)
         update_geokret_and_moves(db.session, move.geokret_id, move.id)
         return move
 def _blend(self):
     """Create mocked Geokret relationship"""
     with mixer.ctx(commit=False):
         self.geokret1 = mixer.blend(Geokret, owner=self.user1, holder=None)
         self.geokret2 = mixer.blend(Geokret, owner=self.user1, holder=self.user3)
         self.orphan_geokret1 = mixer.blend(Geokret, owner=None, holder=None)
         self.geokret3 = mixer.blend(Geokret, owner=self.user2, holder=None)
         self.geokret4 = mixer.blend(Geokret, owner=self.user2, holder=self.user3)
         self.orphan_geokret2 = mixer.blend(Geokret, owner=None, holder=self.user4)
         db.session.add(self.geokret1)
         db.session.add(self.geokret2)
         db.session.add(self.orphan_geokret1)
         db.session.add(self.geokret3)
         db.session.add(self.geokret4)
         db.session.add(self.orphan_geokret2)
         db.session.commit()
예제 #20
0
    def test_create_without_email(self):
        """Check User: POST without email"""
        with app.test_request_context():
            with mixer.ctx(commit=False):
                someone = mixer.blend(User)

            payload = {
                "data": {
                    "type": "user",
                    "attributes": {
                        "name": someone.name,
                        "password": someone.password
                    }
                }
            }
            self._send_post("/v1/users", payload=payload, code=422)
예제 #21
0
    def test_get_or_create(self):
        """Check DBHelper: get or create"""
        with app.test_request_context():
            mixer.init_app(app)
            with mixer.ctx(commit=False):
                user = mixer.blend(User)
            save_to_db(user)
            obj, is_created = get_or_create(User, name=user.name)
            self.assertEqual(user.id, obj.id)
            self.assertFalse(is_created)

            obj, is_created = get_or_create(User,
                                            name="new user",
                                            password="******",
                                            email="*****@*****.**")
            self.assertNotEqual(user.id, obj.id)
            self.assertTrue(is_created)
예제 #22
0
    def test_create_geokret(self):
        """ Check Geokret: POST and Read back a geokret"""
        with app.test_request_context():
            mixer.init_app(app)
            admin = mixer.blend(User)
            someone = mixer.blend(User)
            with mixer.ctx(commit=False):
                akret = mixer.blend(Geokret)

            # Test inserting first user
            payload = {
                "data": {
                    "type": "geokret",
                    "attributes": {
                        "name": akret.name,
                        "description": akret.description,
                    }
                }
            }
            response = self._send_post('/v1/geokrety',
                                       payload=payload,
                                       code=201,
                                       user=admin)
            self._check_geokret(response['data'],
                                akret,
                                skip_check=['times', 'tracking-code'],
                                with_private=True)
            akret.id = response['data']['id']
            akret.tracking_code = response['data']['attributes'][
                'tracking-code']

            response = self._send_get('/v1/geokrety/%s' % akret.id, code=200)
            self._check_geokret(response['data'], akret, skip_check=['times'])

            response = self._send_get('/v1/geokrety/%s' % akret.id,
                                      code=200,
                                      user=someone)
            self._check_geokret(response['data'], akret, skip_check=['times'])

            response = self._send_get('/v1/geokrety/%s' % akret.id,
                                      code=200,
                                      user=admin)
            self._check_geokret(response['data'],
                                akret,
                                skip_check=['times'],
                                with_private=True)
예제 #23
0
    def test_create_user_email_uniqueness(self):
        """Check User: POST email uniqueness"""
        with app.test_request_context():
            self._blend()
            with mixer.ctx(commit=False):
                user1 = mixer.blend(User)

            # Test inserting first user
            payload = {
                "data": {
                    "type": "user",
                    "attributes": {
                        "name": user1.name,
                        "password": user1.password,
                        "email": self.user1.email
                    }
                }
            }
            self._send_post('/v1/users', payload=payload, code=422)
예제 #24
0
 def blend_news_comment(self, *args, **kwargs):
     with mixer.ctx():
         if kwargs.get('count'):
             return mixer.cycle(kwargs.get('count')).blend(NewsComment, **kwargs)
         return mixer.blend(NewsComment, **kwargs)
예제 #25
0
 def blend_badge(self, *args, **kwargs):
     with mixer.ctx():
         if kwargs.get('count'):
             return mixer.cycle(kwargs.get('count')).blend(Badge, **kwargs)
         return mixer.blend(Badge, **kwargs)
예제 #26
0
    def test_patch_full_user1_someone(self):
        """
        Check User: PATCH user can only update himself - User1
        """
        with app.test_request_context():
            self._blend()
            with mixer.ctx(commit=False):
                someone = mixer.blend(User)

            payload = {
                "data": {
                    "type": "user",
                    "id": "2",
                    "attributes": {
                        "name": someone.name,
                        "password": someone.password,
                        "email": someone.email,
                        "hour": someone.hour,
                        "latitude": someone.latitude,
                        "longitude": someone.longitude,
                        "observation-radius": someone.observation_radius,
                        "secid": someone.secid,
                        "statpic-id": someone.statpic_id
                    }
                }
            }

            payload["data"]["id"] = "1"
            payload["data"]["attributes"]["name"] = someone.name = "someone_1"
            payload["data"]["attributes"][
                "email"] = someone.email = "*****@*****.**"
            self._send_patch("/v1/users/1",
                             payload=payload,
                             code=403,
                             user=self.user1)

            payload["data"]["id"] = "2"
            payload["data"]["attributes"]["name"] = someone.name = "someone_2"
            payload["data"]["attributes"][
                "email"] = someone.email = "*****@*****.**"
            response = self._send_patch("/v1/users/2",
                                        payload=payload,
                                        code=200,
                                        user=self.user1)
            self._check_user_with_private(response,
                                          someone,
                                          skip_check=['times'])

            payload["data"]["id"] = "3"
            payload["data"]["attributes"]["name"] = someone.name = "someone_3"
            payload["data"]["attributes"][
                "email"] = someone.email = "*****@*****.**"
            self._send_patch("/v1/users/3",
                             payload=payload,
                             code=403,
                             user=self.user1)

            payload["data"]["id"] = "4"
            payload["data"]["attributes"]["name"] = someone.name = "someone_4"
            payload["data"]["attributes"][
                "email"] = someone.email = "*****@*****.**"
            self._send_patch("/v1/users/4",
                             payload=payload,
                             code=403,
                             user=self.user1)
예제 #27
0
 def blend(self):
     with mixer.ctx(commit=False):
         self.set_obj(mixer.blend('geokrety_api_models.News'))
         return self
예제 #28
0
파일: badge.py 프로젝트: kumy/geokrety-api
 def blend(self, *args, **kwargs):
     with mixer.ctx(commit=False):
         self._blend = mixer.blend('geokrety_api_models.Badge')
         self.set_obj(self._blend)
         return self
예제 #29
0
 def blend(self):
     with mixer.ctx(commit=False):
         self._blend = mixer.blend('geokrety_api_models.User')
         self.set_obj(self._blend)
         return self
예제 #30
0
 def blend_news_subscription(self, *args, **kwargs):
     with mixer.ctx():
         if kwargs.get('count'):
             return mixer.cycle(kwargs.get('count')).blend(NewsSubscription, **kwargs)
         return mixer.blend(NewsSubscription, **kwargs)