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  => success
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  => success
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. # Google chnages backend impl of Push notification so below API will not work anymore
747. # Push Notification
748. #=> GET  => http://{{server}}/api/push_notification/delete?_confirmstr=push_notification => success
749. #=> GET  => http://{{server}}/api/push_notification/insert => Trying insert Empty Object
750. #=> GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc&os=android => insert successfully
751. #=> GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc&os=android => Data validation failed as composite key failed
752. #=> GET  => http://{{server}}/api/push_notification/count => 1
753. #=> GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
754. #=> GET  => http://{{server}}/api/push_notification/count => 2
755. #=> 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
756. #
757. #=> GET  => http://{{server}}/api/push_notification/delete => You are trying to bulk operation.
758. #=> GET  => http://{{server}}/api/push_notification/delete?token=abc=> missing _confirmstr
759. #=> GET  => http://{{server}}/api/push_notification/delete?token=abc&_confirmstr=push_notification => Deleted count is : 1
760. #=> GET  => http://{{server}}/api/push_notification/count => 1
761. #=> GET  => http://{{server}}/api/push_notification/delete?token=invalid&_confirmstr=push_notification => Deleted count is : 0
762. #=> GET  => http://{{server}}/api/push_notification/count => 1
763. #
764. #=> GET  => http://{{server}}/api/push_notification/push => Input validation failed: Missing app_id
765. ### 
766. ## It's dicult to test as we donb't have any token from mobile.
767. #=> 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
768. #=> GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
769. #=> GET  => http://{{server}}/api/push_notification/push?app_id=test&page=0&title=hello&body=No  Data&key=0 => DRYRUN: true
770. #=> GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
771. #=> 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]
772. #=> GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
773. #=> 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
774. #=> GET  => http://{{server}}/api/push_notification/insert?app_id=test&token=abc1&os=android => insert successfully
775. #=> 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
776. #
777. #=> GET  => http://{{server}}/api/push_notification/push_one?title=hello&body=WITH DATA&key=0&pane=music&target=5e6d53f944526b7da8c0a844 => Missing token
778. #=> 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
779. #=> 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
780. ## => 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
781. #=> GET  => http://{{server}}/api/push_notification/count?app_id=test => Count: 0
782. 
783. # Testing Utilities
784. => GET  => http://{{server}}/api/utils/test?app_id=test => You are hitting Test Utils
785. => GET  => http://{{server}}/api/utils/date => The system time is
786. => GET  => http://{{server}}/api/utils/bootcamp => Welcome to simplestore BootCamp!
787. 
788. # Test Stategyies
789. => GET  => http://{{server}}/api/test/insert?name=dip&_viewas=noresp => {"status":"success"}
790. => POST  => http://{{server}}/api/test/insert?_viewas=noresp => {"name":"dip"}=> ^{"status":"success"}$
791. # We should get the exception evenif there is _viewas=noresp 
792. => GET  => http://{{server}}/api/test/insert?name=dip&_viewas=noresp&_viewas=xxx => Error while parsing request
793. 
794. 
795. 
796. # test Bulk hits and rank
797. => !GET  => http://{{server}}/api/test0/create?name=dip2 =>  "_id":"(?.*?)"
798. => POST  => http://{{server}}/api/test0/bulk_hit => {"_payload":[{"id":"{{id}}","field":"count", "value":1}]} => s/e: 1/0
799. # Te hardcoded value treaded as a true.
800. => 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
801. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":2
802. => POST  => http://{{server}}/api/test0/bulk_hit => {"_payload":[{"id":"{{id}}","field":"count", "value":-1}]} => [s/e: 1/0]
803. => POST  => http://{{server}}/api/test0/bulk_hit => {"_payload":[{"id":"{{id}}","field1":"count", "value":-1}]} => [s/e: 0/1]
804. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":1
805. => 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] 
806. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":10
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. => 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] 
809. => GET  => http://{{server}}/api/test0/?id={{id}} => "count":0
810. 
811. 
812. 
813. ################################################################################
814. # Sending Email functinaly ( Broken Needs API redesign) 
815. ################################################################################
816. ## 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
817. => GET  => http://{{server}}/api/utils/email => Input validation failed: Missing to
818. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&body=Simple Test =>Input validation failed: Missing subject
819. ## Please use dryrun to ensure to avoid getting so many mails.
820. => 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
821. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&dry_run=1 =>  Missing body
822. => 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
823. => 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
824. 
825. ## Test multiple sendaccount by spaciating product
826. 
827. => GET  => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&product=Grodok&body=hello&dry_run=1 => ACTUALY NOT SEND
828. => 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
829. => 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
830. 
831. ##send calender invitew - just add start_time as ISO date String and duration as number in minites 
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 => Missing duration
833. => 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!
834. => 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
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&dry_run=1 => ACTUALY NOT SEND
836. => 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
837. 
838. ## test HTML Mail.
839. ## We are supported HTML mail - you need to send body and html but body would be droped. It just use the degault HTML
840. ## template to send the email. It works for both w/o calender
841. => 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
842. => 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
843. => GET  => http://{{server}}/api/utils/email?to=testuser@gmail.com&subject=Hello World&body=Simple Test => You must pass some valid email addess
844. 
845. ## REAL SEND MAIL - DISABLE BELOW TEST
846. ## GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Simple Test => Mail sent to
847. ## GET => http://{{server}}/api/utils/email?to=dutta.dipankar08@gmail.com&subject=Hello World&body=Hello\n\nWorld\nDipankar\nTest=> Mail sent to
848. ## 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
849. 
850. ## HTML Norm : new line to 
851. => 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 852. => 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
853. => 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
854. 855. ################################################ 856. # Short code 857. ################################################ 858. => GET => http://{{server}}/api/nodel_shortcode/insert => Trying insert Empty Object 859. => GET => http://{{server}}/api/nodel_shortcode/generate => Input validation failed: Missing target_db 860. => GET => http://{{server}}/api/nodel_shortcode/generate?target_id=123&target_db=xxxdb => "short_code":"(?.*?)" 861. => GET => http://{{server}}/api/nodel_shortcode/get?short_code={{short_code}} => xxxdb 862. => GET => http://{{server}}/api/nodel_shortcode/get?short_code=wrong => Find successfully with 0 items 863. 864. 865. 866. 867. # Support _sort. 868. => !GET => http://{{server}}/api/test0/delete?_confirmstr=test0 => success 869. => !POST => http://{{server}}/api/test0/create => {"_payload":[{"name":"dip3","roll":1},{"name":"dip3","roll":2}]} => success 870. => GET => http://{{server}}/api/test0/find?&_sort=roll => "roll":1.*?"roll":2 871. => GET => http://{{server}}/api/test0/find?&_sort=-roll => "roll":2.*?"roll":1 872. 873. # Support clone APIs 874. => !POST => http://{{server}}/api/test0/create => {"name":"dip","num":{"math":10, "eng":11}} => "_id":"(?.*?)" 875. => GET => http://{{server}}/api/test0/clone => You must pass a _id 876. => POST => http://{{server}}/api/test0/clone => {} => You must pass a _id 877. => GET => http://{{server}}/api/test0/clone?_id={{id}} => "name":"dip" 878. => GET => http://{{server}}/api/test0/clone?_id={{id}}&name=dip2 => "name":"dip2" 879. => POST => http://{{server}}/api/test0/clone => {"id":"{{id}}", "name":"dip3"} => "name":"dip3" 880. 881. # QR code generation: 882. => GET => http://{{server}}/api/utils/qr => Missing url 883. => GET => http://{{server}}/api/utils/qr?url=http://google.com => svg 884. => GET => http://{{server}}/api/utils/qr?url=http://google.com&size=100 => height="100" 885. => GET => http://{{server}}/api/utils/qr?url=http://google.com&size=100&color=%23ff0000 => \#ff0000 886. 887. 888. # test system_payment == Migrate to simple_auth 889. #=> GET => http://{{server}}/api/system_payment/stripe => Stripe API returns an unexpected resp 890. # => GET => http://{{server}}/api/system_payment/stripe?id=1234 => Stripe API returns an unexpected resp <<< FIX THIS 891. #=> GET => http://{{server}}/api/system_payment_not_webhook/?id=1234 => not a valid ID 892. # test invalid sqi 893. #=> 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 894. # test right parsing 895. #=> 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 896. # test empty data 897. #=> POST => http://{{server}}/api/system_payment/stripe => {}=> Stripe API returns an unexpected resp 898. #=> GET => http://{{server}}/api/system_payment/points => Missing user_id 899. # this api should be used to get total points for an user 900. #=> GET => http://{{server}}/api/system_payment/points?user_id=123 => No matching query found 901. #=> GET => http://{{server}}/api/system_payment/points?user_id=dip@fb.com => Total points is: 902. 903. # test roserpay WebHook 904. #=> 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 905. #=> 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 906. #=> 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 907. 908. # Test Trial points. 909. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=test_sku_trial => Your trail is activated! 910. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=test_sku_trial => You aleady used your trial 911. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=unknown => SKU not configuired in SimpleStore 912. #=> GET => http://{{server}}/api/system_payment/trial?user_id=trial_user1&sku=test_sku_trial_no => This SKU is not elligiable from trail 913. #=> GET => http://{{server}}/api/system_payment/points?user_id=trial_user1 => 10 914. #=> GET => http://{{server}}/api/system_payment/delete?_confirmstr=system_payment => success 915. 916. 917. # test friendly ID: ( test3 is config for friendly id so it would be a match) 918. # You should note that friendlyID should NOT necessaryly to be unique due to te perf. 919. => POST => http://{{server}}/api/test0/insert => {"name":"dip"} => ts_insert 920. => POST => http://{{server}}/api/test3/insert => {"name":"dip"} => friendly_id 921. => POST => http://{{server}}/api/test3/insert => {"name":"dip"} => friendly_id 922. 923. ######### Testing calender APIS ############# 924. => POST => http://{{server}}/api/system_calender/grant => {} => Input validation failed 925. => POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"invalid","duration":30, "type":"type1" } => Invalid start_time 926. #=> POST => http://{{server}}/api/system_calender/grant => {"product":"test", "user_id":"123", "start_time":"2013-03-10T02:00:00Z","duration":15, "type":"type1" } => success 927. #=> 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 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 } => 6/6 slots created 929. => 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 930. => 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 931. => 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 932. 933. # Test Avilablity 934. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z" } => ,"user_id":"123","type":"type1" 935. # There is an issue in the below test 936. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2015-03-10T03:10:00Z" } => 0 free slots found 937. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z","type":"type1" } => ,"user_id":"123","type":"type1" 938. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z","type":"type2" } => "out":\[\] 939. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2013-03-10T03:10:00Z","type":"pe1" } => ,"user_id":"123", 940. => POST => http://{{server}}/api/system_calender/availability => {"product":"test", "date":"2012-03-10T03:10:00Z","type":"pe2" } => "out":\[\] 941. => POST => http://{{server}}/api/system_calender/availability => {"date":"2013-03-10T03:10:00Z","type":"pe2" } => Missing product 942. 943. # test booking: 944. => 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 945. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z"} => 6 free slots found 946. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z"} => "_id":"(?.*?)" 947. => POST => http://{{server}}/api/system_calender/book => {"product":"test", "id" :"{{id2}}", "user_id":"booker2"} => successfully booked 948. => POST => http://{{server}}/api/system_calender/book => {"product":"test", "id" :"{{id2}}", "user_id":"booker2"} => This schedule is already taken 949. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z" } => 5 free slots found 950. 951. # test cancel 952. => POST => http://{{server}}/api/system_calender/cancel => {"id" :"{{id2}}", "user_id":"booker3"} => not auth 953. => POST => http://{{server}}/api/system_calender/cancel => {"id" :"5f46e8952dd1ada69b161f91", "user_id":"booker3"} => Schedule not found" 954. => POST => http://{{server}}/api/system_calender/cancel => {"id" :"{{id2}}", "user_id":"booker2"} => successfully canceled 955. => POST => http://{{server}}/api/system_calender/availability => {"product":"doctor", "date":"2015-03-15T03:00:00Z" } => 6 free slots found 956. => GET => http://{{server}}/api/system_calender/delete?_confirmstr=system_calender => success 957. 958. 959. => 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 960. => 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 961. 962. # Test promotion ## Needs a migration simple auth => admin_promotions DB instead 963. #=> !POST => http://{{server}}/api/auth2/login_by_token => {"token": "fake_token"} => "auth_token":"(?.*?)" 964. #=> POST => http://{{server}}/api/promotion/get_referral_code => {} => Missing auth_token 965. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "wrong","product":"fake_product"} => Unauthorized request 966. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "{{auth_token}}","product":"fake_product"} => "code":"(?.*?)" 967. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "{{auth_token}}","product":"fake_product"} => You already have generated the ref code. 968. #=> POST => http://{{server}}/api/promotion/get_referral_code => {"auth_token": "{{auth_token}}","product":"fake_product1"} => "code":"(?.*?)" 969. #=> POST => http://{{server}}/api/promotion/check_referral_code => {"code": "{{code}}","product":"fake_product"} => "type":"REFER", 970. #=> POST => http://{{server}}/api/promotion/check_referral_code => {"code": "{{code}}","product":"fake_product1"} => This referral code is not valid 971. #=> POST => http://{{server}}/api/promotion/check_referral_code => {"code": "wrong","product":"fake_product1"} => This referral code is not valid 972. #=> GET => http://{{server}}/api/promotion/delete?_confirmstr=promotion => success 973. 974. # RCE - JUST BASIC TEST 975. 976. # Capabilities 977. => GET => http://{{server}}/api/utils/rce/capabilities?_dev_token=root => hello_world_code 978. 979. # Status 980. => GET => http://{{server}}/api/utils/rce/status?_dev_token=root&lang=c => Compiler works fine 981. => POST => http://{{server}}/api/utils/rce/execute => {"_dev_token":"root", "lang":"c", "code":"\#include"} => \"out\":{\"stderr\":\"/tmp/ 982. => 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 983. => POST => http://{{server}}/api/utils/rce/execute_ext => {"_dev_token":"root", "lang":"python", "code":"print 'hello123'"} => hello123 984. => 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 985. 986. 987. 988. # Test Youtube Download 989. #sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl 990. # sudo chmod a+rx /usr/local/bin/youtube-dl 991. #=> GET => http://{{server}}/api/utils/youtubedl?id=sb_sMqAF_o => Incomplete YouTube ID 992. # => GET => http://{{server}}/api/utils/youtubedl?id=CP2AYEqoaZo => googlevideo.com 993. # => GET => http://{{server}}/api/utils/youtubedl/audio?id=CP2AYEqoaZo => googlevideo.com 994. # => GET => http://{{server}}/api/utils/youtubedl/video?id=CP2AYEqoaZo => googlevideo.com 995. # => GET => http://{{server}}/api/utils/youtubedl/info?id=CP2AYEqoaZo => googlevideo.com 996. # => GET => http://{{server}}/api/utils/youtubedl/audio?id=https://www.youtube.com/watch?v=De8UKeURlWU => googlevideo.com 997. # => GET => http://{{server}}/api/utils/youtubedl/dl?id=kEld6MLDXPI => A-V-mp4 998. #### USE TESING BELOW LINE ## 999. 1000. # SimpleStore EXPLORE 1001. => GET => http://{{server}}/api/explore/play => Simple Store API EXPLORE 1002. 1003. # SMS 1004. => GET => http://{{server}}/api/utils/sms?to=8927476238&msg=hello&dryrun=true => \[Dryrun\] SMS sent to 8927476238 1005. 1006. # Dev key 1007. GET => http://{{server}}/api/utils/rce/execute?code=hello&lang=kotlin => Access denied 1008. GET => http://{{server}}/api/utils/rce/execute?code=hello&lang=kotlin&_dev_token=root1 => Access denied 1009. GET => http://{{server}}/api/utils/rce/execute?code=hello&lang=kotlin&_dev_token=root => Error while executing this code 1010. 1011. # Status utils = This tracks the health of the endpoints 1012. GET => http://{{server}}/api/status/ping?name=ServiceA => Missing endpoint 1013. GET => http://{{server}}/api/status/ping?endpoint=www.google.com => Missing name 1014. GET => http://{{server}}/api/status/ping?name=ServiceA&endpoint=www.google.com => pong 1015. GET => http://{{server}}/api/status/ping?name=ServiceA&endpoint=www.google.com => pong 1016. GET => http://{{server}}/api/status/show => Live Status of our Service 1017. # HTML TEST NOT SUPPORTED GET => http://{{server}}/api/analytics/show?app_id=sample1 => Showing data for app id sample1 1018. # HTML TEST NOT SUPPORTED GET => http://{{server}}/api/analytics/show?app_id=sample => Showing data for app id sample 1019. 1020. # Long tern Jobs 1021. 1022. 1023. 1024. 1025. ############################# license APIS. ############################# 1026. # License APis allows you to create license for an app user for a app for a duration. 1027. # You can either grant, revoke and validate the license 1028. # All common api's needs root_key to access (TODO) 1029. # There is no renew supported, you just revoke and grant it again. 1030. ######################################################################### 1031. => !GET => http://{{server}}/api/license/delete?_confirmstr=license => success 1032. # Root key 1033. # => GET => http://{{server}}/api/license/ => api access denied 1034. # => GET => http://{{server}}/api/license?root_key=WRONG => success 1035. # Grant, validate and revoke 1036. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test => Missing duration 1037. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test&duration=1&key=NO_KEY => "key":"NO_KEY" 1038. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test&duration=1&key=NO_KEY => license already granted 1039. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test1&duration=WRONG&key=NO_KEY => please pass a valid duration 1040. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test&key=NO_KEY => access granted 1041. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test&key=NO_KEY1 => access denied 1042. => GET => http://{{server}}/api/license/validate?app_id=WRONG&user_id=test&key=NO_KEY => access denied 1043. => GET => http://{{server}}/api/license/revoke?app_id=test&user_id=test => license revoked 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&user_id=test => license not found 1046. => GET => http://{{server}}/api/license/revoke?app_id=test=> Missing user_id 1047. 1048. # expairy 1049. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test2&duration=0&key=NO_KEY=> success 1050. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test2&key=NO_KEY => license expired 1051. 1052. # renew 1053. => GET => http://{{server}}/api/license/revoke?app_id=test&user_id=test2 => license revoked 1054. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test2&duration=1&key=NO_KEY=> success 1055. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test2&key=NO_KEY => access granted 1056. 1057. # generate key 1058. => GET => http://{{server}}/api/license/grant?app_id=test&user_id=test3&duration=1=> "key":"(?.*?)" 1059. => GET => http://{{server}}/api/license/validate?app_id=test&user_id=test3&key={{key}} => access granted 1060. 1061. 1062. ############################# Schedule Script ############################# 1063. # You can schedule arbitrary script execution with SimpleStore 1064. # FIrst submit a task using /schedule_script/submit/ 1065. # Then Activate the task using /schedule_script/submit/ 1066. # Great! You job has scheduled. 1067. # Check a list of jobs which are current scheduled as /schedule_script/status/ and you can deactivate as /schedule_script/deactivate/ 1068. ######################################################################### 1069. => !GET => http://{{server}}/api/schedule_script/delete?_confirmstr=schedule_script => success 1070. 1071. => 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":"(?.*?)" 1072. => GET => http://{{server}}/api/schedule_script/activate?id={{job_id}} => Job has scheduled 1073. => GET => http://{{server}}/api/schedule_script/activate?id={{job_id}} => already scheduled 1074. => GET => http://{{server}}/api/schedule_script/activate_all => 0/1 Job has scheduled 1075. => GET => http://{{server}}/api/schedule_script/reload => We have restarted 1 jobs 1076. => GET => http://{{server}}/api/schedule_script/status => {{job_id}} 1077. # => sleep => 30 # Disabled to just avoid waiting while testing -- works fine, 1078. # => GET => http://{{server}}/api/schedule_script/status => "successCount":1 1079. => GET => http://{{server}}/api/schedule_script/deactivate?id={{job_id}} => canceled 1080. => GET => http://{{server}}/api/schedule_script/deactivate?id={{job_id}} => is not scheduled 1081. => GET => http://{{server}}/api/schedule_script/status => We found 0 active scheduled Script 1082. => GET => http://{{server}}/api/schedule_script/dryrun?script=ABCD => ABCD 1083. => GET => http://{{server}}/api/schedule_script/dryrun?script=console.log('hello') => success 1084. 1085. 1086. # Delete all at the end this is needed as server auto load when stat 1087. => !GET => http://{{server}}/api/schedule_script/delete?_confirmstr=schedule_script => success 1088. 1089. 1090. ############################# Subscription ############################# 1091. # Provides api for email subscription and resubscription 1092. # User can do subscribe and unscibe to an app by giving email id. 1093. # Admin can notify by ending mail to all the people who subscribe. 1094. # Maximum notification allow is 1000 1095. ######################################################################### 1096. => !GET => http://{{server}}/api/subscription/delete?_confirmstr=subscription => success 1097. => GET => http://{{server}}/api/subscription/subscribe?app_id=test&email=dutta.dipankar08@gmail.com => success 1098. => GET => http://{{server}}/api/subscription/subscribe?app_id=test&email=dutta.dipankar08@gmail.com => Data validation failed as composite key failed 1099. => GET => http://{{server}}/api/subscription/count => Count: 1 1100. => GET => http://{{server}}/api/subscription/notify?subject=Hello&body=Some HTML Content&app_id=test&dry_run=1 => Email send to 1 subscriber 1101. => 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 1102. => GET => http://{{server}}/api/subscription/unsubscribe?app_id=test&email=dutta.dipankar08@gmail.com => success 1103. => GET => http://{{server}}/api/subscription/unsubscribe?app_id=test&email=dutta.dipankar08@gmail.com => Not able to unsubscribe 1104. => GET => http://{{server}}/api/subscription/count => Count: 0 1105. 1106. 1107. ############################ SOCIAL POST ################################## 1108. # This allow to post the text and image in FB, Tweeter, Linked-In and Telegram 1109. # We currently supports (1)FB abd (2) Tweeter 1110. # You need to update the key in /etc/SECURE 1111. ############################################################################ 1112. # Comments to avoid spanning the profile 1113. # => GET => http://{{server}}/api/utils/social/twitter?text=automation test => Successfully tweeted 1114. # => GET => http://{{server}}/api/utils/social/twitter?text=automation test => Status is a duplicate 1115. # => GET => http://{{server}}/api/utils/social/facebook?text=automation test => Successfully tweeted 1116. => GET => http://{{server}}/api/utils/social/telegram => Missing text 1117. # => GET => http://{{server}}/api/utils/social/telegram?text=automationtest\&Test => success 1118. # You should you post method to pass data 1119. # Below two test is diable as missing real tokens 1120. # => POST => http://{{server}}/api/utils/social/telegram => {"text":"automation test & Test & test"} => success 1121. # => POST => http://{{server}}/api/utils/social/facebook => {"text":"Welcome to SimpleStore! This is post where we test our APIs"} => success 1122. 1123. ############################ TEST Universal Link page ################################## 1124. # 1125. ############################################################################ 1126. => 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 1127. => GET => http://{{server}}/api/utils/universal_link?app_id=in.co.dipankar.fmradio&key=1&app_name => Input validation failed: Missing app_name" 1128. => GET => http://{{server}}/api/utils/universal_link => Input validation failed: Missing app_id" 1129. 1130. ############################ Static File generator ################################## 1131. # 1132. ############################################################################ 1133. => GET => http://{{server}}/api/utils/static/privacy?app_id=in.co.dipankar.fmradio&key=1&app_name=XXXXXXXXX => XXXXXXXXX 1134. => GET => http://{{server}}/api/utils/static/toc?app_id=in.co.dipankar.fmradio&key=1&app_name=XXXXXXXXX => XXXXXXXXX 1135. 1136. ############################## UPDATE ONE ########################################### 1137. # THIS API helps to update one entry entry in ethe system. you must by _filter and _payload to serch that 1138. # entry and update with the needed data. Should throw the error it it found many entry 1139. # >>> NOT WORKING ANY MORE <<<< 1140. ##################################################################################### 1141. #=> !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1142. #=> POST => http://{{server}}/api/test/create => {"name":"dip", "roll":1} => success 1143. #=> POST => http://{{server}}/api/test/update_one => {} => _filter object must be non empty 1144. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{}} => _filter object must be non empty 1145. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip"} ,"_payload":{}} => You must pass some data in the request 1146. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":2}} => there is no matching entry 1147. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip"},"_payload":{"roll":2}} => pdated 1 entry out of 1 matched 1148. #=> POST => http://{{server}}/api/test/create => {"name":"dip", "roll":1} => success 1149. #=> POST => http://{{server}}/api/test/update_one => {"_filter":{"name":"dip"},"_payload":{"roll":2}} => We found multiple entry 1150. => !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1151. 1152. ############################## INSERT OR UPDATE ONE ########################################### 1153. # THIS API helps to insert update one entry entry in ethe system. you must by _filter and _payload to pass 1154. # if the item is found that are updated with new payload - or it will create a new entry by marging _filter and _payload 1155. ##################################################################################### 1156. => !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1157. => POST => http://{{server}}/api/test/insert_or_update_one => {} => _filter object must be non empty 1158. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{}} => _filter object must be non empty 1159. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip"} ,"_payload":{}} => Please send some non empty payload 1160. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":2}} => inserted one entry 1161. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":3}} => updated one entry 1162. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":4}} => updated one entry 1163. => POST => http://{{server}}/api/test/create => {"name":"dip1", "roll":5} => success 1164. => POST => http://{{server}}/api/test/insert_or_update_one => {"_filter":{"name":"dip1"},"_payload":{"roll":4}} => We found multiple entry 1165. => !GET => http://{{server}}/api/test/delete?_confirmstr=test => success 1166. 1167. 1168. ################ LIST APIs ############################# 1169. # append to list 1170. # remove from list 1171. # clean from list 1172. ###################################################### 1173. => POST => http://{{server}}/api/test/delete?_confirmstr=test => {} => success 1174. => POST => http://{{server}}/api/test/insert => {"name":"dip"} => "_id":"(?.*?)" 1175. => GET => http://{{server}}/api/test/list/append?_id={{id1}}&_field=tag&_value=a => "tag":\["a"\] 1176. => GET => http://{{server}}/api/test/list/append?_id={{id1}}&_field=tag&_value=a,b,c => "tag":\["a","b","c"\] 1177. => GET => http://{{server}}/api/test/list/remove?_id={{id1}}&_field=tag&_value=a => "tag":\["b","c"\] 1178. => GET => http://{{server}}/api/test/list/remove?_id={{id1}}&_field=tag&_value=a,b => "tag":\["c"\] 1179. => GET => http://{{server}}/api/test/list/clear?_id={{id1}}&_field=tag&_value=a,b => "tag":\[\] 1180. => POST => http://{{server}}/api/test/delete?_confirmstr=test => {} => success 1181. 1182. ############# Raiseing tickets for the app ############# 1183. # This api will raise github tickts 1184. # 1185. ########################################################### 1186. => GET => http://{{server}}/api/utils/ticket?app=test => error 1187. # TODO: FIX IT github expaired the token 1188. #=> GET => http://{{server}}/api/utils/ticket?app=test&title=Raise by e2e test&desc=ignore this bug&label=bug => Successfully created a tickets 1189. #=> POST => http://{{server}}/api/utils/ticket=> {"app":"test", "title":"Raise by e2e test", "desc":"ignore this bug", "label":"bug,test"} => Successfully created a tickets 1190. 1191. ######## Create or Get ####### 1192. # If filter returns some result - just get it back or create with _payload + _filter data 1193. ############################### 1194. => POST => http://{{server}}/api/test/delete?_confirmstr=test => {} => success 1195. => POST => http://{{server}}/api/test/create_or_get => {"_filter":{"name":"dip"}, "_payload":{"roll":100}} => inserted the entry 1196. => POST => http://{{server}}/api/test/create_or_get => {"_filter":{"name":"dip"}, "_payload":{"roll":100}} => found entry 1197. => POST => http://{{server}}/api/test/create_or_get => {"_filter":{"name":"dip"}, "_payload":{"roll":100}} => found entry 1198. 1199. ############ Simple Login/AUth ################################################# 1200. ## SImpel password based login. 1201. ## Support only login from obe devices. 1202. ## Hash password got stored 1203. ## Once you log successfully , it will return auth_token_ 1204. ################################################################################# 1205. 1206. # first clean the DB -> Below API will not work, use the UI tool to delete like https://www.mongodb.com/try/download/compass 1207. => POST => http://localhost/api/internal_auth_user_data/delete?_confirmstr=simple_auth => {} => Looks like you are trying to access the internal db 1208. => 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 1209. 1210. # Dfine three users: test and test1 and dutta.dipankar08+2@gmail.com as username 1211. #=> GET => http://localhost/api/simple_auth/register?username=test&password_=test123&email=dutta.dipankar08@gmail.com => registration success 1212. #=> GET => http://localhost/api/simple_auth/register?username=test1&password_=test123&email=dutta.dipankar08+1@gmail.com => registration success 1213. #=> GET => http://localhost/api/simple_auth/register?password_=test123&email=dutta.dipankar08+2@gmail.com => registration success # Email and password only no username 1214. 1215. # Duplicate res 1216. => GET => http://{{server}}/api/simple_auth/register?username=test&password_=test&email=dutta.dipankar08@gmail.com => already taken 1217. => GET => http://{{server}}/api/simple_auth/register?username=test4&password_=test&email=dutta.dipankar08@gmail.com => already taken 1218. 1219. 1220. # Login ( by user name) 1221. => GET => http://{{server}}/api/simple_auth/login?username=test&password_=test11 => Invalid username or password 1222. => GET => http://{{server}}/api/simple_auth/login?username=test11&password_=test => Invalid username or password 1223. 1224. # Login With Email and password or Email + Auth_token 1225. => GET => http://{{server}}/api/simple_auth/login_by_email?username=test&password_=test11 => Input validation failed: Missing email 1226. => GET => http://{{server}}/api/simple_auth/login_by_email?email=test11@test.com&password_=test => Invalid email or password 1227. => 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 1228. => 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 1229. 1230. # login with username and password or authtoken and get login_token1 back 1231. => GET => http://localhost/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1232. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&auth_token_={{login_token1}} => dutta.dipankar08@gmail.com 1233. => GET => http://{{server}}/api/simple_auth/validate_login_session?_no_encode=1&auth_token_={{login_token1}} => success 1234. 1235. # getifo 1236. => GET => http://{{server}}/api/simple_auth/get_info?_no_encode=1&auth_token_={{login_token1}} => user data returned 1237. 1238. #update_info 1239. => GET => http://{{server}}/api/simple_auth/update_info?_no_encode=1&auth_token_={{login_token1}}&phone=7547564902 => user data returned 1240. => GET => http://{{server}}/api/simple_auth/get_info?_no_encode=1&auth_token_={{login_token1}} => 7547564902 1241. 1242. # login agaun get token2 1243. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1244. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&auth_token_={{login_token2}} => dutta.dipankar08@gmail.com 1245. 1246. # try login with invalid tokens. 1247. => GET => http://{{server}}/api/simple_auth/login?username=test&auth_token_=wrong => Invalid username or auth_token_ 1248. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test2&auth_token_={{login_token2}} => Invalid username or auth_token_ 1249. 1250. # logout with one token but other token should works. 1251. => GET => http://{{server}}/api/simple_auth/logout?username=test&auth_token_={{login_token1}} => success 1252. => GET => http://{{server}}/api/simple_auth/logout?username=test&auth_token_={{login_token1}} => Logout done for 1253. => GET => http://{{server}}/api/simple_auth/logout?username=test&auth_token_={{login_token1}} => not able to logout as username or auth_token is wrong 1254. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&auth_token_={{login_token2}} => dutta.dipankar08@gmail.com 1255. 1256. # logout all session and no token should not work 1257. => GET => http://{{server}}/api/simple_auth/logout?username=test => Missing auth_token_ 1258. => GET => http://{{server}}/api/simple_auth/logout_all?username=test => Missing auth_token_ 1259. => GET => http://{{server}}/api/simple_auth/logout_all?username=test1&force=1 => Logout done for . session forcefully 1260. => GET => http://{{server}}/api/simple_auth/logout_all?username=test&force=1 => Logout done 1261. => GET => http://{{server}}/api/simple_auth/login?username=test&auth_token_={{login_token2}} => Invalid username or auth_token_ 1262. 1263. 1264. #### The bwlo example shows how we can make a DB is accexx protected and to access it it must be logged in ### 1265. => GET => http://{{server}}/api/test_simple_auth => Please send auth_token_ 1266. => GET => http://{{server}}/api/test_simple_auth?auth_token_=test => Wrong auth_token_ passed 1267. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1268. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test1&password_=test123 => "auth_token_":"(?.*?)" 1269. => GET => http://{{server}}/api/test_simple_auth?auth_token_={{login_token}} => Find successfully with 0 items 1270. => GET => http://{{server}}/api/test_simple_auth/create?_no_encode=1&auth_token_={{login_token}}&name=Dip => "_username":"test" 1271. => GET => http://{{server}}/api/test_simple_auth?auth_token_={{login_token}} => Find successfully with 1 items 1272. => GET => http://{{server}}/api/test_simple_auth/create?_no_encode=1&auth_token_={{login_token1}}&name=Dip => "_username":"test1" 1273. => GET => http://{{server}}/api/test_simple_auth/create?_no_encode=1&auth_token_={{login_token1}}&name=Dip => "_username":"test1" 1274. => GET => http://{{server}}/api/test_simple_auth?auth_token_={{login_token1}} => Find successfully with 2 items ## 1275. => GET => http://{{server}}/api/test_simple_auth?auth_token_=skip => Find successfully with 3 items #### 1276. => GET => http://{{server}}/api/test_simple_auth/delete?auth_token_={{login_token}}&_confirmstr=test_simple_auth => Deleted count is : 1 1277. => GET => http://{{server}}/api/test_simple_auth/delete?auth_token_=skip&_confirmstr=test_simple_auth => Deleted count is : 2 1278. 1279. ## Forget and reset password to test5 1280. => GET => http://{{server}}/api/simple_auth/forgot_password => Missing username 1281. => GET => http://{{server}}/api/simple_auth/forgot_password?username=wrong => Invalid username 1282. => GET => http://{{server}}/api/simple_auth/forgot_password?_no_encode=1&username=test => "short_lived_token":"(?.*?)" 1283. => GET => http://{{server}}/api/simple_auth/reset_password?username=test => Missing short_lived_token 1284. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token=wrong => Missing password_ 1285. => GET => http://{{server}}/api/simple_auth/reset_password?username=wrong&short_lived_token={{short_lived_token}} => Missing password_ 1286. => GET => http://{{server}}/api/simple_auth/reset_password?username=wrong&short_lived_token=wrong&password_=hello => Invalid username or token got expired 1287. => 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 1288. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token={{short_lived_token}}&password_=test5 => Password changed successfully 1289. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token={{short_lived_token}}&password_=test5 => Invalid username or token got expired 1290. 1291. # reset password back to test123 1292. => GET => http://{{server}}/api/simple_auth/forgot_password?_no_encode=1&username=test => "short_lived_token":"(?.*?)" 1293. => GET => http://{{server}}/api/simple_auth/reset_password?username=test&short_lived_token={{short_lived_token}}&password_=test123 => Password changed successfully 1294. 1295. # You can pass auth_token_ as a header or cookies 1296. # curl -H "auth_token_:skip" -X GET "http://localhost/api/test_simple_auth" 1297. # curl http://localhost/api/test_simple_auth--cookie "auth_token_=skip" 1298. 1299. 1300. # add_subscription_by_stipe 1301. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1302. => 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 1303. => 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 1304. 1305. # duplicate subscription 1306. => 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 1307. 1308. # clear subscription 1309. => GET => http://localhost/api/simple_auth/clear_subscription?_no_encode=1&subscription_key=test&auth_token_={{login_token1}}&subscription_provider=dummy => subscription clear 1310. 1311. 1312. => 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 1313. 1314. 1315. # For testng this you need to generate the payment_method_id first with public dat 1316. #=> 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 1317. 1318. # Google Login 1319. => 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 1320. 1321. 1322. # Managing permission for other users 1323. # To perfrom this acton, you must have a superuser permission 1324. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=test&password_=test123 => "auth_token_":"(?.*?)" 1325. => GET => http://localhost/api/simple_auth/login?_no_encode=1&username=superuser@grodok.com&password_=superuser@123 => "auth_token_":"(?.*?)" 1326. => GET => http://localhost/api/simple_auth/get_info?_no_encode=1&auth_token_={{su_login_token}} => Grodok SuperUser 1327. => GET =>http://localhost/api/simple_auth/add_permission?permission=test&username=test&auth_token_={{su_login_token}} => permission is added 1328. => GET => http://localhost/api/simple_auth/get_info?_no_encode=1&auth_token_={{t_login_token}} => "permission_group":\["test"\] 1329. => GET =>http://localhost/api/simple_auth/remove_permission?permission=test&username=test&auth_token_={{su_login_token}} => permission is removed 1330. => GET => http://localhost/api/simple_auth/get_info?_no_encode=1&auth_token_={{t_login_token}} => "permission_group":\[\] 1331. => GET => http://localhost/api/simple_auth/add_permission?permission=test&username=test&auth_token_={{t_login_token}} => Not logged in as a super user 1332. => GET =>http://localhost/api/simple_auth/remove_permission?permission=test&username=test&auth_token_={{t_login_token}} => Not logged in as a super user 1333. 1334. # LOGIN WITH MAGIC LINK SUPPORT : generate and test Magic Link 1335. => GET => http://localhost/api/simple_auth/generate_magic_link => Missing email 1336. => GET => http://localhost/api/simple_auth/generate_magic_link?email=dutta.dipankar08@gmail.com => Missing url 1337. => 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":"(?.*?)" 1338. => GET => http://localhost/api/simple_auth/login_with_magic_link?_no_encode=1&magic_link_token={{magic_link_token1}} => success 1339. => GET => http://localhost/api/simple_auth/login_with_magic_link?_no_encode=1&magic_link_token={{magic_link_token1}} => Token not exist or expaired 1340. => GET => http://localhost/api/simple_auth/login_with_magic_link?magic_link_token=hello => Invalid token 1341. 1342. 1343. 1344. ######################################################################################### 1345. ## ## 1346. ## IPTV APIS (DISABLED AS NOT USED) ## 1347. ## ## 1348. ######################################################################################### 1349. #=> POST => http://{{server}}/api/ip_tv/delete?_confirmstr=ip_tv => {} => success 1350. #=> 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 1351. #=> GET => http://{{server}}/api/ip_tv?_limit=1 => "_id":"(?.*?)" 1352. #=> GET => http://{{server}}/api/ip_tv/?id={{id1}} => "rank": 1353. #=> GET => http://{{server}}/api/ip_tv/rankup?id={{id1}}&_field=rank => Up voted 1354. #=> GET => http://{{server}}/api/ip_tv/?id={{id1}} => "rank": 1355. #=> GET => http://{{server}}/api/ip_tv/rankdown?id={{id1}}&_field=rank => Down voted 1356. #=> GET => http://{{server}}/api/ip_tv/?id={{id1}} => "rank": 1357. #=> GET => http://{{server}}/api/ip_tv/count => success 1358. # => GET => http://{{server}}/api/ip_tv/cleanup => clean up done by removing 1359. # => GET => http://localhost/api/ip_tv/cleanup?is_delete=false => success 1360. #=> GET => http://localhost/api/ip_tv/explore_seed?seed_url=https://raw.githubusercontent.com/mahmud31132/bdix-tv/main/BD%20working.m3u8 => success 1361. 1362. ######################################################################################### 1363. ## ## 1364. ## TRADE APIS ## 1365. ## ## 1366. ######################################################################################### 1367. # 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 1368. => GET => http://{{server}}/api/utils/trade/ltp => symbol list is empty 1369. => GET => http://{{server}}/api/utils/trade/ltp?symbols=TCS.NS,WIPRO.NS => success # This API is noy working anymore 1370. 1371. # Historical data 1372. => GET => http://localhost/api/utils/trade/history?symbol=MSFT => missing interval. possible value: 1d,5m,15m,1h 1373. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo => missing range. possible value: 1374. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo => missing range. possible value: 1375. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo&range=max => success 1376. => GET => http://localhost/api/utils/trade/history?symbol=MSFT&interval=1mo&range=10y => success 1377. 1378. # Expart resilt 1379. => 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 1380. => 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 1381. => 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 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":"4000","target2":"4000"} => success 1383. => 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 1384. => 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 1385. 1386. 1387. 1388. 1389. ######################################################################################### 1390. ## ## 1391. ## Youtube uploader ## 1392. ## ## 1393. ## FOR AUTH ISSUE: generate toekn: node bin/core/google/youtube.js ## 1394. ######################################################################################### 1395. 1396. => GET => http://localhost/api/utils/yupload/m3u8upload => error 1397. 1398. => GET => http://localhost/api/utils/yupload/m3u8upload?uri=https://stream.live.vc.bbcmedia.co.uk/bbc_hindi_radio&duration=300 =>Please send a key 1399. 1400. 1401. ######################################################################################### 1402. ## ## 1403. ## Error ## 1404. ## ## 1405. ## FOR AUTH ISSUE: generate toekn: node bin/core/google/youtube.js ## 1406. ######################################################################################### 1407. => POST => http://{{server}}/api/error/delete?_confirmstr=error => {} => success 1408. => GET => http://localhost/api/error/test => Test Error 1409. => GET => http://localhost/api/error => Test Error 1410. 1411. ######################################################################################### 1412. ## ## 1413. ## INFO ## 1414. ## ## 1415. ## GET API INFO ## 1416. ######################################################################################### 1417. => GET => http://localhost/api/local_test/info => "isRemoteDB":false 1418. => GET => http://localhost/api/remote_test/info => "isRemoteDB":true 1419. # curl http://localhost/api/test/info --cookie "Cho=Kim;Greet=Hello" 1420. => GET => http://localhost/api/test/info => "isRemoteDB":false 1421. => GET => http://localhost/api/test_secure/info => "secure":false 1422. => GET => http://localhost/api/test_secure/ => success 1423. => GET => http://localhost/api/test_secure_/info => "secure":true # Note that You must have secure_ to pass the match 1424. => GET => http://localhost/api/test_secure_/ => Please send auth_token_ 1425. => GET => http://localhost/api/test/info => "secure":false 1426. 1427. 1428. ######################################################################################### 1429. ## ## 1430. ## STRIPE ## 1431. ## ## 1432. ## STRIPE validation api's helps to validate any purchase via simplestore ## 1433. ######################################################################################### 1434. # ( need real setup )=> GET => http://localhost/api/stripe/check_subscription?customer_id=cus_Melrh5VwxSJB2v => "email":"dutta.dipankar08@gmail.com" 1435. => GET => http://localhost/api/stripe/check_payment?payment_id=unknwon => No such payment_intent 1436. # ( not real setup)=> GET => http://localhost/api/stripe/check_payment?payment_id=pi_3LvRVnCtA5cdHPVp0DrsawEx => "amount_captured":500 1437. 1438. ######################################################################################### 1439. ## ## 1440. ## TEST Encript and dryption API output ## 1441. ## ## 1442. ## STRIPE validation api's helps to validate any purchase via simplestore ## 1443. ######################################################################################### 1444. => GET => http://localhost/api/test_crypto/delete?_confirmstr=test_crypto => success 1445. => GET => http://localhost/api/test_crypto/insert?name=dip => insert successfully 1446. => GET => http://localhost/api/test_crypto => Find successfully 1447. => GET => http://localhost/api/test_crypto/count => success 1448. => GET => http://localhost/api/test_crypto/delete?_confirmstr=test_crypto => success 1449. 1450. 1451. ## Root users 1452. => GET => http://localhost/api/_auth_token/ => access db with db name with _ 1453. => GET => http://localhost/api/_auth_token?_root_user=1 => success 1454. 1455. ######################################################################################### 1456. ## test unset or delete fields 1457. ## This API allow you to delete a list of fileds ( just unset in the docs) 1458. ## How to unsert a field? 1459. ## How to unset multiple fields? 1460. ## how to unset fileds with nested documnets ? use dot notation. 1461. ## How to unset fields for all entrys by seraching? query + _field combination 1462. ######################################################################################### 1463. => GET => http://localhost/api/test/delete?_confirmstr=test =>success 1464. => GET => http://localhost/api/test/insert?name=dip&roll=20&email=hello@hello.com => "_id":"(?.*?)" 1465. => GET => http://localhost/api/test/get?_id={{id1}} => "roll":"20" 1466. => GET => http://localhost/api/test/delete_fields?_id={{id1}}&_field=roll => We have un-set the filed for 1 entries 1467. => GET => http://localhost/api/test/get?_id={{id1}} => "name":"dip","email":"hello@hello.com", 1468. 1469. # unsetting nested object 1470. => POST => http://localhost/api/test/insert => {"name":{"first":"dip", "last":"dutta"}} => "_id":"(?.*?)" 1471. => GET => http://localhost/api/test/delete_fields?_id={{id1}}&_field=name.last => un-set the filed for 1 entries 1472. => GET => http://localhost/api/test/get?_id={{id1}} => "name":\{"first":"dip"\} 1473. 1474. 1475. 1476. ######################################################################################### 1477. # File utilitiesv 1478. # This api define upload, download, delete and list files in the SimpleStore application 1479. # This is for the prototype purpose. Please don't use for scale 1480. # All test is passing - disabled for new file is missing 1481. ######################################################################################### 1482. # curl -d @a.txt http://localhost/api/utils/files/upload use this for upload 1483. #=> GET => http://localhost/api/utils/files/download?filename=a.txt => Dipankar 1484. #=> GET => http://localhost/api/utils/files/list => a.txt 1485. #=> GET => http://localhost/api/utils/files/delete?filename=a.txt => success 1486. #=> GET => http://localhost/api/utils/files/delete?filename=a.txt => error 1487. 1488. 1489. ######################################################################################### 1490. # remote_smb_manifest () 1491. # This API will build the necessaryly function to support SMB. 1492. # Like Enable payment gateway 1493. ######################################################################################### 1494. # [PASS ALL] (1) Test razorpay_create_order APIs 1495. ###>>>> Diabling all test as Key expaired 1496. #=> GET => http://localhost/api/remote_smb_manifest/delete?_confirmstr=remote_smb_manifest => success 1497. #=> POST => http://localhost/api/remote_smb_manifest/insert => {"public_keys":{"razor_key":"1"},"secret_keys_":{"razor_secret":"1"}} => "_id":"(?.*?)" 1498. #=> 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 1499. #=> 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 1500. #=> POST => http://localhost/api/remote_smb_manifest/razorpay_create_order => {"_no_encode":1, "currency":"INR", "smb_id":"wrong"} => Missing amount 1501. #=> POST => http://localhost/api/remote_smb_manifest/insert => {"public_keys":{"razor_key":"rzp_test_I2VzFwGWMekWJe"},"secret_keys_":{"razor_secret":"4Hk97bepWLg7PS0Lli1rCXmx"}} => "_id":"(?.*?)" 1502. #=> POST => http://localhost/api/remote_smb_manifest/razorpay_create_order => {"_no_encode":1, "amount":500, "currency":"INR", "smb_id":"{{id1}}"} => "order_id":"order_ 1503. 1504. 1505. #################### 1506. ## Market APIs: As we wants to get the live market data, we can use goofle api to do that 1507. ## 1508. #################### 1509. 1510. # => GET => http://localhost/api/utils/market/google_ltp?symbol=VUSA.L => Vanguard S 1511. 1512. #### 1513. # Supporting revison 1514. # >>>> Update_one is not working any more <<<<< 1515. #### 1516. => GET => http://localhost/api/test/delete?_confirmstr=test => success 1517. => GET => http://localhost/api/test/insert?name=dip => "_id":"(?.*?)" 1518. # => POST => http://localhost/api/test/update_one => {"_id":"{{id1}}","_revision":true} => You must pass some data in the request 1519. # => POST => http://localhost/api/test/update_one => {"_id":"{{id1}}","name":"dip1","_revision":true} => "dip1" 1520. # => POST => http://localhost/api/test/update_one => {"_id":"{{id1}}","name":"dip2","_revision":true} => "dip2" 1521. => GET => http://localhost/api/test/revision?_id={{id1}} => All History\(revision\) returned 1522. 1523. ### 1524. # You need to mark remote_db to store in remote database 1525. ## 1526. => GET => http://localhost/api/remote_db_secure_merit/info => "isRemoteDB":true 1527. => GET => http://localhost/api/nodel_remote_db_secure_merit/info => "isRemoteDB":true 1528. => GET => http://localhost/api/nodel_secure_merit_remote_db/info => "isRemoteDB":true 1529. => GET => http://localhost/api/nodel_secure_merit_remoooote_db/info => "isRemoteDB":false 1530. 1531. 1532. ############################################# 1533. # Test kill swicth - It provides way to set config which is globally store 1534. # this will help to switch code path based on remote coffi 1535. # This can be used for shipping experimeing features 1536. ############################################# 1537. => GET => http://localhost/api/kill_switch/delete?_confirmstr=kill_switch => success 1538. => GET => http://localhost/api/kill_switch/set_bool?key=a&value=1 => "a":true 1539. => GET => http://localhost/api/kill_switch/set_bool?key=b&value=0 => "b":false 1540. => GET => http://localhost/api/kill_switch/set_bool?key=c&value=true => "c":true 1541. => GET => http://localhost/api/kill_switch/set_string?key=d&value=hello => "d":"hello" 1542. => GET => http://localhost/api/kill_switch/set_string?key=d&value=hello1 => "d":"hello1" 1543. => GET => http://localhost/api/kill_switch/get_current => "d":"hello1" 1544. => GET => http://localhost/api/kill_switch/reload => 4 1545. 1546. 1547. ############################################# 1548. # Template store 1549. # this feature allow to create template in the tempalte store ( store in remote db) 1550. # and the you create_from_template api to create duplicate data from template 1551. ############################################# 1552. => GET => http://localhost/api/template_store/delete?_confirmstr=template_store => success 1553. => POST => http://localhost/api/template_store/create => {"name":"dipankar", "roll":100} => template_name must be present as composite key 1554. => POST => http://localhost/api/template_store/create => {"name":"dipankar", "roll":100, "template_name":"test"} => success 1555. => POST => http://localhost/api/template_store/create => {"name":"dipankar", "roll":100, "template_name":"test"} => Duplicate item found: template_name 1556. # here how to create clone from templates 1557. => POST => http://localhost/api/test/create_from_template => {"template_name":"test", "more_info":"extra data"} => "name":"dipankar","roll":100 1558. => POST => http://localhost/api/test/create_from_template => {"template_name":"test1", "more_info":"extra data"} => template not found 1559. 1560. 1561. 1562. ################ SCHEULE 2 API ###################### 1563. # Schedule2 allows you to schele HTTP cron job - this is the next version of schedule 1564. # a) insert an entry 1565. # b) activate it uisng /activate. 1566. # c) check the status = /status 1567. ##################################################### 1568. => POST => http://localhost/api/schedule2/delete?_confirmstr=schedule2 => {} => success 1569. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com","cron_format":"*/10 * * * * *"} => "_id":"(?.*?)" # Just insert not activated 1570. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com","cron_format":"*/10 * * * * *"} => Duplicate item found 1571. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Job is now scheduled 1572. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => is already scheduled 1573. => GET => http://{{server}}/api/schedule2/status => We have . jobs 1574. => GET => http://{{server}}/api/schedule2/reload => We have restarted . jobs 1575. => sleep => 12 1576. => GET => http://{{server}}/api/schedule2/?id={{job_id}} => doctype html # we are cjeking if the job got executed or not! 1577. => POST => http://{{server}}/api/schedule2/deactivate?id={{job_id}} => {} => canceled 1578. => POST => http://{{server}}/api/schedule2/deactivate?id={{job_id}} => {} => is not scheduled 1579. => GET => http://{{server}}/api/schedule2/status => We have 0 jobs 1580. 1581. # test post api call. 1582. => POST => http://{{server}}/api/schedule2/insert => {"method":"post", "url":"http://localhost/api/test/insert","cron_format":"*/10 * * * * *","data":{"name":"dip432"}} => "_id":"(?.*?)" 1583. => GET => http://{{server}}/api/schedule2/activate?id={{job_id2}} => Job is now scheduled 1584. => sleep => 12 # will execute in 12 sec 1585. => GET => http://{{server}}/api/schedule2/?id={{job_id2}} => insert successfully 1586. #=> POST => http://{{server}}/api/schedule2/deactivate?id={{job_id2}} => {} => canceled 1587. 1588. # Stop everything 1589. => POST => http://localhost/api/schedule2/delete?_confirmstr=schedule2 => {} => success 1590. => GET => http://localhost/api/schedule2/reload => We have restarted 0 jobs 1591. 1592. # check reload on boot 1593. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com","cron_format":"*/60 * * * * *"} => "_id":"(?.*?)" # Just insert not activated 1594. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Job is now scheduled 1595. # now restart. 1596. => GET => http://localhost/api/schedule2/status => We have 1 jobs 1597. 1598. #check timezoe support 1599. => POST => http://{{server}}/api/schedule2/insert => {"method":"get", "url":"https://google.com/test1","cron_format":"*/60 * * * * *", "time_zone":"invalid"} => "_id":"(?.*?)" # Just insert not activated 1600. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Not a valid timezone:invalid 1601. 1602. => 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 1603. => POST => http://{{server}}/api/schedule2/activate?id={{job_id}} => {} => Job is now scheduled 1604. 1605. 1606. ################ Test Webhooks###################### 1607. # Webhoks allowsto add endpoint when some db data is getting updated 1608. ##################################################### 1609. => GET => http://localhost/api/webhook/status_clear => {"CALl_COUNT":0} 1610. => POST => http://localhost/api/webhook/insert => {"db_name":"test_webhook", "hook_url":"https://google.com"} => success 1611. => POST => http://localhost/api/test_webhook/insert => {"name":"Dipankar"} => success 1612. => GET => http://localhost/api/webhook/status => {"CALl_COUNT":1} 1613. 1614. 1615. 1616. ################ SECURE DB and Visibility Rules ###################### 1617. # This allows to build secure DB protected by access_token. 1618. # 1. Secure DB contains the letter secure in it's name. 1619. # 2. When you define a db as secure you must pass a valid auth_token_ to create, insert. update. 1620. # 3. They are only visiuble to you and no others 1621. # 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 1622. # 5. You can also create those db annonomously using spacial access token called "anonymous" - They are budefult make public visibility. 1623. # 6. Acess token "debug" can work for debug evn and skip all the secure rules 1624. ##################################################### 1625. 1626. # Step1: Adding or remiving visibiity 1627. => GET => http://localhost/api/secure_test/insert?auth_token_=debug&name=hello => "_id":"(?.*?)" 1628. => GET => http://localhost/api/secure_test/visibility/add?_id1={{id1}}&auth_token_=debug => You must pass a _id or id 1629. => GET => http://localhost/api/test/visibility/add?_id={{id1}} => You can only make this action on secure db 1630. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}} => Missing auth_token_ 1631. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug1 => Invalid token 1632. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user1 => Successfully added 1633. => GET => http://localhost/api/secure_test/?auth_token_=debug&_id={{id1}} => "_visibility":\["user1"\] 1634. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user1 => Not updated 1635. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user2 => Successfully added 1636. 1637. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_=debug&username=user1 => Successfully removed 1638. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_=debug&username=user1 => Not updated 1639. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_=debug&username=user2 => Successfully removed 1640. => GET => http://localhost/api/secure_test/?auth_token_=debug&_id={{id1}} => "_visibility":\[\] 1641. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_=debug&username=user1 => Successfully added 1642. => GET => http://localhost/api/secure_test/visibility/clear?_id={{id1}}&auth_token_=debug => Successfully 1643. => GET => http://localhost/api/secure_test/?auth_token_=debug&_id={{id1}} => "_visibility":\[\] 1644. 1645. 1646. 1647. # Step 2: test secure access via visibility 1648. # 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 1649. 1650. # first clean the DB 1651. => POST => http://localhost/api/simple_auth/delete?_confirmstr=simple_auth => {} => success 1652. => 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 1653. 1654. # Register user 1655. #=> GET => http://localhost/api/simple_auth/register?username=user1&password_=test123&email=dutta.dipankar08@gmail.com => registration success 1656. #=> GET => http://localhost/api/simple_auth/register?username=user2&password_=test123&email=dutta.dipankar08+0@gmail.com => registration success 1657. 1658. # login user 1659. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=user1&password_=test123 => "auth_token_":"(?.*?)" 1660. => GET => http://{{server}}/api/simple_auth/login?_no_encode=1&username=user2&password_=test123 => "auth_token_":"(?.*?)" 1661. # Create an ietm by user1 and add visibility to user 2 1662. => GET => http://localhost/api/secure_test/insert?auth_token_={{login_token1}}&name=share with user2 => "_id":"(?.*?)" 1663. => GET => http://localhost/api/secure_test/get?auth_token_={{login_token2}}&_id={{id1}} => Find successfully with 0 items 1664. => GET => http://localhost/api/secure_test/visibility/add?_id={{id1}}&auth_token_={{login_token1}}&username=user2 => Successfully added 1665. # Access by user 2 1666. => GET => http://localhost/api/secure_test/get?auth_token_={{login_token2}}&_id={{id1}} => share with user2 1667. #Revoke access 1668. => GET => http://localhost/api/secure_test/visibility/remove?_id={{id1}}&auth_token_={{login_token1}}&username=user2 => Successfully removed 1669. => GET => http://localhost/api/secure_test/get?auth_token_={{login_token2}}&_id={{id1}} => Find successfully with 0 items 1670. 1671. # Update Visibility in a go using /replace 1672. => GET => http://localhost/api/secure_test/visibility/replace?_id={{id1}}&auth_token_={{login_token1}}&username=user1,user2,user3 => Successfully replaced with 3 1673. => GET => http://localhost/api/secure_test/visibility/replace?_id={{id1}}&auth_token_={{login_token1}}&username=user1,user2,user3 ,user4 => Successfully replaced with 4 1674. => GET => http://localhost/api/secure_test/visibility/replace?_id={{id1}}&auth_token_={{login_token1}}&username=user1 => Successfully replaced with 1 1675. => POST => http://localhost/api/secure_test/visibility/replace => {"_id":"{{id1}}","auth_token_":"{{login_token1}}","username":["user1"]} => Successfully replaced with 1 1676. # In the below case, you need use clear API to replace 1677. => POST => http://localhost/api/secure_test/visibility/replace => {"_id":"{{id1}}","auth_token_":"{{login_token1}}","username":[]} => you must pass username 1678. 1679. 1680. # Testing anonymous entries. 1681. => GET => http://localhost/api/secure_test/insert?auth_token_=anonymous&name=test_anonymous => "_id":"(?.*?)" 1682. => GET => http://localhost/api/secure_test?id={{id3}} => Please send auth_token_ 1683. => GET => http://localhost/api/secure_test?id={{id3}}&auth_token_=anonymous => "_visibility":\["public"\] 1684. => GET => http://localhost/api/secure_test?id={{id3}}&auth_token_=test => Wrong auth_token_ passed # So you must pass valid access token or anonymous 1685. => GET => http://localhost/api/secure_test?id={{id3}}&auth_token_={{login_token1}} => "_visibility":\["public"\] 1686. 1687. 1688. ################ PDF GEN API ###################### 1689. # This allow to a secure entry to other user 1690. ##################################################### 1691. => GET => http://localhost/api/utils/pdf/letter?from=Dipankar\nDutta&to=dip&subject=hello&content=hello\nworld => company_name missing 1692. => 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 1693. 1694. 1695. ################ HEARTBEAT API ###################### 1696. # This allow to a secure entry to other user 1697. ##################################################### 1698. => GET => http://localhost/api/utils/heartbeat/ping => please pass name 1699. => GET => http://localhost/api/utils/heartbeat/ping?name=test =>pong 1700. => GET => http://localhost/api/utils/heartbeat/status?name=test => status: active 1701. => GET => http://localhost/api/utils/heartbeat/ping?name=test&status=error =>pong 1702. => GET => http://localhost/api/utils/heartbeat/status?name=test => status: error 1703. => GET => http://localhost/api/utils/heartbeat/ping?name=test&status=error&last_error=error_stack =>pong 1704. => GET => http://localhost/api/utils/heartbeat/status?name=test => error_stack 1705. => GET => http://localhost/api/utils/heartbeat/status?name=test1 => status: not found 1706. 1707. # Test auto expaire ( must be pinnged in every 60 sec - we delete the entry in 120 sec) 1708. # This give two chnages to ensure your pingged in reached to the server 1709. => GET => http://localhost/api/utils/heartbeat/status?name=test => error_stack 1710. # => sleep => 120 <<< DIabled as perf reason 1711. # => GET => http://localhost/api/utils/heartbeat/status?name=test => status: inactive 1712. 1713. ################ TUNNEL REQUEST ###################### 1714. # This mecahnisn allows to execute a JSON request to 3p wesbite and allow to pass a custum function to process the output. 1715. ##################################################### 1716. => GET => http://localhost/api/tunnel_request/delete?_confirmstr=tunnel_request =>success 1717. => POST => http://localhost/api/tunnel_request/add_tunnel => {"name":"test", "type":"get", "url":"https://market.tipranks.com/api/details/GetRealTimeQuotes", "process_fn" : "none"} => 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"} => Duplicate item found: name 1719. 1720. # Once we setup a tunnel, execute it using get or post 1721. => GET => http://localhost/api/tunnel_request/execute?name=test => Request failed with status code 404 1722. => GET => http://localhost/api/tunnel_request/execute?name=test&tickers=MSFT => Issue with processing function 1723. 1724. # thsi will override thr process fucntion to test purpose ( you can use both lamda and nameed function) 1725. => POST => http://localhost/api/tunnel_request/execute => {"name":"test","tickers":"MSFT","process_fn":"function(a){return a}"} => successfully executeed the process fiunction 1726. 1727. # DONT USE LAMDA FUNCTION for test as => can't eb used 1728. # 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 1729. #=> POST => http://localhost/api/tunnel_request/execute => {"name":"test","tickers":"MSFT","process_fn":"(a)=>a"} => successfully executeed the process fiunction 1730. 1731. # You can add revision for that tunnel and latest revisition will be used 1732. => 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 1733. => GET => http://localhost/api/tunnel_request/execute?name=test&tickers=MSFT => MSFT 1734. 1735. ################ Crash Report ###################### 1736. # Thsi APi provides to report crashes from any app. 1737. ##################################################### 1738. => GET => http://localhost/api/crash_log/delete?_confirmstr=crash_log =>success 1739. => POST => http://localhost/api/crash_log/report_crash => {"app_name":"test", "message":"hello","stack":"stack1"} => first_line_hash:-1e788fb6 1740. => POST => http://localhost/api/crash_log/report_crash => {"app_name":"test", "message":"hello","stack":"stack1 "} => first_line_hash:-1e788fb6 1741. => GET => http://localhost/api/crash_log => "total_count":2 1742. 1743. ################ System DB ###################### 1744. # Simple store supports system db which load all SimpleStore Server realted remote config on DB start. 1745. # This will override any local config so that we can control the service remotely. 1746. # One of the example is the SERCURE_KEYS which could be reset remotely 1747. # >>>> NOT WORKING <<<< 1748. ##################################################### 1749. # => GET => http://localhost/api/internal_nodel_system_db/delete?_confirmstr=internal_nodel_system_db => The DB has marked as nodel 1750. # => GET => http://localhost/api/utils/system_db/dump => system db dump -> use db UI 1751. # /update will add, update, delete all in a single api. for delete pass null 1752. # => 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" 1753. # => POST => http://localhost/api/utils/system_db/update => {"db_name":"SECURE_KEYS", "test_key1":"test_key_value1","test_key2":"null"} => "test_key2":null 1754. # => 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" 1755. # => GET => http://localhost/api/utils/system_db/dump => "test_key2":"test_key_value3" 1756. 1757. ######### SERVER INFO ###### 1758. => GET => http://localhost/info => "secureKeys":"Un autorized" 1759. => GET => http://localhost/info?admin=1 => "secureKeys" 1760. 1761. ############## 1762. # Test for stock_alert 1763. # 1764. ############ 1765. => GET => http://localhost/api/stock_alert/delete?_confirmstr=stock_alert => success 1766. => POST => http://localhost/api/stock_alert/create => {"email":"dutta.dipankar08@gmail.com"} => "_id":"(?.*?)" 1767. => POST => http://localhost/api/stock_alert/tags/add => {"id":"{{id1}}","_field":"symbol_list", "_value":"AAPL"} => "symbol_list":\["AAPL"\] 1768. => 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"\] 1769. => POST => http://localhost/api/stock_alert => {"id":"{{id1}}"} => "email":"dutta.dipankar08@gmail.com" 1770. => GET => http://localhost/api/stock_alert/trigger?exchange=NASDAQ&event=NOTIFY_BEGIN_5 => 1 Event processed 1771. 1772. 1773. ########### 1774. # Expose reliability for admin acess 1775. ########### 1776. => GET => http://localhost/reliability/ => success 1777. 1778. ##### Admin DB #### 1779. => GET => http://localhost/api/admin_hello => Missing admin_token_ 1780. => GET => http://localhost/api/test_admin => Missing admin_token_ 1781. => GET => http://localhost/api/test_admin?admin_token_=admin_test => Find successfully 1782. => GET => http://localhost/api/test_admin?admin_token_=admin_test_token_invalid => Invalid admin_token 1783. => GET => http://localhost/api/test_admin/insert?admin_token_=admin_test&name=test=> success 1784. => GET => http://localhost/api/test_admin/get?name=test=> Missing admin_token_ 1785. => GET => http://localhost/api/test_admin/find?name=test=> Missing admin_token_ 1786. 1787. 1788. # Get and Delete. 1789. => GET => http://localhost/api/test/insert?name=test => "_id":"(?.*?)" 1790. => GET => http://localhost/api/test/get_and_delete?id={{id1}} => success 1791. => GET => http://localhost/api/test/get_and_delete?id={{id1}} => error 1792. 1793. 1794. # Test case for AWS S3 utils 1795. => GET => http://localhost/api/utils/aws/list_files?folder_name=images&bucket_name=intellicogno-s3 => https://intellicogno-s3.s3.us-east-2.amazonaws.com 1796. => GET => http://localhost/api/utils/aws/list_files?folder_name=images => missing bucket_name 1797. => GET => http://localhost/api/utils/aws/list_files?bucket_name=images => missing folder_name 1798. => GET => http://localhost/api/utils/aws/list_files?folder_name=images&bucket_name=intellicogno-s4 => return a list of url 1799. => GET => http://localhost/api/utils/aws/list_files?folder_name=images1&bucket_name=intellicogno-s3 => return a list of url 1800. # Path = https://${bucketName}.s3.${region}.amazonaws.com/${path} 1801. => GET => http://localhost/api/utils/aws/get_download_url?path=images/017.jpg&bucket_name=intellicogno-s3 => success # get a link for a file 1802. 1803. 1804. # live log 1805. => GET => http://localhost/api/live_log/test => success 1806. => GET => http://localhost/api/live_log/get_log => error 1807. => GET => http://localhost/api/live_log/get_log?sender=live_log => html 1808. 1809. 1810. # Admin feature 1811. # 1. Server logs -> This works only if you login as super user 1812. => GET => http://localhost/api/utils/admin_tools/logs => success 1813. => GET => http://localhost/api/utils/admin_tools/clear_logs => success 1814. => GET => http://localhost/admin/routes => live_log 1815. 1816. # Power ful cron jobs scheulere 1817. # You can have job type lie ( not working anymore) 1818. # => GET => http://localhost/api/cron_job/submit?cron_format=* * * * *&job_type=debug&job_payload=json:{%22data%22:%22data%22} => success 1819. # => GET => http://localhost/api/cron_job/active_jobs => sucess 1820. # => GET => http://localhost/api/cron_job/reload => sucess 1821. # => 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 1822. 1823. # Bash comamnd excutor 1824. => GET => http://localhost/api/utils/bash => error 1825. => GET => http://localhost/api/utils/bash?cmd=ls => success 1826. => GET => http://localhost/api/utils/bash?cmd=pwd => success 1827. => GET => http://localhost/api/utils/bash?cmd=sudo%20rm%20-rf => No rm or sudo allowed 1828. => GET => http://localhost/api/utils/bash?preset=git_pull => success 1829. => GET => http://localhost/api/utils/bash/get_all_presets => All Preset returned 1830. 1831. # yahoo_fin Historical data 1832. => GET => http://localhost/api/utils/yahoo_fin/historical_data?symbol=AAPL&interval=5m&range=1mo => success 1833. 1834. 1835. # Generating OAuth token for Simple_AUth 1836. # Oauth allows to genete refersh and access token by 3p provider 1837. # Here is how to use 1838. # 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) 1839. # 2. After reditecyion, you will getting a code, note the code and pass with below url 1840. # 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) 1841. # 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. 1842. # 5. velidate if that is working fine http://simplestore.dipankar.co.in/api/utils/schwab/get_all_data?auth_token_= 1843. # 6. You dont need to acess refresh the auth_token as it is done automically by the system. 1844. 1845. 1846. #=> GET => http://localhost/api/simple_auth/register?username=test&email=test@test.com&password_=test => Duplicate item found: username 1847. #=> GET => http://localhost/api/simple_auth/login?username=test&email=test@test.com&password_=test&_no_encode=1 => "auth_token_":"(?.*?)" #auth_token_: "9CC3B6" 1848. #=> 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 1849. #=> GET => http://localhost/api/simple_auth/get_info?auth_token_=9CC3B6&_no_encode=1 =>"test" # Note it will never expose the oauth_tokens_ ouside 1850. #=> GET => http://localhost/api/utils/schwab/get_all_data?auth_token_=9CC3B6 1851. 1852. 1853. 1854. # Set APis -> This allow to insert a string into a list in the document 1855. => !POST => http://localhost/api/test0/create => {"name":"dip","count":1} => "_id":"(?.*?)" 1856. => GET => http://localhost/api/test/set/add?_id={{id}}&field=tags&value=1234 => "1234" 1857. => GET => http://localhost/api/test/set/add?_id={{id}}&field=tags&value=1234,1235,1236,1237 => "1234","1235","1236" 1858. => GET => http://localhost/api/test/set/remove?_id={{id}}&field=tags&value=1234=> "1235","1236" 1859. => GET => http://localhost/api/test/set/remove?_id={{id}}&field=tags&value= 1234,1235, 1236=> "1237" 1860. => GET => http://localhost/api/test/set/clear?_id={{id}}&field=tags&value==> "tags":\[\] 1861. => GET => http://localhost/api/test/delete?_id={{id}} => success 1862. 1863. 1864. # Private tokens store and send message in telegeraom: Private Tokens + Telegram Utilities 1865. => GET => http://localhost/api/simple_auth/login?username=test&email=test@test.com&password_=test123&_no_encode=1 => "auth_token_":"(?.*?)" #auth_token_: "9CC3B6" 1866. => GET => http://localhost/api/simple_auth/save_private_token?auth_token_={{login_token1}}&provider=TELEGRAM_BOT_PRIVATE_TOKEN&token=test => private tokens stored 1867. => GET => http://localhost/api/simple_auth/save_private_token?auth_token_={{login_token1}}&provider=UNKNOWN&token=test => Invalid enum string UNKNOWN, 1868. => GET => http://localhost/api/utils/telegram/send_msg?auth_token_={{login_token1}}&provider=UNKNOWN&chat_id=test&text=hello => 404 1869. => GET => http://localhost/api/simple_auth/save_private_token?auth_token_={{login_token1}}&provider=TELEGRAM_BOT_PRIVATE_TOKEN&token=7542704492:AAFivlt7Cu1Y7lbRjIAVmBguiVaDMr0w5RA => private tokens stored 1870. => GET => http://localhost/api/utils/telegram/send_msg?auth_token_={{login_token1}}&chat_id=test&text=hello => Bad Request: chat not found 1871. => GET => http://localhost/api/utils/telegram/send_msg?auth_token_={{login_token1}}&chat_id=-1002207345931&text=hello => Message sent successfully! 1872. => GET => http://localhost/api/simple_auth/logout?username=test&auth_token_={{login_token1}} => success 1873. 1874. # Interal db 1875. => GET => http://localhost/api/internal_test => access this information 1876. 1877. # testing passing osbucure data 1878. # 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 1879. => GET => http://localhost/api/test/count?_data=eyJuYW1lIjogImRpcCJ9 => success 1880. => POST => http://localhost/api/test/count => {"_data":"eyJuYW1lIjogImRpcCJ9"} => success 1881. => GET => http://localhost/api/test/count?_data=eyJuYW1lIjogImRpcCJ9xx => Unexpected non-whitespace 1882. 1883. # Accessing preloaded Data stored in server 1884. => GET => http://localhost/api/utils/preload_data?name=ExampleData => success 1885. 1886. 1887. # schwab APIS ( not that you must have a valid access token - can;t test locally) 1888. => context => auth_token => 1889. #=> GET => https://simplestore.dipankar.co.in/api/utils/schwab/get_all_data?auth_token_={{auth_token}} => success 1890. #=> GET => https://simplestore.dipankar.co.in/api/utils/schwab/quote?auth_token_={{auth_token}}&symbols=MSFT,AAPL => success 1891. #=> GET => https://simplestore.dipankar.co.in/api/utils/schwab/chains?auth_token_={{auth_token}}&symbol=AAPL => success 1892. #=> GET => http://localhost/api/utils/schwab/pricehistory?auth_token_={{auth_token}}&symbol=AAPL => success 1893. #=> GET => http://localhost/api/utils/schwab/net_delta?cmd=start => success 1894. #=> GET => http://localhost/api/utils/schwab/net_delta?cmd=stop => success 1895. #=> GET => http://localhost/api/utils/schwab/net_delta?cmd=error => success 1896. #=> GET => http://localhost/api/utils/schwab/net_delta?cmd=result => success 1897. #=> GET => http://localhost/api/utils/schwab/list_chains?symbol=AAPL => success 1898. 1899. # System_Config => This is a file based env store where we expose API to save and get it. 1900. # This is only access by SimpleStore Admin user 1901. # First generate a super user_token 1902. => GET => http://localhost/api/simple_auth/login?_no_encode=1&username=superuser@grodok.com&password_=superuser@123 => "auth_token_":"(?.*?)" 1903. => GET => http://localhost/api/utils/system_config/get?auth_token_={{su_login_token}} => data returned 1904. => GET => http://localhost/api/utils/system_config/set?auth_token_={{su_login_token}}&key=key&value=value => key 1905. => GET => http://localhost/api/utils/system_config/delete?auth_token_={{su_login_token}}&key=key&value=value => Deleted the key 1906. 1907. 1908. # Open api APIs 1909. # curl -X POST http://localhost/api/utils/openai/transcribe -F "audio=@audio.mpeg" shoild be use for testing , Put the audio file in same folder 1910. # => POST => http://localhost/api/utils/openai/transcribe => "audio=@audio.mpeg" => success # FIle upload is not supported by FEST