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))
Beispiel #2
0
 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
Beispiel #5
0
 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)
Beispiel #6
0
 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)
Beispiel #7
0
    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
Beispiel #8
0
    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