def test_post(self): tr = ProdCreateResource() res = tr.post() self.assertEqual(res.status_code, 201) tr1 = ProdResource() mag = Prod.from_json(res.data) tr1.delete(str(mag.id))
def test_post(self): payload = {'mag_id': '5bfbb05b102bd23cdc85f75a', 'prod_col': 2} res = requests.post(current_config.PROD_SERVICE_URL + current_config.PROD_SERVICE_PATH + current_config.CREATE_PATH, data=jsonpickle.encode(payload)) self.assertEqual(res.status_code, 201) prod = Prod.from_json(res.content) requests.delete(current_config.PROD_SERVICE_URL + current_config.PROD_SERVICE_PATH + "/%s" % str(prod.id))
def test_get_right(self): tr = ProdResource() tcr = ProdCreateResource() res = tcr.post() prod = Prod.from_json(res.data) res = tr.get(str(prod.id)) self.assertEqual(res.status_code, 200) tr.delete(str(prod.id))
def read_paginated(self, page_number, page_size): prods = [] prods_paged = Prods.query.paginate(page=page_number, per_page=page_size) for prod in prods_paged.items: prods.append(Prod(prod_id=prod.mongo_id, mag_id=prod.mag_id, cell=prod.cell)) is_prev_num = (prods_paged.prev_num > 0) is_next_num = (prods_paged.next_num <= prods_paged.pages) return prods, is_prev_num, is_next_num
def test_get_right(self): rep = ProdRepository() prod_id = rep.create(mag_id='5bfbb05b102bd23cdc85f75a', prod_col=1) prod1 = rep.get(prod_id) prod2 = Prod(prod_id=fields.ObjectId(prod_id), mag_id='5bfbb05b102bd23cdc85f75a', prod_col=1) self.assertEqual(prod1, prod2) rep.delete(prod_id)
def test_delete_right(self): payload = {'mag_id': '5bfcea57102bd21af8d4307e', 'prod_col': 7} res = requests.post(current_config.GATEWAY_URL + current_config.GATEWAY_PATH + '/prods/buy', data=jsonpickle.encode(payload)) prod = Prod.from_json(res.content) ret_prod = GatewayReturnProd() res = ret_prod.delete(str(prod.id)) self.assertEqual(res.status_code, 204)
def delete(self, prod_id): app.logger.info('Получен запрос на возврат товара') req = requests.session() for cookie in flask.request.cookies: req.cookies[cookie] = flask.request.cookies[cookie] cookies = req.cookies token = cookies['token'] response = requests.get(current_config.USER_SERVICE_URL + current_config.USER_SERVICE_PATH + "/token", data=jsonpickle.encode({'token':token})) result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) if result.status_code != 200: return result user = User.from_json(response.content) user_id = user.id response = requests.get(current_config.PROD_SERVICE_URL + current_config.PROD_SERVICE_PATH + "/%s" % prod_id) if response.status_code == 200: app.logger.info('Запрос на получение информации о товаре с идентификатором %s успешно обработан' % prod_id) else: app.logger.warning('Информация о товаре с идентификатором %s не может быть получена' % prod_id) result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) return result prod = Prod.from_json(response.content) payload1 = {'cell': prod.cell, 'status': 'return'} try: response = requests.patch(current_config.MAG_SERVICE_URL + current_config.MAG_SERVICE_PATH + "/%s" % prod.mag_id, jsonpickle.encode(payload1)) if response.status_code == 201: app.logger.info('Освобождение места на витрине в магазине успешно завершен') else: app.logger.warning('Освобождение места на витрине в магазине не может быть завершено, добавляем запрос в очередь') replay_request_queue.send_message( jsonpickle.encode(Request("PROD_RETURN", data={"mag_id": prod.mag_id, "payload": payload1})), "prod_return_handling_request") except: app.logger.warning( 'Освобождение места на витрине в магазине не может быть завершено, добавление запроса в очередь') replay_request_queue.send_message(jsonpickle.encode(Request("PROD_RETURN", data={"mag_id": prod.mag_id, "payload": payload1})), "prod_return_handling_request") finally: payload3 = {'prod_id': prod_id, 'status': 'return'} response = requests.patch(current_config.USER_SERVICE_URL + current_config.USER_SERVICE_PATH + "/%s" % user_id, jsonpickle.encode(payload3)) if response.status_code == 201: app.logger.info('Возврат товара для пользователя %s успешно произведен' % user_id) else: payload1['status'] = 'buy' requests.patch(current_config.MAG_SERVICE_URL + current_config.MAG_SERVICE_PATH + "/%s" % prod.mag_id, jsonpickle.encode(payload1)) app.logger.warning('Возврат товара для пользователя %s не может быть произведен' % user_id) result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) return result response = requests.delete(current_config.PROD_SERVICE_URL + current_config.PROD_SERVICE_PATH + "/%s" % prod_id) result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) if response.status_code == 204: app.logger.info('Товар с идентификатором %s успешно удален' % prod_id) else: payload1['status'] = 'buy' requests.patch(current_config.MAG_SERVICE_URL + current_config.MAG_SERVICE_PATH + "/%s" % prod.mag_id, jsonpickle.encode(payload1)) payload3['status'] = 'buy' requests.patch(current_config.USER_SERVICE_URL + current_config.USER_SERVICE_PATH + "/%s" % user_id, jsonpickle.encode(payload3)) app.logger.warning('Товар с идентификатором %s не может быть удален' % prod_id) return result
def post(self): app.logger.info('Получен запрос на покупку билета') req = requests.session() for cookie in flask.request.cookies: req.cookies[cookie] = flask.request.cookies[cookie] cookies = req.cookies token = cookies['token'] response = requests.get(current_config.USER_SERVICE_URL + current_config.USER_SERVICE_PATH + "/token", data=jsonpickle.encode({'token':token})) result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) if result.status_code != 200: return result user = User.from_json(response.content) user_id = user.id payload = jsonpickle.decode(flask.request.data) payload1 = {'cell': payload["cell"], 'status': 'buy'} response = requests.patch(current_config.MAG_SERVICE_URL + current_config.MAG_SERVICE_PATH + "/%s" % payload["mag_id"], jsonpickle.encode(payload1)) result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) if result.status_code != 201: app.logger.error('Покупка товара в магазине с идентификатором %s не может быть выполнена' % payload["mag_id"]) return result else: app.logger.info('Пользователь %s взял товар с полки в магазине с идентификатором %s' % (user_id, payload["mag_id"])) response = requests.post(current_config.PROD_SERVICE_URL + current_config.PROD_SERVICE_PATH + current_config.CREATE_PATH, jsonpickle.encode(payload)) prod = Prod.from_json(response.content) if response.status_code == 201: app.logger.info('Товра с идентификатором %s успешно создан' % str(prod.id)) else: payload1['status'] = 'return' requests.patch(current_config.MAG_SERVICE_URL + current_config.MAG_SERVICE_PATH + "/" + payload["mag_id"], jsonpickle.encode(payload1)) app.logger.warning('Товар не может быть создан') result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) return result result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) payload3 = {'prod_id': str(prod.id), 'status': 'buy'} response = requests.patch(current_config.USER_SERVICE_URL + current_config.USER_SERVICE_PATH + "/%s" % user_id, jsonpickle.encode(payload3)) if response.status_code == 201: app.logger.info('Покупка товара для пользователя успешно произведена') else: result = flask.Response(status=response.status_code, headers=response.headers.items(), response=response.content) payload1['status'] = 'return' requests.patch(current_config.MAG_SERVICE_URL + current_config.MAG_SERVICE_PATH + "/" + payload["mag_id"], jsonpickle.encode(payload1)) requests.delete(current_config.PROD_SERVICE_URL + current_config.PROD_SERVICE_PATH + "/" + payload3['prod_id']) app.logger.warning('Покупка товара не может быть завершена') return result
def get(self, prod_id): if self.exists(prod_id): prod = Prods.query.get(prod_id) return Prod(prod_id=prod.mongo_id, mag_id=prod.mag_id, cell=prod.cell) else: return None