1. ######################################################################################################
2. #
3. #   ███████╗██╗███╗   ███╗██████╗ ██╗     ███████╗███████╗████████╗ ██████╗ ██████╗ ███████╗
4. #   ██╔════╝██║████╗ ████║██╔══██╗██║     ██╔════╝██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗██╔════╝
5. #   ███████╗██║██╔████╔██║██████╔╝██║     █████╗  ███████╗   ██║   ██║   ██║██████╔╝█████╗  
6. #   ╚════██║██║██║╚██╔╝██║██╔═══╝ ██║     ██╔══╝  ╚════██║   ██║   ██║   ██║██╔══██╗██╔══╝  
7. #   ███████║██║██║ ╚═╝ ██║██║     ███████╗███████╗███████║   ██║   ╚██████╔╝██║  ██║███████╗
8. #   ╚══════╝╚═╝╚═╝     ╚═╝╚═╝     ╚══════╝╚══════╝╚══════╝   ╚═╝    ╚═════╝ ╚═╝  ╚═╝╚══════╝
9. #                                                                 
10. #######################################################################################################
11. #   
12. #  Welcome to simplestore BootCamp! All our APIs are 100% TEst case coverage. So Just go through the 
13. #  testcase which is just a documents for us. 
14. # 
15. # NOTE:
16. # (1) For testing local and remote db is same as local db
17. # This is not just a test case file. However, This fill will list all the feature which has supported.
18. # Any feature must be converged with test case which ensure we don't break while adding new feature. 
19. # Here is the feature we support:
20. # create, find, regex, update, hits, rankup, rankdown, delete, count
21. # 
22. # FEATURE LIST :
23. #   (1)  We are not supporting _cmd API
24. #   (9) Started supporting _analytics which offer to track the app useas time and other important stuff.
25. #   (10) Started supporting appconfig which offer to do easy A/B testing across the apps.
26. #######################################################################################################
27. #
28. #  Do you know? 
29. #  (a) We support two two interesting was of scheduling: using schedule2 and schedule script. 
30. #
31. #
32. #
33. #
34. #
35. #
36. #######################################################################################################
37. 
38. # Set ENV
39. #=> context => server => localhost
40. 
41. # Quick Test add here
42. 
43. 
44. # API  Error case
45. => GET  => http://{{server}}/api/test0/test => 404 - We have not yet support this api
46. => POST  => http://{{server}}/api/test0/create/ => abc => Unexpected token
47. => POST  => http://{{server}}/api/test0/ => Hello => Unexpected token
48. 
49. => GET  => http://{{server}}/api/_test0/find  => Invalid DB name
50. => POST  => http://{{server}}/api/_test0/find => {} => Invalid DB name
51. 
52. => GET  => http://{{server}}/api/test0/ => Find successfully with
53. => POST  => http://{{server}}/api/test0/ => {} => Find successfully wit
54. 
55. #######################################################################################
56. # RULES for API Validation 
57. #  (a) Any params passes to the API using get of post like _abc will be treated as config.
58. #  (b) The API internally can add abc_ fields which will be store in db but not exposed with API Resp. 
59. #######################################################################################
60. 
61. # Test Normalization like auto remove of abc_
62. => GET => http://{{server}}/api/test/delete?_confirmstr=test => success
63. => POST => http://localhost/api/test/insert=>{"name":"dip", "hidden_":"hidden"} => "name":"dip","ts_insert" # Hiden is not in resp hidden 
64. => GET => http://{{server}}/api/test => "name":"dip","ts_insert"
65. # Test for object array
66. => POST => http://{{server}}/api/test/insert=>{"name":"dip2", "hidden_":"hidden"} => "name":"dip2","ts_insert" # Hiden is not in resp hidden 
67. => GET => http://{{server}}/api/test => "name":"dip","ts_insert"
68. => GET => http://{{server}}/api/_test =>  access db with db name with
69. 
70. #########################################################################################
71. ##                                                                                     ##
72. ##         HOW TO ACCESS DOCS FILE                                                     ##
73. ##                                                                                     ##
74. #########################################################################################
75. 
76. => GET  => http://{{server}}/api/ => This is not just a test case file
77. => POST  => http://{{server}}/api/ => {} => This is not just a test case file
78. 
79. #########################################################################################
80. ##                                                                                     ##
81. ##         APPLYING DB CONTSRINS                                                       ##
82. ##                                                                                     ##
83. #########################################################################################
84. => !GET  => http://{{server}}/api/test/delete => missing _confirmstr
85. => !GET  => http://{{server}}/api/test/delete?_confirmstr=delete => invalid _confirmstr
86. => !GET  => http://{{server}}/api/test/delete?_confirmstr=test => Deleted count is
87. => GET  => http://{{server}}/api/test/delete?_confirmstr=test => Deleted count is : 0
88. => !GET  => http://{{server}}/api/test/constraints/clear  => all constraints cleared successfully
89. 
90. => !GET  => http://{{server}}/api/test0/constraints/clear  => Invalid User Input # fix this test case
91. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is
92. 
93. 
94. => !GET  => http://{{server}}/api/test1/delete?_confirmstr=test1 => Deleted count is
95. => !GET  => http://{{server}}/api/test1/constraints/clear  => Invalid User Input # Fix this test case
96. #### DB restriction  ####
97. => GET  => http://{{server}}/api/_test => db name with _
98. => POST  => http://{{server}}/api/_test => {} => db name with _
99. => GET  => http://{{server}}/api/_test/delete => db name with _
100. 
101. 
102. #########################################################################################
103. ##                                                                                     ##
104. ##         DB INSERTIONS                                                               ##
105. ##                                                                                     ##
106. #########################################################################################
107. 
108. ######### Test: insert one or many ############
109. => GET  => http://{{server}}/api/test0/create  =>Trying insert Empty Object
110. => GET  => http://{{server}}/api/test0/create?name=dip1&roll=10 => "ts_insert":"202
111. => GET  => http://{{server}}/api/test0/insert?name=dip1&roll=10 => "ts_insert":"202
112. => POST  => http://{{server}}/api/test0/insert => {} => error
113. => POST  => http://{{server}}/api/test0/create => {"name":"dip2","roll":10} => 1 entry\(s\) insert successfully.
114. => POST  => http://{{server}}/api/test0/create => {"_payload":[{"name":"dip3","roll":10},{"name":"dip3","roll":10}]} => 2 entry\(s\) insert successfully.
115. => POST  => http://{{server}}/api/test0/insert => {"_payload":[{"name":"dip3","roll":10},{"name":"dip3","roll":10}]} => 2 entry\(s\) insert successfully.
116. 
117. ##########  BULK Insert 
118. => POST  => http://{{server}}/api/test0/bulk_insert => {"_payload":[{"name":"dip3","roll":10},{"name":"dip3","roll":10}]} => [2/2]
119. => POST  => http://{{server}}/api/test0/bulk_insert => {"_payload":[{"name":"dip3","roll":10},{"name":"dip3","roll":10,"_id":10}]} => we found id for some entry which is not allowed
120. 
121. 
122. 
123. 
124. 
125. #########################################################################################
126. ##                                                                                     ##
127. ##         DB QUERY                                                                    ##
128. ##                                                                                     ##
129. #########################################################################################
130. # allows to search over the db.
131. # You can use get or find alternatively in GET or POST Request.
132. # You can use _filter for advance ops and even pass Mongo query inside _filter while makeing POST.
133. 
134. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is
135. => !POST  => http://{{server}}/api/test0/insert => {"_payload":[{"name":"dip1", "roll":10},{"name":"dip2", "roll":20},{"name":"dip3", "roll":30} ]} => 3 entry\(s\) insert successfully.
136. => !POST  => http://{{server}}/api/test0/create => {"name":"dip","count":1} => "_id":"(?.*?)"
137. => GET  => http://{{server}}/api/test0  => 4 items.
138. => GET  => http://{{server}}/api/test0/  => 4 items.
139. => GET  => http://{{server}}/api/test0/find  => 4 items.
140. => GET  => http://{{server}}/api/test0/find/  => 4 items.
141. => GET  => http://{{server}}/api/test0/get  => 4 items.
142. => GET  => http://{{server}}/api/test0/get/  => 4 items.
143. => GET  => http://{{server}}/api/test0/find?id={{id}}  => Find successfully with 1 items
144. => GET  => http://{{server}}/api/test0/get?id={{id}}  => Find successfully with 1 items
145. => GET  => http://{{server}}/api/test0/find?name=dip3  => 1 items
146. => GET  => http://{{server}}/api/test0/find?name=dip1&roll=10 => 0 items
147. # you should you POST to make type senasitive serach.
148. => POST  => http://{{server}}/api/test0/find => {"name":"dip3","roll":30} => 1 items.
149. #Test _filter
150. => GET  => http://{{server}}/api/test0/find?_filter=name:dip3 => 1 items
151. => POST  => http://{{server}}/api/test0/find => {"_filter":"name:dip3"} => 1 items
152. => POST  => http://{{server}}/api/test0/find => {"_filter":{"name":"dip3"}} => 1 items
153. => POST  => http://{{server}}/api/test0/find => {"_filter":{"name":{"$regex":"dip","$options":"i"}}} => 4 items
154. => GET  => http://{{server}}/api/test0/  => 4 items
155. # FIX ME: GET => http://{{server}}/api/test0  => 4 items
156. 
157. 
158. 
159. # ======= _page and _limit =================
160. # A SS way to support pagination.
161. 
162. => !POST  => http://{{server}}/api/test0/insert => {"_payload":[{"name":"dip20", "roll":10},{"name":"dip21", "roll":20},{"name":"dip22", "roll":30},{"name":"dip23", "roll":10},{"name":"dip24", "roll":20},{"name":"dip25", "roll":30},{"name":"dip26", "roll":10},{"name":"dip27", "roll":20},{"name":"dip28", "roll":30},{"name":"dip29", "roll":10},{"name":"dip30", "roll":20},{"name":"dip31", "roll":30} ]} => 12 entry
163. => GET  => http://{{server}}/api/test0/find?_page=0 => 10 items
164. => GET  => http://{{server}}/api/test0/find?_page=1 => 6 items
165. => GET  => http://{{server}}/api/test0/find?_limit=2 => 2 items
166. => GET  => http://{{server}}/api/test0/find?_page=0&_limit=2 => 2 items
167. => GET  => http://{{server}}/api/test0/find?_page=1&_limit=2  => Find successfully with 2 items \(page:1, limit:2\)
168. => GET  => http://{{server}}/api/test0/find?_page=200&_limit=2  => 0 items
169. 
170. # _project helps to return only those ele in the find. 
171. => GET  => http://{{server}}/api/test0/find?_project=_id => ,{"_id":".*?"},
172. => GET  => http://{{server}}/api/test0/find?_project=name => {"name":".*?"},{"name":".*?"},
173. => GET  => http://{{server}}/api/test0/find?_project=_id,name => {"_id":".*?","name":".*?"},
174. => GET  => http://{{server}}/api/test0/find?_project=_id,name,roll => {"_id":".*?","name":".*?","roll":.*?},{
175. => GET  => http://{{server}}/api/test0/find?_project= => ts_insert
176. => GET  => http://{{server}}/api/test0/find?_project=unknown => \[{},{},{},{}
177. 
178. #==================== ~ with _filter ===================
179. # we use _filter to filter documents for insert/delete/find/update. we can use _filter in POST
180. # to support = operator which should be replaced by : for GET. You should use ~ for partial matching REGEX.
181. 
182. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is
183. => !POST  => http://{{server}}/api/test0/insert => {"_payload":[{"name":"dip1"},{"name":"dip2"},{"name":"supdi2"} ]} => 3 entry\(s\) insert successfully.
184. => GET  => http://{{server}}/api/test0/find?_filter=name:dip1  => 1 items
185. => GET  => http://{{server}}/api/test0/find?_filter=name~dip1  => 1 items
186. => GET  => http://{{server}}/api/test0/find?_filter=name~p  =>  3 items
187. => GET  => http://{{server}}/api/test0/find?_filter=name~^di  => 2 items
188. => GET  => http://{{server}}/api/test0/find?_filter=name~1$  =>  1 items.
189. 
190. 
191. 
192. #=================== regex =======================
193. # this a way to support regular expression search.
194. 
195. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is
196. => !POST  => http://{{server}}/api/test0/create?_confirmstr=test0 => {"_payload":[{"name":"dip1","roll":1}, {"name":"dip2","roll":2}, {"name":"xip2","roll":3}]} => success
197. => GET  => http://{{server}}/api/test0/regex?name=^d => with 2 items.
198. => GET  => http://{{server}}/api/test0/regex?name=1$ => with 1 items.
199. 
200. 
201. #=================  @today, @week, @month ==============
202. => GET  => http://{{server}}/api/test0?ts_insert=@today =>3 items
203. => GET  => http://{{server}}/api/test0/count?ts_insert=@week => Count: 3
204. => GET  => http://{{server}}/api/test0?ts_insert=@month =>3 items
205. => GET  => http://{{server}}/api/test0?ts_update=@today =>3 items
206. => GET  => http://{{server}}/api/test0?ts_update=@week => 3 items
207. => GET  => http://{{server}}/api/test0/count?ts_update=@month =>Count: 3
208. => GET  => http://{{server}}/api/test0/count?ts_update=@3DaysOld =>Count: 0
209. => GET  => http://{{server}}/api/test0/count?ts_update=@7DaysOld =>Count: 0
210. 
211. # ==== TEST get random ####
212. =>  GET  => http://{{server}}/api/test0/get_random?_limit=3 => returned random list of size : 3
213. =>  GET  => http://{{server}}/api/test0/get_random?_limit=3 => returned random list of size : 3
214. 
215. #########################################################################################
216. ##                                                                                     ##
217. ##         DB UPDATE                                                                   ##
218. ##                                                                                     ##
219. #########################################################################################
220. 
221. #=============  create and update =================
222. # 1. Test We able update an specific entry
223. # 2. Test we update multiple entry by filter.
224. # 3. Test we update multiple entry with multiple specific data ( using _payload.)
225. 
226. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is
227. => !POST  => http://{{server}}/api/test0/create => {"name":"subha","roll":1} => success
228. => !POST  => http://{{server}}/api/test0/create => {"name":"subha","roll":2} => success
229. # Simple create should be return list everywhere
230. => POST  => http://{{server}}/api/test0/create => {"name":"hari","roll":3} => "out":\[{"name":"hari",
231. => GET  => http://{{server}}/api/test0/update?id={{id}}&name=hari1 => "name":"hari1"
232. => GET  => http://{{server}}/api/test0/update?id={{id}}&name=hari2 => "name":"hari2"
233. => GET  => http://{{server}}/api/test0/update?roll=10&_filter=name:subha => missing _confirmstr
234. => GET  => http://{{server}}/api/test0/update?_filter=name:subha&_confirmstr=test0 => Looks like you are sending empty data
235. => GET  => http://{{server}}/api/test0/update?roll=10&_filter=name:subha&_confirmstr=test0 => Successfully updated 2 entry out of 2 matched cout
236. => POST  => http://{{server}}/api/test0/update => {"roll":10,"_filter":{"name":"subha"},"_confirmstr":"test0"} => Successfully updated 2 entry out of 2 matched cout
237. => POST  => http://{{server}}/api/test0/update => {"_payload":[{"name":"dip"}], "_confirmstr":"test0"} => each object in _payload must have a id
238. 
239. 
240. ########################## Subentry #################################################################
241. # This helps to building facebook post with comments 
242. # adding subentry to a database entry: like adding a comments
243. # Whne you add a subentry , it will create a entry_id as a uniquer id whcih can be used to delete.
244. ######################################################################################################
245. => !GET  => http://{{server}}/api/test1/delete?_confirmstr=test1 => Deleted count is
246. => !POST  => http://{{server}}/api/test1/insert => {"name":"A1","comments":[]} =>  "_id":"(?.*?)"
247. => POST  => http://{{server}}/api/test1/subentry/add? => {"id":"{{id1}}"} => Missing key
248. => POST  => http://{{server}}/api/test1/subentry/add? => {"id":"{{id1}}","key":"comments"} => Missing value
249. => POST  => http://{{server}}/api/test1/subentry/add? => {"id":"{{id1}}","key":"comments","value":10} => error
250. => POST  => http://{{server}}/api/test1/subentry/add? => {"id":"{{id1}}","key":"comments","value":{"msg":"message1"}} => "msg":"message1"
251. => POST  => http://{{server}}/api/test1/subentry/add? => {"_id":"601ddf283ac366b16c634000","key":"comments","value":{"msg":"message1"}} => not found this id
252. => POST  => http://{{server}}/api/test1/subentry/add? => {"_id":"{{id1}}","key":"comments","value":{"msg":"message1"}} => "msg":"message1"
253. => POST  => http://{{server}}/api/test1/subentry/add? => {"id":"{{id1}}","key":"comments","value":[{"msg":"message2"},{"msg":"message3"}]} => Input is not an object
254. => POST  => http://{{server}}/api/test1/subentry/add_many => {"id":"{{id1}}","key":"comments","value":[{"msg":"message2"},{"msg":"message3"}]} => "msg":"message3"
255. => POST  => http://{{server}}/api/test1 => {"id":"{{id1}}"} => "msg":"message3"
256. #Check add remove
257. => POST  => http://{{server}}/api/test1/subentry/add? => {"id":"{{id1}}","key":"comments","value":{"msg":"message4"}} => "entry_id":"(?.*?)"
258. => POST  => http://{{server}}/api/test1/subentry/remove => {"id":"{{id1}}", "key":"comments", "entry_id":"{{entry_id}}"} => success
259. => POST  => http://{{server}}/api/test1/subentry/get => {"id":"{{id1}}"} => This feature not yet supported
260. 
261. # test update
262. => !POST  => http://{{server}}/api/test1/insert => {"name":"A2","comments":[]} =>  "_id":"(?.*?)"
263. => POST  => http://{{server}}/api/test1/subentry/add? =>{"_id":"{{id1}}", "key":"comments", "value":{"msg":"hello","name":"hello"}} => "entry_id":"(?.*?)" => "name":"hello"
264. # This should merge
265. => POST  => http://{{server}}/api/test1/subentry/update? =>{"_id":"{{id1}}","entry_id":"{{entry_id}}",  "key":"comments", "value":{"msg":"hello1", "color":"red"}} => successfully update subentry with key
266. => POST  => http://{{server}}/api/test1/ => {"_id":"{{id1}}"}  => "name":"hello"
267. => POST  => http://{{server}}/api/test1/ => {"_id":"{{id1}}"} => "color":"red"
268. 
269. #Testing with auth_token_
270. => POST  => http://{{server}}/api/test1/subentry/update? => {"_id":"{{id1}}","entry_id":"{{entry_id}}",  "key":"comments", "value":{"msg":"hello1", "color":"red"},  "auth_token_":"skip"} => successfully update subentry with key
271. 
272. => !GET  => http://{{server}}/api/test1/delete?_confirmstr=test1 => Deleted count is
273. 
274. 
275. 
276. #############  BULK UPDATE #############################
277. => !POST  => http://{{server}}/api/test0/insert => {"name":"A1"} =>  "_id":"(?.*?)"
278. => !POST  => http://{{server}}/api/test0/insert => {"name":"A2"} =>  "_id":"(?.*?)"
279. => POST  => http://{{server}}/api/test0/bulkupdate => {"_payload":[]} => missing _confirmstr
280. => POST  => http://{{server}}/api/test0/bulkupdate => {"_payload":[], "_confirmstr":"test0"} => ensureHasNonEmptyPayload
281. => POST  => http://{{server}}/api/test0/bulkupdate => {"_payload":[{"name":"10"}], "_confirmstr":"test0"} => ensurePayloadHasId
282. => POST  => http://{{server}}/api/test0/bulkupdate => {"_payload":[{"id":"{{id1}}", "name":"B1","tool":3}, {"id":"{{id2}}", "name":"B2"}], "_confirmstr":"test0"} => 2/2
283. => GET  => http://{{server}}/api/test0?_id={{id1}} => B1
284. 
285. 
286. #===================== insertorupdate =============================
287. => !POST  => http://{{server}}/api/test0/insertorupdate => {} => _field is missing
288. => !POST  => http://{{server}}/api/test0/insertorupdate => {"_payload":[{"name":"dip","roll":1}, {"name":"dip2","roll":1}],"_field":"name"} => 2/0
289. => !POST  => http://{{server}}/api/test0/insertorupdate => {"_payload":[{"name":"dip","roll":2}, {"name":"dip2","roll":2},{"name":"dip3","roll":3}],"_field":"name"} => 1/2
290. 
291. 
292. #########################################################################################
293. ##                                                                                     ##
294. ##         DB DELETE                                                                   ##
295. ##                                                                                     ##
296. #########################################################################################
297. 
298. #  delete allows to delete one or many items or all the items. to delete in bulk you need to 
299. #  provide _confirmstr as a db name. A db starting with nodel_ don't support any delete _operation by design.
300. 
301. => GET  => http://{{server}}/api/test0/delete => missing _confirmstr
302. => GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is
303. => GET  => http://{{server}}/api/nodel_test0/delete?_confirmstr=nodel_test0 => The DB has marked as nodel 
304. 
305. #########################################################################################
306. ##                                                                                     ##
307. ##         DB RANK                                                                     ##
308. ##                                                                                     ##
309. #########################################################################################
310. 
311. # ranks and hits are the simplestore ways to ranking algorithms
312. # hits will help increment or decrements ranking.
313. # rankup - will rankup based on rank strategies
314. # rankdown - will rankdown based on rank strategies
315. 
316. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is : 0
317. => !POST  => http://{{server}}/api/test0/create => {"name":"dip","count":1} => "_id":"(?.*?)"
318. => GET  => http://{{server}}/api/test0/find?id={{id}}  => Find successfully with 1 items
319. => GET  => http://{{server}}/api/test0/hits => You must pass a _id
320. => GET  => http://{{server}}/api/test0/hits?_field=count => You must pass a _id
321. => GET  => http://{{server}}/api/test0/hits?id={{id}}=> _field is missing
322. => GET  => http://{{server}}/api/test0/hits?_field=count&id={{id}} => ","out":2,"help"
323. => GET  => http://{{server}}/api/test0/hits?_field=count&id={{id}} => ","out":3,"help"
324. # Adjust the bellow test as they are right.
325. => GET  => http://{{server}}/api/test0/hits?_field=count&id={{id}}&_value=8 => 11
326. => GET  => http://{{server}}/api/test0/hits?_field=count&id={{id}}&_value=-1 => 10
327. => GET  => http://{{server}}/api/test0/increment?_field=count&id={{id}}&_value=-1 =>  ","out":9,"help"
328. => GET  => http://{{server}}/api/test0/increment/?_field=count&id={{id}}&_value=-1 => 8
329. => GET  => http://{{server}}/api/test0/increment?_field=count&id=wrongID&_value=-1 => not a valid ID
330. => GET  => http://{{server}}/api/test0/increment?_field=count&id=5df55c6273df4d3ec6cbcf15&_value=-1 => Item not found
331. 
332. 
333. => !GET  => http://{{server}}/api/test0/create?name=dip1 =>  "_id":"(?.*?)"
334. => GET  => http://{{server}}/api/test0/rankup => You must pass a _id
335. => GET  => http://{{server}}/api/test0/rankup?id={{id}} => _field is missing
336. => GET  => http://{{server}}/api/test0/rankup?_field=count => You must pass a _id
337. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} =>  ","out":1,"help"
338. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 2
339. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 3
340. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 4
341. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 5
342. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 6
343. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 7
344. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 8
345. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 9
346. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 10
347. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 10
348. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} =>  ","out":9,"help"
349. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 8
350. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 7
351. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 6
352. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 5
353. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 4
354. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 3
355. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 2
356. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 1
357. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 0
358. => GET  => http://{{server}}/api/test0/rankdown?_field=count&id={{id}} => 0
359. => GET  => http://{{server}}/api/test0/rankup?_field=count&id={{id}} => 1
360. 
361. #########################################################################################
362. ##                                                                                     ##
363. ##         DB COUNT                                                                    ##
364. ##                                                                                     ##
365. #########################################################################################
366. 
367. # just count elements of find or filter.
368. 
369. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is : 2
370. => !POST  => http://{{server}}/api/test0/create?_confirmstr=test0 => {"_payload":[{"name":"dip","roll":1}, {"name":"dip","roll":2}, {"name":"sup","roll":3}]} => success
371. => GET  => http://{{server}}/api/test0/count => 3
372. => GET  => http://{{server}}/api/test0/count?name=dip => 2
373. => GET  => http://{{server}}/api/test0/count?roll=3 => 0
374. => POST  => http://{{server}}/api/test0/count => {"roll":3} => 1
375. 
376. #########################################################################################
377. ##                                                                                     ##
378. ##         DB AGGRESSION                                                               ##
379. ##                                                                                     ##
380. #########################################################################################
381. 
382. # sum is the aggregation framework for simplestore. It allows to count, sum, max,min avg on
383. # a _field.
384. 
385. => !GET  => http://{{server}}/api/test0/delete?_confirmstr=test0 => Deleted count is
386. => !POST  => http://{{server}}/api/test0/create?_confirmstr=test0 => {"_payload":[{ "name": "Infosys", "qty": 100, "price": 800 }, { "name": "TCS", "qty": 100, "price": 2000 },{ "name": "Wipro", "qty": 2500, "price": 300 }]} => success
387. => GET  => http://{{server}}/api/test0/sum => _field is missing
388. => GET  => http://{{server}}/api/test0/sum?_field=qty => 2700
389. => POST  => http://{{server}}/api/test0/sum => {"_field" : "qty"} => 2700
390. => POST  => http://{{server}}/api/test0/sum => {"_field" : "qty", "_operation":"$max"} => 2500
391. => POST  => http://{{server}}/api/test0/sum => {"_field" : "qty", "_operation":"$min"} => 100
392. => POST  => http://{{server}}/api/test0/sum => {"_field" : "qty", "_operation":"$avg"} => 900
393. => POST  => http://{{server}}/api/test0/sum => {"_field":"qty", "_filter":{"qty":100}}  => 200
394. 
395. #########################################################################################
396. ##                                                                                     ##
397. ##         DB CONSTRAINT                                                               ##
398. ##                                                                                     ##
399. #########################################################################################
400. # Constraints allows us to dynamically insert of delete the unique key for a db.
401. # we sound support other func like not null or datatype constraints.
402. 
403. => !GET  => http://{{server}}/api/test1/delete?_confirmstr=test1  => success
404. => GET  => http://{{server}}/api/test1/constraints/get  => all constraints returned successfully
405. => GET  => http://{{server}}/api/test1/constraints/add?name=unique  => all constraints added successfully
406. => GET  => http://{{server}}/api/test1/constraints/get  => name_1
407. => GET  => http://{{server}}/api/test1/constraints/remove  => all constraints removed successfully
408. => GET  => http://{{server}}/api/test1/constraints/get  =>  all constraints returned successfully
409. => GET  => http://{{server}}/api/test1/constraints/add?name=unique  => name_1
410. => GET  => http://{{server}}/api/test1/constraints/add?name1=unique1  => invalid constraints found:
411. => GET  => http://{{server}}/api/test1/constraints/clear  => all constraints cleared successfully
412. => GET  => http://{{server}}/api/test1/constraints/get  => all constraints returned successfully
413. 
414. => !GET  => http://{{server}}/api/test1/constraints/clear  => all constraints cleared successfully
415. => !GET  => http://{{server}}/api/test1/constraints/add?name=unique  => all constraints added successfully
416. => POST  => http://{{server}}/api/test1/insert => {"name":"DIP"}  => insert successfully
417. => POST  => http://{{server}}/api/test1/insert => {"name":"DIP"}  => duplicate key error collection
418. => POST  => http://{{server}}/api/test1/insert => {"_payload":[{"name":"DIP"},{"name":"DIP1"}]}  => E11000 duplicate key error collection
419. => GET  => http://{{server}}/api/test1 => DIP1
420. 
421. #=============  BULK INSERT =====================
422. # Bulk insert allows you to insert a list of items to DB even if some items are not able insert. It's similar to insert
423. # but provides the count of success and fails.
424. 
425. => POST  => http://{{server}}/api/test1/bulk_insert => {"name":"DIP"}  => you must send _payload as list
426. => POST  => http://{{server}}/api/test1/bulk_insert => {"_payload":[{"name":"DIP"},{"name":"DIP1"}]}  => 0/2
427. => POST  => http://{{server}}/api/test1/bulk_insert => {"_payload":[{"name":"DIP"},{"name":"DIP3"}]}  => 1/2
428. 
429. 
430. #########################################################################################
431. ##                                                                                     ##
432. ##         DB TAGS                                                                     ##
433. ##                                                                                     ##
434. #########################################################################################
435. #  Tags allows us to adding, removing and searching tags attached to a documents. This is essentially
436. #  a tagging mechanism to support hashtag or categories a documents. It's works like a set _operation.
437. #  you need to use rwa_search to do the searching the tag. 
438. => POST  => http://{{server}}/api/test/tags/add =>  {"_id":"{{id}}", "_field":"tag"}  => You have not send either _field or _value.
439. => POST  => http://{{server}}/api/test/tags/add =>  {"_id":"{{id}}", "_value":"tag"}  => You have not send either _field or _value.
440. => !POST  => http://{{server}}/api/test/create => {"name":"dip","count":1} => "_id":"(?.*?)"
441. => GET  => http://{{server}}/api/test/tags/clear?id=5daa8d3ea216e2d820e2c09e&_field=tag&_value=10,20 => item has not found
442. => GET  => http://{{server}}/api/test/tags/clear?id={{id}}&_field=tag&_value=10,20 => "tag":\[\]
443. => GET  => http://{{server}}/api/test/tags/add?id={{id}}&_field=tag&_value=10,20 => \["10","20"\]
444. => GET  => http://{{server}}/api/test/tags/add?id={{id}}&_field=tag&_value=10,20 => \["10","20"\]
445. => GET  => http://{{server}}/api/test/tags/add?id={{id}}&_field=tag&_value=10,20,30,40 => \["10","20","30","40"\]
446. => GET  => http://{{server}}/api/test/tags/remove?id={{id}}&_field=tag&_value=10 => \["20","30","40"\]
447. => GET  => http://{{server}}/api/test/tags/remove?id={{id}}&_field=tag&_value=10 => \["20","30","40"\]
448. => GET  => http://{{server}}/api/test/tags/clear?id={{id}}&_field=tag&_value='' =>  "tag":\[\]
449. 
450. 
451. #########################################################################################
452. ##                                                                                     ##
453. ##         DB INDEX                                                                    ##
454. ##                                                                                     ##
455. #########################################################################################
456. 
457. => POST  => http://{{server}}/api/test/index => {} => you must send _payload as list
458. => POST  => http://{{server}}/api/test/index => {"_payload":[]} => You must NOT send a empty list
459. # TODO: BROKEN TEST - FIX IT
460. # => POST  => http://{{server}}/api/test/index => {"_payload":[{ "ts_insert": 1 }, { "expireAfterSeconds": 60 }]} => \{"ts_insert":1,"expireAfterSeconds":60\}
461. 
462. 
463. 
464. 
465. 
466. 
467. #====================  Help =================================
468. # TODO : BROKEN FIX IT -- BLOCKING TEST
469. #=> POST  => http://{{server}}/api/test/index/help => {} => This API is used to create Index for a DB
470. #=> GET  => http://{{server}}/api/test/index/help => This API is used to create Index for a DB
471. 
472. 
473. 
474. #########################################################################################
475. ##                                                                                     ##
476. ##         DB DISTRIBUTION                                                             ##
477. ##                                                                                     ##
478. #########################################################################################
479. => !POST  => http://{{server}}/api/test/bulk_insert => {"_payload":[{"type":"a","roll":1},{"type":"a","roll":1},{"type":"a","roll":1},{"type":"b","roll":1},{"type":"b","roll":2},{"type":"c","roll":1},{"type":"d","roll":2},{"type":"d","roll":2}]}  => 8/8
480. => POST  => http://{{server}}/api/test/distribution => {"roll":1,"_field":"type"} => {"count":3,"type":"a"}
481. => POST  => http://{{server}}/api/test/distribution?_viewas=chartjs => {"roll":1,"_field":"type"} => "borderWidth":1
482. => POST  => http://{{server}}/api/test/distribution => {"roll":1,"ts_insert":"@today", "_field":"type"} => {"count":3,"type":"a"} 
483. => POST  => http://{{server}}/api/test/distribution => {"roll":2,"_field":"type"} => {"count":2,"type":"d"} 
484. 
485. 
486. 
487. #########################################################################################
488. ##                                                                                     ##
489. ##         DB TIME SERIES                                                              ##
490. ##                                                                                     ##
491. #########################################################################################
492. => !POST  => http://{{server}}/api/test/create => {"_payload":[{"name":"dipp","number":10}, {"name":"dipp","number":20}, {"name":"dipp1","number":20}]} => success
493. => GET  => http://{{server}}/api/test/ts => "count":12
494. => GET  => http://{{server}}/api/test/ts?name=dipp&_field=dummy => "count":2,
495. 
496. 
497. #########################################################################################
498. ##                                                                                     ##
499. ##         APP ANALYTICS                                                               ##
500. ##                                                                                     ##
501. #########################################################################################
502. # Note it is causing the perf issue for we black listed the analytics API
503. # _analytics will provides Analytics in the app.
504. #=> context => app_id => test.app
505. #=> !GET  => http://{{server}}/api/analytics/delete?app_id={{app_id}}&_confirmstr=analytics => success
506. #=> POST  => http://{{server}}/api/_analytics/launch => {"app_id":"{{app_id}}","app_version":"1.0","device_os":"android", "device_id":"abc","device_api":"27"} => "session":"(?.*?)"
507. #=> POST  => http://{{server}}/api/_analytics/action => {"app_id":"{{app_id}}","session":"{{session}}","type":"click", "target_id":"btn1"} => Tracked action
508. #=> POST  => http://{{server}}/api/_analytics/exception => {"app_id":"{{app_id}}", "session":"{{session}}","type":"RuntimeException", "location":"Main.c:20","stack":"full stack here"} => Tracked exception
509. #=> POST  => http://{{server}}/api/_analytics/timeit => {"app_id":"{{app_id}}", "session":"{{session}}", "total_time": 10000, "type" :"Activity", "block":"MainActivity"} => Tracked timeit
510. #=> GET  => http://{{server}}/api/_analytics/hit_tracker?app_id={{app_id}}&action=play => 1
511. #=> GET  => http://{{server}}/api/_analytics/hit_tracker?app_id={{app_id}}&action=play => 2
512. #=> GET  => http://{{server}}/api/_analytics/hit_tracker?app_id={{app_id}}&action=play => 3
513. #=> GET  => http://{{server}}/api/_analytics/hit_tracker?app_id={{app_id}}&action=pause  => 1
514. #=> GET  => http://{{server}}/api/_analytics/hit_tracker?app_id={{app_id}}&action=pause  => 2
515. #=> POST  => http://{{server}}/api/_analytics/logs => {"app_id":"{{app_id}}"} => found all logs
516. #=> POST  => http://{{server}}/api/_analytics/logs => {"app_id":"Invalid"} => "out":\[\],
517. #=> POST  => http://{{server}}/api/_analytics/session_history => {"session":"{{session}}"} => History returned
518. #=> GET  => http://{{server}}/api/_analytics/session_history?session={{session}} => History returned
519. #=> POST  => http://{{server}}/api/_analytics/app_summary_today => {"app_id":"{{app_id}}"} => not yet supported
520. #=> POST  => http://{{server}}/api/_analytics/app_summary_week => {"app_id":"{{app_id}}"} => not yet supported
521. #
522. #
523. #=> context => app_id => test.app
524. #=> !GET  => http://{{server}}/api/analytics/delete?app_id={{app_id}}&_confirmstr=analytics => success
525. #=> POST  => http://{{server}}/api/analytics/launch => {"app_id":"{{app_id}}","app_version":"1.0","device_os":"android", "device_id":"abc","device_api":"27"} => "session":"(?.*?)"
526. #=> POST  => http://{{server}}/api/analytics/action => {"app_id":"{{app_id}}","session":"{{session}}","type":"click", "target_id":"btn1","tag":"btn_click"} => Tracked action
527. #=> POST  => http://{{server}}/api/analytics/action => {"app_id":"{{app_id}}","session":"{{session}}","type":"click", "target_id":"btn1", "tag":"btn_click"} => Tracked action
528. #=> POST  => http://{{server}}/api/analytics/exception => {"app_id":"{{app_id}}", "session":"{{session}}","type":"RuntimeException", "location":"Main.c:20","stack":"full stack here"} => Tracked exception
529. #=> POST  => http://{{server}}/api/analytics/exception => {"app_id":"{{app_id}}", "session":"{{session}}","type":"RuntimeException", "location":"Main.c:20","stack":"full stack here"} => Tracked exception
530. #=> POST  => http://{{server}}/api/analytics/timeit => {"app_id":"{{app_id}}", "session":"{{session}}", "total_time": 10000, "type" :"Activity", "block":"MainActivity"} => Tracked timeit
531. #=> GET  => http://{{server}}/api/analytics/hit_tracker?app_id={{app_id}}&action=play => 1
532. #=> GET  => http://{{server}}/api/analytics/hit_tracker?app_id={{app_id}}&action=play => 2
533. #=> GET  => http://{{server}}/api/analytics/hit_tracker?app_id={{app_id}}&action=play => 3
534. #=> GET  => http://{{server}}/api/analytics/hit_tracker?app_id={{app_id}}&action=pause => 1
535. #=> GET  => http://{{server}}/api/analytics/hit_tracker?app_id={{app_id}}&action=pause => 2
536. #=> POST  => http://{{server}}/api/analytics/logs => {"app_id":"{{app_id}}"} => found all logs
537. #=> POST  => http://{{server}}/api/analytics/logs => {"app_id":"Invalid"} => "out":\[\],
538. #=> POST  => http://{{server}}/api/analytics/session_history => {"session":"{{session}}"} => History returned
539. #=> GET  => http://{{server}}/api/analytics/session_history?session={{session}} => History returned
540. #=> POST  => http://{{server}}/api/analytics/app_summary_today => {"app_id":"{{app_id}}"} => We have not yet support this api
541. #=> POST  => http://{{server}}/api/analytics/app_summary_week => {"app_id":"{{app_id}}"} => We have not yet support this api
542. #=> GET  => http://{{server}}/api/analytics/show => Please select a app id:
543. #=> GET  => http://{{server}}/api/analytics/show?app_id={{app_id}} => Main.c:20
544. 
545. #########################################################################################
546. ##                                                                                     ##
547. ##         APP APPCONFIG                                                               ##
548. ##                                                                                     ##
549. #########################################################################################
550. ## appconfig allows you gate your feature and do A/B testing.
551. ## TODO: This test is broken, we need to fix it. 
552. #=> context => app_id => test.app
553. #=> POST  => http://{{server}}/api/appconfig/fetch => {} => Input validation failed: Missing app_id
554. #=> POST  => http://{{server}}/api/appconfig/clear => {"app_id":"{{app_id}}"}  => AppConfig config has deleted
555. #=> POST  => http://{{server}}/api/appconfig/fetch => {"app_id":"{{app_id}}"}  => Error: AppConfig not found for this app id
556. #=> POST  => http://{{server}}/api/appconfig/set => {"app_id":"{{app_id}}","test1":false}  => "gk_list":{"test1":{"type":"raw","key":"test1","value":false}}}
557. #=> POST  => http://{{server}}/api/appconfig/set => {"app_id":"{{app_id}}","test2":"something"}  => "test2":{"type":"raw","key":"test2","value":"something"
558. ## Enable feature 60%
559. #=> POST  => http://{{server}}/api/appconfig/ab => {"app_id":"{{app_id}}","test3":60}  => "test3":{"type":"ab","key":"test3","value":60}}}
560. #=> POST  => http://{{server}}/api/appconfig/fetch => {"app_id":"{{app_id}}"}  => "force_id":"(?.*?)"
561. #=> POST  => http://{{server}}/api/appconfig/fetch => {"app_id":"{{app_id}}"}  => force_id
562. #=> POST  => http://{{server}}/api/appconfig/force => {"app_id":"{{app_id}}"}  => "force_id":"(?.*?)"
563. #=> POST  => http://{{server}}/api/appconfig/fetch => {"app_id":"{{app_id}}"}  => force_id
564. #=> POST  => http://{{server}}/api/appconfig/set => {"app_id":"in.peerreview.khabar","min_version":28} =>success
565. #=> POST  => http://{{server}}/api/appconfig/fetch => {} => 28
566. 
567. 
568. # ======= exist API ===================
569. => !POST  => http://{{server}}/api/test/create?_confirmstr=test0 => {"_payload":[{"name":"dip","roll":1}, {"name":"dip1","roll":2}]} => success
570. => POST  => http://{{server}}/api/test/exist => {} => You have not send either _field or _value
571. => POST  => http://{{server}}/api/test/exist => {"_field":"name"} => You have not send either _field or _value
572. => POST  => http://{{server}}/api/test/exist => {"_field":"name","_value":""} => You have not send either _field or _value.
573. => POST  => http://{{server}}/api/test/exist => {"_field":"name","_value":",,,"} => You must NOT send a not empty _value as a list or equivalent comma separated string
574. => POST  => http://{{server}}/api/test/exist => {"_field":"name","_value":"dip"} => Found 1 out of 1.
575. => POST  => http://{{server}}/api/test/exist => {"_field":"name","_value":"dip, dip1"} => Found 2 out of 2.
576. => POST  => http://{{server}}/api/test/exist => {"_field":"name","_value":["dip","dip1"]} => Found 2 out of 2.
577. 
578. # =====  _viewas =====================
579. => GET  => http://{{server}}/api/test/find?_viewas=compressed => Find successfully
580. => GET  => http://{{server}}/api/test/find?_viewas=invalid => Network request contains invalid _viewas
581. => GET  => http://{{server}}/api/test/find?name=dip&_viewas=input => "input":\{"name":"dip"
582. => GET  => http://{{server}}/api/test/?_viewas=html =>  button type="button" onclick="clone
583. 
584. 
585. #===  aggregate API ===========
586. => !POST  => http://{{server}}/api/test/create?_confirmstr=test => {"_payload":[{"product":"X","type":"type1"}, {"product":"X","type":"type1"}, {"product":"Y","type":"type1"}, {"product":"Y","type":"type2"}, {"product":"Z","type":"type2"}]} => success
587. => POST  => http://{{server}}/api/test/aggregate => {} => you must send _payload as list
588. => POST  => http://{{server}}/api/test/aggregate => {"_payload":{"hello":"hello"}} => you must send _payload as list
589. => POST  => http://{{server}}/api/test/aggregate => {"_payload": [ {"$match":{"type":"type1"}},  {"$group": {"_id": "$product","count": {"$sum": 1}}}]  } => {"_id":"X","count":2}
590. 
591. #====== date api ======
592. => POST  => http://{{server}}/api/utils/date  => {} => 202
593. => GET  => http://{{server}}/api/utils/date  => 202
594. 
595. # ============ test /dbconfig ====================
596. => GET  => http://{{server}}/api/test10/dbconfig => DbConfig not found
597. => GET  => http://{{server}}/api/test_r/dbconfig => \{"local":false\}
598. 
599. # ==========  type-sefty and data validation ======
600. # define rules as per https://github.com/skaterdav85/validatorjs
601. # supported type: string, array, boolean, date, email, integer, numeric,regex:pattern, 
602. # Supported constraints: required, not_in:foo,bar , max:value. min:value, in:foo,bar
603. => GET  => http://{{server}}/api/test_v/insert?aa=aa => The name field is required
604. => POST  => http://{{server}}/api/test_v/insert =>{"name":""}=> name field must not empty
605. # Also detect empty string
606. => POST  => http://{{server}}/api/test_v/insert =>{"name":"  "}=> name field must not empty
607. => POST  => http://{{server}}/api/test_v/insert =>{"name":"  "}=> name field must not empty
608. => GET  => http://{{server}}/api/test_v/insert?name=dip => The email field is required
609. => GET  => http://{{server}}/api/test_v/insert?name=aa&email=dip => email must be email
610. => GET  => http://{{server}}/api/test_v/insert?name=aa&email=dip@dip.com => insert successfully
611. => POST  => http://{{server}}/api/test_v/insert => {"name":"aa","email":"dip@dip.com","array":"hello"} => array must be a array
612. => POST  => http://{{server}}/api/test_v/insert => {"name":"aa","email":"dip@dip.com","array":["hello"]} => insert successfully
613. 
614. => POST  => http://{{server}}/api/test_v/insert => {"name":"aa","email":"dip@dip.com","boolean":100} => boolean must be a boolean
615. => POST  => http://{{server}}/api/test_v/insert => {"name":"aa","email":"dip@dip.com","boolean":true} => insert successfully
616. 
617. => POST  => http://{{server}}/api/test_v/insert => {"name":"aa","email":"dip@dip.com","number":"hello"} => number must be a number
618. => POST  => http://{{server}}/api/test_v/insert => {"name":"aa","email":"dip@dip.com","number":1000} => "_id":"(?.*?)"
619. => POST  => http://{{server}}/api/test_v/update => {"_id":"{{id}}","number":"1D000"} => number must be a number
620. => POST  => http://{{server}}/api/test_v/update => {"_id":"{{id}}","number":"10000"} => success
621. => POST  => http://{{server}}/api/test_v/update => {"_id":"{{id}}","number":10000} => success
622. => POST  => http://{{server}}/api/test_v/update => {"_id":"{{id}}","array":"1D000"} => array must be a array
623. => POST  => http://{{server}}/api/test_v/update => {"_id":"{{id}}","array":["1D000"]} => success
624. => GET  => http://{{server}}/api/test_v/update?number="123D"&_confirmstr=test_v => number must be a number
625. => GET  => http://{{server}}/api/test_v/update?number=123&_confirmstr=test_v  => success
626. => POST  => http://{{server}}/api/test_v/insert => {"_payload":[{"name":"aa","email":"dip@dip.com","number":1000},{"name":"aa","email":"dip@dip.com","number":1000}]} => success
627. => POST  => http://{{server}}/api/test_v/insert => {"_payload":[{"name":"aa","email":"dip@dip.com","number":"WRONG"},{"name":"aa","email":"dip@dip.com","number":1000}]} => error
628. => POST  => http://{{server}}/api/test_v/insert => {"_payload":[{"name":"aa","email":"dip@dip.com","number":"WRONG"},{"name":"aa","email":"dip@dip.com","number":"WRONG"}]} => error
629. 
630. 
631. ###################################################################
632. #
633. #  Advance Search with RHS Color search
634. #  Supported annotation:
635. #  eq, ne, starts, ends:, regex:, in:, all:,int:eqi, nei, date:
636. ###################################################################
637. => !GET  => http://{{server}}/api/test/delete?_confirmstr=test =>success
638. => !POST  => http://{{server}}/api/test/insert => {"name":"A123","roll":10,"color":["red","green"]} => success
639. => !POST  => http://{{server}}/api/test/insert => {"name":"B123","roll":11,"color":["red","blue"]} => success
640. => !POST  => http://{{server}}/api/test/insert => {"name":"C124","roll":12,"color":["blue","green"]} => success
641. => !POST  => http://{{server}}/api/test/insert => {"name":"xxx:xx66"} => success
642. => GET  => http://{{server}}/api/test/count?name=eq:A123 => Count: 1
643. => GET  => http://{{server}}/api/test/count?name=ne:A123 => Count: 3
644. => GET  => http://{{server}}/api/test/count?name=starts:A => Count: 1
645. => GET  => http://{{server}}/api/test/count?name=ends:3 => Count: 2
646. => GET  => http://{{server}}/api/test/count?name=regex:12 => Count: 3
647. => GET  => http://{{server}}/api/test/count?color=in:red => Count: 2
648. => GET  => http://{{server}}/api/test/count?color=in:red,green => Count: 3
649. => GET  => http://{{server}}/api/test/count?color=in:red, green,,,, => Count: 3
650. => GET  => http://{{server}}/api/test/count?color=in:green,red => Count: 3
651. => GET  => http://{{server}}/api/test/count?color=all:green,red => Count: 1
652. => GET  => http://{{server}}/api/test/count?color=all:green,red,blue => Count: 0
653. => GET  => http://{{server}}/api/test/count?color=all:green,red,  blue,  => Count: 0
654. => GET  => http://{{server}}/api/test/count?color=in:   green,  red,  blue,  => Count: 3
655. => GET  => http://{{server}}/api/test/count?color=in:green,red,  blue,&name=starts:A  => Count: 1
656. => GET  => http://{{server}}/api/test/count?name=xxx:xx66 => Count: 1
657. => GET  => http://{{server}}/api/test/count?roll=int:10 => Count: 1
658. => GET  => http://{{server}}/api/test/count?roll=eqi:10 => Count: 1
659. => GET  => http://{{server}}/api/test/count?roll=nei:10 => Count: 3
660. => GET  => http://{{server}}/api/test/count?roll=eqi:XX => Count: 0
661. 
662. # Test Params annotation
663. => !GET  => http://{{server}}/api/test/delete?_confirmstr=test =>success
664. => GET => http://{{server}}/api/test/insert?rate=number:abc => params starts with number:XX
665. => GET => http://{{server}}/api/test/insert?rate=number:100 => "rate":100
666. => GET => http://{{server}}/api/test/insert?rate=number:100.100 => "rate":100.1,
667. => GET => http://{{server}}/api/test/insert?join_date=date:abc => params starts with date:
668. => GET => http://{{server}}/api/test/insert?join_date=date:2014-11-03T19:38:34.203Z => "join_date":"2014-11-03T19:38:34.203Z",
669. => POST => http://{{server}}/api/test/insert => {"join_date":"date:2014-11-03T19:38:34.203Z"} => "join_date":"2014-11-03T19:38:34.203Z",
670. => GET => http://{{server}}/api/test/insert?join_date=date:2014-11-03 => "join_date":"2014-11-03T00:00:00.000Z",
671. => GET => http://{{server}}/api/test/insert?join_date=date:2014-11-03X => must be a valid ISO Date
672. 
673. 
674. 
675. => !GET  => http://{{server}}/api/test/delete?_confirmstr=test => success
676. 
677. 
678. 
679. # == Download 
680. => !POST  => http://{{server}}/api/test/insert => {"name":"A123","roll":10,"color":["red","green"]} => success
681. => GET  => http://{{server}}/api/test/download => \[\{"_id":
682. => GET  => http://{{server}}/api/test/export => \[\{"_id":
683. 
684. # override db selection.
685. # its not possible to test as in testing all are local db.
686. => GET  => http://{{server}}/api/test/count?_targetdb=local => success
687. => GET  => http://{{server}}/api/test/count?_targetdb=remote => success
688. 
689. # pivoit Table.
690. => !GET  => http://{{server}}/api/test/delete?_confirmstr=test =>success
691. => POST  => http://{{server}}/api/test/insert => {"_payload":[{"name":"A", "country":"india"},{"name":"B", "country":"india"},{"name":"A", "country":"uk"},{"name":"B", "country":"uk"},{"name":"C", "country":"uk"}, {"name":"A", "country":"usa"}]} =>success 
692. => GET  => http://{{server}}/api/test/pivot?_field=name,country => 6 distribution found 
693. 
694. # Timeseries on multiple fuilds.
695. => POST  => http://{{server}}/api/test/insert => {"_payload":[{"name":"A", "event":"play_error"},{"name":"A", "event":"play_error"},{"name":"A", "event":"play_error"},{"name":"A", "event":"play_success"},{"name":"A", "event":"play_success"},{"name":"A", "event":"play_success"},{"name":"A", "event":"play_success"},{"name":"A", "event":"play_hit"},{"name":"A", "event":"play_hit"}]} =>success 
696. => POST  => http://{{server}}/api/test/ts_multi => {} => you must send _payload as non empty list
697. => POST  => http://{{server}}/api/test/ts_multi => {"_payload":{"":""}} => you must send _payload as list
698. => POST  => http://{{server}}/api/test/ts_multi => {"_payload":[]} => you must send _payload as non empty list
699. => POST  => http://{{server}}/api/test/ts_multi => {"_payload":["a"]} => each element of _payload must be a object
700. => POST  => http://{{server}}/api/test/ts_multi => {"_payload":[{"event":"play_error"},{"event":"play_success"},{"event":"play_hit"}]} => multi distribution found
701. 
702. # testing hooks
703. => POST  => http://{{server}}/api/test_hook/insert => {"_payload":[{"name":"A", "event":"play_error"}]} => onBeforeInsert
704. => POST  => http://{{server}}/api/test_hook/create => {"name":"dip","count":1} =>onBeforeInsert
705. => GET  => http://{{server}}/api/test_hook/delete?id={{id}}  => onBeforeDelete
706. => GET  => http://{{server}}/api/test_hook/update?id={{id}}&name=hari1 => onBeforeUpdate
707. 
708. #Composute key
709. => GET  => http://{{server}}/api/test_composite/delete?_confirmstr=test_composite => success
710. => POST  => http://{{server}}/api/test_composite/create => {"key1":"dip"} => Data validation failed as key2 must be present as composite key
711. => POST  => http://{{server}}/api/test_composite/create => {"key2":"dip"} => Data validation failed as key1 must be present as composite key
712. => POST  => http://{{server}}/api/test_composite/create => {"key1":"z1","key2":"z2"} => insert successfully
713. => POST  => http://{{server}}/api/test_composite/create => {"key1":"z1","key2":"z2"} => Data validation failed as composite key failed
714. => POST  => http://{{server}}/api/test_composite/create => {"key1":"z1","key2":"z3"} =>insert successfully
715. => POST  => http://{{server}}/api/test_composite/create => {"key1":"z1","key2":"z3","key3":"123"} =>Data validation failed as composite key failed
716. => POST  => http://{{server}}/api/test_composite/bulk_insert => {"_payload":[{"key1":"z1","key2":"z2"},{"key1":"z1","key2":"z4","key3":"123"}]} =>1/2- Bulk Insert completed
717. 
718. #schedule
719. # GET => http://{{server}}/api/schedule/count => 0
720. # GET => http://{{server}}/api/schedule/insert?url=http://google.com/1&cron_format=* * * * *&method=get&is_active=true => Insert Done. Schedule success:1, error:0. Active Job count:1
721. # GET => http://{{server}}/api/schedule/count => 1
722. # GET => http://{{server}}/api/schedule/insert?url=http://google.com/1&cron_format=* * * * *&method=get&is_active=false => Data validation failed as composite key failed
723. # GET => http://{{server}}/api/schedule/insert?url=http://google.com/2&cron_format=* * * * *&method=get&is_active=false => Schedule success:0, error:1. Active Job count:1
724. # GET => http://{{server}}/api/schedule/insert?url=http://google.com/3&cron_format=wrong&method=get&is_active=true =>  error:1
725. # GET => http://{{server}}/api/schedule/insert?url=http://google.com/3&cron_format=* 1 * * *&method=get&is_active=true =>  "_id":"(?.*?)"
726. # GET => http://{{server}}/api/schedule/update?id={{id2}}&cron_format=* 2 * * * =>  success
727. # GET => http://{{server}}/api/schedule/?id={{id2}}=> \* 2 \* \* \* 
728. # GET => http://{{server}}/api/schedule/update?id={{id2}}&is_active=true =>  Update Done. Schedule Ops success:0, error:1. Active Job count:2
729. # GET => http://{{server}}/api/schedule/update?id={{id2}}&is_active=true =>  Update Done. Schedule Ops success:0, error:1. Active Job count:2
730. # GET => http://{{server}}/api/schedule/update?id={{id2}}&is_active=false =>  Update Done. Schedule Ops success:1, error:0. Active Job count:1
731. # GET => http://{{server}}/api/schedule/update?id={{id2}}&is_active=fass =>  The selected is active is invalid.
732. # GET => http://{{server}}/api/schedule/insert?url=http://google.com/4&cron_format=* * * * *&method=get&is_active=false =>  "_id":"(?.*?)"
733. # GET => http://{{server}}/api/schedule/update?id={{id2}}&is_active=false =>  Update Done. Schedule Ops success:0, error:1. Active Job count:1
734. # GET => http://{{server}}/api/schedule/update?id={{id2}}&is_active=true =>  Update Done. Schedule Ops success:1, error:0. Active Job count:2
735. # GET => http://{{server}}/api/schedule/update?is_active=false&_confirmstr=schedule =>  Update Done
736. # POST =>  http://{{server}}/api/schedule/insert => {"url":"http://{{server}}/api/test11/insert","cron_format":"*/1 * * * *","method":"post","is_active":true, "data":{"name":"dip"}} => "_id":"(?.*?)"
737. # sleep 65
738. # GET => http://{{server}}/api/schedule/?id={{id}} => "last_result":
739. # GET => http://{{server}}/api/schedule/delete?_confirmstr=schedule =>  Deleted count is : 
740. 
741. 
742. # test Extension for /api/test/ext
743. => GET  => http://{{server}}/api/test/ext =>  Ext API Called
744. => POST  => http://{{server}}/api/test/ext => {} =>  Ext API Called
745. 
746. # Push Notification
747. => GET  => http://{{server}}/api/push_notification/delete?_confirmstr=push_notification => success
748. => GET  => http://{{server}}/api/push_notification/insert => Trying insert Empty Object
749. => GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc&os=android => insert successfully
750. => GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc&os=android => Data validation failed as composite key failed
751. => GET  => http://{{server}}/api/push_notification/count => 1
752. => GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
753. => GET  => http://{{server}}/api/push_notification/count => 2
754. => POST  => http://{{server}}/api/push_notification/insert => {"_payload":[{"app_id":"test","token":"abc11", "os":"android"},{"app_id":"test","token":"abc2", "os":"android"},{"app_id":"test","token":"abc3", "os":"android"},{"app_id":"test","token":"abc4", "os":"android"},{"app_id":"test","token":"abc5", "os":"android"},{"app_id":"test","token":"abc6", "os":"android"},{"app_id":"test","token":"abc7", "os":"android"},{"app_id":"test","token":"abc8", "os":"android"},{"app_id":"test","token":"abc9", "os":"android"},{"app_id":"test","token":"abc10", "os":"android"}]} => insert successfully
755. 
756. => GET  => http://{{server}}/api/push_notification/delete => You are trying to bulk operation.
757. => GET  => http://{{server}}/api/push_notification/delete?token=abc=> missing _confirmstr
758. => GET  => http://{{server}}/api/push_notification/delete?token=abc&_confirmstr=push_notification => Deleted count is : 1
759. => GET  => http://{{server}}/api/push_notification/count => 1
760. => GET  => http://{{server}}/api/push_notification/delete?token=invalid&_confirmstr=push_notification => Deleted count is : 0
761. => GET  => http://{{server}}/api/push_notification/count => 1
762. 
763. => GET  => http://{{server}}/api/push_notification/push => Input validation failed: Missing app_id
764. 
765. # It's dicult to test as we donb't have any token from mobile.
766. => GET  => http://{{server}}/api/push_notification/push?app_id=test&page=0&title=hello&body=No  Data&key=0 => succcss_count:0, error_count:1
767. => GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
768. => GET  => http://{{server}}/api/push_notification/push?app_id=test&page=0&title=hello&body=No  Data&key=0 => DRYRUN: true
769. => GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
770. => GET  => http://{{server}}/api/push_notification/push?app_id=test&page=0&title=hello&body=No DATA&key=0&_no_dry_run=0 => [DRYRUN: false]
771. => GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
772. => GET  => http://{{server}}/api/push_notification/push?app_id=test&page=0&title=hello&body=WITH DATA&key=0&pane=music&target=5e6d53f944526b7da8c0a844 => succcss_count:0, error_count:1
773. => GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
774. => GET  => http://{{server}}/api/push_notification/push?app_id=test&page=0&title=hello&body=WITH DATA&key=0&pane=music&target=5e6d53f944526b7da8c0a844&_no_dry_run=0 => succcss_count:0, error_count:1
775. 
776. => GET  => http://{{server}}/api/push_notification/push_one?title=hello&body=WITH DATA&key=0&pane=music&target=5e6d53f944526b7da8c0a844 => Missing token
777. => GET  => http://{{server}}/api/push_notification/push_one?token=fgEljAT1Qzg:APA91bFFF2zSUg3MaMtepRUzoE0xWcOvg4DlSSlxx8-85qDWreGJLHGWIM6zUkVgHIm3M7oZmcCoWIO11y2ZPbizyKt88dk-aNMYxgAiCf_DKF53ypPmpEH1-SpwSOTkV2wacIqSMBcz&title=hello&body=WITH DATA&key=0&pane=music&target=5e6d53f944526b7da8c0a844 => succcss_count:0, error_count:1
778. => POST  =>http://{{server}}/api/push_notification/push_one => { "token":"fgEljAT1Qzg:APA91bFFF2zSUg3MaMtepRUzoE0xWcOvg4DlSSlxx8-85qDWreGJLHGWIM6zUkVgHIm3M7oZmcCoWIO11y2ZPbizyKt88dk-aNMYxgAiCf_DKF53ypPmpEH1-SpwSOTkV2wacIqSMBcz","title":"test","body":"pane","pane":"webview","target":"https://covidout.in/"} => succcss_count:0, error_count:1
779. # => GET => http://{{server}}/api/push_notification/push_one?token=fgEljAT1Qzg:APA91bFFF2zSUg3MaMtepRUzoE0xWcOvg4DlSSlxx8-85qDWreGJLHGWIM6zUkVgHIm3M7oZmcCoWIO11y2ZPbizyKt88dk-aNMYxgAiCf_DKF53ypPmpEH1-SpwSOTkV2wacIqSMBcz&title=এটা কিছু টেস্ট &body=এটা কিছু টেস্ট &key=0&pane=music&target=5e6d53f944526b7da8c0a844 => Successfully sent
780. => GET  => http://{{server}}/api/push_notification/count?app_id=test => Count: 0
781. 
782. # Testing Utilities
783. => GET  => http://{{server}}/api/utils/test?app_id=test => You are hitting Test Utils
784. => GET  => http://{{server}}/api/utils/date => The system time is
785. => GET  => http://{{server}}/api/utils/bootcamp => Welcome to simplestore BootCamp!
786. 
787. # Test Stategyies
788. => GET  => http://{{server}}/api/test/insert?name=dip&_viewas=noresp => {"status":"success"}
789. => POST  => http://{{server}}/api/test/insert?_viewas=noresp => {"name":"dip"}=> ^{"status":"success"}$
790. # We should get the exception evenif there is _viewas=noresp 
791. => GET  => http://{{server}}/api/test/insert?name=dip&_viewas=noresp&_viewas=xxx => Error while parsing request
792. 
793. 
794. 
795. # test Bulk hits and rank
796. => !GET  => http://{{server}}/api/test0/create?name=dip2 =>  "_id":"(?.*?)"
797. => POST  => http://{{server}}/api/test0/bulk_hit => {"_payload":[{"id":"{{id}}","field":"count", "value":1}]} => s/e: 1/0
798. # Te hardcoded value treaded as a true.
799. => POST  => http://{{server}}/api/test0/bulk_hit => {"_payload":[{"id":"{{id}}","field":"count", "value":1}, {"id":"56cafab06639904e9b68e73a","field":"count", "value":1}, {"id":"{{id}}","field":"count", "value":"wrong"}]} => s/e: 2/1
800. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":2
801. => POST  => http://{{server}}/api/test0/bulk_hit => {"_payload":[{"id":"{{id}}","field":"count", "value":-1}]} => [s/e: 1/0]
802. => POST  => http://{{server}}/api/test0/bulk_hit => {"_payload":[{"id":"{{id}}","field1":"count", "value":-1}]} => [s/e: 0/1]
803. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":1
804. => POST  => http://{{server}}/api/test0/bulk_rank => {"_payload":[{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true},{"id":"{{id}}","field":"count", "up":true}]} => [s/e: 16/0] 
805. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":10
806. => POST  => http://{{server}}/api/test0/bulk_rank => {"_payload":[{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false}]} => [s/e: 16/0] 
807. => POST  => http://{{server}}/api/test0/bulk_rank => {"_payload":[{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false},{"id":"{{id}}","field":"count", "up":false}]} => [s/e: 16/0] 
808. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":0
809. 
810. 
811. 
812. ################################################################################
813. # Sending Email functinaly ( Broken Needs API redesign) 
814. ################################################################################
815. ## TODO: Test are broken as we meshed up with body and html two data, I would perefr to have body and then isHtml as a flag so this need to be rredesigned
816. => GET  => http://{{server}}/api/utils/email => Input validation failed: Missing to
817. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&body=Simple Test =>Input validation failed: Missing subject
818. ## Please use dryrun to ensure to avoid getting so many mails.
819. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&dry_run=1 => ACTUALY NOT SEND - JUST A DRY RUN
820. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&dry_run=1 =>  Missing body
821. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&dry_run=1 => ACTUALY NOT SEND - JUST A DRY RUN
822. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&dry_run=1&is_html=1 => ACTUALY NOT SEND - JUST A DRY RUN
823. 
824. ## Test multiple sendaccount by spaciating product
825. 
826. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&product=Grodok&body=hello&dry_run=1 => ACTUALY NOT SEND
827. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&dry_run=1&product=hello => Mail is not supported for this product
828. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&dry_run=1&product=default => \[DRYRUN\] Mail sent to
829. 
830. ##send calender invitew - just add start_time as ISO date String and duration as number in minites 
831. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&start_time=2023-07-23T23:37:08.505Z => Missing duration
832. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&start_time=2023-07-23T23:37:08.505Z&duration=xyz =>  has to be a valid date!
833. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&start_time=INAVLID&duration=xyz => has to be a valid date
834. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&start_time=2023-07-23T23:37:08.505Z&duration=30&dry_run=1 => ACTUALY NOT SEND
835. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&start_time=2023-07-23T23:37:08.505Z&duration=30&cal_body=Cal Body &cal_subject=Cal_Subject&cal_location=Kolkata&dry_run=1 => ACTUALY NOT SEND
836. 
837. ## test HTML Mail.
838. ## We are supported HTML mail - you need to send body and html but body would be droped. It just use the degault HTML
839. ## template to send the email. It works for both w/o calender
840. => POST  => http://{{server}}/api/utils/email => {"to":"dutta.dipankar08@gmail.com", "subject":"Hello", "body":"hello", "body":"Hello\nHow ae you doing?\n\nThnaks,\nDipankar","dry_run":1, "is_html":1} => ACTUALY NOT SEND
841. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&start_time=2023-07-23T23:37:08.505Z&duration=30&cal_body=Cal Body &cal_subject=Cal_Subject&cal_location=Kolkata&html=hello there&dry_run=1 => ACTUALY NOT SEND
842. => GET  => http://{{server}}/api/utils/email?to=testuser@gmail.com&subject=Hello World&body=Simple Test => You must pass some valid email addess
843. 
844. ## REAL SEND MAIL - DISABLE BELOW TEST
845. ## GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test => Mail sent to
846. ## GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Hello\n\nWorld\nDipankar\nTest=> Mail sent to
847. ## GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&start_time=2023-07-23T23:37:08.505Z&duration=30 => [DRYRUN] Mail sent to
848. 
849. ## HTML Norm : new line to 
850. => GET => http://localhost/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Hello\nWorld&dry_run=1&is_html=1 => Hello
World 851. => GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=\nHello\nWorld\n&dry_run=1&is_html=1 =>
Hello
World
852. => POST => http://{{server}}/api/utils/email => {"to":"dutta.dipankar08@gmail.com", "subject":"Hello World","body":"\nHello\nWorld\n","dry_run":1, "is_html":1 } =>
Hello
World
853. 854. ################################################ 855. # Short code 856. ################################################ 857. => GET => http://{{server}}/api/nodel_shortcode/insert => Trying insert Empty Object 858. => GET => http://{{server}}/api/nodel_shortcode/generate => Input validation failed: Missing target_db 859. => GET => http://{{server}}/api/nodel_shortcode/generate?target_id=123&target_db=xxxdb => "short_code":"(?.*?)" 860. => GET => http://{{server}}/api/nodel_shortcode/get?short_code={{short_code}} => xxxdb 861. => GET => http://{{server}}/api/nodel_shortcode/get?short_code=wrong => Find successfully with 0 items 862. 863. 864. 865. 866. # Support _sort. 867. => !GET => http://{{server}}/api/test0/delete?_confirmstr=test0 => success 868. => !POST => http://{{server}}/api/test0/create => {"_payload":[{"name":"dip3","roll":1},{"name":"dip3","roll":2}]} => success 869. => GET => http://{{server}}/api/test0/find?&_sort=roll => "roll":1.*?"roll":2 870. => GET => http://{{server}}/api/test0/find?&_sort=-roll => "roll":2.*?"roll":1 871. 872. # Support clone APIs 873. => !POST => http://{{server}}/api/test0/create => {"name":"dip","num":{"math":10, "eng":11}} => "_id":"(?.*?)" 874. => GET => http://{{server}}/api/test0/clone => You must pass a _id 875. => POST => http://{{server}}/api/test0/clone => {} => You must pass a _id 876. => GET => http://{{server}}/api/test0/clone?_id={{id}} => "name":"dip" 877. => GET => http://{{server}}/api/test0/clone?_id={{id}}&name=dip2 => "name":"dip2" 878. => POST => http://{{server}}/api/test0/clone => {"id":"{{id}}", "name":"dip3"} => "name":"dip3" 879. 880. # QR code generation: 881. => GET => http://{{server}}/api/utils/qr => Missing url 882. => GET => http://{{server}}/api/utils/qr?url=http://google.com => svg 883. => GET => http://{{server}}/api/utils/qr?url=http://google.com&size=100 => height="100" 884. => GET => http://{{server}}/api/utils/qr?url=http://google.com&size=100&color=%23ff0000 => \#ff0000 885. 886. 887. # test system_payment == Migrate to simple_auth 888. #=> GET => http://{{server}}/api/system_payment/stripe => Stripe API returns an unexpected resp 889. # => GET => http://{{server}}/api/system_payment/stripe?id=1234 => Stripe API returns an unexpected resp <<< FIX THIS 890. #=> GET => http://{{server}}/api/system_payment_not_webhook/?id=1234 => not a valid ID 891. # test invalid sqi 892. #=> POST => http://{{server}}/api/system_payment/stripe => {"data":{"object":{"amount":100,"currency":"inr","id":"123", "customer":"cus_123", "description":"tx description", "charges":{"data":[{"billing_details":{"email":"dip@fb.com"}}]}}}}=> SKU not configuired in SimpleStore 893. # test right parsing 894. #=> POST => http://{{server}}/api/system_payment/stripe => {"data":{"object":{"amount":100,"currency":"inr","id":"123", "customer":"cus_123", "description":"sku1", "charges":{"data":[{"billing_details":{"email":"dip@fb.com"}}]}}}}=> Payment is inserted 895. # test empty data 896. #=> POST => http://{{server}}/api/system_payment/stripe => {}=> Stripe API returns an unexpected resp 897. #=> GET => http://{{server}}/api/system_payment/points => Missing user_id 898. # this api should be used to get total points for an user 899. #=> GET => http://{{server}}/api/system_payment/points?user_id=123 => No matching query found 900. #=> GET => http://{{server}}/api/system_payment/points?user_id=dip@fb.com => Total points is: 901. 902. # test roserpay WebHook 903. #=> POST => http://{{server}}/api/system_payment/razorpay => { "entity": "event", "account_id": "acc_3xhNTlBQgmDD7g", "event": "payment.captured", "contains": ["payment" ], "payload": {"payment": { "entity": {"id": "pay_FVxUMaT3vnv78M","entity": "payment","amount": 20000,"currency": "INR","status": "captured","order_id": "order_FVxUBI0n9PhY5T","invoice_id": null,"international": false,"method": "netbanking","amount_refunded": 0,"refund_status": null,"captured": true,"description": null,"card_id": null,"bank": "HDFC","wallet": null,"vpa": null,"email": "dutta.dipankat08@gmail.com","contact": "+919933588184","notes": { "email": "dutta.dipankat08@gmail.com", "phone": "9933588184"},"fee": 590,"tax": 90,"error_code": null,"error_description": null,"error_source": null,"error_step": null,"error_reason": null,"acquirer_data": { "bank_transaction_id": "5972833"},"created_at": 1598568741 }} }, "created_at": 1598568744} => Payment is inserted 904. #=> POST => http://{{server}}/api/system_payment/razorpay => { "entity": "event", "account_id": "acc_3xhNTlBQgmDD7g", "event": "payment.failure", "contains": ["payment" ], "payload": {"payment": { "entity": {"id": "pay_FVxUMaT3vnv78M","entity": "payment","amount": 20000,"currency": "INR","status": "captured","order_id": "order_FVxUBI0n9PhY5T","invoice_id": null,"international": false,"method": "netbanking","amount_refunded": 0,"refund_status": null,"captured": true,"description": null,"card_id": null,"bank": "HDFC","wallet": null,"vpa": null,"email": "dutta.dipankat08@gmail.com","contact": "+919933588184","notes": { "email": "dutta.dipankat08@gmail.com", "phone": "9933588184"},"fee": 590,"tax": 90,"error_code": null,"error_description": null,"error_source": null,"error_step": null,"error_reason": null,"acquirer_data": { "bank_transaction_id": "5972833"},"created_at": 1598568741 }} }, "created_at": 1598568744} => Received invalid events - razorpay API returns an unexpected resp 905. #=> POST => http://{{server}}/api/system_payment/razorpay => { "entity": "event", "account_id": "acc_3xhNTlBQgmDD7g", "event": "payment.captured", "contains": ["payment" ], "payload": {"payment": { "entity": {"id": "pay_FVxUMaT3vnv78M","entity": "payment","amount": 20001,"currency": "INR","status": "captured","order_id": "order_FVxUBI0n9PhY5T","invoice_id": null,"international": false,"method": "netbanking","amount_refunded": 0,"refund_status": null,"captured": true,"description": null,"card_id": null,"bank": "HDFC","wallet": null,"vpa": null,"email": "dutta.dipankat08@gmail.com","contact": "+919933588184","notes": { "email": "dutta.dipankat08@gmail.com", "phone": "9933588184"},"fee": 590,"tax": 90,"error_code": null,"error_description": null,"error_source": null,"error_step": null,"error_reason": null,"acquirer_data": { "bank_transaction_id": "5972833"},"created_at": 1598568741 }} }, "created_at": 1598568744} => SKU not configuired in SimpleStore 906. 907. # Test Trial points. 908. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=test_sku_trial => Your trail is activated! 909. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=test_sku_trial => You aleady used your trial 910. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=unknown => SKU not configuired in SimpleStore 911. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=test_sku_trial_no => This SKU is not elligiable from trail 912. #=> GET => http://{{server}}/api/system_payment/points?user_id=trial_user1 => 10 913. #=> GET => http://{{server}}/api/system_payment/delete?_confirmstr=system_payment => success 914. 915. 916. # test friendly ID: ( test3 is config for friendly id so it would be a match) 917. # You should note that friendlyID should NOT necessaryly to be unique due to te perf. 918. => POST => http://{{server}}/api/test0/insert => {"name":"dip"} => ts_insert 919. => POST => http://{{server}}/api/test3/insert => {"name":"dip"} => friendly_id 920. => POST => http://{{server}}/api/test3/insert => {"name":"dip"} => friendly_id 921. 922. ######### Testing calender APIS ############# 923. => POST => http://{{server}}/api/system_calender/grant => {} => Input validation failed 924. => POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"invalid","duration":30, "type":"type1" } => Invalid start_time 925. #=> POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"2013-03-10T02:00:00Z","duration":15, "type":"type1" } => success 926. #=> POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"2013-03-10T02:00:00Z","duration":60, "type":"type1" } => 2/2 slots created 927. => POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"2013-03-10T03:00:00Z","duration":60, "type":"type1","slot":10 } => 6/6 slots created 928. => POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"2013-03-10T03:00:00Z","duration":60, "type":"type1","slot":10 } => error 929. => POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"2013-03-10T03:10:00Z","duration":70, "type":"type1","slot":10 } => 2/7 930. => POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"2014-03-10T03:10:00Z","duration":70, "type":"type1","slot":10 } => 7/7 931. 932. # Test Avilablity 933. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z" } => ,"user_id":"123","type":"type1" 934. # There is an issue in the below test 935. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2015-03-10T03:10:00Z" } => 0 free slots found 936. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z","type":"type1" } => ,"user_id":"123","type":"type1" 937. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z","type":"type2" } => "out":\[\] 938. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z","type":"pe1" } => ,"user_id":"123", 939. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2012-03-10T03:10:00Z","type":"pe2" } => "out":\[\] 940. => POST => http://{{server}}/api/system_calender/availability => {"date":"2013-03-10T03:10:00Z","type":"pe2" } => Missing product 941. 942. # test booking: 943. => POST => http://{{server}}/api/system_calender/grant => {"product":"doctor", "user_id":"123", "start_time":"2015-03-15T03:00:00Z","duration":60, "type":"type1","slot":10 } => 6/6 944. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z"} => 6 free slots found 945. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z"} => "_id":"(?.*?)" 946. => POST => http://{{server}}/api/system_calender/book => {"product":"test", "id" :"{{id2}}", "user_id":"booker2"} => successfully booked 947. => POST => http://{{server}}/api/system_calender/book => {"product":"test", "id" :"{{id2}}", "user_id":"booker2"} => This schedule is already taken 948. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z" } => 5 free slots found 949. 950. # test cancel 951. => POST => http://{{server}}/api/system_calender/cancel => {"id" :"{{id2}}", "user_id":"booker3"} => not auth 952. => POST => http://{{server}}/api/system_calender/cancel => {"id" :"5f46e8952dd1ada69b161f91", "user_id":"booker3"} => Schedule not found" 953. => POST => http://{{server}}/api/system_calender/cancel => {"id" :"{{id2}}", "user_id":"booker2"} => successfully canceled 954. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z" } => 6 free slots found 955. => GET => http://{{server}}/api/system_calender/delete?_confirmstr=system_calender => success 956. 957. 958. => GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&dry_run=1&product=hello => Mail is not supported for this product 959. => GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test&dry_run=1&product=default => \[DRYRUN\] Mail sent to 960. 961. # Test promotion ## Needs a migration simple auth => admin_promotions DB instead 962. #=> !POST => http://{{server}}/api/auth2/login_by_token => {"token": "fake_token"} => "auth_token":"(?.*?)" 963. #=> POST => http://{{server}}/api/promotion/get_referral_code => {} => Missing auth_token 964. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "wrong","product":"fake_product"} => Unauthorized request 965. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "{{auth_token}}","product":"fake_product"} => "code":"(?.*?)" 966. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "{{auth_token}}","product":"fake_product"} => You already have generated the ref code. 967. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "{{auth_token}}","product":"fake_product1"} => "code":"(?.*?)" 968. #=> POST => http://{{server}}/api/promotion/check_referral_code => {"code": "{{code}}","product":"fake_product"} => "type":"REFER", 969. #=> POST => http://{{server}}/api/promotion/check_referral_code => {"code": "{{code}}","product":"fake_product1"} => This referral code is not valid 970. #=> POST => http://{{server}}/api/promotion/check_referral_code => {"code": "wrong","product":"fake_product1"} => This referral code is not valid 971. #=> GET => http://{{server}}/api/promotion/delete?_confirmstr=promotion => success 972. 973. # RCE - JUST BASIC TEST 974. 975. # Capabilities 976. => GET => http://{{server}}/api/utils/rce/capabilities?_dev_token=root => hello_world_code 977. 978. # Status 979. => GET => http://{{server}}/api/utils/rce/status?_dev_token=root&lang=c => Compiler works fine 980. => POST => http://{{server}}/api/utils/rce/execute => {"_dev_token":"root", "lang":"c", "code":"\#include"} => \"out\":{\"stderr\":\"/tmp/ 981. => POST => http://{{server}}/api/utils/rce/execute => {"_dev_token":"root", "lang":"c","code": "\#include \n int main(){ while(1) printf(\"Hello Dipankar\"); \nreturn 0;}"} => DipankarHello DipankarHello DipankarHello DipankarHello DipankarHello 982. => POST => http://{{server}}/api/utils/rce/execute_ext => {"_dev_token":"root", "lang":"python", "code":"print 'hello123'"} => hello123 983. => POST => http://{{server}}/api/utils/rce/execute_input => {"_dev_token":"root", "lang":"c", "code": "\#include \n int main(){ char str[100]; scanf(\"%s\",&str);printf(\"%s\", str); \nreturn 0;}","lang":"c","input":"HelloWorld"} => HelloWorld 984. 985. 986. 987. # Test Youtube Download 988. #sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl 989. # sudo chmod a+rx /usr/local/bin/youtube-dl 990. #=> GET => http://{{server}}/api/utils/youtubedl?id=sb_sMqAF_o => Incomplete YouTube ID 991. # => GET => http://{{server}}/api/utils/youtubedl?id=CP2AYEqoaZo => googlevideo.com 992. # => GET => http://{{server}}/api/utils/youtubedl/audio?id=CP2AYEqoaZo => googlevideo.com 993. # => GET => http://{{server}}/api/utils/youtubedl/video?id=CP2AYEqoaZo => googlevideo.com 994. # => GET => http://{{server}}/api/utils/youtubedl/info?id=CP2AYEqoaZo => googlevideo.com 995. # => GET => http://{{server}}/api/utils/youtubedl/audio?id=https://www.youtube.com/watch?v=De8UKeURlWU => googlevideo.com 996. # => GET => http://{{server}}/api/utils/youtubedl/dl?id=kEld6MLDXPI => A-V-mp4 997. #### USE TESING BELOW LINE ## 998. 999. # SimpleStore EXPLORE 1000. => GET => http://{{server}}/api/explore/play => Simple Store API EXPLORE 1001. 1002. # SMS 1003. => GET => http://{{server}}/api/utils/sms?to=8927476238&msg=hello&dryrun=true => \[Dryrun\] SMS sent to 8927476238 1004. 1005. # Dev key 1006. GET => http://{{server}}/api/utils/rce/execute?code=hello&lang=kotlin => Access denied 1007. GET => http://{{server}}/api/utils/rce/execute?code=hello&lang=kotlin&_dev_token=root1 => Access denied 1008. GET => http://{{server}}/api/utils/rce/execute?code=hello&lang=kotlin&_dev_token=root => Error while executing this code 1009. 1010. # Status utils = This tracks the health of the endpoints 1011. GET => http://{{server}}/api/status/ping?name=ServiceA => Missing endpoint 1012. GET => http://{{server}}/api/status/ping?endpoint=www.google.com => Missing name 1013. GET => http://{{server}}/api/status/ping?name=ServiceA&endpoint=www.google.com => pong 1014. GET => http://{{server}}/api/status/ping?name=ServiceA&endpoint=www.google.com => pong 1015. GET => http://{{server}}/api/status/show => Live Status of our Service 1016. # HTML TEST NOT SUPPORTED GET => http://{{server}}/api/analytics/show?app_id=sample1 => Showing data for app id sample1 1017. # HTML TEST NOT SUPPORTED GET => http://{{server}}/api/analytics/show?app_id=sample => Showing data for app id sample 1018. 1019. # Long tern Jobs 1020. 1021. 1022. 1023. 1024. ############################# license APIS. ############################# 1025. # License APis allows you to create license for an app user for a app for a duration. 1026. # You can either grant, revoke and validate the license 1027. # All common api's needs root_key to access (TODO) 1028. # There is no renew supported, you just revoke and grant it again. 1029. ######################################################################### 1030. => !GET => http://{{server}}/api/license/delete?_confirmstr=license => success 1031. # Root key 1032. # => GET => http://{{server}}/api/license/ => api access denied 1033. # => GET => http://{{server}}/api/license?root_key=WRONG => success 1034. # Grant, validate and revoke 1035. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test => Missing duration 1036. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test&duration=1&key=NO_KEY => "key":"NO_KEY" 1037. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test&duration=1&key=NO_KEY => license already granted 1038. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test1&duration=WRONG&key=NO_KEY => please pass a valid duration 1039. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test&key=NO_KEY => access granted 1040. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test&key=NO_KEY1 => access denied 1041. => GET => http://{{server}}/api/license/validate?app_id=WRONG&user_id=test&key=NO_KEY => access denied 1042. => GET => http://{{server}}/api/license/revoke?app_id=test&user_id=test => license revoked 1043. => GET => http://{{server}}/api/license/revoke?app_id=test&user_id=test => license not found 1044. => GET => http://{{server}}/api/license/revoke?app_id=test&user_id=test => license not found 1045. => GET => http://{{server}}/api/license/revoke?app_id=test=> Missing user_id 1046. 1047. # expairy 1048. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test2&duration=0&key=NO_KEY=> success 1049. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test2&key=NO_KEY => license expired 1050. 1051. # renew 1052. => GET => http://{{server}}/api/license/revoke?app_id=test&user_id=test2 => license revoked 1053. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test2&duration=1&key=NO_KEY=> success 1054. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test2&key=NO_KEY => access granted 1055. 1056. # generate key 1057. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test3&duration=1=> "key":"(?.*?)" 1058. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test3&key={{key}} => access granted 1059. 1060. 1061. ############################# Schedule Script ############################# 1062. # You can schedule arbitrary script execution with SimpleStore 1063. # FIrst submit a task using /schedule_script/submit/ 1064. # Then Activate the task using /schedule_script/submit/ 1065. # Great! You job has scheduled. 1066. # Check a list of jobs which are current scheduled as /schedule_script/status/ and you can deactivate as /schedule_script/deactivate/ 1067. ######################################################################### 1068. => !GET => http://{{server}}/api/schedule_script/delete?_confirmstr=schedule_script => success 1069. 1070. => GET => http://{{server}}/api/schedule_script/submit?name=test&description=test&script=console.log(%22hello%20Dipankar%22)ZZ&cron=*/1%20*%20*%20*%20* => "_id":"(?.*?)" 1071. => GET => http://{{server}}/api/schedule_script/activate?id={{job_id}} => Job has scheduled 1072. => GET => http://{{server}}/api/schedule_script/activate?id={{job_id}} => already scheduled 1073. => GET => http://{{server}}/api/schedule_script/activate_all => 0/1 Job has scheduled 1074. => GET => http://{{server}}/api/schedule_script/reload => We have restarted 1 jobs 1075. => GET => http://{{server}}/api/schedule_script/status => {{job_id}} 1076. # => sleep => 30 # Disabled to just avoid waiting while testing -- works fine, 1077. # => GET => http://{{server}}/api/schedule_script/status => "successCount":1 1078. => GET => http://{{server}}/api/schedule_script/deactivate?id={{job_id}} => canceled 1079. => GET => http://{{server}}/api/schedule_script/deactivate?id={{job_id}} => is not scheduled 1080. => GET => http://{{server}}/api/schedule_script/status => We found 0 active scheduled Script 1081. => GET => http://{{server}}/api/schedule_script/dryrun?script=ABCD => ABCD 1082. => GET => http://{{server}}/api/schedule_script/dryrun?script=console.log('hello') => success 1083. 1084. 1085. # Delete all at the end this is needed as server auto load when stat 1086. => !GET => http://{{server}}/api/schedule_script/delete?_confirmstr=schedule_script => success 1087. 1088. 1089. ############################# Subscription ############################# 1090. # Provides api for email subscription and resubscription 1091. # User can do subscribe and unscibe to an app by giving email id. 1092. # Admin can notify by ending mail to all the people who subscribe. 1093. # Maximum notification allow is 1000 1094. ######################################################################### 1095. => !GET => http://{{server}}/api/subscription/delete?_confirmstr=subscription => success 1096. => GET => http://{{server}}/api/subscription/subscribe?app_id=test&email=dutta.dipankar08@gmail.com => success 1097. => GET => http://{{server}}/api/subscription/subscribe?app_id=test&email=dutta.dipankar08@gmail.com => Data validation failed as composite key failed 1098. => GET => http://{{server}}/api/subscription/count => Count: 1 1099. => GET => http://{{server}}/api/subscription/notify?subject=Hello&body=Some HTML Content&app_id=test&dry_run=1 => Email send to 1 subscriber 1100. => GET => http://{{server}}/api/subscription/notify?subject=Hello&body=Some HTML Content&app_id=wrong&dry_run=1 => Not able to notify as there is zero subscription for this app 1101. => GET => http://{{server}}/api/subscription/unsubscribe?app_id=test&email=dutta.dipankar08@gmail.com => success 1102. => GET => http://{{server}}/api/subscription/unsubscribe?app_id=test&email=dutta.dipankar08@gmail.com => Not able to unsubscribe 1103. => GET => http://{{server}}/api/subscription/count => Count: 0 1104. 1105. 1106. ############################ SOCIAL POST ################################## 1107. # This allow to post the text and image in FB, Tweeter, Linked-In and Telegram 1108. # We currently supports (1)FB abd (2) Tweeter 1109. # You need to update the key in /etc/SECURE 1110. ############################################################################ 1111. # Comments to avoid spanning the profile 1112. # => GET => http://{{server}}/api/utils/social/twitter?text=automation test => Successfully tweeted 1113. # => GET => http://{{server}}/api/utils/social/twitter?text=automation test => Status is a duplicate 1114. # => GET => http://{{server}}/api/utils/social/facebook?text=automation test => Successfully tweeted 1115. => GET => http://{{server}}/api/utils/social/telegram => Missing text 1116. # => GET => http://{{server}}/api/utils/social/telegram?text=automationtest\&Test => success 1117. # You should you post method to pass data 1118. # Below two test is diable as missing real tokens 1119. # => POST => http://{{server}}/api/utils/social/telegram => {"text":"automation test & Test & test"} => success 1120. # => POST => http://{{server}}/api/utils/social/facebook => {"text":"Welcome to SimpleStore! This is post where we test our APIs"} => success 1121. 1122. ############################ TEST Universal Link page ################################## 1123. # 1124. ############################################################################ 1125. => GET => http://{{server}}/api/utils/universal_link?app_id=in.co.dipankar.fmradio&key=1&app_name=FMRadio => https://play\.google\.com/store/apps/details\?id=in\.co\.dipankar\.fmradio 1126. => GET => http://{{server}}/api/utils/universal_link?app_id=in.co.dipankar.fmradio&key=1&app_name => Input validation failed: Missing app_name" 1127. => GET => http://{{server}}/api/utils/universal_link => Input validation failed: Missing app_id" 1128. 1129. ############################ Static File generator ################################## 1130. # 1131. ############################################################################ 1132. => GET => http://{{server}}/api/utils/static/privacy?app_id=in.co.dipankar.fmradio&key=1&app_name=XXXXXXXXX => XXXXXXXXX 1133. => GET => http://{{server}}/api/utils/static/toc?app_id=in.co.dipankar.fmradio&key=1&app_name=XXXXXXXXX => XXXXXXXXX 1134. 1135. ############################## UPDATE ONE ########################################### 1136. # THIS API helps to update one entry entry in ethe system. you must by _filter and _payload to serch that 1137. # entry and update with the needed data. Should throw the error it it found many entry 1138. # >>> NOT WORKING ANY MORE <<<< 1139. ##################################################################################### 1140. #=> !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1141. #=> POST => http://{{server}}/api/test/create => {"name":"dip", "roll":1} => success 1142. #=> POST => http://{{server}}/api/test/update_one => {} => _filter object must be non empty 1143. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{}} => _filter object must be non empty 1144. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip"} ,"_payload":{}} => You must pass some data in the request 1145. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":2}} => there is no matching entry 1146. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip"},"_payload":{"roll":2}} => pdated 1 entry out of 1 matched 1147. #=> POST => http://{{server}}/api/test/create => {"name":"dip", "roll":1} => success 1148. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip"},"_payload":{"roll":2}} => We found multiple entry 1149. => !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1150. 1151. ############################## INSERT OR UPDATE ONE ########################################### 1152. # THIS API helps to insert update one entry entry in ethe system. you must by _filter and _payload to pass 1153. # if the item is found that are updated with new payload - or it will create a new entry by marging _filter and _payload 1154. ##################################################################################### 1155. => !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1156. => POST => http://{{server}}/api/test/insert_or_update_one => {} => _filter object must be non empty 1157. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{}} => _filter object must be non empty 1158. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip"} ,"_payload":{}} => Please send some non empty payload 1159. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":2}} => inserted one entry 1160. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":3}} => updated one entry 1161. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":4}} => updated one entry 1162. => POST => http://{{server}}/api/test/create => {"name":"dip1", "roll":5} => success 1163. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":4}} => We found multiple entry 1164. => !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1165. 1166. 1167. ################ LIST APIs ############################# 1168. # append to list 1169. # remove from list 1170. # clean from list 1171. ###################################################### 1172. => POST => http://{{server}}/api/test/delete?_confirmstr=test => {} => success 1173. => POST => http://{{server}}/api/test/insert => {"name":"dip"} => "_id":"(?.*?)" 1174. => GET => http://{{server}}/api/test/list/append?_id={{id1}}&_field=tag&_value=a => "tag":\["a"\] 1175. => GET => http://{{server}}/api/test/list/append?_id={{id1}}&_field=tag&_value=a,b,c => "tag":\["a","b","c"\] 1176. => GET => http://{{server}}/api/test/list/remove?_id={{id1}}&_field=tag&_value=a => "tag":\["b","c"\] 1177. => GET => http://{{server}}/api/test/list/remove?_id={{id1}}&_field=tag&_value=a,b => "tag":\["c"\] 1178. => GET => http://{{server}}/api/test/list/clear?_id={{id1}}&_field=tag&_value=a,b => "tag":\[\] 1179. => POST => http://{{server}}/api/test/delete?_confirmstr=test => {} => success 1180. 1181. ############# Raiseing tickets for the app ############# 1182. # This api will raise github tickts 1183. # 1184. ########################################################### 1185. => GET => http://{{server}}/api/utils/ticket?app=test => error 1186. # TODO: FIX IT github expaired the token 1187. #=> GET => http://{{server}}/api/utils/ticket?app=test&title=Raise by e2e test&desc=ignore this bug&label=bug => Successfully created a tickets 1188. #=> POST => http://{{server}}/api/utils/ticket=> {"app":"test", "title":"Raise by e2e test", "desc":"ignore this bug", "label":"bug,test"} => Successfully created a tickets 1189. 1190. ######## Create or Get ####### 1191. # If filter returns some result - just get it back or create with _payload + _filter data 1192. ############################### 1193. => POST => http://{{server}}/api/test/delete?_confirmstr=test => {} => success 1194. => POST => http://{{server}}/api/test/create_or_get => {"_filter":{"name":"dip"}, "_payload":{"roll":100}} => inserted the entry 1195. => POST => http://{{server}}/api/test/create_or_get => {"_filter":{"name":"dip"}, "_payload":{"roll":100}} => found entry 1196. => POST => http://{{server}}/api/test/create_or_get => {"_filter":{"name":"dip"}, "_payload":{"roll":100}} => found entry 1197. 1198. ############ Simple Login/AUth ################################################# 1199. ## SImpel password based login. 1200. ## Support only login from obe devices. 1201. ## Hash password got stored 1202. ## Once you log successfully , it will return auth_token_ 1203. ################################################################################# 1204. 1205. # first clean the DB -> Below API will not work, use the UI tool to delete like https://www.mongodb.com/try/download/compass 1206. => POST => http://localhost/api/internal_auth_user_data/delete?_confirmstr=simple_auth => {} => Looks like you are trying to access the internal db 1207. => GET => http://localhost/api/internal_auth_user_data/delete?_root_user=1&_confirmstr=_auth_token => Looks like you are trying to access the internal db # You can't do that any more 1208. 1209. # Dfine three users: test and test1 and dutta.dipankar08+2@gmail.com as username 1210. #=> GET => http://localhost/api/simple_auth/register?username=test&password_=test123&email=dutta.dipankar08@gmail.com => registration success 1211. #=> GET => http://localhost/api/simple_auth/register?username=test1&password_=test123&email=dutta.dipankar08+1@gmail.com => registration success 1212. #=> GET => http://localhost/api/simple_auth/register?password_=test123&email=dutta.dipankar08+2@gmail.com => registration success # Email and password only no username 1213. 1214. # Duplicate res 1215. => GET => http://{{server}}/api/simple_auth/register?username=test&password_=test&email=dutta.dipankar08@gmail.com => username already taken 1216. => GET => http://{{server}}/api/simple_auth/register?username=test4&password_=test&email=dutta.dipankar08@gmail.com => email already taken 1217. 1218. 1219. # Login ( by user name) 1220. => GET => http://{{server}}/api/simple_auth/login?username=test&password_=test11 => Invalid username or password 1221. => GET => http://{{server}}/api/simple_auth/login?username=test11&password_=test => Invalid username or password 1222. 1223. # Login With Email and password or Email + Auth_token 1224. => GET => http://{{server}}/api/simple_auth/login_by_email?username=test&password_=test11 => Input validation failed: Missing email 1225. => GET => http://{{server}}/api/simple_auth/login_by_email?email=test11@test.com&password_=test => Invalid email or password 1226. => GET => http://localhost/api/simple_auth/login_by_email?_no_encode=1&email=dutta.dipankar08@gmail.com&password_=test123 => "auth_token_":"(?.*?)" #should be able to return the token 1227. => GET => http://{{server}}/api/simple_auth/login_by_email?_no_encode=1&email=dutta.dipankar08@gmail.com&auth_token_={{login_token1}} => You must pass any one of password_ # Note you can only login by token if you pass the username 1228. 1229. # login with username and password or authtoken and get login_token1 back 1230. => GET => http://localhost/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1231. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&auth_token_={{login_token1}} => dutta.dipankar08@gmail.com 1232. => GET => http://{{server}}/api/simple_auth/validate_login_session?_no_encode=1&auth_token_={{login_token1}} => success 1233. 1234. # getifo 1235. => GET => http://{{server}}/api/simple_auth/get_info?_no_encode=1&auth_token_={{login_token1}} => user data returned 1236. 1237. #update_info 1238. => GET => http://{{server}}/api/simple_auth/update_info?_no_encode=1&auth_token_={{login_token1}}&phone=7547564902 => user data returned 1239. => GET => http://{{server}}/api/simple_auth/get_info?_no_encode=1&auth_token_={{login_token1}} => 7547564902 1240. 1241. # login agaun get token2 1242. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1243. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&auth_token_={{login_token2}} => dutta.dipankar08@gmail.com 1244. 1245. # try login with invalid tokens. 1246. => GET => http://{{server}}/api/simple_auth/login?username=test&auth_token_=wrong => Invalid username or auth_token_ 1247. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test2&auth_token_={{login_token2}} => Invalid username or auth_token_ 1248. 1249. # logout with one token but other token should works. 1250. => GET => http://{{server}}/api/simple_auth/logout?username=test&auth_token_={{login_token1}} => Logout done 1251. => GET => http://{{server}}/api/simple_auth/logout?username=test&auth_token_={{login_token1}} => not able to logout as username or auth_token is wrong 1252. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&auth_token_={{login_token2}} => dutta.dipankar08@gmail.com 1253. 1254. # logout all session and no token should not work 1255. => GET => http://{{server}}/api/simple_auth/logout?username=test => Missing auth_token_ 1256. => GET => http://{{server}}/api/simple_auth/logout_all?username=test => Missing auth_token_ 1257. => GET => http://{{server}}/api/simple_auth/logout_all?username=test1&force=1 => Logout done for 0 session forcefully 1258. => GET => http://{{server}}/api/simple_auth/logout_all?username=test&force=1 => Logout done for 1 session forcefully 1259. => GET => http://{{server}}/api/simple_auth/login?username=test&auth_token_={{login_token2}} => Invalid username or auth_token_ 1260. 1261. 1262. #### The bwlo example shows how we can make a DB is accexx protected and to access it it must be logged in ### 1263. => GET => http://{{server}}/api/test_simple_auth => Please send auth_token_ 1264. => GET => http://{{server}}/api/test_simple_auth?auth_token_=test => Wrong auth_token_ passed 1265. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1266. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test1&password_=test123 => "auth_token_":"(?.*?)" 1267. => GET => http://{{server}}/api/test_simple_auth?auth_token_={{login_token}} => Find successfully with 0 items 1268. => GET => http://{{server}}/api/test_simple_auth/create?_no_encode=1&auth_token_={{login_token}}&name=Dip => "_username":"test" 1269. => GET => http://{{server}}/api/test_simple_auth?auth_token_={{login_token}} => Find successfully with 1 items 1270. => GET => http://{{server}}/api/test_simple_auth/create?_no_encode=1&auth_token_={{login_token1}}&name=Dip => "_username":"test1" 1271. => GET => http://{{server}}/api/test_simple_auth/create?_no_encode=1&auth_token_={{login_token1}}&name=Dip => "_username":"test1" 1272. => GET => http://{{server}}/api/test_simple_auth?auth_token_={{login_token1}} => Find successfully with 2 items ## 1273. => GET => http://{{server}}/api/test_simple_auth?auth_token_=skip => Find successfully with 3 items #### 1274. => GET => http://{{server}}/api/test_simple_auth/delete?auth_token_={{login_token}}&_confirmstr=test_simple_auth => Deleted count is : 1 1275. => GET => http://{{server}}/api/test_simple_auth/delete?auth_token_=skip&_confirmstr=test_simple_auth => Deleted count is : 2 1276. 1277. ## Forget and reset password to test5 1278. => GET => http://{{server}}/api/simple_auth/forgot_password => Missing username 1279. => GET => http://{{server}}/api/simple_auth/forgot_password?username=wrong => Invalid username 1280. => GET => http://{{server}}/api/simple_auth/forgot_password?_no_encode=1&username=test => "short_lived_token":"(?.*?)" 1281. => GET => http://{{server}}/api/simple_auth/reset_password?username=test => Missing short_lived_token 1282. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token=wrong => Missing password_ 1283. => GET => http://{{server}}/api/simple_auth/reset_password?username=wrong&short_lived_token={{short_lived_token}} => Missing password_ 1284. => GET => http://{{server}}/api/simple_auth/reset_password?username=wrong&short_lived_token=wrong&password_=hello => Invalid username or token got expired 1285. => GET => http://{{server}}/api/simple_auth/reset_password?username=test_unknown&short_lived_token={{short_lived_token}}&password_=test5 => Invalid username or token got expired 1286. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token={{short_lived_token}}&password_=test5 => Password changed successfully 1287. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token={{short_lived_token}}&password_=test5 => Invalid username or token got expired 1288. 1289. # reset password back to test123 1290. => GET => http://{{server}}/api/simple_auth/forgot_password?_no_encode=1&username=test => "short_lived_token":"(?.*?)" 1291. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token={{short_lived_token}}&password_=test123 => Password changed successfully 1292. 1293. # You can pass auth_token_ as a header or cookies 1294. # curl -H "auth_token_:skip" -X GET "http://localhost/api/test_simple_auth" 1295. # curl http://localhost/api/test_simple_auth--cookie "auth_token_=skip" 1296. 1297. 1298. # add_subscription_by_stipe 1299. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1300. => GET => http://localhost/api/simple_auth/add_subscription?_no_encode=1&payment_method_id=pm_1MQHD9CtA5cdHPVpgX6YpXRY&subscription_key=test&auth_token_={{login_token1}}&subscription_provider=dummy => subscription success 1301. => GET => http://localhost/api/simple_auth/add_subscription?_no_encode=1&payment_method_id=pm_1MQHD9CtA5cdHPVpgX6YpXRY&subscription_key=test&auth_token_={{login_token1}}&subscription_provider=dummy => subscription success 1302. 1303. # duplicate subscription 1304. => GET => http://localhost/api/simple_auth/add_subscription?_no_encode=1&payment_method_id=pm_1MQHD9CtA5cdHPVpgX6YpXRY&subscription_key=test&auth_token_={{login_token1}}&subscription_provider=dummy => subscription success 1305. 1306. # clear subscription 1307. => GET => http://localhost/api/simple_auth/clear_subscription?_no_encode=1&subscription_key=test&auth_token_={{login_token1}}&subscription_provider=dummy => subscription clear 1308. 1309. 1310. => GET => http://localhost/api/simple_auth/clear_subscription?_no_encode=1&subscription_key=test&auth_token_={{login_token1}}&subscription_provider=dummy => not able to find the subscription 1311. 1312. 1313. # For testng this you need to generate the payment_method_id first with public dat 1314. #=> GET => http://localhost/api/simple_auth/add_subscription?_no_encode=1&payment_method_id=pm_1MQHY0CtA5cdHPVpZpglF5a7&subscription_key=test&auth_token_={{login_token1}}&&subscription_provider=stripe => recept_url":"https://pay.stripe.com/receipts/payment 1315. 1316. # Google Login 1317. => POST => http://localhost/api/simple_auth/google_login => {"iss": "https://accounts.google.com","email": "test3@gmail.com", "name": "DIPANKAR DUTTA","picture": "https://lh3.googleusercontent.com/a/AEdFTp68hUhkoSvDnP6rAuuDqZwMVU4A5ULh6OoMogKdog=s96-c"} => Login success 1318. 1319. 1320. 1321. 1322. # Managing permission 1323. => GET => http://localhost/api/utils/admin_tools/generate_super_user_token?admin_code=admin_test => "out":"(?.*?)" 1324. => GET => http://localhost/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1325. => GET => http://localhost/api/simple_auth/get_info?_no_encode=1&auth_token_={{login_token1}} => "permission_group":\[\] 1326. => GET => http://localhost/api/simple_auth/remove_permission => missing super_user_token 1327. => GET =>http://localhost/api/simple_auth/remove_permission?super_user_token={{super_user_token}} => Please send the permission string 1328. => GET =>http://localhost/api/simple_auth/add_permission?super_user_token={{super_user_token}}&permission=test&username=test => permission is added 1329. => GET => http://localhost/api/simple_auth/get_info?_no_encode=1&auth_token_={{login_token1}} => "permission_group":\["test"\] 1330. => GET =>http://localhost/api/simple_auth/remove_permission?super_user_token={{super_user_token}}&permission=test&username=test => permission is removed 1331. => GET => http://localhost/api/simple_auth/get_info?_no_encode=1&auth_token_={{login_token1}} => "permission_group":\[\] 1332. 1333. # LOGIN WITH MAGIC LINK SUPPORT : generate and test Magic Link 1334. => GET => http://localhost/api/simple_auth/generate_magic_link => Missing email 1335. => GET => http://localhost/api/simple_auth/generate_magic_link?email=dutta.dipankar08@gmail.com => Missing url 1336. => GET => http://localhost/api/simple_auth/generate_magic_link?_no_encode=1&email=dutta.dipankar08@gmail.com&url=https://admin.grodok.com/account&app_name=admin => "magic_link_token":"(?.*?)" 1337. => GET => http://localhost/api/simple_auth/login_with_magic_link?_no_encode=1&magic_link_token={{magic_link_token1}} => success 1338. => GET => http://localhost/api/simple_auth/login_with_magic_link?_no_encode=1&magic_link_token={{magic_link_token1}} => Token not exist or expaired 1339. => GET => http://localhost/api/simple_auth/login_with_magic_link?magic_link_token=hello => Invalid token 1340. 1341. 1342. 1343. ######################################################################################### 1344. ## ## 1345. ## IPTV APIS (DISABLED AS NOT USED) ## 1346. ## ## 1347. ######################################################################################### 1348. #=> POST => http://{{server}}/api/ip_tv/delete?_confirmstr=ip_tv => {} => success 1349. #=> POST => http://{{server}}/api/ip_tv/add_seed => {"seed_url":"https://raw.githubusercontent.com/143maha/Sonuiptvnew/main/Indian15sep.m3u8", "name":"143maha"} => We have parsed seed 1350. #=> GET => http://{{server}}/api/ip_tv?_limit=1 => "_id":"(?.*?)" 1351. #=> GET => http://{{server}}/api/ip_tv/?id={{id1}} => "rank": 1352. #=> GET => http://{{server}}/api/ip_tv/rankup?id={{id1}}&_field=rank => Up voted 1353. #=> GET => http://{{server}}/api/ip_tv/?id={{id1}} => "rank": 1354. #=> GET => http://{{server}}/api/ip_tv/rankdown?id={{id1}}&_field=rank => Down voted 1355. #=> GET => http://{{server}}/api/ip_tv/?id={{id1}} => "rank": 1356. #=> GET => http://{{server}}/api/ip_tv/count => success 1357. # => GET => http://{{server}}/api/ip_tv/cleanup => clean up done by removing 1358. # => GET => http://localhost/api/ip_tv/cleanup?is_delete=false => success 1359. #=> GET => http://localhost/api/ip_tv/explore_seed?seed_url=https://raw.githubusercontent.com/mahmud31132/bdix-tv/main/BD%20working.m3u8 => success 1360. 1361. ######################################################################################### 1362. ## ## 1363. ## TRADE APIS ## 1364. ## ## 1365. ######################################################################################### 1366. # We have tested the api but disabling it=> POST => http://{{server}}/api/utils/trade/expert_call_result => {"symbol":"TCS.NS","target":"3600","stoploss":"3370","start_date":"2023-02-24T10:10:17.617Z","end_date":"2023-02-26T10:10:17.617Z"} => RESULT 1367. => GET => http://{{server}}/api/utils/trade/ltp => TCS.NS 1368. => GET => http://{{server}}/api/utils/trade/ltp?symbols=TCS.NS,WIPRO.NS => TCS.NS 1369. # Supported Index is WORLD_INDEX and INDIA_INDEX 1370. => GET => http://{{server}}/api/utils/trade/ltp?group=WORLD_INDEX=> NASDAQ 1371. => GET => http://{{server}}/api/utils/trade/ltp?group=INDIA_INDEX=> NSEI 1372. 1373. # Historical data 1374. => GET => http://localhost/api/utils/trade/history?symbol=MSFT => missing interval. possible value: 1d,5m,15m,1h 1375. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo => missing range. possible value: 1376. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo => missing range. possible value: 1377. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo&range=max => success 1378. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo&range=10y => success 1379. 1380. # Expart resilt 1381. => POST => http://{{server}}/api/utils/trade/expert_result_intraday => {"date":"2023-03-16T10:10:17.617Z", "symbol":"TCS.NS","buy_at":"3630","stoploss":"3590", "target":"3645","target2":"3665"} => success 1382. => POST => http://{{server}}/api/utils/trade/expert_result_intraday => {"date":"2023-03-16T10:10:17.617Z", "symbol":"TCS.NS","buy_at":"3630","stoploss":"3590", "target":"3645","target2":"3670"} => success 1383. => POST => http://{{server}}/api/utils/trade/expert_result_intraday => {"date":"2023-03-16T10:10:17.617Z", "symbol":"TCS.NS","buy_at":"3630","stoploss":"3620", "target":"3645","target2":"3695"} => success 1384. => POST => http://{{server}}/api/utils/trade/expert_result_intraday => {"date":"2023-03-16T10:10:17.617Z", "symbol":"TCS.NS","buy_at":"3630","stoploss":"3590", "target":"4000","target2":"4000"} => success 1385. => POST => http://{{server}}/api/utils/trade/expert_result_intraday => {"date":"2023-03-16T10:10:17.617Z", "symbol":"TCS.NS","buy_at":"3700","stoploss":"3590", "target":"3645","target2":"3695"} => success 1386. => POST => http://{{server}}/api/utils/trade/expert_result_intraday => {"date":"2023-03-16T10:10:17.617Z", "symbol":"TCS.NS","buy_at":"3598","stoploss":"3590", "target":"3645","target2":"3695"} => success 1387. 1388. 1389. 1390. 1391. ######################################################################################### 1392. ## ## 1393. ## Youtube uploader ## 1394. ## ## 1395. ## FOR AUTH ISSUE: generate toekn: node bin/core/google/youtube.js ## 1396. ######################################################################################### 1397. 1398. => GET => http://localhost/api/utils/yupload/m3u8upload => error 1399. 1400. => GET => http://localhost/api/utils/yupload/m3u8upload?uri=https://stream.live.vc.bbcmedia.co.uk/bbc_hindi_radio&duration=300 =>Please send a key 1401. 1402. 1403. ######################################################################################### 1404. ## ## 1405. ## Error ## 1406. ## ## 1407. ## FOR AUTH ISSUE: generate toekn: node bin/core/google/youtube.js ## 1408. ######################################################################################### 1409. => POST => http://{{server}}/api/error/delete?_confirmstr=error => {} => success 1410. => GET => http://localhost/api/error/test => Test Error 1411. => GET => http://localhost/api/error => Test Error 1412. 1413. ######################################################################################### 1414. ## ## 1415. ## INFO ## 1416. ## ## 1417. ## GET API INFO ## 1418. ######################################################################################### 1419. => GET => http://localhost/api/local_test/info => "isRemoteDB":false 1420. => GET => http://localhost/api/remote_test/info => "isRemoteDB":true 1421. # curl http://localhost/api/test/info --cookie "Cho=Kim;Greet=Hello" 1422. => GET => http://localhost/api/test/info => "isRemoteDB":false 1423. => GET => http://localhost/api/test_secure/info => "secure":false 1424. => GET => http://localhost/api/test_secure/ => success 1425. => GET => http://localhost/api/test_secure_/info => "secure":true # Note that You must have secure_ to pass the match 1426. => GET => http://localhost/api/test_secure_/ => Please send auth_token_ 1427. => GET => http://localhost/api/test/info => "secure":false 1428. 1429. 1430. ######################################################################################### 1431. ## ## 1432. ## STRIPE ## 1433. ## ## 1434. ## STRIPE validation api's helps to validate any purchase via simplestore ## 1435. ######################################################################################### 1436. # ( need real setup )=> GET => http://localhost/api/stripe/check_subscription?customer_id=cus_Melrh5VwxSJB2v => "email":"dutta.dipankar08@gmail.com" 1437. => GET => http://localhost/api/stripe/check_payment?payment_id=unknwon => No such payment_intent 1438. # ( not real setup)=> GET => http://localhost/api/stripe/check_payment?payment_id=pi_3LvRVnCtA5cdHPVp0DrsawEx => "amount_captured":500 1439. 1440. ######################################################################################### 1441. ## ## 1442. ## TEST Encript and dryption API output ## 1443. ## ## 1444. ## STRIPE validation api's helps to validate any purchase via simplestore ## 1445. ######################################################################################### 1446. => GET => http://localhost/api/test_crypto/delete?_confirmstr=test_crypto => success 1447. => GET => http://localhost/api/test_crypto/insert?name=dip => insert successfully 1448. => GET => http://localhost/api/test_crypto => Find successfully 1449. => GET => http://localhost/api/test_crypto/count => success 1450. => GET => http://localhost/api/test_crypto/delete?_confirmstr=test_crypto => success 1451. 1452. 1453. ## Root users 1454. => GET => http://localhost/api/_auth_token/ => access db with db name with _ 1455. => GET => http://localhost/api/_auth_token?_root_user=1 => success 1456. 1457. ######################################################################################### 1458. ## test unset or delete fields 1459. ## This API allow you to delete a list of fileds ( just unset in the docs) 1460. ## How to unsert a field? 1461. ## How to unset multiple fields? 1462. ## how to unset fileds with nested documnets ? use dot notation. 1463. ## How to unset fields for all entrys by seraching? query + _field combination 1464. ######################################################################################### 1465. => GET => http://localhost/api/test/delete?_confirmstr=test =>success 1466. => GET => http://localhost/api/test/insert?name=dip&roll=20&email=hello@hello.com => "_id":"(?.*?)" 1467. => GET => http://localhost/api/test/get?_id={{id1}} => "roll":"20" 1468. => GET => http://localhost/api/test/delete_fields?_id={{id1}}&_field=roll => We have un-set the filed for 1 entries 1469. => GET => http://localhost/api/test/get?_id={{id1}} => "name":"dip","email":"hello@hello.com", 1470. 1471. # unsetting nested object 1472. => POST => http://localhost/api/test/insert => {"name":{"first":"dip", "last":"dutta"}} => "_id":"(?.*?)" 1473. => GET => http://localhost/api/test/delete_fields?_id={{id1}}&_field=name.last => un-set the filed for 1 entries 1474. => GET => http://localhost/api/test/get?_id={{id1}} => "name":\{"first":"dip"\} 1475. 1476. 1477. 1478. ######################################################################################### 1479. # File utilitiesv 1480. # This api define upload, download, delete and list files in the SimpleStore application 1481. # This is for the prototype purpose. Please don't use for scale 1482. # All test is passing - disabled for new file is missing 1483. ######################################################################################### 1484. # curl -d @a.txt http://localhost/api/utils/files/upload use this for upload 1485. #=> GET => http://localhost/api/utils/files/download?filename=a.txt => Dipankar 1486. #=> GET => http://localhost/api/utils/files/list => a.txt 1487. #=> GET => http://localhost/api/utils/files/delete?filename=a.txt => success 1488. #=> GET => http://localhost/api/utils/files/delete?filename=a.txt => error 1489. 1490. 1491. ######################################################################################### 1492. # remote_smb_manifest 1493. # This API will build the necessaryly function to support SMB. 1494. # Like Enable payment gateway 1495. ######################################################################################### 1496. # [PASS ALL] (1) Test razorpay_create_order APIs 1497. => GET => http://localhost/api/remote_smb_manifest/delete?_confirmstr=remote_smb_manifest => success 1498. => POST => http://localhost/api/remote_smb_manifest/insert => {"public_keys":{"razor_key":"1"},"secret_keys_":{"razor_secret":"1"}} => "_id":"(?.*?)" 1499. => POST => http://localhost/api/remote_smb_manifest/razorpay_create_order => {"_no_encode":1, "amount":500, "currency":"INR", "smb_id":"{{id1}}"} => The api key provided is invalid 1500. => POST => http://localhost/api/remote_smb_manifest/razorpay_create_order => {"_no_encode":1, "amount":500, "currency":"INR", "smb_id":"wrong"} => Argument passed in must be a single String of 12 bytes 1501. => POST => http://localhost/api/remote_smb_manifest/razorpay_create_order => {"_no_encode":1, "currency":"INR", "smb_id":"wrong"} => Missing amount 1502. => POST => http://localhost/api/remote_smb_manifest/insert => {"public_keys":{"razor_key":"rzp_test_I2VzFwGWMekWJe"},"secret_keys_":{"razor_secret":"4Hk97bepWLg7PS0Lli1rCXmx"}} => "_id":"(?.*?)" 1503. => POST => http://localhost/api/remote_smb_manifest/razorpay_create_order => {"_no_encode":1, "amount":500, "currency":"INR", "smb_id":"{{id1}}"} => "order_id":"order_ 1504. 1505. 1506. #################### 1507. ## Market APIs: As we wants to get the live market data, we can use goofle api to do that 1508. ## 1509. #################### 1510. 1511. # => GET => http://localhost/api/utils/market/google_ltp?symbol=VUSA.L => Vanguard S 1512. 1513. #### 1514. # Supporting revison 1515. # >>>> Update_one is not working any more <<<<< 1516. #### 1517. => GET => http://localhost/api/test/delete?_confirmstr=test => success 1518. => GET => http://localhost/api/test/insert?name=dip => "_id":"(?.*?)" 1519. # => POST => http://localhost/api/test/update_one => {"_id":"{{id1}}","_revision":true} => You must pass some data in the request 1520. # => POST => http://localhost/api/test/update_one => {"_id":"{{id1}}","name":"dip1","_revision":true} => "dip1" 1521. # => POST => http://localhost/api/test/update_one => {"_id":"{{id1}}","name":"dip2","_revision":true} => "dip2" 1522. => GET => http://localhost/api/test/revision?_id={{id1}} => All History\(revision\) returned 1523. 1524. ### 1525. # You need to mark remote_db to store in remote database 1526. ## 1527. => GET => https://simplestore.dipankar.co.in/api/remote_db_secure_merit/info => "isRemoteDB":true 1528. => GET => https://simplestore.dipankar.co.in/api/nodel_remote_db_secure_merit/info => "isRemoteDB":true 1529. => GET => https://simplestore.dipankar.co.in/api/nodel_secure_merit_remote_db/info => "isRemoteDB":true 1530. => GET => https://simplestore.dipankar.co.in/api/nodel_secure_merit_remoooote_db/info => "isRemoteDB":false 1531. 1532. 1533. ############################################# 1534. # Test kill swicth - It provides way to set config which is globally store 1535. # this will help to switch code path based on remote coffi 1536. # This can be used for shipping experimeing features 1537. ############################################# 1538. => GET => http://localhost/api/kill_switch/delete?_confirmstr=kill_switch => success 1539. => GET => http://localhost/api/kill_switch/set_bool?key=a&value=1 => "a":true 1540. => GET => http://localhost/api/kill_switch/set_bool?key=b&value=0 => "b":false 1541. => GET => http://localhost/api/kill_switch/set_bool?key=c&value=true => "c":true 1542. => GET => http://localhost/api/kill_switch/set_string?key=d&value=hello => "d":"hello" 1543. => GET => http://localhost/api/kill_switch/set_string?key=d&value=hello1 => "d":"hello1" 1544. => GET => http://localhost/api/kill_switch/get_current => "d":"hello1" 1545. => GET => http://localhost/api/kill_switch/reload => 4 1546. 1547. 1548. ############################################# 1549. # Template store 1550. # this feature allow to create template in the tempalte store ( store in remote db) 1551. # and the you create_from_template api to create duplicate data from template 1552. ############################################# 1553. => GET => http://localhost/api/template_store/delete?_confirmstr=template_store => success 1554. => POST => http://localhost/api/template_store/create => {"name":"dipankar", "roll":100} => template_name must be present as composite key 1555. => POST => http://localhost/api/template_store/create => {"name":"dipankar", "roll":100, "template_name":"test"} => success 1556. => POST => http://localhost/api/template_store/create => {"name":"dipankar", "roll":100, "template_name":"test"} => Duplicate item found: template_name 1557. # here how to create clone from templates 1558. => POST => http://localhost/api/test/create_from_template => {"template_name":"test", "more_info":"extra data"} => "name":"dipankar","roll":100 1559. => POST => http://localhost/api/test/create_from_template => {"template_name":"test1", "more_info":"extra data"} => template not found 1560. 1561. 1562. 1563. ################ SCHEULE 2 API ###################### 1564. # Schedule2 allows you to schele HTTP cron job - this is the next version of schedule 1565. # a) insert an entry 1566. # b) activate it uisng /activate. 1567. # c) check the status = /status 1568. ##################################################### 1569. => POST => http://localhost/api/schedule2/delete?_confirmstr=schedule2 => {} => success 1570. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com","cron_format":"*/10 * * * * *"} => "_id":"(?.*?)" # Just insert not activated 1571. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com","cron_format":"*/10 * * * * *"} => Duplicate item found 1572. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Job is now scheduled 1573. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => is already scheduled 1574. => GET => http://{{server}}/api/schedule2/status => We have . jobs 1575. => GET => http://{{server}}/api/schedule2/reload => We have restarted . jobs 1576. => sleep => 12 1577. => GET => http://{{server}}/api/schedule2/?id={{job_id}} => doctype html # we are cjeking if the job got executed or not! 1578. => POST => http://{{server}}/api/schedule2/deactivate?id={{job_id}} => {} => canceled 1579. => POST => http://{{server}}/api/schedule2/deactivate?id={{job_id}} => {} => is not scheduled 1580. => GET => http://{{server}}/api/schedule2/status => We have 0 jobs 1581. 1582. # test post api call. 1583. => POST => http://{{server}}/api/schedule2/insert => {"method":"post", "url":"http://localhost/api/test/insert","cron_format":"*/10 * * * * *","data":{"name":"dip432"}} => "_id":"(?.*?)" 1584. => GET => http://{{server}}/api/schedule2/activate?id={{job_id2}} => Job is now scheduled 1585. => sleep => 12 # will execute in 12 sec 1586. => GET => http://{{server}}/api/schedule2/?id={{job_id2}} => insert successfully 1587. #=> POST => http://{{server}}/api/schedule2/deactivate?id={{job_id2}} => {} => canceled 1588. 1589. # Stop everything 1590. => POST => http://localhost/api/schedule2/delete?_confirmstr=schedule2 => {} => success 1591. => GET => http://localhost/api/schedule2/reload => We have restarted 0 jobs 1592. 1593. # check reload on boot 1594. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com","cron_format":"*/60 * * * * *"} => "_id":"(?.*?)" # Just insert not activated 1595. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Job is now scheduled 1596. # now restart. 1597. => GET => http://localhost/api/schedule2/status => We have 1 jobs 1598. 1599. #check timezoe support 1600. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com/test1","cron_format":"*/60 * * * * *", "time_zone":"invalid"} => "_id":"(?.*?)" # Just insert not activated 1601. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Not a valid timezone:invalid 1602. 1603. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com/test2","cron_format":"*/60 * * * * *", "time_zone":"Europe/London"} => "_id":"(?.*?)" # Just insert not activated 1604. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Job is now scheduled 1605. 1606. 1607. ################ Test Webhooks###################### 1608. # Webhoks allowsto add endpoint when some db data is getting updated 1609. ##################################################### 1610. => GET => http://localhost/api/webhook/status_clear => {"CALl_COUNT":0} 1611. => POST => http://localhost/api/webhook/insert => {"db_name":"test_webhook", "hook_url":"https://google.com"} => success 1612. => POST => http://localhost/api/test_webhook/insert => {"name":"Dipankar"} => success 1613. => GET => http://localhost/api/webhook/status => {"CALl_COUNT":1} 1614. 1615. 1616. 1617. ################ SECURE DB and Visibility Rules ###################### 1618. # This allows to build secure DB protected by access_token. 1619. # 1. Secure DB contains the letter secure in it's name. 1620. # 2. When you define a db as secure you must pass a valid auth_token_ to create, insert. update. 1621. # 3. They are only visiuble to you and no others 1622. # 4. You can add other username as __visibility list to ensure they can be edited. But you still own that. add "public" to indicate they are public 1623. # 5. You can also create those db annonomously using spacial access token called "anonymous" - They are budefult make public visibility. 1624. # 6. Acess token "debug" can work for debug evn and skip all the secure rules 1625. ##################################################### 1626. 1627. # Step1: Adding or remiving visibiity 1628. => GET => http://localhost/api/secure_test/insert?auth_token_=debug&name=hello => "_id":"(?.*?)" 1629. => GET => http://localhost/api/secure_test/visibility/add?_id1={{id1}}&auth_token_=debug => You must pass a _id or id 1630. => GET => http://localhost/api/test/visibility/add?_id={{id1}} => You can only make this action on secure db 1631. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}} => Missing auth_token_ 1632. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug1 => Not logged in as Invalid auth_token_ 1633. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user1 => Successfully added 1634. => GET => http://localhost/api/secure_test/?auth_token_=debug&_id={{id1}} => "_visibility":\["user1"\] 1635. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user1 => Not updated 1636. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user2 => Successfully added 1637. 1638. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_=debug&username=user1 => Successfully removed 1639. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_=debug&username=user1 => Not updated 1640. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_=debug&username=user2 => Successfully removed 1641. => GET => http://localhost/api/secure_test/?auth_token_=debug&_id={{id1}} => "_visibility":\[\] 1642. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user1 => Successfully added 1643. => GET => http://localhost/api/secure_test/visibility/clear?_id={{id1}}&auth_token_=debug => Successfully 1644. => GET => http://localhost/api/secure_test/?auth_token_=debug&_id={{id1}} => "_visibility":\[\] 1645. 1646. 1647. 1648. # Step 2: test secure access via visibility 1649. # In this case I will login as user1 and then create entry and add visibility for user2 and then try to access from user 2 1650. 1651. # first clean the DB 1652. => POST => http://localhost/api/simple_auth/delete?_confirmstr=simple_auth => {} => success 1653. => GET => http://localhost/api/_auth_token/delete?_root_user=1&_confirmstr=_auth_token => success # This will clean the token DB -> Note that it must be a root_user 1654. 1655. # Register user 1656. #=> GET => http://localhost/api/simple_auth/register?username=user1&password_=test123&email=dutta.dipankar08@gmail.com => registration success 1657. #=> GET => http://localhost/api/simple_auth/register?username=user2&password_=test123&email=dutta.dipankar08@gmail.com => registration success 1658. 1659. # login user 1660. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=user1&password_=test123 => "auth_token_":"(?.*?)" 1661. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=user2&password_=test123 => "auth_token_":"(?.*?)" 1662. # Create an ietm by user1 and add visibility to user 2 1663. => GET => http://localhost/api/secure_test/insert?auth_token_={{login_token1}}&name=share with user2 => "_id":"(?.*?)" 1664. => GET => http://localhost/api/secure_test/get?auth_token_={{login_token2}}&_id={{id1}} => Find successfully with 0 items 1665. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_={{login_token1}}&username=user2 => Successfully added 1666. # Access by user 2 1667. => GET => http://localhost/api/secure_test/get?auth_token_={{login_token2}}&_id={{id1}} => share with user2 1668. #Revoke access 1669. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_={{login_token1}}&username=user2 => Successfully removed 1670. => GET => http://localhost/api/secure_test/get?auth_token_={{login_token2}}&_id={{id1}} => Find successfully with 0 items 1671. 1672. # Update Visibility in a go using /replace 1673. => GET => http://localhost/api/secure_test/visibility/replace?_id={{id1}}&auth_token_={{login_token1}}&username=user1,user2,user3 => Successfully replaced with 3 1674. => GET => http://localhost/api/secure_test/visibility/replace?_id={{id1}}&auth_token_={{login_token1}}&username=user1,user2,user3 ,user4 => Successfully replaced with 4 1675. => GET => http://localhost/api/secure_test/visibility/replace?_id={{id1}}&auth_token_={{login_token1}}&username=user1 => Successfully replaced with 1 1676. => POST => http://localhost/api/secure_test/visibility/replace => {"_id":"{{id1}}","auth_token_":"{{login_token1}}","username":["user1"]} => Successfully replaced with 1 1677. # In the below case, you need use clear API to replace 1678. => POST => http://localhost/api/secure_test/visibility/replace => {"_id":"{{id1}}","auth_token_":"{{login_token1}}","username":[]} => you must pass username 1679. 1680. 1681. # Testing anonymous entries. 1682. => GET => http://localhost/api/secure_test/insert?auth_token_=anonymous&name=test_anonymous => "_id":"(?.*?)" 1683. => GET => http://localhost/api/secure_test?id={{id3}} => Please send auth_token_ 1684. => GET => http://localhost/api/secure_test?id={{id3}}&auth_token_=anonymous => "_visibility":\["public"\] 1685. => GET => http://localhost/api/secure_test?id={{id3}}&auth_token_=test => Wrong auth_token_ passed # So you must pass valid access token or anonymous 1686. => GET => http://localhost/api/secure_test?id={{id3}}&auth_token_={{login_token1}} => "_visibility":\["public"\] 1687. 1688. 1689. ################ PDF GEN API ###################### 1690. # This allow to a secure entry to other user 1691. ##################################################### 1692. => GET => http://localhost/api/utils/pdf/letter?from=Dipankar\nDutta&to=dip&subject=hello&content=hello\nworld => company_name missing 1693. => GET => http://localhost/api/utils/pdf/letter?from=Dipankar\nDutta&to=dip&subject=hello&content=hello\nworld&company_name=hello&company_address=hello => /PDF /Text 1694. 1695. 1696. ################ HEARTBEAT API ###################### 1697. # This allow to a secure entry to other user 1698. ##################################################### 1699. => GET => http://localhost/api/utils/heartbeat/ping => please pass name 1700. => GET => http://localhost/api/utils/heartbeat/ping?name=test =>pong 1701. => GET => http://localhost/api/utils/heartbeat/status?name=test => status: active 1702. => GET => http://localhost/api/utils/heartbeat/ping?name=test&status=error =>pong 1703. => GET => http://localhost/api/utils/heartbeat/status?name=test => status: error 1704. => GET => http://localhost/api/utils/heartbeat/ping?name=test&status=error&last_error=error_stack =>pong 1705. => GET => http://localhost/api/utils/heartbeat/status?name=test => error_stack 1706. => GET => http://localhost/api/utils/heartbeat/status?name=test1 => status: not found 1707. 1708. # Test auto expaire ( must be pinnged in every 60 sec - we delete the entry in 120 sec) 1709. # This give two chnages to ensure your pingged in reached to the server 1710. => GET => http://localhost/api/utils/heartbeat/status?name=test => error_stack 1711. # => sleep => 120 <<< DIabled as perf reason 1712. # => GET => http://localhost/api/utils/heartbeat/status?name=test => status: inactive 1713. 1714. ################ TUNNEL REQUEST ###################### 1715. # This mecahnisn allows to execute a JSON request to 3p wesbite and allow to pass a custum function to process the output. 1716. ##################################################### 1717. => GET => http://localhost/api/tunnel_request/delete?_confirmstr=tunnel_request =>success 1718. => POST => http://localhost/api/tunnel_request/add_tunnel => {"name":"test", "type":"get", "url":"https://market.tipranks.com/api/details/GetRealTimeQuotes", "process_fn" : "none"} => success 1719. => POST => http://localhost/api/tunnel_request/add_tunnel => {"name":"test", "type":"get", "url":"https://market.tipranks.com/api/details/GetRealTimeQuotes", "process_fn" : "none"} => Duplicate item found: name 1720. 1721. # Once we setup a tunnel, execute it using get or post 1722. => GET => http://localhost/api/tunnel_request/execute?name=test => Request failed with status code 404 1723. => GET => http://localhost/api/tunnel_request/execute?name=test&tickers=MSFT => Issue with processing function 1724. 1725. # thsi will override thr process fucntion to test purpose ( you can use both lamda and nameed function) 1726. => POST => http://localhost/api/tunnel_request/execute => {"name":"test","tickers":"MSFT","process_fn":"function(a){return a}"} => successfully executeed the process fiunction 1727. 1728. # DONT USE LAMDA FUNCTION for test as => can't eb used 1729. # curl -X POST -H "Content-Type: application/json" -d '{"name":"test","tickers":"MSFT","process_fn":"(a)=>a"}' 'http://localhost/api/tunnel_request/execute' should work but test will fail 1730. #=> POST => http://localhost/api/tunnel_request/execute => {"name":"test","tickers":"MSFT","process_fn":"(a)=>a"} => successfully executeed the process fiunction 1731. 1732. # You can add revision for that tunnel and latest revisition will be used 1733. => POST => http://localhost/api/tunnel_request/add_revision => {"name":"test", "type":"get", "url":"https://market.tipranks.com/api/details/GetRealTimeQuotes", "process_fn" : "function(a){return a[0].ticker}"} =>new revisions added 1734. => GET => http://localhost/api/tunnel_request/execute?name=test&tickers=MSFT => MSFT 1735. 1736. ################ Crash Report ###################### 1737. # Thsi APi provides to report crashes from any app. 1738. ##################################################### 1739. => GET => http://localhost/api/crash_log/delete?_confirmstr=crash_log =>success 1740. => POST => http://localhost/api/crash_log/report_crash => {"app_name":"test", "message":"hello","stack":"stack1"} => first_line_hash:-1e788fb6 1741. => POST => http://localhost/api/crash_log/report_crash => {"app_name":"test", "message":"hello","stack":"stack1 "} => first_line_hash:-1e788fb6 1742. => GET => http://localhost/api/crash_log => "total_count":2 1743. 1744. ################ System DB ###################### 1745. # Simple store supports system db which load all SimpleStore Server realted remote config on DB start. 1746. # This will override any local config so that we can control the service remotely. 1747. # One of the example is the SERCURE_KEYS which could be reset remotely 1748. # >>>> NOT WORKING <<<< 1749. ##################################################### 1750. # => GET => http://localhost/api/internal_nodel_system_db/delete?_confirmstr=internal_nodel_system_db => The DB has marked as nodel 1751. # => GET => http://localhost/api/utils/system_db/dump => system db dump -> use db UI 1752. # /update will add, update, delete all in a single api. for delete pass null 1753. # => POST => http://localhost/api/utils/system_db/update => {"db_name":"SECURE_KEYS", "test_key1":"test_key_value1","test_key2":"test_key_value2"} => "test_key2":"test_key_value2" 1754. # => POST => http://localhost/api/utils/system_db/update => {"db_name":"SECURE_KEYS", "test_key1":"test_key_value1","test_key2":"null"} => "test_key2":null 1755. # => POST => http://localhost/api/utils/system_db/update => {"db_name":"SECURE_KEYS", "test_key1":"test_key_value1","test_key2":"test_key_value3"} => "test_key2":"test_key_value3" 1756. # => GET => http://localhost/api/utils/system_db/dump => "test_key2":"test_key_value3" 1757. 1758. ######### SERVER INFO ###### 1759. => GET => http://localhost/info => "secureKeys":"Un autorized" 1760. => GET => http://localhost/info?admin=1 => "secureKeys" 1761. 1762. ############## 1763. # Test for stock_alert 1764. # 1765. ############ 1766. => GET => http://localhost/api/stock_alert/delete?_confirmstr=stock_alert => success 1767. => POST => http://localhost/api/stock_alert/create => {"email":"dutta.dipankar08@gmail.com"} => "_id":"(?.*?)" 1768. => POST => http://localhost/api/stock_alert/tags/add => {"id":"{{id1}}","_field":"symbol_list", "_value":"AAPL"} => "symbol_list":\["AAPL"\] 1769. => POST => http://localhost/api/stock_alert/tags/add => {"id":"{{id1}}","_field":"subscription_list", "_value":"NOTIFY_BEGIN_5,NOTIFY_END_5"} => "subscription_list":\["NOTIFY_BEGIN_5","NOTIFY_END_5"\] 1770. => POST => http://localhost/api/stock_alert => {"id":"{{id1}}"} => "email":"dutta.dipankar08@gmail.com" 1771. => GET => http://localhost/api/stock_alert/trigger?exchange=NASDAQ&event=NOTIFY_BEGIN_5 => 1 Event processed 1772. 1773. 1774. ########### 1775. # Expose reliability for admin acess 1776. ########### 1777. => GET => http://localhost/reliability/ => success 1778. 1779. ##### Admin DB #### 1780. => GET => http://localhost/api/admin_hello => Missing admin_token_ 1781. => GET => http://localhost/api/test_admin => Missing admin_token_ 1782. => GET => http://localhost/api/test_admin?admin_token_=admin_test => Find successfully 1783. => GET => http://localhost/api/test_admin?admin_token_=admin_test_token_invalid => Invalid admin_token 1784. => GET => http://localhost/api/test_admin/insert?admin_token_=admin_test&name=test=> success 1785. => GET => http://localhost/api/test_admin/get?name=test=> Missing admin_token_ 1786. => GET => http://localhost/api/test_admin/find?name=test=> Missing admin_token_ 1787. 1788. 1789. # Get and Delete. 1790. => GET => http://localhost/api/test/insert?name=test => "_id":"(?.*?)" 1791. => GET => http://localhost/api/test/get_and_delete?id={{id1}} => success 1792. => GET => http://localhost/api/test/get_and_delete?id={{id1}} => error 1793. 1794. 1795. # Test case for AWS S3 utils 1796. => GET => http://localhost/api/utils/aws/list_files?folder_name=images&bucket_name=intellicogno-s3 => https://intellicogno-s3.s3.us-east-2.amazonaws.com 1797. => GET => http://localhost/api/utils/aws/list_files?folder_name=images => missing bucket_name 1798. => GET => http://localhost/api/utils/aws/list_files?bucket_name=images => missing folder_name 1799. => GET => http://localhost/api/utils/aws/list_files?folder_name=images&bucket_name=intellicogno-s4 => return a list of url 1800. => GET => http://localhost/api/utils/aws/list_files?folder_name=images1&bucket_name=intellicogno-s3 => return a list of url 1801. # Path = https://${bucketName}.s3.${region}.amazonaws.com/${path} 1802. => GET => http://localhost/api/utils/aws/get_download_url?path=images/017.jpg&bucket_name=intellicogno-s3 => success # get a link for a file 1803. 1804. 1805. # live log 1806. => GET => http://localhost/api/live_log/test => success 1807. => GET => http://localhost/api/live_log/get_log => error 1808. => GET => http://localhost/api/live_log/get_log?sender=live_log => html 1809. 1810. 1811. # Admin feature 1812. => GET => http://localhost/admin/log => Error reading log file 1813. => GET => http://localhost/admin/routes => analytics 1814. 1815. # Power ful cron jobs scheulere 1816. # You can have job type lie ( not working anymore) 1817. # => GET => http://localhost/api/cron_job/submit?cron_format=* * * * *&job_type=debug&job_payload=json:{%22data%22:%22data%22} => success 1818. # => GET => http://localhost/api/cron_job/active_jobs => sucess 1819. # => GET => http://localhost/api/cron_job/reload => sucess 1820. # => GET => http://localhost/api/cron_job/run_now?id={xxx} => error # This api should be used to run the cron now now whcih would be helpful to test 1821. 1822. # Bash comamnd excutor 1823. => GET => http://localhost/api/utils/bash => error 1824. => GET => http://localhost/api/utils/bash?cmd=ls => success 1825. => GET => http://localhost/api/utils/bash?cmd=pwd => success 1826. => GET => http://localhost/api/utils/bash?cmd=sudo%20rm%20-rf => No rm or sudo allowed 1827. => GET => http://localhost/api/utils/bash?preset=git_pull => success 1828. => GET => http://localhost/api/utils/bash/get_all_presets => All Preset returned 1829. 1830. # yahoo_fin Historical data 1831. => GET => http://localhost/api/utils/yahoo_fin/historical_data?symbol=AAPL&interval=5m&range=1mo => success 1832. 1833. 1834. # Generating OAuth token for Simple_AUth 1835. # Oauth allows to genete refersh and access token by 3p provider 1836. # Here is how to use 1837. # 1. Add a button in the UI to call : https://api.schwabapi.com/v1/oauth/authorize?client_id=BfQwxJGANBot1jWGO4e4LUuVjP33ckXs&redirect_uri=https://127.0.0.1:3000/oauth/schwab ( Note that your need get the client id from the Schwab and you define redirect_uri while creating the app) 1838. # 2. After reditecyion, you will getting a code, note the code and pass with below url 1839. # 3. Hit the URL: http://localhost/api/simple_auth/generate_oauth_tokens?auth_token_=9CC3B6&provider=SCHWAB&code=&redirect_uri=https://127.0.0.1:3000/oauth/schwab ( note to use same reditected URI) 1840. # 4. It need to do it quickly, once you are done, a access token will be generated and asscoited with the SimpleStoreAccount. For securiy reason, the access token will never be exposed outside. It is encriped and store in the SimpleStore internal DB. 1841. # 5. velidate if that is working fine http://simplestore.dipankar.co.in/api/utils/schwab/get_all_data?auth_token_= 1842. # 6. You dont need to acess refresh the auth_token as it is done automically by the system. 1843. 1844. 1845. #=> GET => http://localhost/api/simple_auth/register?username=test&email=test@test.com&password_=test => Duplicate item found: username 1846. #=> GET => http://localhost/api/simple_auth/login?username=test&email=test@test.com&password_=test&_no_encode=1 => "auth_token_":"(?.*?)" #auth_token_: "9CC3B6" 1847. #=> GET => http://localhost/api/simple_auth/generate_oauth_tokens?auth_token_=9CC3B6&provider=SCHWAB&code=C0.b2F1dGgyLmJkYy5zY2h3YWIuY29t.1JJrZ4ijqQQWX6Z92WtUH3ka2xKP0CNTR-I_dtBoNv0%40&redirect_uri=https://grodok-algoverse.web.app/oauth/schwab => OAuthToken generated and stored 1848. #=> GET => http://localhost/api/simple_auth/get_info?auth_token_=9CC3B6&_no_encode=1 =>"test" # Note it will never expose the oauth_tokens_ ouside 1849. #=> GET => http://localhost/api/utils/schwab/get_all_data?auth_token_=9CC3B6 1850. 1851. 1852. # Test admin tools 1853. # This tools allow to generate the super_user_token and validate 1854. => GET => http://localhost/api/utils/admin_tools/generate_super_user_token => missing admin_code 1855. => GET => http://localhost/api/utils/admin_tools/generate_super_user_token?admin_code=admin_test => "out":"(?.*?)" 1856. => GET => http://localhost/api/utils/admin_tools/validate_super_user_token => missing token 1857. => GET => http://localhost/api/utils/admin_tools/validate_super_user_token?token=eyJhbGiOiJI => Invalid super user token 1858. => GET => http://localhost/api/utils/admin_tools/validate_super_user_token?token={{super_user_token}}=> pass 1859. => GET => http://localhost/api/utils/admin_tools/validate_super_user_token?token=super_user_token11=> Invalid super user token 1860. 1861. 1862. # Set APis -> This allow to insert a string into a list in the document 1863. => !POST => http://localhost/api/test0/create => {"name":"dip","count":1} => "_id":"(?.*?)" 1864. => GET => http://localhost/api/test/set/add?_id={{id}}&field=tags&value=1234 => "1234" 1865. => GET => http://localhost/api/test/set/add?_id={{id}}&field=tags&value=1234,1235,1236,1237 => "1234","1235","1236" 1866. => GET => http://localhost/api/test/set/remove?_id={{id}}&field=tags&value=1234=> "1235","1236" 1867. => GET => http://localhost/api/test/set/remove?_id={{id}}&field=tags&value= 1234,1235, 1236=> "1237" 1868. => GET => http://localhost/api/test/set/clear?_id={{id}}&field=tags&value==> "tags":\[\] 1869. => GET => http://localhost/api/test/delete?_id={{id}} => success 1870. 1871. 1872. # Private tokens store and send message in telegeraom: Private Tokens + Telegram Utilities 1873. => GET => http://localhost/api/simple_auth/login?username=test&email=test@test.com&password_=test123&_no_encode=1 => "auth_token_":"(?.*?)" #auth_token_: "9CC3B6" 1874. => GET => http://localhost/api/simple_auth/save_private_token?auth_token_={{login_token1}}&provider=TELEGRAM_BOT_PRIVATE_TOKEN&token=test => private tokens stored 1875. => GET => http://localhost/api/simple_auth/save_private_token?auth_token_={{login_token1}}&provider=UNKNOWN&token=test => Invalid enum string UNKNOWN, 1876. => GET => http://localhost/api/utils/telegram/send_msg?auth_token_={{login_token1}}&provider=UNKNOWN&chat_id=test&text=hello => 404 1877. => GET => http://localhost/api/simple_auth/save_private_token?auth_token_={{login_token1}}&provider=TELEGRAM_BOT_PRIVATE_TOKEN&token=7542704492:AAFivlt7Cu1Y7lbRjIAVmBguiVaDMr0w5RA => private tokens stored 1878. => GET => http://localhost/api/utils/telegram/send_msg?auth_token_={{login_token1}}&chat_id=test&text=hello => Bad Request: chat not found 1879. => GET => http://localhost/api/utils/telegram/send_msg?auth_token_={{login_token1}}&chat_id=-1002207345931&text=hello => Message sent successfully! 1880. 1881. # Interal db 1882. => GET => http://localhost/api/internal_test => access this information 1883. 1884. # testing passing osbucure data 1885. # Sometime you need to send a cyptic input in the request which will not allow to inspect by the client hacker, use the pass _data 1886. => GET => http://localhost/api/test/count?_data=eyJuYW1lIjogImRpcCJ9 => success 1887. => POST => http://localhost/api/test/count => {"_data":"eyJuYW1lIjogImRpcCJ9"} => success 1888. => GET => http://localhost/api/test/count?_data=eyJuYW1lIjogImRpcCJ9xx => Unexpected non-whitespace 1889. 1890. # Accessing preloaded Data stored in server 1891. => GET => http://localhost/api/utils/preload_data?name=ExampleData 1892. 1893. 1894. # schwab APIS ( not that you must have a valid access token - can;t test locally) 1895. => context => auth_token => 1896. #=> GET => https://simplestore.dipankar.co.in/api/utils/schwab/get_all_data?auth_token_={{auth_token}} => success 1897. #=> GET => https://simplestore.dipankar.co.in/api/utils/schwab/quote?auth_token_={{auth_token}}&symbols=MSFT,AAPL => success 1898. #=> GET => https://simplestore.dipankar.co.in/api/utils/schwab/chains?auth_token_={{auth_token}}&symbol=AAPL => success 1899. #=> GET => https://simplestore.dipankar.co.in/api/utils/schwab/pricehistory?auth_token_={{auth_token}}&symbol=AAPL => success