PageRenderTime 60ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/node_modules/rethinkdbdash/test/selecting-data.js

https://gitlab.com/Sxw1212/questions
JavaScript | 388 lines | 340 code | 45 blank | 3 comment | 15 complexity | 1897705fb590461db5d985ce454d7a9c MD5 | raw file
  1. var config = require(__dirname+'/config.js');
  2. var r = require(__dirname+'/../lib')(config);
  3. var util = require(__dirname+'/util/common.js');
  4. var assert = require('assert');
  5. var Promise = require('bluebird');
  6. var uuid = util.uuid;
  7. var It = util.It;
  8. var uuid = util.uuid;
  9. var dbName, tableName, result, pks;
  10. It('Init for `selecting-data.js`', function* (done) {
  11. try {
  12. dbName = uuid();
  13. tableName = uuid();
  14. result = yield r.dbCreate(dbName).run();
  15. assert.equal(result.dbs_created, 1);
  16. result = yield r.db(dbName).tableCreate(tableName).run();
  17. assert.equal(result.tables_created, 1);
  18. result = yield r.db(dbName).table(tableName).insert(eval('['+new Array(100).join('{}, ')+'{}]')).run();
  19. assert.equal(result.inserted, 100);
  20. pks = result.generated_keys;
  21. done();
  22. }
  23. catch(e) {
  24. done(e);
  25. }
  26. })
  27. It('`db` should work', function* (done) {
  28. try {
  29. result = yield r.db(dbName).info().run();
  30. assert.equal(result.name, dbName);
  31. assert.equal(result.type, 'DB');
  32. done();
  33. }
  34. catch(e) {
  35. done(e);
  36. }
  37. })
  38. It('`table` should work', function* (done) {
  39. try {
  40. result = yield r.db(dbName).table(tableName).info().run();
  41. assert.equal(result.name, tableName)
  42. assert.equal(result.type, 'TABLE')
  43. assert.equal(result.primary_key, 'id')
  44. assert.equal(result.db.name, dbName)
  45. result = yield r.db(dbName).table(tableName).run();
  46. assert.equal(result.length, 100)
  47. done();
  48. }
  49. catch(e) {
  50. done(e);
  51. }
  52. })
  53. It('`table` should work with readMode', function* (done) {
  54. try {
  55. var result = yield r.db(dbName).table(tableName, {readMode: 'majority'}).run();
  56. assert.equal(result.length, 100)
  57. result = yield r.db(dbName).table(tableName, {readMode: 'majority'}).run();
  58. assert.equal(result.length, 100)
  59. done();
  60. }
  61. catch(e) {
  62. done(e);
  63. }
  64. })
  65. It('`table` should throw with non valid otpions', function* (done) {
  66. try {
  67. var result = yield r.db(dbName).table(tableName, {nonValidKey: false}).run();
  68. }
  69. catch(e) {
  70. if (e.message === 'Unrecognized option `nonValidKey` in `table` after:\nr.db("'+dbName+'")\nAvailable option is readMode <string>') {
  71. done();
  72. }
  73. else {
  74. done(e);
  75. }
  76. }
  77. })
  78. It('`get` should work', function* (done) {
  79. try {
  80. result = yield r.db(dbName).table(tableName).get(pks[0]).run();
  81. assert.deepEqual(result, {id: pks[0]})
  82. done();
  83. }
  84. catch(e) {
  85. done(e);
  86. }
  87. })
  88. It('`get` should throw if no argument is passed', function* (done) {
  89. try {
  90. result = yield r.db(dbName).table(tableName).get().run();
  91. }
  92. catch(e) {
  93. assert(e instanceof r.Error.ReqlDriverError);
  94. assert(e instanceof Error);
  95. if (e.message === '`get` takes 1 argument, 0 provided after:\nr.db("'+dbName+'").table("'+tableName+'")') {
  96. done();
  97. }
  98. else{
  99. done(e);
  100. }
  101. }
  102. })
  103. It('`getAll` should work with multiple values - primary key', function* (done) {
  104. try {
  105. var table = r.db(dbName).table(tableName);
  106. var query = table.getAll.apply(table, pks);
  107. result = yield query.run();
  108. assert.equal(result.length, 100);
  109. table = r.db(dbName).table(tableName);
  110. query = table.getAll.apply(table, pks.slice(0, 50));
  111. result = yield query.run();
  112. assert.equal(result.length, 50);
  113. done();
  114. }
  115. catch(e) {
  116. done(e);
  117. }
  118. })
  119. It('`getAll` should work with no argument - primary key', function* (done) {
  120. try {
  121. var result = yield r.db(dbName).table(tableName).getAll().run();
  122. assert.equal(result.length, 0);
  123. done();
  124. }
  125. catch(e) {
  126. done(e);
  127. }
  128. })
  129. It('`getAll` should work with no argument - index', function* (done) {
  130. try {
  131. var result = yield r.db(dbName).table(tableName).getAll({index: 'id'}).run();
  132. assert.equal(result.length, 0);
  133. done();
  134. }
  135. catch(e) {
  136. done(e);
  137. }
  138. })
  139. It('`getAll` should work with multiple values - secondary index 1', function* (done) {
  140. try {
  141. var result = yield r.db(dbName).table(tableName).update({field: 0}).run();
  142. assert.equal(result.replaced, 100);
  143. result = yield r.db(dbName).table(tableName).sample(20).update({field: 10}).run();
  144. assert.equal(result.replaced, 20);
  145. result = yield r.db(dbName).table(tableName).indexCreate('field').run();
  146. assert.deepEqual(result, {created: 1});
  147. result = yield r.db(dbName).table(tableName).indexWait('field').pluck('index', 'ready').run();
  148. assert.deepEqual(result, [{'index':'field','ready':true}]);
  149. // Yield one second -- See https://github.com/rethinkdb/rethinkdb/issues/2170
  150. var p = new Promise(function(resolve, reject) {
  151. setTimeout(function() { resolve() }, 1000)
  152. });
  153. yield p;
  154. result = yield r.db(dbName).table(tableName).getAll(10, {index: 'field'}).run();
  155. assert(result);
  156. assert.equal(result.length, 20);
  157. done();
  158. }
  159. catch(e) {
  160. done(e);
  161. }
  162. })
  163. It('`getAll` should return native dates (and cursor should handle them)', function* (done) {
  164. try {
  165. var result = yield r.db(dbName).table(tableName).insert({field: -1, date: r.now()}).run();
  166. result = yield r.db(dbName).table(tableName).getAll(-1, {index: 'field'}).run();
  167. assert(result[0].date instanceof Date);
  168. // Clean for later
  169. result = yield r.db(dbName).table(tableName).getAll(-1, {index: 'field'}).delete().run();
  170. done();
  171. }
  172. catch(e) {
  173. done(e);
  174. }
  175. })
  176. It('`getAll` should work with multiple values - secondary index 2', function* (done) {
  177. try {
  178. var result = yield r.db(dbName).table(tableName).indexCreate('fieldAddOne', function(doc) { return doc('field').add(1) }).run();
  179. assert.deepEqual(result, {created: 1});
  180. result = yield r.db(dbName).table(tableName).indexWait('fieldAddOne').pluck('index', 'ready').run();
  181. assert.deepEqual(result, [{'index':'fieldAddOne','ready':true}]);
  182. // Yield one second -- See https://github.com/rethinkdb/rethinkdb/issues/2170
  183. var p = new Promise(function(resolve, reject) {
  184. setTimeout(function() { resolve() }, 1000)
  185. });
  186. yield p;
  187. result = yield r.db(dbName).table(tableName).getAll(11, {index: 'fieldAddOne'}).run();
  188. assert(result);
  189. assert.equal(result.length, 20);
  190. done();
  191. }
  192. catch(e) {
  193. done(e);
  194. }
  195. })
  196. It('`between` should wrok -- secondary index', function* (done) {
  197. try {
  198. var result = yield r.db(dbName).table(tableName).between(5, 20, {index: 'fieldAddOne'}).run();
  199. assert(result);
  200. assert.equal(result.length, 20);
  201. done();
  202. }
  203. catch(e) {
  204. done(e);
  205. }
  206. })
  207. It('`between` should wrok -- all args', function* (done) {
  208. try {
  209. var result = yield r.db(dbName).table(tableName).between(5, 20, {index: 'fieldAddOne', leftBound: 'open', rightBound: 'closed'}).run();
  210. assert(result);
  211. assert.equal(result.length, 20);
  212. done();
  213. }
  214. catch(e) {
  215. done(e);
  216. }
  217. })
  218. It('`between` should throw if no argument is passed', function* (done) {
  219. try {
  220. var result = yield r.db(dbName).table(tableName).between().run();
  221. }
  222. catch(e) {
  223. assert(e instanceof r.Error.ReqlDriverError);
  224. assert(e instanceof Error);
  225. if (e.message === "`between` takes at least 2 arguments, 0 provided after:\nr.db(\""+dbName+"\").table(\""+tableName+"\")") {
  226. done();
  227. }
  228. else{
  229. done(e);
  230. }
  231. }
  232. })
  233. It('`between` should throw if non valid arg', function* (done) {
  234. try {
  235. var result = yield r.db(dbName).table(tableName).between(1, 2, {nonValidKey: true}).run();
  236. }
  237. catch(e) {
  238. assert(e instanceof r.Error.ReqlDriverError);
  239. assert(e instanceof Error);
  240. if (e.message === 'Unrecognized option `nonValidKey` in `between` after:\nr.db("'+dbName+'").table("'+tableName+'")\nAvailable options are index <string>, leftBound <string>, rightBound <string>') {
  241. done();
  242. }
  243. else{
  244. done(e);
  245. }
  246. }
  247. })
  248. It('`filter` should work -- with an object', function* (done) {
  249. try {
  250. var result = yield r.db(dbName).table(tableName).filter({field: 10}).run();
  251. assert(result);
  252. assert.equal(result.length, 20);
  253. done();
  254. }
  255. catch(e) {
  256. done(e);
  257. }
  258. })
  259. It('`filter` should work -- with an object -- looking for an undefined field', function* (done) {
  260. try {
  261. var result = yield r.db(dbName).table(tableName).filter({nonExistingField: 10}).run();
  262. assert(result);
  263. assert.equal(result.length, 0);
  264. done();
  265. }
  266. catch(e) {
  267. done(e);
  268. }
  269. })
  270. It('`filter` should work -- with an anonymous function', function* (done) {
  271. try {
  272. var result = yield r.db(dbName).table(tableName).filter(function(doc) { return doc("field").eq(10) }).run();
  273. assert(result);
  274. assert.equal(result.length, 20);
  275. done();
  276. }
  277. catch(e) {
  278. done(e);
  279. }
  280. })
  281. It('`filter` should work -- default true', function* (done) {
  282. try {
  283. var result = yield r.db(dbName).table(tableName).filter({nonExistingField: 10}, {default: true}).run();
  284. assert(result);
  285. assert.equal(result.length, 100);
  286. done();
  287. }
  288. catch(e) {
  289. done(e);
  290. }
  291. })
  292. It('`filter` should work -- default false', function* (done) {
  293. try {
  294. var result = yield r.db(dbName).table(tableName).filter({nonExistingField: 10}, {default: false}).run();
  295. assert(result);
  296. assert.equal(result.length, 0);
  297. done();
  298. }
  299. catch(e) {
  300. done(e);
  301. }
  302. })
  303. It('`filter` should work -- default false', function* (done) {
  304. try{
  305. var result = yield r.expr([{a:1}, {}]).filter(r.row("a"), {default: r.error()}).run();
  306. }
  307. catch(e) {
  308. if (e.message.match(/^No attribute `a` in object:/)) {
  309. done()
  310. }
  311. else {
  312. done(e);
  313. }
  314. }
  315. })
  316. It('`filter` should throw if no argument is passed', function* (done) {
  317. try {
  318. var result = yield r.db(dbName).table(tableName).filter().run();
  319. }
  320. catch(e) {
  321. assert(e instanceof r.Error.ReqlDriverError);
  322. assert(e instanceof Error);
  323. if (e.message === "`filter` takes at least 1 argument, 0 provided after:\nr.db(\""+dbName+"\").table(\""+tableName+"\")") {
  324. done();
  325. }
  326. else{
  327. done(e);
  328. }
  329. }
  330. })
  331. It('`filter` should throw with a non valid option', function* (done) {
  332. try {
  333. var result = yield r.db(dbName).table(tableName).filter(true, {nonValidKey: false}).run();
  334. }
  335. catch(e) {
  336. if (e.message.match(/^Unrecognized option `nonValidKey` in `filter` after:/)) {
  337. done();
  338. }
  339. else{
  340. done(e);
  341. }
  342. }
  343. })