def test_api_view_should_return_errors_and_no_values_if_unjsonify_worksheet_result_has_errors(self, mock_get_object): mock_sheet = mock_get_object.return_value mock_sheet.owner = self.user worksheet = Worksheet() worksheet[1, 3].formula = '=string' worksheet[1, 3].value = 'test value' worksheet._usercode_error = { "message": "I am an error message", "line": 2 } mock_sheet.unjsonify_worksheet.side_effect = lambda: worksheet mock_sheet.allow_json_api_access = True self.request.method = 'POST' self.request.POST['api_key'] = mock_sheet.api_key = 'key' expected_json = { "usercode_error" : { "message": "I am an error message", "line": "2" } } actual = calculate_and_get_json_for_api(self.request, self.user.username, self.sheet.id) self.assertFalse(mock_sheet.save.called) self.assertTrue(isinstance(actual, HttpResponse)) self.assertEquals(actual.content, json.dumps(expected_json))
def api_json_to_worksheet(sheet_json): sheet_values = jsonlib.loads(sheet_json) worksheet = Worksheet() worksheet.name = sheet_values.get('name', 'Untitled') for key, value in sheet_values.iteritems(): if key == "usercode_error": worksheet._usercode_error = value elif isinstance(value, dict): rows = value col = int(key) for row, value in rows.iteritems(): row = int(row) worksheet[col, row].value = value return worksheet
def test_to_ui_json_meta_data_includes_usercode_errors(self): sheet = Sheet(width=10, height=5) worksheet = Worksheet() worksheet._usercode_error = {'message': 'ABC', 'line': 123} expected_json_contents = { 'width': sheet.width, 'height': sheet.height, 'name': sheet.name, 'usercode_error': { 'message': 'ABC', 'line': '123' } } self.assertEquals( json.loads(sheet_to_ui_json_meta_data(sheet, worksheet)), expected_json_contents)
def test_to_ui_json_meta_data_includes_usercode_errors(self): sheet = Sheet(width=10, height=5) worksheet = Worksheet() worksheet._usercode_error = { 'message' : 'ABC', 'line' : 123 } expected_json_contents = { 'width': sheet.width, 'height': sheet.height, 'name': sheet.name, 'usercode_error' : { 'message' : 'ABC', 'line' : '123' } } self.assertEquals(json.loads(sheet_to_ui_json_meta_data(sheet, worksheet)), expected_json_contents)
def test_calculate_clears_previous_worksheet_usercode_error(self, mock_evaluate_formulae_in_context, mock_execute_usercode): worksheet = Worksheet() worksheet._usercode_error = "Argh!" calculate(worksheet, sentinel.usercode, sentinel.private_key) self.assertEquals(worksheet._usercode_error, None)
def test_worksheet_with_data_to_json(self): self.maxDiff = None worksheet = Worksheet() worksheet.B29.formula = "a constant" worksheet.B29.value = 56 worksheet.B29.formatted_value = "fifty-six" worksheet.B29.error = "b0rken" worksheet.C29.formula = "another constant" worksheet.C29.value = ["value", "is", "a", "list"] worksheet.C29.formatted_value = "[the same list]" class UnJSONableObject(object): def __str__(self): return "The result of str-ing the object" worksheet.D29.formula = None worksheet.D29.value = UnJSONableObject() worksheet.D29.formatted_value = "The formatted object" worksheet.E29.formula = '=1 + 2' worksheet.E29.value = 3 worksheet.E29.formatted_value = "Three" worksheet._console_text = "The console text" worksheet._usercode_error = { "message": "The usercode error", "line": 23 } worksheet_json = worksheet_to_json(worksheet) self.assertEquals( json.loads(worksheet_json), { u"2,29": { u"formula": u"a constant", u"value": 56, u"formatted_value": u"fifty-six", u"error": u"b0rken" }, u"3,29": { u"formula": u"another constant", u"value": [u"value", u"is", u"a", u"list"], u"formatted_value": u"[the same list]" }, u"4,29": { u"formula": None, u"formatted_value": u"The formatted object", }, u"5,29": { u"formula": u"=1 + 2", u"python_formula": u"1 + 2", u"value": 3, u"formatted_value": u"Three", }, u"_console_text": u"The console text", u"_usercode_error": { u"message": u"The usercode error", u"line": 23 }, })
def test_calculate_clears_previous_worksheet_usercode_error( self, mock_evaluate_formulae_in_context, mock_execute_usercode): worksheet = Worksheet() worksheet._usercode_error = "Argh!" calculate(worksheet, sentinel.usercode, sentinel.private_key) self.assertEquals(worksheet._usercode_error, None)
def test_worksheet_with_data_to_json(self): self.maxDiff = None worksheet = Worksheet() worksheet.B29.formula = "a constant" worksheet.B29.value = 56 worksheet.B29.formatted_value = "fifty-six" worksheet.B29.error = "b0rken" worksheet.C29.formula = "another constant" worksheet.C29.value = ["value", "is", "a", "list"] worksheet.C29.formatted_value = "[the same list]" class UnJSONableObject(object): def __str__(self): return "The result of str-ing the object" worksheet.D29.formula = None worksheet.D29.value = UnJSONableObject() worksheet.D29.formatted_value = "The formatted object" worksheet.E29.formula = '=1 + 2' worksheet.E29.value = 3 worksheet.E29.formatted_value = "Three" worksheet._console_text = "The console text" worksheet._usercode_error = { "message": "The usercode error", "line": 23 } worksheet_json = worksheet_to_json(worksheet) self.assertEquals( json.loads(worksheet_json), { u"2,29" : { u"formula" : u"a constant", u"value" : 56, u"formatted_value": u"fifty-six", u"error": u"b0rken" }, u"3,29" : { u"formula" : u"another constant", u"value" : [u"value", u"is", u"a", u"list"], u"formatted_value": u"[the same list]" }, u"4,29" : { u"formula" : None, u"formatted_value": u"The formatted object", }, u"5,29" : { u"formula" : u"=1 + 2", u"python_formula" : u"1 + 2", u"value": 3, u"formatted_value": u"Three", }, u"_console_text": u"The console text", u"_usercode_error": { u"message": u"The usercode error", u"line": 23 }, } )