1- from tokenomics_decentralization .analyze import get_output_row
1+ from tokenomics_decentralization .analyze import get_output_row , analyze_snapshot , analyze
2+ import pathlib
23
34
45def test_get_output_row (mocker ):
5- get_metrics_mock = mocker .patch (" tokenomics_decentralization.helper.get_metrics" )
6+ get_metrics_mock = mocker .patch (' tokenomics_decentralization.helper.get_metrics' )
67 get_metrics_mock .return_value = ['hhi' , 'gini' ]
78
8- get_no_clustering_mock = mocker .patch (" tokenomics_decentralization.helper.get_no_clustering_flag" )
9- get_exclude_contracts_mock = mocker .patch (" tokenomics_decentralization.helper.get_exclude_contracts_flag" )
10- get_exclude_below_fees_mock = mocker .patch (" tokenomics_decentralization.helper.get_exclude_below_fees_flag" )
11- get_top_limit_type_mock = mocker .patch (" tokenomics_decentralization.helper.get_top_limit_type" )
12- get_top_limit_value_mock = mocker .patch (" tokenomics_decentralization.helper.get_top_limit_value" )
9+ get_no_clustering_mock = mocker .patch (' tokenomics_decentralization.helper.get_no_clustering_flag' )
10+ get_exclude_contracts_mock = mocker .patch (' tokenomics_decentralization.helper.get_exclude_contracts_flag' )
11+ get_exclude_below_fees_mock = mocker .patch (' tokenomics_decentralization.helper.get_exclude_below_fees_flag' )
12+ get_top_limit_type_mock = mocker .patch (' tokenomics_decentralization.helper.get_top_limit_type' )
13+ get_top_limit_value_mock = mocker .patch (' tokenomics_decentralization.helper.get_top_limit_value' )
1314
1415 get_no_clustering_mock .return_value = False
1516 get_exclude_contracts_mock .return_value = False
@@ -35,3 +36,110 @@ def test_get_output_row(mocker):
3536 metrics = {'top-1_absolute exclude_contracts non-clustered hhi' : 1 , 'top-1_absolute exclude_contracts non-clustered gini' : 0 }
3637 csv_row = get_output_row ('bitcoin' , '2010-01-01' , metrics )
3738 assert csv_row == ['bitcoin' , '2010-01-01' , True , True , 'absolute' , 1 , 1 , 0 ]
39+
40+
41+ def test_analyze_snapshot (mocker ):
42+ get_force_analyze_mock = mocker .patch ('tokenomics_decentralization.helper.get_force_analyze_flag' )
43+ get_no_clustering_mock = mocker .patch ('tokenomics_decentralization.helper.get_no_clustering_flag' )
44+ get_exclude_contracts_mock = mocker .patch ('tokenomics_decentralization.helper.get_exclude_contracts_flag' )
45+ get_exclude_below_fees_mock = mocker .patch ('tokenomics_decentralization.helper.get_exclude_below_fees_flag' )
46+ get_median_tx_fee_mock = mocker .patch ('tokenomics_decentralization.helper.get_median_tx_fee' )
47+ get_top_limit_type_mock = mocker .patch ('tokenomics_decentralization.helper.get_top_limit_type' )
48+ get_top_limit_value_mock = mocker .patch ('tokenomics_decentralization.helper.get_top_limit_value' )
49+ get_metrics_mock = mocker .patch ('tokenomics_decentralization.helper.get_metrics' )
50+ get_snapshot_info_mock = mocker .patch ('tokenomics_decentralization.db_helper.get_snapshot_info' )
51+ get_metric_value_mock = mocker .patch ('tokenomics_decentralization.db_helper.get_metric_value' )
52+ get_clustered_entries_mock = mocker .patch ('tokenomics_decentralization.db_helper.get_balance_entries' )
53+ get_nonclustered_entries_mock = mocker .patch ('tokenomics_decentralization.db_helper.get_non_clustered_balance_entries' )
54+ db_insert_mock = mocker .patch ('tokenomics_decentralization.db_helper.insert_metric' )
55+ db_commit_mock = mocker .patch ('tokenomics_decentralization.db_helper.commit_database' )
56+
57+ get_force_analyze_mock .return_value = False
58+ get_no_clustering_mock .return_value = False
59+ get_exclude_contracts_mock .return_value = False
60+ get_exclude_below_fees_mock .return_value = False
61+ get_median_tx_fee_mock .return_value = 0
62+ get_top_limit_type_mock .return_value = 'absolute'
63+ get_top_limit_value_mock .return_value = 0
64+
65+ get_snapshot_info_mock .return_value = [1 , 1 , '2010-01-01' , 8 ]
66+
67+ get_metrics_mock .return_value = ['hhi' ]
68+
69+ get_metric_value_mock .return_value = [1 ]
70+
71+ output = analyze_snapshot (None , 'bitcoin' , '2010-01-01' )
72+ assert output == {'hhi' : 1 }
73+
74+ get_no_clustering_mock .return_value = True
75+ get_exclude_contracts_mock .return_value = True
76+ get_exclude_below_fees_mock .return_value = True
77+ get_top_limit_type_mock .return_value = 'absolute'
78+ get_top_limit_value_mock .return_value = 1
79+
80+ output = analyze_snapshot (None , 'bitcoin' , '2010-01-01' )
81+ assert output == {'top-1_absolute exclude_below_fees exclude_contracts non-clustered hhi' : 1 }
82+
83+ get_clustered_entries_mock .return_value = [['entity' , 4 ], ['entity 2' , 4 ]]
84+ get_nonclustered_entries_mock .return_value = [['address' , 4 ], ['address 2' , 4 ]]
85+
86+ get_force_analyze_mock .return_value = True
87+
88+ db_insert_mock .return_value = None
89+ db_commit_mock .return_value = None
90+
91+ output = analyze_snapshot (None , 'bitcoin' , '2010-01-01' )
92+ assert output == {'top-1_absolute exclude_below_fees exclude_contracts non-clustered hhi' : 10000 }
93+
94+ get_no_clustering_mock .return_value = False
95+
96+ output = analyze_snapshot (None , 'bitcoin' , '2010-01-01' )
97+ assert output == {'top-1_absolute exclude_below_fees exclude_contracts hhi' : 10000 }
98+
99+ get_top_limit_value_mock .return_value = 0
100+
101+ output = analyze_snapshot (None , 'bitcoin' , '2010-01-01' )
102+ assert output == {'exclude_below_fees exclude_contracts hhi' : 5000 }
103+
104+ get_top_limit_type_mock .return_value = 'percentage'
105+ get_top_limit_value_mock .return_value = 0.5
106+
107+ output = analyze_snapshot (None , 'bitcoin' , '2010-01-01' )
108+ assert output == {'top-0.5_percentage exclude_below_fees exclude_contracts hhi' : 10000 }
109+
110+ get_top_limit_value_mock .return_value = 0
111+ get_metrics_mock .return_value = ['tau=0.5' ]
112+
113+ output = analyze_snapshot (None , 'bitcoin' , '2010-01-01' )
114+ assert output == {'exclude_below_fees exclude_contracts tau=0.5' : 1 }
115+
116+
117+ def test_analyze (mocker ):
118+ get_output_directories_mock = mocker .patch ('tokenomics_decentralization.helper.get_output_directories' )
119+ get_output_directories_mock .return_value = [pathlib .Path (__file__ ).resolve ()]
120+
121+ is_file_mock = mocker .patch ('os.path.isfile' )
122+ is_file_mock .return_value = True
123+
124+ get_db_connector_mock = mocker .patch ('tokenomics_decentralization.schema.get_connector' )
125+ get_db_connector_mock .return_value = None
126+
127+ analyze_snapshot_mock = mocker .patch ('tokenomics_decentralization.analyze.analyze_snapshot' )
128+ analyze_snapshot_mock .return_value = {'hhi' : 1 }
129+
130+ write_csv_output_mock = mocker .patch ('tokenomics_decentralization.analyze.write_csv_output' )
131+ write_csv_output_mock .return_value = None
132+
133+ get_output_row_mock = mocker .patch ('tokenomics_decentralization.analyze.get_output_row' )
134+ get_output_row_mock .return_value = 'row'
135+
136+ output_rows = analyze (['bitcoin' ], ['2010-01-01' ])
137+ assert output_rows == ['row' ]
138+ analyze_snapshot_mock .assert_called_with (None , 'bitcoin' , '2010-01-01' )
139+
140+ output_rows = analyze (['bitcoin' , 'ethereum' ], ['2010-01-01' , '2011-01-01' ])
141+ assert output_rows == ['row' , 'row' , 'row' , 'row' ]
142+
143+ is_file_mock .return_value = False
144+ output_rows = analyze (['bitcoin' , 'ethereum' ], ['2010-01-01' , '2011-01-01' ])
145+ assert output_rows == []
0 commit comments