diff --git a/.gitignore b/.gitignore index 28fbdb6..ee6e50c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ build/ gmon.out *.egg-info .venv/ +.idea \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a014d07..d8c7e89 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,9 @@ stages: - test + - run-coverage - slither-analyzer + variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" @@ -35,8 +37,31 @@ test: # run tests - bash run_tests.sh -slither-analize: +run-coverage: + stage: test + image: registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-python:latest + script: + - cd python + - export PYTHONPATH=. + - pip install --extra-index-url https://pip.grassrootseconomics.net + --extra-index-url https://gitlab.com/api/v4/projects/27624814/packages/pypi/simple + -r requirements.txt -r test_requirements.txt + - pip install pytest pytest-cov + - coverage run -m pytest + - coverage html + - coverage report --fail-under=90 + + coverage: '/^TOTAL.+?(\d+\%)$/' + artifacts: + reports: + cobertura: python/htmlcov/index.html + +slither-analyzer: image: registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-python:latest allow_failure: true script: - - slither solidity/ + - cd solidity + - slither GiftableToken.sol + - slither GiftableToken.sol --print human-summary + + diff --git a/python/.coverage b/python/.coverage new file mode 100644 index 0000000..51af88f Binary files /dev/null and b/python/.coverage differ diff --git a/python/.coveragerc b/python/.coveragerc new file mode 100644 index 0000000..1951f90 --- /dev/null +++ b/python/.coveragerc @@ -0,0 +1,7 @@ +[run] +branch = True +[report] +omit = .venv/* + **/runnable/*.py +[html] + diff --git a/python/giftable_erc20_token/factory.py b/python/giftable_erc20_token/factory.py index 3031e5a..54ac868 100644 --- a/python/giftable_erc20_token/factory.py +++ b/python/giftable_erc20_token/factory.py @@ -94,4 +94,4 @@ class GiftableToken(TxFactory): tx = self.template(sender_address, contract_address, use_nonce=True) tx = self.set_code(tx, data) tx = self.finalize(tx, tx_format) - return tx + return tx \ No newline at end of file diff --git a/python/tests/test_erc20_interface.py b/python/tests/test_erc20_interface.py index 4c586d1..d500bfb 100644 --- a/python/tests/test_erc20_interface.py +++ b/python/tests/test_erc20_interface.py @@ -12,6 +12,7 @@ from chainlib.eth.tx import ( receipt, ) from chainlib.eth.address import to_checksum_address +from hexathon import strip_0x # local imports from giftable_erc20_token import GiftableToken @@ -102,7 +103,7 @@ class TestToken(EthTesterCase): o = transaction(tx_hash) r = self.rpc.do(o) data = c.parse_transfer_request(r['data']) - self.assertEqual(data[0], self.accounts[1]) + self.assertEqual(data[0], strip_0x(self.accounts[1])) self.assertEqual(data[1], 1000) @@ -124,7 +125,7 @@ class TestToken(EthTesterCase): o = transaction(tx_hash) r = self.rpc.do(o) data = c.parse_approve_request(r['data']) - self.assertEqual(data[0], self.accounts[1]) + self.assertEqual(data[0], strip_0x(self.accounts[1])) self.assertEqual(data[1], 1000) nonce_oracle = RPCNonceOracle(self.accounts[1], conn=self.conn) @@ -138,8 +139,8 @@ class TestToken(EthTesterCase): o = transaction(tx_hash) r = self.rpc.do(o) data = c.parse_transfer_from_request(r['data']) - self.assertEqual(data[0], self.accounts[0]) - self.assertEqual(data[1], self.accounts[2]) + self.assertEqual(data[0], strip_0x(self.accounts[0])) + self.assertEqual(data[1], strip_0x(self.accounts[2])) self.assertEqual(data[2], 1001) (tx_hash, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[0], self.accounts[2], 1000) diff --git a/solidity/GiftableToken.sol b/solidity/GiftableToken.sol index 24bcb59..49ba75b 100644 --- a/solidity/GiftableToken.sol +++ b/solidity/GiftableToken.sol @@ -1,4 +1,4 @@ -pragma solidity >0.6.11; +pragma solidity >=0.6.11; // SPDX-License-Identifier: GPL-3.0-or-later // File-Version: 2