Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
angel-one
GitHub Repository: angel-one/smartapi-python
Path: blob/main/test/testcases.py
410 views
1
import unittest
2
import pyotp
3
import os
4
import sys
5
import time
6
from logzero import logger
7
8
root_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
9
sys.path.append(root_directory)
10
11
from SmartApi.smartConnect import SmartConnect
12
from SmartApi.smartWebSocketV2 import SmartWebSocketV2
13
14
class TestCases(unittest.TestCase):
15
def setUp(self):
16
self.api_key = 'Your Api Key'
17
self.username = 'Your client code'
18
self.pwd = 'Your pin'
19
self.token = 'Your QR value'
20
self.totp = pyotp.TOTP(self.token).now()
21
self.smart_api = SmartConnect(self.api_key)
22
self.data = self.smart_api.generateSession(self.username, self.pwd, self.totp)
23
self.authToken = self.data['data']['jwtToken']
24
self.feedToken = self.smart_api.getfeedToken()
25
self.refreshToken = self.data['data']['refreshToken']
26
27
def test_getProfile(self):
28
getprofile = self.smart_api.getProfile(self.refreshToken)
29
self.assertTrue("status" in getprofile)
30
self.assertTrue("message" in getprofile)
31
self.assertTrue("errorcode" in getprofile)
32
self.assertTrue("data" in getprofile)
33
time.sleep(1)
34
35
36
def test_holding(self):
37
holding=self.smart_api.holding()
38
self.assertTrue("status" in holding)
39
self.assertTrue("message" in holding)
40
self.assertTrue("errorcode" in holding)
41
self.assertTrue("data" in holding)
42
time.sleep(1)
43
44
45
def test_allholding(self):
46
allholding=self.smart_api.allholding()
47
self.assertTrue("status" in allholding)
48
self.assertTrue("message" in allholding)
49
self.assertTrue("errorcode" in allholding)
50
self.assertTrue("data" in allholding)
51
time.sleep(1)
52
53
def test_orderBook(self):
54
orderbook=self.smart_api.orderBook()
55
self.assertTrue("status" in orderbook)
56
self.assertTrue("message" in orderbook)
57
self.assertTrue("errorcode" in orderbook)
58
self.assertTrue("data" in orderbook)
59
time.sleep(1)
60
61
def test_tradeBook(self):
62
tradebook=self.smart_api.tradeBook()
63
self.assertTrue("status" in tradebook)
64
self.assertTrue("message" in tradebook)
65
self.assertTrue("errorcode" in tradebook)
66
self.assertTrue("data" in tradebook)
67
time.sleep(1)
68
69
def test_rmsLimit(self):
70
rmslimit=self.smart_api.rmsLimit()
71
self.assertTrue("status" in rmslimit)
72
self.assertTrue("message" in rmslimit)
73
self.assertTrue("errorcode" in rmslimit)
74
self.assertTrue("data" in rmslimit)
75
time.sleep(1)
76
77
def test_ltpdata(self):
78
ltp=self.smart_api.ltpData("NSE", "SBIN-EQ", "3045")
79
self.assertTrue("status" in ltp)
80
self.assertTrue("message" in ltp)
81
self.assertTrue("errorcode" in ltp)
82
self.assertTrue("data" in ltp)
83
time.sleep(1)
84
85
def test_searchScrip(self):
86
exchange = "BSE"
87
searchscrip = "Titan"
88
searchScripData = self.smart_api.searchScrip(exchange, searchscrip)
89
self.assertTrue("status" in searchScripData)
90
self.assertTrue("message" in searchScripData)
91
self.assertTrue("errorcode" in searchScripData)
92
self.assertTrue("data" in searchScripData)
93
time.sleep(1)
94
95
def test_getMarketData(self):
96
mode="FULL"
97
exchangeTokens= {"NSE": ["3045"]}
98
marketData=self.smart_api.getMarketData(mode, exchangeTokens)
99
self.assertTrue("status" in marketData)
100
self.assertTrue("message" in marketData)
101
self.assertTrue("errorcode" in marketData)
102
self.assertTrue("data" in marketData)
103
time.sleep(1)
104
105
def test_getCandleData(self):
106
candleParams = {
107
"exchange": "NSE",
108
"symboltoken": "3045",
109
"interval": "FIVE_MINUTE",
110
"fromdate": "2023-10-18 09:15",
111
"todate": "2023-10-18 09:20"
112
}
113
candledetails = self.smart_api.getCandleData(candleParams)
114
self.assertTrue("status" in candledetails)
115
self.assertTrue("message" in candledetails)
116
self.assertTrue("errorcode" in candledetails)
117
self.assertTrue("data" in candledetails)
118
time.sleep(1)
119
120
def test_position(self):
121
pos=self.smart_api.position()
122
self.assertTrue("status" in pos)
123
self.assertTrue("message" in pos)
124
self.assertTrue("errorcode" in pos)
125
self.assertTrue("data" in pos)
126
time.sleep(1)
127
128
def test_convertPosition(self):
129
params = {
130
"exchange": "NSE",
131
"oldproducttype": "DELIVERY",
132
"newproducttype": "MARGIN",
133
"tradingsymbol": "SBIN-EQ",
134
"transactiontype": "BUY",
135
"quantity": 1,
136
"type": "DAY"
137
}
138
convertposition=self.smart_api.convertPosition(params)
139
self.assertTrue("status" in convertposition)
140
self.assertTrue("message" in convertposition)
141
self.assertTrue("errorcode" in convertposition)
142
self.assertTrue("data" in convertposition)
143
time.sleep(1)
144
145
def test_gtt_create_modify_cancel_details_rule(self):
146
gttCreateParams = {
147
"tradingsymbol": "SBIN-EQ",
148
"symboltoken": "3045",
149
"exchange": "NSE",
150
"producttype": "MARGIN",
151
"transactiontype": "BUY",
152
"price": 100000,
153
"qty": 10,
154
"disclosedqty": 10,
155
"triggerprice": 200000,
156
"timeperiod": 365
157
}
158
rule_id = self.smart_api.gttCreateRule(gttCreateParams)
159
self.assertTrue(rule_id, "gttCreateRule request failed...")
160
161
gttModifyParams = {
162
"id": rule_id,
163
"symboltoken": "3045",
164
"exchange": "NSE",
165
"price": 19500,
166
"quantity": 10,
167
"triggerprice": 200000,
168
"disclosedqty": 10,
169
"timeperiod": 365
170
}
171
modified_id = self.smart_api.gttModifyRule(gttModifyParams)
172
self.assertTrue(modified_id, "gttModifyRule request failed...")
173
self.assertEqual(rule_id, modified_id)
174
175
cancelParams = {
176
"id": rule_id,
177
"symboltoken": "3045",
178
"exchange": "NSE"
179
}
180
181
cancelled_id = self.smart_api.gttCancelRule(cancelParams)
182
self.assertTrue("status" in cancelled_id)
183
self.assertTrue("message" in cancelled_id)
184
self.assertTrue("errorcode" in cancelled_id)
185
self.assertTrue("data" in cancelled_id)
186
187
gttdetails=self.smart_api.gttDetails(rule_id)
188
self.assertTrue("status" in gttdetails)
189
self.assertTrue("message" in gttdetails)
190
self.assertTrue("errorcode" in gttdetails)
191
self.assertTrue("data" in gttdetails)
192
time.sleep(1)
193
194
def test_gttLists(self):
195
page = '1'
196
count = '5'
197
status=['CANCELLED']
198
gtt_lists = self.smart_api.gttLists(status, page, count)
199
self.assertTrue("status" in gtt_lists)
200
self.assertTrue("message" in gtt_lists)
201
self.assertTrue("errorcode" in gtt_lists)
202
self.assertTrue("data" in gtt_lists)
203
time.sleep(1)
204
205
def test_place_modify_cancel_order(self):
206
orderparams = {
207
"variety": "NORMAL",
208
"tradingsymbol": "SBIN-EQ",
209
"symboltoken": "3045",
210
"transactiontype": "BUY",
211
"exchange": "NSE",
212
"ordertype": "LIMIT",
213
"producttype": "INTRADAY",
214
"duration": "DAY",
215
"price": "19500",
216
"squareoff": "0",
217
"stoploss": "0",
218
"quantity": "1"
219
}
220
orderid = self.smart_api.placeOrder(orderparams)
221
self.assertTrue(orderid, "placeorder request failed...")
222
223
modifyparams = {
224
"variety": "NORMAL",
225
"orderid": orderid,
226
"ordertype": "LIMIT",
227
"producttype": "INTRADAY",
228
"duration": "DAY",
229
"price": "19500",
230
"quantity": "1",
231
"tradingsymbol": "SBIN-EQ",
232
"symboltoken": "3045",
233
"exchange": "NSE"
234
}
235
modifyparams=self.smart_api.modifyOrder(modifyparams)
236
self.assertTrue("status" in modifyparams)
237
self.assertTrue("message" in modifyparams)
238
self.assertTrue("errorcode" in modifyparams)
239
self.assertTrue("data" in modifyparams)
240
241
cancleorder=self.smart_api.cancelOrder(orderid, "NORMAL")
242
self.assertTrue("status" in cancleorder)
243
self.assertTrue("message" in cancleorder)
244
self.assertTrue("errorcode" in cancleorder)
245
self.assertTrue("data" in cancleorder)
246
time.sleep(1)
247
248
def test_websocket_connection(self):
249
AUTH_TOKEN = self.authToken
250
API_KEY = self.api_key
251
CLIENT_CODE = self.username
252
FEED_TOKEN = self.feedToken
253
correlation_id = "abcde12345"
254
action = 1
255
mode = 4
256
exchangeType = 1
257
token_list = [
258
{
259
"action": action,
260
"exchangeType": exchangeType,
261
"tokens": ["3045"]
262
}
263
]
264
265
sws = SmartWebSocketV2(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN)
266
267
def on_data(wsapp, message):
268
# logger.info("Ticks: {}".format(message))
269
close_connection()
270
271
def on_open(wsapp):
272
logger.info("on open")
273
sws.subscribe(correlation_id, mode, token_list)
274
275
def on_error(wsapp, error):
276
logger.error(error)
277
278
def on_close(wsapp):
279
logger.info("Close")
280
close_connection()
281
282
def close_connection():
283
sws.close_connection()
284
# Assign the callbacks.
285
sws.on_open = on_open
286
sws.on_data = on_data
287
sws.on_error = on_error
288
sws.on_close = on_close
289
sws.connect()
290
time.sleep(1)
291
292
def test_terminateSession(self):
293
terminate = self.smart_api.terminateSession('Your client code')
294
self.assertTrue("status" in terminate)
295
self.assertTrue("message" in terminate)
296
self.assertTrue("errorcode" in terminate)
297
self.assertTrue("data" in terminate)
298
time.sleep(1)
299
300
if __name__ == '__main__':
301
suite = unittest.TestSuite()
302
suite.addTest(TestCases('test_getProfile'))
303
suite.addTest(TestCases('test_holding'))
304
suite.addTest(TestCases('test_allholding'))
305
suite.addTest(TestCases('test_orderBook'))
306
suite.addTest(TestCases('test_tradeBook'))
307
suite.addTest(TestCases('test_rmsLimit'))
308
suite.addTest(TestCases('test_ltpdata'))
309
suite.addTest(TestCases('test_searchScrip'))
310
suite.addTest(TestCases('test_getMarketData'))
311
suite.addTest(TestCases('test_getCandleData'))
312
suite.addTest(TestCases('test_position'))
313
suite.addTest(TestCases('test_convertPosition'))
314
suite.addTest(TestCases('test_gtt_create_modify_cancel_details_rule'))
315
suite.addTest(TestCases('test_gttLists'))
316
suite.addTest(TestCases('test_place_modify_cancel_order'))
317
suite.addTest(TestCases('test_websocket_connection'))
318
suite.addTest(TestCases('test_terminateSession'))
319
unittest.TextTestRunner(verbosity=2).run(suite)
320
321
322