{ "info": { "author": "Internap", "author_email": "opensource@internap.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Pytest", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: POSIX", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "[![Build Status](https://travis-ci.org/internap/jabstract.svg?branch=master)](https://travis-ci.org/internap/jabstract)\n\n# Welcome unit testers!\n\n## That's not cool:\n\n```\ndef test_something():\n api_response = {\n \"field1\": \"value1\",\n \"field2\": \"value2\",\n ....\n \"field37\": \"value37\",\n ....\n \"field7632\": \"value7632\"\n }\n\n myapi.return_value = api_response\n \n result = production_code()\n \n assert result == \"value37\"\n```\n\n^ This is annoying if your `production_code` method only uses field37 right?\n\nOf course you could only define the field37 in your test but if a log or something else irrelevant to THIS test uses another field, it has to be there even if it's irrelevant to THIS test.\n\n## That's prettier:\n\n\n```\napi_response = jabstract({\n \"field1\": \"value1\",\n \"field2\": \"value2\",\n ....\n \"field37\": \"value37\",\n ....\n \"field7632\": \"value7632\"\n})\n\ndef test_something():\n myapi.return_value = api_response(field37=\"value37\")\n \n result = production_code()\n \n assert result == \"value37\"\n```\n\n^ The test is so much more beautiful!\n\n# USAGE\n\nDeclare your json responses somewhere:\n\n```\nfrom jabstract import jabstract\n\napi_response = jabstract({\n ... json-ish payload ...\n})\n```\n\nThen use it in your tests by defining only relevant fields:\n\n```\n.return_value = api_response(\n key=value\n)\n```\n\nIt even supports complex payloads!\n\n```\napi_response = jabstract({\n \"client\": {\n \"name\": \"John doe\",\n \"email\": \"johndoe@example.org\"\n }\n})\n\n.return_value = api_response(\n client=dict(name=\"Foobar\")\n)\n```\n\n\\* note that `response[\"client\"][\"email\"]` will keep its default value.\n\n# Best practices\n\nTests using jabstracted payload should define only what is relevant to the test, not less, not more, so that it is obvious to the human eye where a value come from\n\nlet's test this code\n```\ndef name_getter(payload):\n return payload[\"client\"][\"name\"]\n```\n\n## **Good** example:\n```\napi_response = jabstract({\n \"client\": {\n \"name\": \"John doe\",\n \"email\": \"johndoe@example.org\"\n }\n})\n\ndef test_name_getter():\n payload = api_response(client=dict(name=\"Baboon 2.0\"))\n\n assert name_getter(payload) == \"Baboon 2.0\"\n```\n\n**Reviewer says** : Ohhh so it takes the name of the client from the payload... +2\n\n## ~~BAD~~ example\n\n```\napi_response = jabstract({\n \"client\": {\n \"name\": \"John doe\",\n \"email\": \"johndoe@example.org\"\n }\n})\n\ndef test_name_getter():\n payload = api_response()\n \n assert name_getter(payload) == \"John doe\"\n```\n\n**Reviewer says** : Who the hell is john doe... click on payload... ahhh i see... meh, +1", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/internap/jabstract", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "jabstract", "package_url": "https://pypi.org/project/jabstract/", "platform": "", "project_url": "https://pypi.org/project/jabstract/", "project_urls": { "Homepage": "https://github.com/internap/jabstract" }, "release_url": "https://pypi.org/project/jabstract/0.1.3/", "requires_dist": null, "requires_python": "", "summary": "Test tool for overridable json fixtures", "version": "0.1.3" }, "last_serial": 4791713, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "4f71c50b4fc7c4da901768ec77c7ef78", "sha256": "bdbe71c3a8235d0e03be9e97fc8ab517ec448020da88faf413c3b157e571f5b1" }, "downloads": -1, "filename": "jabstract-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4f71c50b4fc7c4da901768ec77c7ef78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7379, "upload_time": "2017-08-03T19:47:25", "url": "https://files.pythonhosted.org/packages/13/6c/0683448ad40c0d2750e26183467472bc11ddc06a8de401c458071de4f466/jabstract-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8d5e6c10e292adfd0ae064db9fe72f5c", "sha256": "09eb0a2017b45405f93bb64b35f8cf8738efb6c8f63862b8100417d82a0a4a6f" }, "downloads": -1, "filename": "jabstract-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8d5e6c10e292adfd0ae064db9fe72f5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7599, "upload_time": "2017-09-06T19:35:31", "url": "https://files.pythonhosted.org/packages/c3/26/493b7dacb1705cb373db9c4fec4f9848cb3f8794358e1cfb6bae142ac942/jabstract-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a558febc3b3cd04e307405c7512204ef", "sha256": "ba16727f982863ba55b2e534696dd304a88cdf853914231a5f75fdf0529f3382" }, "downloads": -1, "filename": "jabstract-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a558febc3b3cd04e307405c7512204ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7720, "upload_time": "2017-09-06T20:05:19", "url": "https://files.pythonhosted.org/packages/cd/80/3f843e47e8bc3fb3943be66f11e26d1271108264f8200b45430453ebfe9b/jabstract-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "b3ca91b1e2a18870dcdc0c4531f53622", "sha256": "0ce86fffc005d6d11b878d2e779fae310b839d556958c71d2e0e0453e78a2da5" }, "downloads": -1, "filename": "jabstract-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b3ca91b1e2a18870dcdc0c4531f53622", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8073, "upload_time": "2019-02-07T15:59:59", "url": "https://files.pythonhosted.org/packages/03/9f/d1c4df3c2951dc9f5681d02515b3a42db4588740c51e54dddd49d1d2908d/jabstract-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b3ca91b1e2a18870dcdc0c4531f53622", "sha256": "0ce86fffc005d6d11b878d2e779fae310b839d556958c71d2e0e0453e78a2da5" }, "downloads": -1, "filename": "jabstract-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b3ca91b1e2a18870dcdc0c4531f53622", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8073, "upload_time": "2019-02-07T15:59:59", "url": "https://files.pythonhosted.org/packages/03/9f/d1c4df3c2951dc9f5681d02515b3a42db4588740c51e54dddd49d1d2908d/jabstract-0.1.3.tar.gz" } ] }