def test_insert_OK(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.post.return_value.status_code = 201 mocked_req.post.return_value.reason = 'Created' ins = Connect('http://test.lt/test', auth={'a': 'a'}, headers={'some headers'}) respo = ins.insert({"orderid": "123456"}) mocked_req.post.assert_called_with('http://test.lt/test', auth={'a': 'a'}, headers={'some headers'}, json={"orderid": "123456"}) self.assertEqual(respo, [201, 'Created'], 'insert: no error returns [201, Created] ') # without error
def test_modify_OK(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.get.return_value.status_code = 200 mocked_req.patch.return_value.status_code = 200 mocked_req.patch.return_value.reason = 'OK' modi = Connect('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}) respo = modi.modify(json_body={"orderid": "123456"}) mocked_req.patch.assert_called_with('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}, json={"orderid": "123456"}) self.assertEqual(respo, [200, 'OK'], 'modify: no error - returns [204, OK]')
def test_delete_OK(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.get.return_value.status_code = 200 mocked_req.delete.return_value.status_code = 204 mocked_req.delete.return_value.reason = 'OK' dele = Connect('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}) respo = dele.delete() mocked_req.delete.assert_called_with('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}) self.assertEqual(respo, [204, 'OK'], 'delete: no error - returns [204, OK]')
def test_exe_OK(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.post.return_value.status_code = 204 mocked_req.post.return_value.reason = 'No content' ex = Connect('http://test.lt/test(123456789abcd)/NAV.Action', auth={'a': 'a'}, headers={'some headers'}) respo = ex.exe() mocked_req.post.assert_called_with('http://test.lt/test(123456789abcd)/NAV.Action', auth={'a': 'a'}, headers={'some headers'}, json=None) self.assertEqual(respo, [204, 'No content'], 'execution: no error returns [204, No content] ') # without error
def test_read_OK(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.get.return_value.status_code = 200 r = Connect('http://test.lt/test', auth={'a': 'a'}, headers={'some headers'}) r.filter_text = "aa eq bb" respo = r.read() # execute with filter mocked_req.get.assert_called_with('http://test.lt/test', params='$filter=aa eq bb', auth={'a': 'a'}, headers={'some headers'}) respo = r.read() # execute without filter mocked_req.get.assert_called_with('http://test.lt/test', params=None, auth={'a': 'a'}, headers={'some headers'})
def test_exe_FAIL(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.post.return_value.status_code = 400 mocked_req.post.return_value.reason = 'Any error reason' # error message ex = Connect('http://test.lt/test(123456789abcd)/NAV.Action', auth={'a': 'a'}, headers={'some headers'}) respo = ex.exe() mocked_req.post.assert_called_with('http://test.lt/test(123456789abcd)/NAV.Action', auth={'a': 'a'}, headers={'some headers'}, json=None) self.assertEqual(respo, [], 'insert: on error return must be blank') # return blank if error self.assertEqual(ex.except_error, [400, 'Any error reason'], 'Execute: on error variable except_error ' 'must to include error code and reason')
def test_modify_FAIL(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.get.return_value.status_code = 200 mocked_req.patch.return_value.status_code = 400 mocked_req.patch.return_value.reason = 'Any error reason' # error message modi = Connect('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}) respo = modi.modify(json_body={"orderid": "123456"}) mocked_req.patch.assert_called_with('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}, json={"orderid": "123456"}) self.assertEqual(respo, [], 'modify: on error returns blank') self.assertEqual(modi.except_error, [400, 'Any error reason'], 'modify: on error variable except_error ' 'must to include error code and reason')
def test_delete_FAIL(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.get.return_value.status_code = 200 mocked_req.delete.return_value.status_code = 400 mocked_req.delete.return_value.reason = 'Any error reason' # error message dele = Connect('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}) respo = dele.delete() mocked_req.delete.assert_called_with('http://test.lt/test(123456789abcd)', auth={'a': 'a'}, headers={'some headers'}) self.assertEqual(respo, [], 'delete: on error returns blank') self.assertEqual(dele.except_error, [400, 'Any error reason'], 'delete: on error variable except_error ' 'must to include error code and reason')
def test_insert_FAIL(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: # any error mocked_req.post.return_value.status_code = 400 mocked_req.post.return_value.reason = 'Any error reason' # error message ins = Connect('http://test.lt/test', auth={'a': 'a'}, headers={'some headers'}) respo = ins.insert({"orderid": "123456"}) mocked_req.post.assert_called_with('http://test.lt/test', auth={'a': 'a'}, headers={'some headers'}, json={"orderid": "123456"}) self.assertEqual(respo, [], 'insert: on error return must be blank') # return blank if error self.assertEqual(ins.except_error, [400, 'Any error reason'], 'Insert: on error variable except_error ' 'must to include error code and reason')
def test_read_Fail(self): with mock.patch('D365BCAPI.D365BCv1API.requests') as mocked_req: mocked_req.get.return_value.status_code = 200 mocked_req.get.return_value.status_code = 400 # Check if return error mocked_req.get.return_value.reason = 'Any error reason' # error message r = Connect('http://test.lt/test', auth={'a': 'a'}, headers={'some headers'}) respo = r.read() # execute and receive error mocked_req.get.assert_called_with('http://test.lt/test', params=None, auth={'a': 'a'}, headers={'some headers'}) self.assertEqual(respo, [], 'read: on error response must be []') # check if reponse is empty self.assertEqual(r.except_error, [400, 'Any error reason'], 'read: on error variable except_error ' 'must to include error code and reason')
Few related "records creation" example 4. Add 2 more lines to the existing order. "Add lines to existing order" example. 5. Modify description in comment line in existing order. "Modify existing line" example 6. Delete one line from existing order. "Record delete" example 7. Execute action Microsoft.NAV.shipAndInvoice on just created sales order. "Execute action" example 8. Check is invoice created and what are Total Amount and Remaining Amount in it. """ user = psw = "a" # basic authentication # customers url_customers = "http://bs17:7048/BC/api/v1.0/customers" # page 5471 custname = 'Cronus' # begin of customer name # create connection object: url, basic authentication, headers recommended by MS customers = Connect(url_customers, (user, psw), {"Accept-Language": "en-us"}) # we can only find customer by begin of name customers.filter_text = f"displayName ge '{custname}' and displayName le '{custname}Z'" # filter is: where displayName is greater or equal to Cronus and less or equal CronusZ response_list = customers.read() # read filtered customers if len(response_list) > 0: print("Read customers", response_list[0].get("displayName")) # 1st customer name if customers.except_error is not None: raise Exception(customers.except_error) if len(response_list) > 0: # customer exists custno = response_list[0].get( "number") # if customer exists then get it No. else: # create customer if not found