def test_update_v1_response(self, mock_sm_g, mock_g): """"Test that a chart command updates properties""" pk = db.session.query(Slice).all()[0].id actor = security_manager.find_user(username="******") mock_g.user = mock_sm_g.user = actor model_id = pk json_obj = { "description": "test for update", "cache_timeout": None, "owners": [actor.id], } command = UpdateChartCommand(actor, model_id, json_obj) last_saved_before = db.session.query(Slice).get(pk).last_saved_at command.run() chart = db.session.query(Slice).get(pk) assert chart.last_saved_at != last_saved_before assert chart.last_saved_by == actor
def test_query_context_update_command(self, mock_sm_g, mock_g): """" Test that a user can generate the chart query context payloadwithout affecting owners """ chart = db.session.query(Slice).all()[0] pk = chart.id admin = security_manager.find_user(username="******") chart.owners = [admin] db.session.commit() actor = security_manager.find_user(username="******") mock_g.user = mock_sm_g.user = actor query_context = json.dumps({"foo": "bar"}) json_obj = { "query_context_generation": True, "query_context": query_context, } command = UpdateChartCommand(actor, pk, json_obj) command.run() chart = db.session.query(Slice).get(pk) assert chart.query_context == query_context assert len(chart.owners) == 1 assert chart.owners[0] == admin
def put( # pylint: disable=too-many-return-statements, arguments-differ self, pk: int) -> Response: """Changes a Chart --- put: description: >- Changes a Chart. parameters: - in: path schema: type: integer name: pk requestBody: description: Chart schema required: true content: application/json: schema: $ref: '#/components/schemas/{{self.__class__.__name__}}.put' responses: 200: description: Chart changed content: application/json: schema: type: object properties: id: type: number result: $ref: '#/components/schemas/{{self.__class__.__name__}}.put' 400: $ref: '#/components/responses/400' 401: $ref: '#/components/responses/401' 403: $ref: '#/components/responses/403' 404: $ref: '#/components/responses/404' 422: $ref: '#/components/responses/422' 500: $ref: '#/components/responses/500' """ if not request.is_json: return self.response_400(message="Request is not JSON") try: item = self.edit_model_schema.load(request.json) # This validates custom Schema with custom validations except ValidationError as error: return self.response_400(message=error.messages) try: changed_model = UpdateChartCommand(g.user, pk, item).run() return self.response(200, id=changed_model.id, result=item) except ChartNotFoundError: return self.response_404() except ChartForbiddenError: return self.response_403() except ChartInvalidError as ex: return self.response_422(message=ex.normalized_messages()) except ChartUpdateFailedError as ex: logger.error("Error updating model %s: %s", self.__class__.__name__, str(ex)) return self.response_422(message=str(ex))