def setup_class(self): CreateTestData.create_user('brian', password='******', fullname='Brian', email='*****@*****.**') CreateTestData.create_user(openid='http://sandra.owndomain.com/', fullname='Sandra')
def setup_class(cls): setup_test_search_index() assert_solr_schema_is_the_dgu_variant() CreateTestData.create_user('sysadmin') model.add_user_to_role(model.User.by_name(u'sysadmin'), model.Role.ADMIN, model.System()) model.repo.commit_and_remove()
def setup(self): username = '******' groupname = 'test group' organization_name = 'test organization' CreateTestData.create_user('sysadmin', **{ 'sysadmin': True }) CreateTestData.create_groups([{ 'name': groupname }, { 'name': organization_name, 'type': 'organization'}]) self.sysadmin = model.User.get(username) self.group = model.Group.get(groupname)
def setup_class(cls): smtp_server = config.get("smtp.test_server") if smtp_server: host, port = smtp_server.split(":") port = int(port) + int(str(hashlib.md5(cls.__name__).hexdigest())[0], 16) config["smtp.test_server"] = "%s:%s" % (host, port) CreateTestData.create_user(name="bob", email="*****@*****.**") CreateTestData.create_user(name="mary") # NB No email addr provided SmtpServerHarness.setup_class() PylonsTestCase.setup_class()
def setup_class(cls): smtp_server = config.get('smtp.test_server') if smtp_server: host, port = smtp_server.split(':') port = int(port) + int(str(hashlib.md5(cls.__name__).hexdigest())[0], 16) config['smtp.test_server'] = '%s:%s' % (host, port) CreateTestData.create_user(name='bob', email='*****@*****.**') CreateTestData.create_user(name='mary') #NB No email addr provided SmtpServerHarness.setup_class() PylonsTestCase.setup_class()
def setup_class(cls): smtp_server = config.get('test_smtp_server') if smtp_server: host, port = smtp_server.split(':') port = int(port) + int( str(hashlib.md5(cls.__name__).hexdigest())[0], 16) config['test_smtp_server'] = '%s:%s' % (host, port) CreateTestData.create_user(name='bob', email='*****@*****.**') CreateTestData.create_user(name='mary') #NB No email addr provided SmtpServerHarness.setup_class() PylonsTestCase.setup_class()
def initial_data(self, clean_db): CreateTestData.create_user("brian", password="******", fullname="Brian", email="*****@*****.**") CreateTestData.create_user( "sandra", password="******", fullname="Sandra", email="*****@*****.**", )
def initial_data(self, clean_db): username = "******" groupname = "test group" organization_name = "test organization" CreateTestData.create_user("sysadmin", **{"sysadmin": True}) CreateTestData.create_groups( [ {"name": groupname}, {"name": organization_name, "type": "organization"}, ] ) self.sysadmin = model.User.get(username) self.group = model.Group.get(groupname)
def test_user_delete(self): name = 'normal_user' CreateTestData.create_user(name) user = model.User.get(name) user_dict = {'id': user.id} postparams = '%s=1' % json.dumps(user_dict) res = self.app.post('/api/action/user_delete', params=postparams, extra_environ={'Authorization': str(self.sysadmin_user.apikey)}) res_obj = json.loads(res.body) deleted_user = model.User.get(name) assert res_obj['success'] is True assert deleted_user.is_deleted(), deleted_user
def test_member_new_invites_user_if_received_email(_mail_user, app): user = CreateTestData.create_user("a_user", sysadmin=True) group_name = "a_group" CreateTestData.create_groups([{"name": group_name}], user.name) group = model.Group.get(group_name) url = url_for(controller="group", action="member_new", id=group.id) email = "*****@*****.**" role = "member" params = {"email": email, "role": role} app.post(url, data=params, extra_environ={"REMOTE_USER": str(user.name)}) users = model.User.by_email(email) assert len(users) == 1, users user = users[0] assert user.email == email, user assert group.id in user.get_group_ids(capacity=role)
def test_member_new_invites_user_if_received_email(self, mail_user): user = CreateTestData.create_user("a_user", sysadmin=True) group_name = "a_group" CreateTestData.create_groups([{"name": group_name}], user.name) group = model.Group.get(group_name) url = url_for(controller="group", action="member_new", id=group.id) email = "*****@*****.**" role = "member" params = {"email": email, "role": role} res = self.app.post(url, params, extra_environ={"REMOTE_USER": str(user.name)}) users = model.User.by_email(email) assert len(users) == 1, users user = users[0] assert user.email == email, user assert group.id in user.get_group_ids(capacity=role)
def test_member_new_invites_user_if_received_email(self, mail_user): user = CreateTestData.create_user('a_user', sysadmin=True) group_name = 'a_group' CreateTestData.create_groups([{'name': group_name}], user.name) group = model.Group.get(group_name) url = url_for(controller='group', action='member_new', id=group.id) email = '*****@*****.**' role = 'member' params = {'email': email, 'role': role} res = self.app.post(url, params, extra_environ={'REMOTE_USER': str(user.name)}) users = model.User.by_email(email) assert len(users) == 1, users user = users[0] assert user.email == email, user assert group.id in user.get_group_ids(capacity=role)
def test_16_user_autocomplete(self): # Create deleted user to make sure he won't appear in the user_list deleted_user = CreateTestData.create_user('joe') deleted_user.delete() model.repo.commit() #Empty query postparams = '%s=1' % json.dumps({}) res = self.app.post( '/api/action/user_autocomplete', params=postparams, status=StatusCodes.STATUS_409_CONFLICT) res_obj = json.loads(res.body) assert "/api/3/action/help_show?name=user_autocomplete" in res_obj['help'] assert res_obj['success'] is False #Normal query postparams = '%s=1' % json.dumps({'q':'joe'}) res = self.app.post('/api/action/user_autocomplete', params=postparams) res_obj = json.loads(res.body) assert res_obj['result'][0]['name'] == 'joeadmin' assert 'id','fullname' in res_obj['result'][0]
def setup_class(cls): CreateTestData.create_user(name='bob', email='*****@*****.**') CreateTestData.create_user(name='mary') #NB No email addr provided SmtpServerHarness.setup_class() PylonsTestCase.setup_class()
def setup_class(self): CreateTestData.create_user('brian', password='******', fullname='Brian', email='*****@*****.**') CreateTestData.create_user('sandra', password='******', fullname='Sandra', email='*****@*****.**')
def setup_class(cls): CreateTestData.create_user('sysadmin') model.add_user_to_role(model.User.by_name(u'sysadmin'), model.Role.ADMIN, model.System()) model.repo.commit_and_remove()
def test_01_package_list(self, app): res = json.loads( app.post( "/api/action/package_list", headers={"content-type": "application/json"}, ).body ) assert res["success"] is True assert len(res["result"]) == 2 assert "warandpeace" in res["result"] assert "annakarenina" in res["result"] assert "/api/3/action/help_show?name=package_list" in res["help"] res = json.loads( app.post("/api/action/package_list", json={"limit": 1}).body ) assert res["success"] is True assert len(res["result"]) == 1 assert ( "warandpeace" in res["result"] or "annakarenina" in res["result"] ) # Test GET request res = json.loads(app.get("/api/action/package_list").body) assert len(res["result"]) == 2 assert "warandpeace" in res["result"] assert "annakarenina" in res["result"] # def test_01_package_list_private(self): tests.call_action_api( app, "organization_create", name="test_org_2", apikey=self.sysadmin_user.apikey, ) tests.call_action_api( app, "package_create", name="public_dataset", owner_org="test_org_2", apikey=self.sysadmin_user.apikey, ) res = tests.call_action_api(app, "package_list") assert len(res) == 3 assert "warandpeace" in res assert "annakarenina" in res assert "public_dataset" in res tests.call_action_api( app, "package_create", name="private_dataset", owner_org="test_org_2", private=True, apikey=self.sysadmin_user.apikey, ) res = tests.call_action_api(app, "package_list") assert len(res) == 3 assert "warandpeace" in res assert "annakarenina" in res assert "public_dataset" in res assert "private_dataset" not in res # def test_02_package_autocomplete_match_name(self): res = app.post("/api/action/package_autocomplete", json={"q": "war", "limit": 5}) res_obj = json.loads(res.body) assert res_obj["success"] assert res_obj["result"][0]["name"] == "warandpeace" assert res_obj["result"][0]["title"] == "A Wonderful Story" assert res_obj["result"][0]["match_field"] == "name" assert res_obj["result"][0]["match_displayed"] == "warandpeace" # def test_02_package_autocomplete_match_title(self): res = app.post("/api/action/package_autocomplete", json={"q": "won", "limit": 5}) res_obj = json.loads(res.body) assert res_obj["success"] assert res_obj["result"][0]["name"] == "warandpeace" assert res_obj["result"][0]["title"] == "A Wonderful Story" assert res_obj["result"][0]["match_field"] == "title" assert ( res_obj["result"][0]["match_displayed"] == "A Wonderful Story (warandpeace)" ) # def test_03_create_private_package(self): # Make an organization, because private datasets must belong to one. organization = tests.call_action_api( app, "organization_create", name="test_org", apikey=self.sysadmin_user.apikey, ) # Create a dataset without specifying visibility package_dict = { "extras": [{"key": u"original media", "value": u'"book"'}], "license_id": u"other-open", "maintainer_email": None, "name": u"annakarenina_vis", "notes": u"Some test now", "resources": [ { "alt_url": u"alt123", "description": u"Full text.", "extras": {u"alt_url": u"alt123", u"size": u"123"}, "format": u"plain text", "hash": u"abc123", "position": 0, "url": u"http://datahub.io/download/", }, { "alt_url": u"alt345", "description": u"Index of the novel", "extras": {u"alt_url": u"alt345", u"size": u"345"}, "format": u"JSON", "hash": u"def456", "position": 1, "url": u"http://datahub.io/index.json", }, ], "tags": [{"name": u"russian"}, {"name": u"tolstoy"}], "title": u"A Novel By Tolstoy", "url": u"http://datahub.io", "owner_org": organization["id"], "version": u"0.7a", } package_created = tests.call_action_api( app, "package_create", apikey=self.sysadmin_user.apikey, **package_dict ) assert package_created["private"] is False # Create a new one, explicitly saying it is public package_dict["name"] = u"annakareninanew_vis_public" package_dict["private"] = False package_created_public = tests.call_action_api( app, "package_create", apikey=self.sysadmin_user.apikey, **package_dict ) assert package_created_public["private"] is False # Create a new one, explicitly saying it is private package_dict["name"] = u"annakareninanew_vis_private" package_dict["private"] = True package_created_private = tests.call_action_api( app, "package_create", apikey=self.sysadmin_user.apikey, **package_dict ) assert package_created_private["private"] is True # def test_41_create_resource(self): anna_id = model.Package.by_name(u"annakarenina").id resource = {"package_id": anna_id, "url": "http://new_url"} api_key = six.ensure_text(model.User.get("testsysadmin").apikey) res = app.post( "/api/action/resource_create", json=resource, extra_environ={"Authorization": str(api_key)}, ) resource = json.loads(res.body)["result"] assert resource["url"] == "http://new_url" # def test_42_create_resource_with_error(self): anna_id = model.Package.by_name(u"annakarenina").id resource = { "package_id": anna_id, "url": "new_url", "created": "bad_date", } api_key = six.ensure_text(model.User.get("testsysadmin").apikey) res = app.post( "/api/action/resource_create", json=resource, extra_environ={"Authorization": str(api_key)}, status=StatusCodes.STATUS_409_CONFLICT, ) assert json.loads(res.body)["error"] == { "__type": "Validation Error", "created": ["Date format incorrect"], } # def test_10_user_create_parameters_missing(self): user_dict = {} res = app.post( "/api/action/user_create", json=user_dict, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, status=StatusCodes.STATUS_409_CONFLICT, ) res_obj = json.loads(res.body) assert res_obj["error"] == { "__type": "Validation Error", "name": ["Missing value"], "email": ["Missing value"], "password": ["Missing value"], } assert "/api/3/action/help_show?name=user_create" in res_obj["help"] assert res_obj["success"] is False # def test_11_user_create_wrong_password(self): user_dict = { "name": "test_create_from_action_api_2", "email": "*****@*****.**", "password": "******", } # Too short res = app.post( "/api/action/user_create", json=user_dict, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, status=StatusCodes.STATUS_409_CONFLICT, ) res_obj = json.loads(res.body) assert "/api/3/action/help_show?name=user_create" in res_obj["help"] assert res_obj["success"] is False assert res_obj["error"] == { "__type": "Validation Error", "password": ["Your password must be 8 characters or longer"], } # def test_12_user_update(self): normal_user_dict = { "id": self.normal_user.id, "name": self.normal_user.name, "fullname": "Updated normal user full name", "email": "*****@*****.**", "about": "Updated normal user about", } sysadmin_user_dict = { "id": self.sysadmin_user.id, "fullname": "Updated sysadmin user full name", "email": "*****@*****.**", "about": "Updated sysadmin user about", } # Normal users can update themselves res = app.post( "/api/action/user_update", json=normal_user_dict, extra_environ={"Authorization": str(self.normal_user.apikey)}, ) res_obj = json.loads(res.body) assert "/api/3/action/help_show?name=user_update" in res_obj["help"] assert res_obj["success"] == True result = res_obj["result"] assert result["id"] == self.normal_user.id assert result["name"] == self.normal_user.name assert result["fullname"] == normal_user_dict["fullname"] assert result["about"] == normal_user_dict["about"] assert "apikey" in result assert "created" in result assert "display_name" in result assert "number_created_packages" in result assert not "password" in result # Sysadmin users can update themselves res = app.post( "/api/action/user_update", json=sysadmin_user_dict, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) res_obj = json.loads(res.body) assert "/api/3/action/help_show?name=user_update" in res_obj["help"] assert res_obj["success"] == True result = res_obj["result"] assert result["id"] == self.sysadmin_user.id assert result["name"] == self.sysadmin_user.name assert result["fullname"] == sysadmin_user_dict["fullname"] assert result["about"] == sysadmin_user_dict["about"] # Sysadmin users can update all users res = app.post( "/api/action/user_update", json=normal_user_dict, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) res_obj = json.loads(res.body) assert "/api/3/action/help_show?name=user_update" in res_obj["help"] assert res_obj["success"] == True result = res_obj["result"] assert result["id"] == self.normal_user.id assert result["name"] == self.normal_user.name assert result["fullname"] == normal_user_dict["fullname"] assert result["about"] == normal_user_dict["about"] # Normal users can not update other users res = app.post( "/api/action/user_update", json=sysadmin_user_dict, extra_environ={"Authorization": str(self.normal_user.apikey)}, status=StatusCodes.STATUS_403_ACCESS_DENIED, ) res_obj = json.loads(res.body) assert "/api/3/action/help_show?name=user_update" in res_obj["help"] assert res_obj["error"]["__type"] == "Authorization Error" assert res_obj["success"] is False # def test_12_user_update_errors(self): test_calls = ( # Empty name { "user_dict": { "id": self.normal_user.id, "name": "", "email": "*****@*****.**", }, "messages": [("name", "Must be at least 2 characters long")], }, # Invalid characters in name { "user_dict": { "id": self.normal_user.id, "name": "i++%", "email": "*****@*****.**", }, "messages": [ ("name", "Must be purely lowercase alphanumeric") ], }, # Existing name { "user_dict": { "id": self.normal_user.id, "name": self.sysadmin_user.name, "email": "*****@*****.**", }, "messages": [("name", "That login name is not available")], }, # Missing email { "user_dict": { "id": self.normal_user.id, "name": self.normal_user.name, }, "messages": [("email", "Missing value")], }, ) for test_call in test_calls: res = app.post( "/api/action/user_update", json=test_call["user_dict"], extra_environ={"Authorization": str(self.normal_user.apikey)}, status=StatusCodes.STATUS_409_CONFLICT, ) res_obj = json.loads(res.body) for expected_message in test_call["messages"]: assert expected_message[1] in "".join( res_obj["error"][expected_message[0]] ) # def test_user_delete(self): name = "normal_user" CreateTestData.create_user(name) user = model.User.get(name) user_dict = {"id": user.id} res = app.post( "/api/action/user_delete", json=user_dict, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) res_obj = json.loads(res.body) deleted_user = model.User.get(name) assert res_obj["success"] is True assert deleted_user.is_deleted(), deleted_user # def test_user_delete_requires_data_dict_with_key_id(self): user_dict = {"name": "normal_user"} res = app.post( "/api/action/user_delete", json=user_dict, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, status=StatusCodes.STATUS_409_CONFLICT, ) res_obj = json.loads(res.body) assert res_obj["success"] is False assert res_obj["error"]["id"] == ["Missing value"] # def test_16_user_autocomplete(self): # Create deleted user to make sure he won't appear in the user_list deleted_user = CreateTestData.create_user("joe") deleted_user.delete() model.repo.commit() # Empty query res = app.post( "/api/action/user_autocomplete", json={}, status=StatusCodes.STATUS_409_CONFLICT, ) res_obj = json.loads(res.body) assert ( "/api/3/action/help_show?name=user_autocomplete" in res_obj["help"] ) assert res_obj["success"] is False # Normal query res = app.post("/api/action/user_autocomplete", json={"q": "joe"}) res_obj = json.loads(res.body) assert res_obj["result"][0]["name"] == "joeadmin" assert "id", "fullname" in res_obj["result"][0] # def test_17_bad_action(self): # Empty query res = app.post( "/api/action/bad_action_name", json={}, status=400 ) res_obj = json.loads(res.body) assert ( res_obj == u"Bad request - Action name not known: bad_action_name" ) # def test_20_task_status_update(self): package_created = _add_basic_package(app, u"test_task_status_update") task_status = { "entity_id": package_created["id"], "entity_type": u"package", "task_type": u"test_task", "key": u"test_key", "value": u"test_value", "state": u"test_state", "error": u"test_error", } res = app.post( "/api/action/task_status_update", json=task_status, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_status_updated = json.loads(res.body)["result"] task_status_id = task_status_updated.pop("id") task_status_updated.pop("last_updated") assert task_status_updated == task_status task_status_updated["id"] = task_status_id task_status_updated["value"] = u"test_value_2" res = app.post( "/api/action/task_status_update", json=task_status_updated, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_status_updated_2 = json.loads(res.body)["result"] task_status_updated_2.pop("last_updated") assert task_status_updated_2 == task_status_updated # def test_21_task_status_update_many(self): package_created = _add_basic_package( app, u"test_task_status_update_many" ) task_statuses = { "data": [ { "entity_id": package_created["id"], "entity_type": u"package", "task_type": u"test_task", "key": u"test_task_1", "value": u"test_value_1", "state": u"test_state", "error": u"test_error", }, { "entity_id": package_created["id"], "entity_type": u"package", "task_type": u"test_task", "key": u"test_task_2", "value": u"test_value_2", "state": u"test_state", "error": u"test_error", }, ] } res = app.post( "/api/action/task_status_update_many", json=task_statuses, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_statuses_updated = json.loads(res.body)["result"]["results"] for i in range(len(task_statuses["data"])): task_status = task_statuses["data"][i] task_status_updated = task_statuses_updated[i] task_status_updated.pop("id") task_status_updated.pop("last_updated") assert task_status == task_status_updated, ( task_status_updated, task_status, i, ) # def test_22_task_status_normal_user_not_authorized(self): task_status = {} res = app.post( "/api/action/task_status_update", json=task_status, extra_environ={"Authorization": str(self.normal_user.apikey)}, status=StatusCodes.STATUS_403_ACCESS_DENIED, ) res_obj = json.loads(res.body) assert ( "/api/3/action/help_show?name=task_status_update" in res_obj["help"] ) assert res_obj["success"] is False assert res_obj["error"]["__type"] == "Authorization Error" # def test_23_task_status_validation(self): task_status = {} res = app.post( "/api/action/task_status_update", json=task_status, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, status=StatusCodes.STATUS_409_CONFLICT, ) # def test_24_task_status_show(self): package_created = _add_basic_package(app, u"test_task_status_show") task_status = { "entity_id": package_created["id"], "entity_type": u"package", "task_type": u"test_task", "key": u"test_task_status_show", "value": u"test_value", "state": u"test_state", "error": u"test_error", } res = app.post( "/api/action/task_status_update", json=task_status, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_status_updated = json.loads(res.body)["result"] # make sure show works when giving a task status ID res = app.post( "/api/action/task_status_show", json={"id": task_status_updated["id"]}, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_status_show = res.json["result"] task_status_show.pop("last_updated") task_status_updated.pop("last_updated") assert task_status_show == task_status_updated, ( task_status_show, task_status_updated, ) # make sure show works when giving a (entity_id, task_type, key) tuple res = app.post( "/api/action/task_status_show", json={ "entity_id": task_status["entity_id"], "task_type": task_status["task_type"], "key": task_status["key"], }, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_status_show = json.loads(res.body)["result"] task_status_show.pop("last_updated") assert task_status_show == task_status_updated, ( task_status_show, task_status_updated, ) # def test_25_task_status_delete(self): package_created = _add_basic_package(app, u"test_task_status_delete") task_status = { "entity_id": package_created["id"], "entity_type": u"package", "task_type": u"test_task", "key": u"test_task_status_delete", "value": u"test_value", "state": u"test_state", "error": u"test_error", } res = app.post( "/api/action/task_status_update", json=task_status, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_status_updated = json.loads(res.body)["result"] res = app.post( "/api/action/task_status_delete", json={"id": task_status_updated["id"]}, extra_environ={"Authorization": str(self.sysadmin_user.apikey)}, ) task_status_delete = json.loads(res.body) assert task_status_delete["success"] == True # def test_26_resource_show(self): pkg = model.Package.get("annakarenina") resource = pkg.resources[0] res = app.post("/api/action/resource_show", json={"id": resource.id}) result = json.loads(res.body)["result"] resource_dict = resource_dictize(resource, {"model": model}) assert result == resource_dict, (result, resource_dict) # def test_27_get_site_user_not_authorized(self): with pytest.raises(NotAuthorized): get_action("get_site_user")({"model": model, "user": ""}, {}) # user = model.User.get('test.ckan.net') # assert not user site_id = config.get("ckan.site_id") user = get_action("get_site_user")( {"model": model, "ignore_auth": True}, {} ) assert user["name"] == site_id user = model.User.get(site_id) assert user user = get_action("get_site_user")( {"model": model, "ignore_auth": True}, {} ) assert user["name"] == site_id user = model.Session.query(model.User).filter_by(name=site_id).one() assert user # def test_28_group_package_show(self): group_id = model.Group.get("david").id group_packages = get_action("group_package_show")( { "model": model, "user": self.normal_user.name, "ignore_auth": True, }, {"id": group_id}, ) assert len(group_packages) == 2, group_packages group_names = set([g.get("name") for g in group_packages]) assert group_names == set(["annakarenina", "warandpeace"]), group_names # def test_30_status_show(self): res = app.post("/api/action/status_show", json={}) status = json.loads(res.body)["result"] assert status["site_title"] == "CKAN" assert status["ckan_version"] == ckan.__version__ assert status["site_url"] == "http://test.ckan.net" # def test_31_bad_request_format(self): res = app.post( "/api/action/package_list", json=six.ensure_str("not a dict"), status=400 ) assert ( "Bad request - JSON Error: Request data JSON decoded to " ) in res assert ( "'not a dict' but it needs to be a dictionary." ) in res # def test_31_bad_request_format_not_json(self): res = app.post( "/api/action/package_list", data="=1", status=400, content_type="application/json" ) assert body_contains( res, "Bad request - JSON Error: Error decoding JSON data." ) # def test_32_get_domain_object(self): anna = model.Package.by_name(u"annakarenina") assert get_domain_object(model, anna.name).name == anna.name assert get_domain_object(model, anna.id).name == anna.name group = model.Group.by_name(u"david") assert get_domain_object(model, group.name).name == group.name assert get_domain_object(model, group.id).name == group.name # def test_41_missing_action(self): try: get_action("unicorns") assert False, "We found a non-existent action" except KeyError: assert True # def test_42_resource_search_with_single_field_query(self): request_body = {"query": ["description:index"]} response = app.post("/api/action/resource_search", json=request_body) result = json.loads(response.body)["result"]["results"] count = json.loads(response.body)["result"]["count"] ## Due to the side-effect of previously run tests, there may be extra ## resources in the results. So just check that each found Resource ## matches the search criteria assert count > 0 for resource in result: assert "index" in resource["description"].lower() # def test_42_resource_search_across_multiple_fields(self): request_body = {"query": ["description:index", "format:json"]} response = app.post("/api/action/resource_search", json=request_body) result = json.loads(response.body)["result"]["results"] count = json.loads(response.body)["result"]["count"] ## Due to the side-effect of previously run tests, there may be extra ## resources in the results. So just check that each found Resource ## matches the search criteria assert count > 0 for resource in result: assert "index" in resource["description"].lower() assert "json" in resource["format"].lower() # def test_42_resource_search_test_percentage_is_escaped(self): request_body = {"query": ["description:index%"]} response = app.post("/api/action/resource_search", json=request_body) count = json.loads(response.body)["result"]["count"] # There shouldn't be any results. If the '%' character wasn't # escaped correctly, then the search would match because of the # unescaped wildcard. assert count == 0 # def test_42_resource_search_fields_parameter_still_accepted(self): """The fields parameter is deprecated, but check it still works. Remove this test when removing the fields parameter. (#2603) """ request_body = {"fields": {"description": "index"}} response = app.post("/api/action/resource_search", json=request_body) result = json.loads(response.body)["result"]["results"] count = json.loads(response.body)["result"]["count"] ## Due to the side-effect of previously run tests, there may be extra ## resources in the results. So just check that each found Resource ## matches the search criteria assert count > 0 for resource in result: assert "index" in resource["description"].lower() # def test_42_resource_search_accessible_via_get_request(self): response = app.get( "/api/action/resource_search" "?query=description:index&query=format:json" ) result = json.loads(response.body)["result"]["results"] count = json.loads(response.body)["result"]["count"] ## Due to the side-effect of previously run tests, there may be extra ## resources in the results. So just check that each found Resource ## matches the search criteria assert count > 0 for resource in result: assert "index" in resource["description"].lower() assert "json" in resource["format"].lower()