genlayer-test 0.2.0__py3-none-any.whl → 0.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. {genlayer_test-0.2.0.dist-info → genlayer_test-0.3.1.dist-info}/METADATA +77 -10
  2. genlayer_test-0.3.1.dist-info/RECORD +65 -0
  3. {genlayer_test-0.2.0.dist-info → genlayer_test-0.3.1.dist-info}/entry_points.txt +1 -1
  4. gltest/__init__.py +4 -4
  5. gltest/artifacts/contract.py +9 -4
  6. gltest/glchain/__init__.py +3 -3
  7. gltest/glchain/account.py +15 -11
  8. gltest/glchain/client.py +39 -3
  9. gltest/glchain/contract.py +57 -26
  10. gltest/helpers/fixture_snapshot.py +3 -2
  11. gltest_cli/config/__init__.py +0 -0
  12. gltest_cli/config/constants.py +10 -0
  13. gltest_cli/config/general.py +10 -0
  14. gltest_cli/config/plugin.py +102 -0
  15. gltest_cli/config/types.py +137 -0
  16. gltest_cli/config/user.py +222 -0
  17. gltest_cli/logging.py +51 -0
  18. tests/__init__.py +0 -0
  19. tests/examples/tests/test_llm_erc20.py +2 -2
  20. tests/examples/tests/test_multi_read_erc20.py +13 -3
  21. tests/examples/tests/test_multi_tenant_storage.py +12 -3
  22. tests/examples/tests/test_read_erc20.py +2 -2
  23. tests/examples/tests/test_storage.py +4 -2
  24. tests/examples/tests/test_user_storage.py +17 -3
  25. tests/gltest/__init__.py +0 -0
  26. tests/gltest/artifact/__init__.py +0 -0
  27. tests/gltest/artifact/test_contract_definition.py +91 -0
  28. tests/gltest_cli/__init__.py +0 -0
  29. tests/gltest_cli/config/test_plugin.py +127 -0
  30. tests/gltest_cli/config/test_user.py +351 -0
  31. genlayer_test-0.2.0.dist-info/RECORD +0 -55
  32. gltest/plugin_config.py +0 -42
  33. gltest/plugin_hooks.py +0 -51
  34. tests/artifact/test_contract_definition.py +0 -347
  35. tests/plugin/test_plugin_hooks.py +0 -78
  36. {genlayer_test-0.2.0.dist-info → genlayer_test-0.3.1.dist-info}/WHEEL +0 -0
  37. {genlayer_test-0.2.0.dist-info → genlayer_test-0.3.1.dist-info}/licenses/LICENSE +0 -0
  38. {genlayer_test-0.2.0.dist-info → genlayer_test-0.3.1.dist-info}/top_level.txt +0 -0
  39. /tests/{plugin/conftest.py → conftest.py} +0 -0
  40. /tests/{artifact → gltest/artifact}/contracts/duplicate_ic_contract_1.py +0 -0
  41. /tests/{artifact → gltest/artifact}/contracts/duplicate_ic_contract_2.py +0 -0
  42. /tests/{artifact → gltest/artifact}/contracts/not_ic_contract.py +0 -0
  43. /tests/{assertions → gltest/assertions}/test_assertions.py +0 -0
@@ -0,0 +1,91 @@
1
+ import pytest
2
+ from gltest.artifacts.contract import (
3
+ find_contract_definition_from_name,
4
+ compute_contract_code,
5
+ )
6
+ from gltest_cli.config.general import get_general_config
7
+ from pathlib import Path
8
+
9
+ CONTRACTS_DIR = Path("tests/examples/contracts")
10
+
11
+
12
+ def test_single_file():
13
+ general_config = get_general_config()
14
+ general_config.set_contracts_dir(Path("."))
15
+ contract_definition = find_contract_definition_from_name("PredictionMarket")
16
+
17
+ assert contract_definition.contract_name == "PredictionMarket"
18
+
19
+ # Assert complete contract definition
20
+ expected_main_file_path = CONTRACTS_DIR / "football_prediction_market.py"
21
+ expected_runner_file_path = None
22
+ contract_code = compute_contract_code(
23
+ expected_main_file_path, expected_runner_file_path
24
+ )
25
+ assert contract_definition.contract_code == contract_code
26
+ assert str(contract_definition.main_file_path) == str(
27
+ CONTRACTS_DIR / "football_prediction_market.py"
28
+ )
29
+ assert contract_definition.runner_file_path is None
30
+
31
+
32
+ def test_multiple_files():
33
+ general_config = get_general_config()
34
+ general_config.set_contracts_dir(Path("."))
35
+ contract_definition = find_contract_definition_from_name("MultiFileContract")
36
+
37
+ assert contract_definition.contract_name == "MultiFileContract"
38
+
39
+ # Assert complete contract definition
40
+ expected_main_file_path = CONTRACTS_DIR / "multi_file_contract/__init__.py"
41
+ expected_runner_file_path = CONTRACTS_DIR / "multi_file_contract/runner.json"
42
+ assert contract_definition.main_file_path == expected_main_file_path
43
+ assert contract_definition.runner_file_path == expected_runner_file_path
44
+ contract_code = compute_contract_code(
45
+ expected_main_file_path, expected_runner_file_path
46
+ )
47
+ assert contract_definition.contract_code == contract_code
48
+
49
+
50
+ def test_single_file_legacy():
51
+ general_config = get_general_config()
52
+ general_config.set_contracts_dir(Path("."))
53
+ contract_definition = find_contract_definition_from_name("StorageLegacy")
54
+
55
+ # Assert complete contract definition
56
+ assert contract_definition.contract_name == "StorageLegacy"
57
+ expected_main_file_path = CONTRACTS_DIR / "storage_legacy.gpy"
58
+ expected_runner_file_path = None
59
+ contract_code = compute_contract_code(
60
+ expected_main_file_path, expected_runner_file_path
61
+ )
62
+ assert contract_definition.contract_code == contract_code
63
+ assert str(contract_definition.main_file_path) == str(
64
+ CONTRACTS_DIR / "storage_legacy.gpy"
65
+ )
66
+ assert contract_definition.runner_file_path is None
67
+
68
+
69
+ def test_multiple_files_legacy():
70
+ general_config = get_general_config()
71
+ general_config.set_contracts_dir(Path("."))
72
+ contract_definition = find_contract_definition_from_name("MultiFileContractLegacy")
73
+
74
+ # Assert complete contract definition
75
+ assert contract_definition.contract_name == "MultiFileContractLegacy"
76
+ expected_main_file_path = CONTRACTS_DIR / "multi_file_contract_legacy/__init__.gpy"
77
+ expected_runner_file_path = CONTRACTS_DIR / "multi_file_contract_legacy/runner.json"
78
+ assert contract_definition.main_file_path == expected_main_file_path
79
+ assert contract_definition.runner_file_path == expected_runner_file_path
80
+ contract_code = compute_contract_code(
81
+ expected_main_file_path, expected_runner_file_path
82
+ )
83
+ assert contract_definition.contract_code == contract_code
84
+
85
+
86
+ def test_class_is_not_intelligent_contract():
87
+ general_config = get_general_config()
88
+ general_config.set_contracts_dir(Path("."))
89
+
90
+ with pytest.raises(FileNotFoundError):
91
+ _ = find_contract_definition_from_name("NotICContract")
File without changes
@@ -0,0 +1,127 @@
1
+ def test_help_message(pytester):
2
+ result = pytester.runpytest(
3
+ "--help",
4
+ )
5
+ # fnmatch_lines does an assertion internally
6
+ result.stdout.fnmatch_lines(
7
+ [
8
+ "gltest:",
9
+ " --contracts-dir=CONTRACTS_DIR",
10
+ " Path to directory containing contract files",
11
+ " --default-wait-interval=DEFAULT_WAIT_INTERVAL",
12
+ " Default interval (ms) between transaction receipt checks",
13
+ " --default-wait-retries=DEFAULT_WAIT_RETRIES",
14
+ " Default number of retries for transaction receipt checks",
15
+ " --rpc-url=RPC_URL RPC endpoint URL for the GenLayer network",
16
+ " --network=NETWORK Target network (defaults to 'localnet' if no config",
17
+ " file)",
18
+ ]
19
+ )
20
+
21
+
22
+ def test_default_wait_interval(pytester):
23
+
24
+ pytester.makepyfile(
25
+ """
26
+ from gltest_cli.config.general import get_general_config
27
+
28
+ def test_default_wait_interval():
29
+ general_config = get_general_config()
30
+ assert general_config.get_default_wait_interval() == 5000
31
+ """
32
+ )
33
+
34
+ result = pytester.runpytest("--default-wait-interval=5000", "-v")
35
+
36
+ result.stdout.fnmatch_lines(
37
+ [
38
+ "*::test_default_wait_interval PASSED*",
39
+ ]
40
+ )
41
+ assert result.ret == 0
42
+
43
+
44
+ def test_default_wait_retries(pytester):
45
+ pytester.makepyfile(
46
+ """
47
+ from gltest_cli.config.general import get_general_config
48
+
49
+ def test_default_wait_retries():
50
+ general_config = get_general_config()
51
+ assert general_config.get_default_wait_retries() == 4000
52
+ """
53
+ )
54
+
55
+ result = pytester.runpytest("--default-wait-retries=4000", "-v")
56
+
57
+ result.stdout.fnmatch_lines(
58
+ [
59
+ "*::test_default_wait_retries PASSED*",
60
+ ]
61
+ )
62
+ assert result.ret == 0
63
+
64
+
65
+ def test_rpc_url(pytester):
66
+ pytester.makepyfile(
67
+ """
68
+ from gltest_cli.config.general import get_general_config
69
+
70
+ def test_rpc_url():
71
+ general_config = get_general_config()
72
+ assert general_config.get_rpc_url() == 'http://custom-rpc-url:8545'
73
+ """
74
+ )
75
+
76
+ result = pytester.runpytest("--rpc-url=http://custom-rpc-url:8545", "-v")
77
+
78
+ result.stdout.fnmatch_lines(
79
+ [
80
+ "*::test_rpc_url PASSED*",
81
+ ]
82
+ )
83
+ assert result.ret == 0
84
+
85
+
86
+ def test_network_localnet(pytester):
87
+ pytester.makepyfile(
88
+ """
89
+ from gltest_cli.config.general import get_general_config
90
+
91
+ def test_network():
92
+ general_config = get_general_config()
93
+ assert general_config.get_network_name() == "localnet"
94
+ """
95
+ )
96
+
97
+ result = pytester.runpytest("--network=localnet", "-v")
98
+
99
+ result.stdout.fnmatch_lines(
100
+ [
101
+ "*::test_network PASSED*",
102
+ ]
103
+ )
104
+ assert result.ret == 0
105
+
106
+
107
+ def test_network_testnet(pytester):
108
+ pytester.makepyfile(
109
+ """
110
+ from gltest_cli.config.general import get_general_config
111
+
112
+ def test_network():
113
+ general_config = get_general_config()
114
+ assert general_config.get_network_name() == "testnet_asimov"
115
+ """
116
+ )
117
+
118
+ result = pytester.runpytest(
119
+ "--network=testnet_asimov", "--rpc-url=http://test.example.com:9151", "-v"
120
+ )
121
+
122
+ result.stdout.fnmatch_lines(
123
+ [
124
+ "*::test_network PASSED*",
125
+ ]
126
+ )
127
+ assert result.ret == 0
@@ -0,0 +1,351 @@
1
+ import pytest
2
+ import yaml
3
+ from unittest.mock import patch, mock_open
4
+ from gltest_cli.config.user import (
5
+ get_default_user_config,
6
+ load_user_config,
7
+ validate_raw_user_config,
8
+ transform_raw_to_user_config_with_defaults,
9
+ user_config_exists,
10
+ VALID_ROOT_KEYS,
11
+ DEFAULT_NETWORK,
12
+ DEFAULT_ENVIRONMENT,
13
+ DEFAULT_CONTRACTS_DIR,
14
+ )
15
+ from gltest_cli.config.constants import DEFAULT_RPC_URL
16
+ from gltest_cli.config.types import UserConfig, NetworkConfigData, PathConfig
17
+ from unittest.mock import MagicMock
18
+ from pathlib import Path
19
+
20
+ # Test data
21
+ VALID_CONFIG = {
22
+ "networks": {
23
+ "default": "localnet",
24
+ "localnet": {
25
+ "url": "http://localhost:8545",
26
+ "accounts": ["0x123", "0x456"],
27
+ "from": "0x123",
28
+ },
29
+ "testnet_asimov": {
30
+ "id": 4221,
31
+ "url": "http://34.32.169.58:9151",
32
+ "accounts": ["0x123", "0x456"],
33
+ "from": "0x123",
34
+ },
35
+ },
36
+ "paths": {"contracts": "contracts"},
37
+ "environment": ".env",
38
+ }
39
+
40
+ INVALID_CONFIG = {
41
+ "networks": {
42
+ "default": "invalid_network",
43
+ "localnet": {
44
+ "url": 123, # Invalid type
45
+ "accounts": "not_a_list", # Invalid type
46
+ "from": 456, # Invalid type
47
+ },
48
+ },
49
+ "paths": {"invalid_path": "value"},
50
+ "environment": 123, # Invalid type
51
+ }
52
+
53
+
54
+ def test_get_default_user_config():
55
+ config = get_default_user_config()
56
+
57
+ # Check root structure
58
+ assert isinstance(config, UserConfig)
59
+ assert all(key in config.__dict__ for key in VALID_ROOT_KEYS)
60
+
61
+ # Check networks
62
+ assert DEFAULT_NETWORK == config.default_network
63
+ assert DEFAULT_NETWORK in config.networks
64
+
65
+ # Check network configuration
66
+ network = config.networks[DEFAULT_NETWORK]
67
+ assert isinstance(network, NetworkConfigData)
68
+ assert network.url == DEFAULT_RPC_URL
69
+ assert isinstance(network.accounts, list)
70
+ assert isinstance(network.from_account, str)
71
+ assert network.from_account in network.accounts
72
+
73
+ # Check paths
74
+ assert isinstance(config.paths, PathConfig)
75
+ assert config.paths.contracts == DEFAULT_CONTRACTS_DIR
76
+
77
+ # Check environment
78
+ assert config.environment == DEFAULT_ENVIRONMENT
79
+
80
+
81
+ def test_validate_raw_user_config_valid():
82
+ # Should not raise any exceptions
83
+ validate_raw_user_config(VALID_CONFIG)
84
+
85
+
86
+ def test_validate_raw_user_config_invalid():
87
+ with pytest.raises(ValueError, match="Invalid configuration keys"):
88
+ validate_raw_user_config({"invalid_key": "value"})
89
+
90
+ with pytest.raises(ValueError, match="networks must be a dictionary"):
91
+ validate_raw_user_config({"networks": "not_a_dict"})
92
+
93
+ with pytest.raises(ValueError, match="default network invalid_network not found"):
94
+ validate_raw_user_config(
95
+ {
96
+ "networks": {
97
+ "default": "invalid_network",
98
+ "localnet": {"url": "http://localhost:8545"},
99
+ }
100
+ }
101
+ )
102
+
103
+ with pytest.raises(ValueError, match="network localnet must be a dictionary"):
104
+ validate_raw_user_config(
105
+ {"networks": {"default": "localnet", "localnet": "not_a_dict"}}
106
+ )
107
+
108
+ with pytest.raises(ValueError, match="Invalid network key"):
109
+ validate_raw_user_config(
110
+ {"networks": {"default": "localnet", "localnet": {"invalid_key": "value"}}}
111
+ )
112
+
113
+ with pytest.raises(ValueError, match="url must be a string"):
114
+ validate_raw_user_config(
115
+ {"networks": {"default": "localnet", "localnet": {"url": 123}}}
116
+ )
117
+
118
+ with pytest.raises(ValueError, match="accounts must be a list"):
119
+ validate_raw_user_config(
120
+ {
121
+ "networks": {
122
+ "default": "localnet",
123
+ "localnet": {"accounts": "not_a_list"},
124
+ }
125
+ }
126
+ )
127
+
128
+ with pytest.raises(ValueError, match="accounts must be strings"):
129
+ validate_raw_user_config(
130
+ {"networks": {"default": "localnet", "localnet": {"accounts": [123]}}}
131
+ )
132
+
133
+ with pytest.raises(ValueError, match="from must be a string"):
134
+ validate_raw_user_config(
135
+ {"networks": {"default": "localnet", "localnet": {"from": 123}}}
136
+ )
137
+
138
+ with pytest.raises(ValueError, match="paths must be a dictionary"):
139
+ validate_raw_user_config({"paths": "not_a_dict"})
140
+
141
+ with pytest.raises(ValueError, match="Invalid path keys"):
142
+ validate_raw_user_config({"paths": {"invalid_path": "value"}})
143
+
144
+ with pytest.raises(ValueError, match="environment must be a string"):
145
+ validate_raw_user_config({"environment": 123})
146
+
147
+ # Test validation for non-default networks
148
+ with pytest.raises(ValueError, match="network testnet must be a dictionary"):
149
+ validate_raw_user_config(
150
+ {"networks": {"default": "localnet", "testnet": "not_a_dict"}}
151
+ )
152
+
153
+ with pytest.raises(ValueError, match="Invalid network key"):
154
+ validate_raw_user_config(
155
+ {"networks": {"default": "localnet", "testnet": {"invalid_key": "value"}}}
156
+ )
157
+
158
+ with pytest.raises(ValueError, match="url must be a string"):
159
+ validate_raw_user_config(
160
+ {"networks": {"default": "localnet", "testnet": {"url": 123}}}
161
+ )
162
+
163
+ with pytest.raises(ValueError, match="accounts must be a list"):
164
+ validate_raw_user_config(
165
+ {
166
+ "networks": {
167
+ "default": "localnet",
168
+ "testnet": {"accounts": "not_a_list"},
169
+ }
170
+ }
171
+ )
172
+
173
+ with pytest.raises(ValueError, match="accounts must be strings"):
174
+ validate_raw_user_config(
175
+ {"networks": {"default": "localnet", "testnet": {"accounts": [123]}}}
176
+ )
177
+
178
+ with pytest.raises(ValueError, match="from must be a string"):
179
+ validate_raw_user_config(
180
+ {"networks": {"default": "localnet", "testnet": {"from": 123}}}
181
+ )
182
+
183
+ # Test required fields for non-default networks
184
+ with pytest.raises(ValueError, match="network testnet must have an id"):
185
+ validate_raw_user_config(
186
+ {"networks": {"default": "localnet", "testnet": {"accounts": ["0x123"]}}}
187
+ )
188
+
189
+ with pytest.raises(ValueError, match="network testnet must have a url"):
190
+ validate_raw_user_config(
191
+ {
192
+ "networks": {
193
+ "default": "localnet",
194
+ "testnet": {"id": 4221, "accounts": ["0x123"]},
195
+ }
196
+ }
197
+ )
198
+
199
+ with pytest.raises(ValueError, match="network testnet must have accounts"):
200
+ validate_raw_user_config(
201
+ {
202
+ "networks": {
203
+ "default": "localnet",
204
+ "testnet": {"id": 4221, "url": "http://testnet:8545"},
205
+ }
206
+ }
207
+ )
208
+
209
+ # Test that 'from' is optional for non-default networks
210
+ valid_config_without_from = {
211
+ "networks": {
212
+ "default": "localnet",
213
+ "testnet": {
214
+ "id": 4221,
215
+ "url": "http://testnet:8545",
216
+ "accounts": ["0x123", "0x456"],
217
+ },
218
+ }
219
+ }
220
+ # Should not raise any exception
221
+ validate_raw_user_config(valid_config_without_from)
222
+
223
+
224
+ @patch("builtins.open", new_callable=mock_open, read_data=yaml.dump(VALID_CONFIG))
225
+ @patch("gltest_cli.config.user.load_dotenv")
226
+ def test_load_user_config(mock_load_dotenv, mock_file):
227
+ config = load_user_config("dummy_path")
228
+
229
+ # Check if file was opened
230
+ mock_file.assert_called_once_with("dummy_path", "r")
231
+
232
+ # Check if environment was loaded
233
+ mock_load_dotenv.assert_called_once_with(
234
+ dotenv_path=DEFAULT_ENVIRONMENT, override=True
235
+ )
236
+
237
+ # Check config structure
238
+ assert isinstance(config, UserConfig)
239
+
240
+ # Check default network
241
+ assert config.default_network == "localnet"
242
+ assert isinstance(config.networks["localnet"], NetworkConfigData)
243
+ assert config.networks["localnet"].id == 61999
244
+ assert config.networks["localnet"].url == "http://localhost:8545"
245
+ assert config.networks["localnet"].accounts == ["0x123", "0x456"]
246
+ assert config.networks["localnet"].from_account == "0x123"
247
+
248
+ # Check testnet_asimov network
249
+ assert isinstance(config.networks["testnet_asimov"], NetworkConfigData)
250
+ assert config.networks["testnet_asimov"].id == 4221
251
+ assert config.networks["testnet_asimov"].url == "http://34.32.169.58:9151"
252
+ assert config.networks["testnet_asimov"].accounts == ["0x123", "0x456"]
253
+ assert config.networks["testnet_asimov"].from_account == "0x123"
254
+
255
+ # Check paths
256
+ assert isinstance(config.paths, PathConfig)
257
+ assert config.paths.contracts == Path("contracts")
258
+
259
+ # Check environment
260
+ assert config.environment == ".env"
261
+
262
+
263
+ def test_transform_raw_to_user_config_with_defaults():
264
+ # Test with empty config
265
+ config = transform_raw_to_user_config_with_defaults({})
266
+ assert isinstance(config, UserConfig)
267
+ assert all(key in config.__dict__ for key in VALID_ROOT_KEYS)
268
+
269
+ # Test with partial config
270
+ partial_config = {
271
+ "networks": {"default": "localnet", "localnet": {"url": "custom_url"}}
272
+ }
273
+ config = transform_raw_to_user_config_with_defaults(partial_config)
274
+ assert isinstance(config.networks["localnet"], NetworkConfigData)
275
+ assert config.networks["localnet"].url == "custom_url"
276
+ assert config.networks["localnet"].accounts is not None
277
+ assert config.networks["localnet"].from_account is not None
278
+
279
+ # Test with None network config
280
+ config = transform_raw_to_user_config_with_defaults(
281
+ {"networks": {"default": "localnet", "localnet": None}}
282
+ )
283
+ assert config.networks["localnet"] is not None
284
+ assert isinstance(config.networks["localnet"], NetworkConfigData)
285
+
286
+ # Test setting 'from' for non-default networks
287
+ test_config = {
288
+ "networks": {
289
+ "default": "localnet",
290
+ "localnet": {"url": "http://localhost:8545"},
291
+ "testnet": {"url": "http://testnet:8545", "accounts": ["0x123", "0x456"]},
292
+ "mainnet": {
293
+ "url": "http://mainnet:8545",
294
+ "accounts": ["0xabc", "0x789"],
295
+ "from": "0x789", # Already set
296
+ },
297
+ }
298
+ }
299
+ config = transform_raw_to_user_config_with_defaults(test_config)
300
+
301
+ # Verify testnet got 'from' set to first account
302
+ assert config.networks["testnet"].from_account == "0x123"
303
+
304
+ # Verify mainnet kept its existing 'from' value
305
+ assert config.networks["mainnet"].from_account == "0x789"
306
+
307
+ # Verify localnet (default network) behavior remains unchanged
308
+ assert config.networks["localnet"].from_account is not None
309
+ assert (
310
+ config.networks["localnet"].from_account in config.networks["localnet"].accounts
311
+ )
312
+
313
+ # Test with custom paths
314
+ custom_paths_config = {
315
+ "networks": {"default": "localnet"},
316
+ "paths": {"contracts": "custom/contracts/path"},
317
+ }
318
+ config = transform_raw_to_user_config_with_defaults(custom_paths_config)
319
+ assert config.paths.contracts == Path("custom/contracts/path")
320
+
321
+ # Test with custom environment
322
+ custom_env_config = {
323
+ "networks": {"default": "localnet"},
324
+ "environment": "custom.env",
325
+ }
326
+ config = transform_raw_to_user_config_with_defaults(custom_env_config)
327
+ assert config.environment == "custom.env"
328
+
329
+
330
+ @patch("pathlib.Path.cwd")
331
+ def test_user_config_exists(mock_cwd):
332
+ mock_path = MagicMock()
333
+ mock_cwd.return_value = mock_path
334
+
335
+ # Test when config exists
336
+ config_file = MagicMock()
337
+ config_file.name = "gltest.config.yaml"
338
+ config_file.is_file.return_value = True
339
+ mock_path.iterdir.return_value = [config_file]
340
+ assert user_config_exists() is True
341
+
342
+ # Test when config doesn't exist
343
+ other_file = MagicMock()
344
+ other_file.name = "other_file.txt"
345
+ other_file.is_file.return_value = True
346
+ mock_path.iterdir.return_value = [other_file]
347
+ assert user_config_exists() is False
348
+
349
+ # Test with no files
350
+ mock_path.iterdir.return_value = []
351
+ assert user_config_exists() is False
@@ -1,55 +0,0 @@
1
- genlayer_test-0.2.0.dist-info/licenses/LICENSE,sha256=che_H4vE0QUx3HvWrAa1_jDEVInift0U6VO15-QqEls,1064
2
- gltest/__init__.py,sha256=AK_YfRvwlhrOheOelUG8qIRG17on0-nFCF747dopg2w,332
3
- gltest/assertions.py,sha256=0dEk0VxcHK4I7GZPHxJmz-2jaA60V499gOSR74rZbfM,1748
4
- gltest/exceptions.py,sha256=deJPmrTe5gF33qkkKF2IVJY7lc_knI7Ql3N7jZ8aLZs,510
5
- gltest/plugin_config.py,sha256=8Z97RtEJ89OcRbki_oRuBBVct_q56BFmKvthan1y9Y4,840
6
- gltest/plugin_hooks.py,sha256=py1rzIR9QSsFOt8SEePPL96e-8DeiPFxvcPZurRlExM,1436
7
- gltest/types.py,sha256=BODmwTr2gAUEiO9FjiuTiWwuKvXgo4xZWstQWNUfnlw,156
8
- gltest/artifacts/__init__.py,sha256=qTt3TE19gVNWnQLUlt5aDe4nNvJ2YJ1jzDkMmYIsCG0,194
9
- gltest/artifacts/contract.py,sha256=jqdsJD9B4aUTpR4EODHaag5j-IvdWm3Ac4ektbpTxFo,6152
10
- gltest/glchain/__init__.py,sha256=X-mEbREoAOe9K4n74C55gCiXH4wItzY5HTJcg3_F3mI,412
11
- gltest/glchain/account.py,sha256=ZxYsfbtBXKVC5vV4pko3yyL6lhPljqIb68NgIgvInSc,403
12
- gltest/glchain/client.py,sha256=q04LIQy5SCIrYZflZiTapfeQ-AaSTa0w369ehnVbJLM,532
13
- gltest/glchain/contract.py,sha256=aNS2Wm93BG4kug4iyWembBDaNb2mYCTJOTfDzMPoiRE,10042
14
- gltest/helpers/__init__.py,sha256=I7HiTu_H7_hP65zY6Wl02r-5eAMr2eZvqBVmusuQLX4,180
15
- gltest/helpers/fixture_snapshot.py,sha256=DWLTsMbTnfhpv0_7_gkJpDKX4hJx-tlruX7x3FWL6UI,2073
16
- gltest/helpers/take_snapshot.py,sha256=eXqEKXM2hcox3pLGIcNddobU8zXPQvD-Iwf87eHqW2s,1276
17
- gltest_cli/main.py,sha256=Ti2-0Ev1x5_cM0D1UKqdgaDt80CDHEQGtdRne2qLm4M,53
18
- tests/artifact/test_contract_definition.py,sha256=vr3guuJOvsQorUyv_ahbNvUwfDi6cq_NKAbQMATMp1g,13803
19
- tests/artifact/contracts/duplicate_ic_contract_1.py,sha256=bSWsUVjBy5cGtI72cjnkstsMzuUJbB3IG5JjTxOF-dc,500
20
- tests/artifact/contracts/duplicate_ic_contract_2.py,sha256=bSWsUVjBy5cGtI72cjnkstsMzuUJbB3IG5JjTxOF-dc,500
21
- tests/artifact/contracts/not_ic_contract.py,sha256=hQyGnYiiVceYdLI2WrvcFgPqzy1S4-YMb9FPhiHEGSA,510
22
- tests/assertions/test_assertions.py,sha256=qzVrOdOM4xYtIy1sFHVAD_-naDHOequ23tEN0MELh0k,10781
23
- tests/examples/contracts/football_prediction_market.py,sha256=kdouFijjeCdIJyaVJlgXcqbBAXecA9_YdhklSsIW-QM,3219
24
- tests/examples/contracts/intelligent_oracle.py,sha256=WrNZWWoi1sz22Azt2EXgdWHDg5Ihca2pWUHrM9pVfQE,12319
25
- tests/examples/contracts/intelligent_oracle_factory.py,sha256=ax496IZuDCA728rRcbjwTaM4Q4E-Y1jGkHsEcyf1cig,1490
26
- tests/examples/contracts/llm_erc20.py,sha256=nfIs-7A79L46NgHQzWbPyEOUlzAlFLsf4K05acwKr_M,2523
27
- tests/examples/contracts/log_indexer.py,sha256=VwMC8_Gy1Z1qjuy5GeEMyepjZ3Z5y7VAOrHMl5MrjxI,1852
28
- tests/examples/contracts/multi_read_erc20.py,sha256=HsMJKGT9a9eZAO43Em7hCRfh1yyHDgcUbQ0gmOE1MXs,850
29
- tests/examples/contracts/multi_tenant_storage.py,sha256=aGLPC76FegXdnIjMjeGsu3s3AbKK9dtV6t1d_KoI8rI,1897
30
- tests/examples/contracts/read_erc20.py,sha256=kstiB93JHHajJe1GldzeawxnVYutjT8KE2d1bYTgggU,390
31
- tests/examples/contracts/storage.py,sha256=GZHBXhjc94eEkdSO1UWgcop0fEo0hD57KZM0ds3pUFM,490
32
- tests/examples/contracts/user_storage.py,sha256=j-RXxTIqb1dePYqP_pkeoCxxDq07VURryvzF_Q-sZmI,638
33
- tests/examples/contracts/wizard_of_coin.py,sha256=BJ0Nv6N-JJP_Pk7YUSXPPRxX5_mDRBDlfL6nabeaoyA,1606
34
- tests/examples/contracts/multi_file_contract/__init__.py,sha256=8O3BvoUrLSmc4uTf2jm7MyrmcaiGD0w8wPwotdAqZHQ,485
35
- tests/examples/contracts/multi_file_contract/other.py,sha256=jHDtjUL3eAUgE6yOYKFw_RfAH7kIwk8CvxUjbWHNruk,236
36
- tests/examples/tests/test_football_prediction_market.py,sha256=wFu024sq3IURLL1zyLyO_G1sRCjPTV7iImi87__dZ4Y,657
37
- tests/examples/tests/test_intelligent_oracle_factory.py,sha256=Nw7jO9bjD79AETT2QQl0Vun-yxSAAuqGSdkQn2Y3WUw,5377
38
- tests/examples/tests/test_llm_erc20.py,sha256=yL_5bbH2VC7jL3E6dDvSI6PfZ36bPtA4OxoysZpuLFc,1390
39
- tests/examples/tests/test_log_indexer.py,sha256=Km44SiA8dlA4WBqwugXVBCQUlODdf1dB4p4nt24HG9k,2649
40
- tests/examples/tests/test_multi_file_contract.py,sha256=pWmK6lcZrSAnDH09Z6Q-cXs8V6VGFhHkvgThvJKEB4U,512
41
- tests/examples/tests/test_multi_file_contract_legacy.py,sha256=Jx_u0rDrQJspQgFo1KUddcFgTcOhcE-YLuLgk3tKrCA,527
42
- tests/examples/tests/test_multi_read_erc20.py,sha256=Q3AKK7OZyTKRrG-tXmkPkoQOzQqVVDnFEWKDVVNVQLI,3062
43
- tests/examples/tests/test_multi_tenant_storage.py,sha256=XNR1AUpxkzXlRv_ltdgAF-HUkpAvWqIQ7Fb93zEeR2o,2376
44
- tests/examples/tests/test_read_erc20.py,sha256=_dXwdZoUTSMKwPhEmU3N2X3wNu2ke9ob0L3JKEyNjdE,1198
45
- tests/examples/tests/test_storage.py,sha256=FmA-pJohMBHlNFVzLlY3-asnq0kV33E5SRDCM-lWzoQ,664
46
- tests/examples/tests/test_storage_legacy.py,sha256=RNVnD0G9ilb4I2s0CPAAgJEuKUgEkkbItuesOfmv-pg,677
47
- tests/examples/tests/test_user_storage.py,sha256=QEgt2p22LAyzBnBb0YW4BWa_Jasrt15vrr1GuxXqqbI,2180
48
- tests/examples/tests/test_wizard_of_coin.py,sha256=aUDeV5w0XONMMS71Vzw80lHfcSM0z8RKPJSXAuDwRto,392
49
- tests/plugin/conftest.py,sha256=RKdoE5_zcMimeojAoA_GSFI9du4pMzMi1vZ1njtfoAs,28
50
- tests/plugin/test_plugin_hooks.py,sha256=FQOrkhoXLinq0sjvoYjr63Oqg-ZVPcNFeUrK4bqrn4E,2020
51
- genlayer_test-0.2.0.dist-info/METADATA,sha256=_okLWSmaUrqZVrIZ5fLCJvXFBlhmUoItqEoioj2JV2U,14814
52
- genlayer_test-0.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
53
- genlayer_test-0.2.0.dist-info/entry_points.txt,sha256=rXhrPVq2IhVsd4uWzxzwCTx7jA1KcQIVNxDCUuxq4f8,89
54
- genlayer_test-0.2.0.dist-info/top_level.txt,sha256=-qiGZxTRBytujzgVcKpxjvQ-WNeUDjXa59ceGMwMpko,24
55
- genlayer_test-0.2.0.dist-info/RECORD,,
gltest/plugin_config.py DELETED
@@ -1,42 +0,0 @@
1
- from pathlib import Path
2
-
3
- _contracts_dir = None
4
- _rpc_url = None
5
- _default_wait_interval = None
6
- _default_wait_retries = None
7
-
8
-
9
- def set_contracts_dir(path: Path):
10
- global _contracts_dir
11
- _contracts_dir = path
12
-
13
-
14
- def get_contracts_dir() -> Path:
15
- return Path(_contracts_dir)
16
-
17
-
18
- def set_rpc_url(rpc_url: str):
19
- global _rpc_url
20
- _rpc_url = rpc_url
21
-
22
-
23
- def get_rpc_url() -> str:
24
- return _rpc_url
25
-
26
-
27
- def set_default_wait_interval(default_wait_interval: int):
28
- global _default_wait_interval
29
- _default_wait_interval = default_wait_interval
30
-
31
-
32
- def get_default_wait_interval() -> int:
33
- return _default_wait_interval
34
-
35
-
36
- def set_default_wait_retries(default_wait_retries: int):
37
- global _default_wait_retries
38
- _default_wait_retries = default_wait_retries
39
-
40
-
41
- def get_default_wait_retries() -> int:
42
- return _default_wait_retries