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
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()
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)
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']
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()
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)
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)
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)
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)
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()
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)
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
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()
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()
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()
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()
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()
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)
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)
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)
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)
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)
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)
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)
def blend(self): with mixer.ctx(commit=False): self.set_obj(mixer.blend('geokrety_api_models.News')) return self
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
def blend(self): with mixer.ctx(commit=False): self._blend = mixer.blend('geokrety_api_models.User') self.set_obj(self._blend) return self
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)