From 96af5fc3a7653bed9e7d094b99d64b0c7b5c33cc Mon Sep 17 00:00:00 2001 From: calle <93376500+callebtc@users.noreply.github.com> Date: Sat, 23 Jul 2022 10:39:58 +0200 Subject: [PATCH] CI: Test `core/views/generic.py` (#772) * Adds tests for GET /wallet * Update `httpx` to `0.23.0` and `http-core` to `0.15.0` in `venv` installation path * Fix `secp256k1 = "==0.14.0"` and `cffi = "==1.15.0"` --- .github/workflows/regtest.yml | 4 +- .github/workflows/tests.yml | 12 +- Pipfile | 5 +- Pipfile.lock | 220 +++++++++++++++---------------- docs/guide/installation.md | 2 +- lnbits/core/views/generic.py | 4 +- requirements.txt | 7 +- tests/conftest.py | 47 ++++--- tests/core/views/test_api.py | 21 ++- tests/core/views/test_generic.py | 92 ++++++++++++- 10 files changed, 258 insertions(+), 156 deletions(-) diff --git a/.github/workflows/regtest.yml b/.github/workflows/regtest.yml index bdce0501..7883cf19 100644 --- a/.github/workflows/regtest.yml +++ b/.github/workflows/regtest.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7] + python-version: [3.8] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} @@ -54,7 +54,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7] + python-version: [3.8] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7b0b38e2..218a557b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -3,11 +3,11 @@ name: tests on: [push, pull_request] jobs: - sqlite: + venv-sqlite: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8] + python-version: [3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} @@ -25,7 +25,7 @@ jobs: ./venv/bin/pip install pytest pytest-asyncio pytest-cov requests mock - name: Run tests run: make test - postgres: + venv-postgres: runs-on: ubuntu-latest services: postgres: @@ -44,7 +44,7 @@ jobs: --health-retries 5 strategy: matrix: - python-version: [3.7] + python-version: [3.8] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} @@ -68,11 +68,11 @@ jobs: uses: codecov/codecov-action@v3 with: file: ./coverage.xml - pipenv: + pipenv-sqlite: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7] + python-version: [3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} diff --git a/Pipfile b/Pipfile index 8ef241f1..f8c42a9d 100644 --- a/Pipfile +++ b/Pipfile @@ -4,7 +4,7 @@ url = "https://pypi.org/simple" verify_ssl = true [requires] -python_version = "3.7" +python_version = "3.8" [packages] bitstring = "*" @@ -30,7 +30,8 @@ uvicorn = {extras = ["standard"], version = "*"} sse-starlette = "*" jinja2 = "==3.0.1" pyngrok = "*" -secp256k1 = "*" +secp256k1 = "==0.14.0" +cffi = "==1.15.0" pycryptodomex = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index 6a89abb3..42d471c6 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "81bd288eea338c3bf1b70b8d30c1185b84c13a25a595bcddd77f74f7bc090032" + "sha256": "503e9942306106e40621c59f37a3ab866b483f8c5f27b879c1c6783dca30949f" }, "pipfile-spec": 6, "requires": { - "python_version": "3.7" + "python_version": "3.8" }, "sources": [ { @@ -80,72 +80,59 @@ }, "cffi": { "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3", + "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2", + "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636", + "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20", + "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728", + "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27", + "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66", + "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443", + "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0", + "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7", + "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39", + "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605", + "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a", + "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37", + "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029", + "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139", + "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc", + "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df", + "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14", + "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880", + "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2", + "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a", + "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e", + "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474", + "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024", + "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8", + "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0", + "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e", + "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a", + "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e", + "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032", + "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6", + "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e", + "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b", + "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e", + "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954", + "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962", + "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c", + "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4", + "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55", + "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962", + "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023", + "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c", + "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6", + "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8", + "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382", + "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7", + "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc", + "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997", + "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796" ], - "version": "==1.15.1" + "index": "pypi", + "version": "==1.15.0" }, "click": { "hashes": [ @@ -179,11 +166,11 @@ }, "fastapi": { "hashes": [ - "sha256:15fcabd5c78c266fa7ae7d8de9b384bfc2375ee0503463a6febbe3bab69d6f65", - "sha256:3233d4a789ba018578658e2af1a4bb5e38bdd122ff722b313666a9b2c6786a83" + "sha256:cf0ff6db25b91d321050c4112baab0908c90f19b40bf257f9591d2f9780d1f22", + "sha256:d337563424ceada23857f73d5abe8dae0c28e4cccb53b2af06e78b7bb4a1c7d7" ], "index": "pypi", - "version": "==0.78.0" + "version": "==0.79.0" }, "h11": { "hashes": [ @@ -504,10 +491,11 @@ }, "pypng": { "hashes": [ - "sha256:76f8a1539ec56451da7ab7121f12a361969fe0f2d48d703d198ce2a99d6c5afd" + "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c", + "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1" ], "index": "pypi", - "version": "==0.0.21" + "version": "==0.20220715.0" }, "pyqrcode": { "hashes": [ @@ -707,7 +695,6 @@ "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6" ], "index": "pypi", - "markers": "python_version < '3.10'", "version": "==4.3.0" }, "uvicorn": { @@ -741,20 +728,25 @@ }, "watchfiles": { "hashes": [ - "sha256:56abed43e645d1f2d6def83e35999cc5758b051aff54ca1065cbfcaea15b3389", - "sha256:65ca99a94fcab29d00aa406526eb29cf198c0661854d59a315596064fed02141", - "sha256:67d4c66e46a564059df4aeedab78f09cba0b697bf36cc77566b0a7015dfb7f5d", - "sha256:6e0e8829d32b05151e6009570449f44f891e05f518e495d25f960e0d0b2d0064", - "sha256:715733c2ac9da67b2790788657ff6f8b3797eb31565bfc592289b523ae907ca2", - "sha256:7b81c6e404b2aa62482a719eb778e4a16d01728302dce1f1512c1e5354a73fda", - "sha256:82238d08d8a49f1a1ba254278cd4329a154f6100b028393059722ebeddd2ff3d", - "sha256:955e8f840e1996a8a41be57de4c03af7b1515a685b7fb6abe222f859e413a907", - "sha256:cab62510f990d195986302aa6a48ed636d685b099927049120d520c96069fa49", - "sha256:d1f9de6b776b3aff17898a4cf5ac5a2d0a16212ea7aad2bbe0ef6aa3e79a96af", - "sha256:d4f45acd1143db6d3ee77a4ff12d3239bc8083108133e6174e9dcce59c1f9902", - "sha256:f7f71012e096e11256fae3b37617a9777980f281e18deb2e789e85cd5b113935" + "sha256:059bd9596429f8c13604b2eb30888a5661b3c79099edc506f11b63be7afe3ca4", + "sha256:09490d258be8fdd7f5141a39b468dede0b4aa4a52f2b2dbfb0f3835ae7c23eca", + "sha256:1bb5f0117c8b93f8e1b22ac0be60cfeb00332959a72e6bbe2073fea27ed086e5", + "sha256:3d3f0397c9128971398a5cbb0fb45852ab2fa4472ac9724c031071e1e39970c0", + "sha256:43d1d517faffa8955c2da0e6f64268e38442d43b50ca73cb686df25f891e49a1", + "sha256:4f712dbe9d8c0365bf46ffe0dd9c6a62cc0acf05ba951f1a53de2b4d5bb63299", + "sha256:59498853d3214d1e4d9b1cb3a06b0011a11f24d31708b1734d9cd7f5a30fe1af", + "sha256:5e3d4c92091d16bca1d61920575dab5d6dcbceda76dccd5fb91da0b7390b4ee9", + "sha256:5fa786d102e7eabef22b2147af531aa70194aabcb35335be81c07c26382b0050", + "sha256:750e40db5efcf3f5f11602dbc6fdf8e96a0eefdbccd271093efe9fa2e9d02ed2", + "sha256:7c80e3907d21ca3f1689f42632d239fdc40ffc1d5f32f564997480f85e94c474", + "sha256:8d635dcba3aab2909bf568765547696d7465d30e2e9c6f5ab99da877b58d29bb", + "sha256:a5f64674559fac56a6bf2f5e086cb3758740140c80711fe3e016f5443b84ef15", + "sha256:bcd085980389bc64fe509188a9caffa4fe13b2616e2e3e674cde58f916b2a8ee", + "sha256:c9e3756cd2ba17e5042e8c9399a08e4bdbe1a366156a164e8373bda30ca096d0", + "sha256:cbdb7814ca43f85ab8569206ab2c3bcd51dd5d1ba582914246784414e6ada62e", + "sha256:d5fb4f3b5c884d4f22f643b0697edbb04942bcad961a8f9a9bfadb73e7a1e229" ], - "version": "==0.15.0" + "version": "==0.16.0" }, "websockets": { "hashes": [ @@ -923,32 +915,32 @@ }, "mypy": { "hashes": [ - "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5", - "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66", - "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e", - "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56", - "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e", - "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d", - "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813", - "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932", - "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569", - "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b", - "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0", - "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648", - "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6", - "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950", - "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15", - "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723", - "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a", - "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3", - "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6", - "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24", - "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b", - "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d", - "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492" + "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655", + "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9", + "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3", + "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6", + "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0", + "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58", + "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103", + "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09", + "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417", + "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56", + "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2", + "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856", + "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0", + "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8", + "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27", + "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5", + "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71", + "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27", + "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe", + "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca", + "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf", + "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9", + "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c" ], "index": "pypi", - "version": "==0.961" + "version": "==0.971" }, "mypy-extensions": { "hashes": [ @@ -1002,12 +994,11 @@ }, "pytest-asyncio": { "hashes": [ - "sha256:16cf40bdf2b4fb7fc8e4b82bd05ce3fbcd454cbf7b92afc445fe299dabb88213", - "sha256:7659bdb0a9eb9c6e3ef992eef11a2b3e69697800ad02fb06374a210d85b29f91", - "sha256:8fafa6c52161addfd41ee7ab35f11836c5a16ec208f93ee388f752bea3493a84" + "sha256:7a97e37cfe1ed296e2e84941384bdd37c376453912d397ed39293e0916f521fa", + "sha256:ac4ebf3b6207259750bc32f4c1d8fcd7e79739edbc67ad0c58dd150b1d072fed" ], "index": "pypi", - "version": "==0.18.3" + "version": "==0.19.0" }, "pytest-cov": { "hashes": [ @@ -1153,7 +1144,6 @@ "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6" ], "index": "pypi", - "markers": "python_version < '3.10'", "version": "==4.3.0" }, "urllib3": { diff --git a/docs/guide/installation.md b/docs/guide/installation.md index 8509dcbe..591516f1 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -72,7 +72,7 @@ If you want to host LNbits on the internet, run with the option `--host 0.0.0.0` Problems installing? These commands have helped us install LNbits. ```sh -sudo apt install pkg-config libffi-dev libpq-dev setuptools +sudo apt install pkg-config libffi-dev libpq-dev # if the secp256k1 build fails: # if you used pipenv (option 1) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 4366028d..86f7ecff 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -112,7 +112,7 @@ async def wallet( if not user_id: user = await get_user((await create_account()).id) - logger.info(f"Created new account for user {user.id}") + logger.info(f"Create user {user.id}") else: user = await get_user(user_id) if not user: @@ -139,7 +139,7 @@ async def wallet( status_code=status.HTTP_307_TEMPORARY_REDIRECT, ) - logger.info(f"Access wallet {wallet_name} of user {user.id}") + logger.debug(f"Access wallet {wallet_name}{'of user '+ user.id if user else ''}") wallet = user.get_wallet(wallet_id) if not wallet: return template_renderer().TemplateResponse( diff --git a/requirements.txt b/requirements.txt index 8359456f..f8ccf47c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,9 +14,9 @@ embit==0.4.9 environs==9.3.3 fastapi==0.68.1 h11==0.12.0 -httpcore==0.13.7 +httpcore==0.15.0 httptools==0.2.0 -httpx==0.19.0 +httpx==0.23.0 idna==3.2 importlib-metadata==4.8.1 jinja2==3.0.1 @@ -36,6 +36,7 @@ pyyaml==5.4.1 represent==1.6.0.post0 rfc3986==1.5.0 secp256k1==0.14.0 +cffi==1.15.0 shortuuid==1.0.1 six==1.16.0 sniffio==1.2.0 @@ -48,4 +49,4 @@ uvicorn==0.15.0 uvloop==0.16.0 watchgod==0.7 websockets==10.0 -zipp==3.5.0 \ No newline at end of file +zipp==3.5.0 diff --git a/tests/conftest.py b/tests/conftest.py index 8ab1ab4b..adb1fa36 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -51,32 +51,42 @@ async def db(): @pytest_asyncio.fixture(scope="session") -async def from_user_wallet(): +async def from_user(): user = await create_account() + yield user + + +@pytest_asyncio.fixture(scope="session") +async def from_wallet(from_user): + user = from_user wallet = await create_wallet(user_id=user.id, wallet_name="test_wallet_from") await credit_wallet( wallet_id=wallet.id, amount=99999999, ) - # print("new from_user_wallet:", wallet) - yield user, wallet + yield wallet @pytest_asyncio.fixture(scope="session") -async def to_user_wallet(): +async def to_user(): user = await create_account() + yield user + + +@pytest_asyncio.fixture(scope="session") +async def to_wallet(to_user): + user = to_user wallet = await create_wallet(user_id=user.id, wallet_name="test_wallet_to") await credit_wallet( wallet_id=wallet.id, amount=99999999, ) - # print("new to_user_wallet:", wallet) - yield user, wallet + yield wallet @pytest_asyncio.fixture(scope="session") -async def inkey_headers_from(from_user_wallet): - _, wallet = from_user_wallet +async def inkey_headers_from(from_wallet): + wallet = from_wallet yield { "X-Api-Key": wallet.inkey, "Content-type": "application/json", @@ -84,8 +94,8 @@ async def inkey_headers_from(from_user_wallet): @pytest_asyncio.fixture(scope="session") -async def adminkey_headers_from(from_user_wallet): - _, wallet = from_user_wallet +async def adminkey_headers_from(from_wallet): + wallet = from_wallet yield { "X-Api-Key": wallet.adminkey, "Content-type": "application/json", @@ -93,8 +103,8 @@ async def adminkey_headers_from(from_user_wallet): @pytest_asyncio.fixture(scope="session") -async def inkey_headers_to(to_user_wallet): - _, wallet = to_user_wallet +async def inkey_headers_to(to_wallet): + wallet = to_wallet yield { "X-Api-Key": wallet.inkey, "Content-type": "application/json", @@ -102,8 +112,8 @@ async def inkey_headers_to(to_user_wallet): @pytest_asyncio.fixture(scope="session") -async def adminkey_headers_to(to_user_wallet): - _, wallet = to_user_wallet +async def adminkey_headers_to(to_wallet): + wallet = to_wallet yield { "X-Api-Key": wallet.adminkey, "Content-type": "application/json", @@ -111,18 +121,13 @@ async def adminkey_headers_to(to_user_wallet): @pytest_asyncio.fixture(scope="session") -async def invoice(to_user_wallet): - _, wallet = to_user_wallet +async def invoice(to_wallet): + wallet = to_wallet data = await get_random_invoice_data() invoiceData = CreateInvoiceData(**data) - # print("--------- New invoice!") - # print("wallet:") - # print(wallet) stuff_lock = asyncio.Lock() async with stuff_lock: invoice = await api_payments_create_invoice(invoiceData, wallet) await asyncio.sleep(1) - # print("invoice") - # print(invoice) yield invoice del invoice diff --git a/tests/core/views/test_api.py b/tests/core/views/test_api.py index 10e659aa..6a5f82ec 100644 --- a/tests/core/views/test_api.py +++ b/tests/core/views/test_api.py @@ -11,11 +11,26 @@ async def test_core_views_generic(client): assert response.status_code == 200 -# check GET /api/v1/wallet: wallet info +# check GET /api/v1/wallet with inkey: wallet info, no balance @pytest.mark.asyncio -async def test_get_wallet(client, inkey_headers_to): +async def test_get_wallet_inkey(client, inkey_headers_to): response = await client.get("/api/v1/wallet", headers=inkey_headers_to) - assert response.status_code < 300 + assert response.status_code == 200 + result = response.json() + assert "name" in result + assert "balance" in result + assert "id" not in result + + +# check GET /api/v1/wallet with adminkey: wallet info with balance +@pytest.mark.asyncio +async def test_get_wallet_adminkey(client, adminkey_headers_to): + response = await client.get("/api/v1/wallet", headers=adminkey_headers_to) + assert response.status_code == 200 + result = response.json() + assert "name" in result + assert "balance" in result + assert "id" in result # check POST /api/v1/payments: invoice creation diff --git a/tests/core/views/test_generic.py b/tests/core/views/test_generic.py index 88f5968b..1dff6f01 100644 --- a/tests/core/views/test_generic.py +++ b/tests/core/views/test_generic.py @@ -6,4 +6,94 @@ from tests.conftest import client @pytest.mark.asyncio async def test_core_views_generic(client): response = await client.get("/") - assert response.status_code == 200 + assert response.status_code == 200, ( + str(response.url) + " " + str(response.status_code) + ) + + +# check GET /wallet: wallet info +@pytest.mark.asyncio +async def test_get_wallet(client): + response = await client.get("wallet") + assert response.status_code == 307, ( # redirect not modified + str(response.url) + " " + str(response.status_code) + ) + + +# check GET /wallet: do not allow redirects, expect code 307 +@pytest.mark.asyncio +async def test_get_wallet_no_redirect(client): + response = await client.get("wallet", follow_redirects=False) + assert response.status_code == 307, ( + str(response.url) + " " + str(response.status_code) + ) + + # determine the next redirect location + request = client.build_request("GET", "wallet") + i = 0 + while request is not None: + response = await client.send(request) + request = response.next_request + if i == 0: + assert response.status_code == 307, ( # first redirect + str(response.url) + " " + str(response.status_code) + ) + elif i == 1: + assert response.status_code == 200, ( # then get the actual page + str(response.url) + " " + str(response.status_code) + ) + i += 1 + + +# check GET /wallet: wrong user, expect 204 +@pytest.mark.asyncio +async def test_get_wallet_with_nonexistent_user(client): + response = await client.get("wallet", params={"usr": "1"}) + assert response.status_code == 204, ( + str(response.url) + " " + str(response.status_code) + ) + + +# check GET /wallet: with user +@pytest.mark.asyncio +async def test_get_wallet_with_user(client, to_user): + response = await client.get("wallet", params={"usr": to_user.id}) + assert response.status_code == 307, ( + str(response.url) + " " + str(response.status_code) + ) + + # determine the next redirect location + request = client.build_request("GET", "wallet", params={"usr": to_user.id}) + i = 0 + while request is not None: + response = await client.send(request) + request = response.next_request + if i == 0: + assert response.status_code == 307, ( # first redirect + str(response.url) + " " + str(response.status_code) + ) + elif i == 1: + assert response.status_code == 200, ( # then get the actual page + str(response.url) + " " + str(response.status_code) + ) + i += 1 + + +# check GET /wallet: wallet and user +@pytest.mark.asyncio +async def test_get_wallet_with_user_and_wallet(client, to_user, to_wallet): + response = await client.get( + "wallet", params={"usr": to_user.id, "wal": to_wallet.id} + ) + assert response.status_code == 200, ( + str(response.url) + " " + str(response.status_code) + ) + + +# check GET /wallet: wrong wallet and user, expect 204 +@pytest.mark.asyncio +async def test_get_wallet_with_user_and_wrong_wallet(client, to_user, to_wallet): + response = await client.get("wallet", params={"usr": to_user.id, "wal": "1"}) + assert response.status_code == 204, ( + str(response.url) + " " + str(response.status_code) + )