# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE import base64 import requests import frappe from frappe.core.doctype.user.user import generate_keys from frappe.frappeclient import FrappeClient, FrappeException from frappe.model import default_fields from frappe.tests.utils import FrappeTestCase from frappe.utils.data import get_url class TestFrappeClient(FrappeTestCase): PASSWORD = frappe.conf.admin_password or "admin" def test_insert_many(self): server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) server.insert_many( [ {"doctype": "Note", "title": "Sing"}, {"doctype": "Note", "title": "a"}, {"doctype": "Note", "title": "song"}, {"doctype": "Note", "title": "of"}, {"doctype": "Note", "title": "sixpence"}, ] ) records = server.get_list("Note", fields=["title"]) records = [r.get("title") for r in records] self.assertIn("Sing", records) self.assertIn("a", records) self.assertIn("song", records) self.assertIn("of", records) self.assertIn("sixpence", records) def test_create_doc(self): server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) response = server.insert({"doctype": "Note", "title": "test_create"}) for field in default_fields: self.assertIn(field, response) self.assertEqual(response.get("doctype"), "Note") self.assertEqual(response.get("title"), "test_create") def test_list_docs(self): server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) doc_list = server.get_list("Note") self.assertTrue(len(doc_list)) def test_get_doc(self): USER = "Administrator" TITLE = "get_this" DOCTYPE = "Note" server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) NAME = server.insert({"doctype": DOCTYPE, "title": TITLE}).get("name") doc = server.get_doc(DOCTYPE, NAME) for field in default_fields: self.assertIn(field, doc) self.assertEqual(doc.get("doctype"), DOCTYPE) self.assertEqual(doc.get("name"), NAME) self.assertEqual(doc.get("title"), TITLE) self.assertEqual(doc.get("owner"), USER) def test_get_value_by_filters(self): CONTENT = "test get value" server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) server.insert({"doctype": "Note", "title": "get_value", "content": CONTENT}).get("name") self.assertEqual(server.get_value("Note", "content", {"title": "get_value"}).get("content"), CONTENT) def test_get_value_by_name(self): server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) CONTENT = "test get value" NAME = server.insert({"doctype": "Note", "title": "get_value", "content": CONTENT}).get("name") self.assertEqual(server.get_value("Note", "content", NAME).get("content"), CONTENT) def test_get_value_with_malicious_query(self): server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) server.insert({"doctype": "Note", "title": "get_value"}) self.assertRaises( FrappeException, server.get_value, "Note", "(select (password) from(__Auth) order by name desc limit 1)", {"title": "get_value"}, ) def test_get_single(self): server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) server.set_value("Website Settings", "Website Settings", "title_prefix", "test-prefix") self.assertEqual( server.get_value("Website Settings", "title_prefix", "Website Settings").get("title_prefix"), "test-prefix", ) self.assertEqual( server.get_value("Website Settings", "title_prefix").get("title_prefix"), "test-prefix" ) frappe.db.set_single_value("Website Settings", "title_prefix", "") def test_update_doc(self): server = FrappeClient(get_url(), "Administrator", self.PASSWORD, verify=False) resp = server.insert({"doctype": "Note", "title": "Sing"}) doc = server.get_doc("Note", resp.get("name")) CONTENT = "