| 'use strict'; |
| |
| var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage'); |
| var generateErrorFromResponse = PouchDB.utils.generateErrorFromResponse; |
| |
| require('chai').should(); |
| |
| // |
| // TODO: a lot of these errors are kind of misleading, or the error |
| // message gets stripped out during processing. We should fix that. |
| // However, these tests represent the state of the code circa 5.3.2, just |
| // so we can have a record of the expected behavior. |
| // |
| |
| describe('test.errors.js', function () { |
| |
| // these were generated by the main test suite |
| |
| it('test generateErrorFromResponse() #1', function () { |
| var response = {"error": "not_found", "reason": "missing"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal("missing"); |
| }); |
| |
| it('test generateErrorFromResponse() #2', function () { |
| var response = {"error": "not_found", "reason": "no_db_file"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal("no_db_file"); |
| }); |
| |
| it('test generateErrorFromResponse() #3', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "`keys` is incompatible with `key`, `start_key` and `end_key`" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal("`keys` is incompatible with `key`, `start_key` and `end_key`"); |
| }); |
| |
| it('test generateErrorFromResponse() #4', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "`keys` must be an array of strings." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal("`keys` must be an array of strings."); |
| }); |
| |
| it('test generateErrorFromResponse() #5', function () { |
| var response = {"missing": "2-fake"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unknown"); |
| }); |
| |
| it('test generateErrorFromResponse() #6', function () { |
| var response = { |
| "error": "missing_stub", |
| "reason": "id:bin_doc, name:bar.txt" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("missing_stub"); |
| }); |
| |
| it('test generateErrorFromResponse() #7', function () { |
| var response = { |
| "error": "missing_stub", |
| "reason": "id:stubby, name:foo.txt" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("missing_stub"); |
| }); |
| |
| it('test generateErrorFromResponse() #8', function () { |
| var response = { |
| "error": "bad_request", |
| "reason": "Only reserved document ids may start with underscore." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("bad_request"); |
| err.message.should.equal("Only reserved document ids may start with " + |
| "underscore."); |
| }); |
| |
| it('test generateErrorFromResponse() #9', function () { |
| var response = {"error": "conflict", "reason": "Document update conflict."}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(409); |
| err.name.should.equal("conflict"); |
| err.message.should.equal("Document update conflict."); |
| }); |
| |
| it('test generateErrorFromResponse() #10', function () { |
| var response = {"error": "bad_request", "reason": "Invalid rev format"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("bad_request"); |
| err.message.should.equal("Invalid rev format"); |
| }); |
| |
| it('test generateErrorFromResponse() #11', function () { |
| var response = {"error": "badarg", "reason": "33"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("badarg"); |
| err.message.should.equal("33"); |
| }); |
| |
| it('test generateErrorFromResponse() #12', function () { |
| var response = { |
| "error": "bad_request", |
| "reason": "Referer header required." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("bad_request"); |
| err.message.should.equal("Referer header required."); |
| }); |
| |
| it('test generateErrorFromResponse() #13', function () { |
| var response = {"status": 400}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(400); |
| err.name.should.equal("unknown"); |
| }); |
| |
| it('test generateErrorFromResponse() #14', function () { |
| var response = { |
| "id": "77c03c2755ae08600a0ff58aebc513fe", |
| "error": "conflict", |
| "reason": "Document update conflict." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(409); |
| err.name.should.equal("conflict"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("77c03c2755ae08600a0ff58aebc513fe"); |
| }); |
| |
| it('test generateErrorFromResponse() #15', function () { |
| var response = {"error": "not_found", "reason": "deleted"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() #16', function () { |
| var response = { |
| "error": "doc_validation", |
| "reason": "Bad special document member: _zing" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("doc_validation"); |
| err.message.should.equal("Bad special document member: _zing"); |
| }); |
| |
| it('test generateErrorFromResponse() #23', function () { |
| var response = { |
| "error": "bad_request", |
| "reason": "Document id must be a string" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("bad_request"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() #26', function () { |
| var response = { |
| "id": "doc1", |
| "rev": "1-x", |
| "error": "unauthorized", |
| "reason": "Document must have a foo." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unauthorized"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("doc1"); |
| }); |
| |
| it('test generateErrorFromResponse() #27', function () { |
| var response = { |
| "error": "file_exists", |
| "reason": "The database could not be created, the file already exists." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("file_exists"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() #29', function () { |
| var response = {"error": "not_found", "reason": "missing json key: odd"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() #30', function () { |
| var response = { |
| "error": "not_found", |
| "reason": "missing json key: filters" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() #31', function () { |
| var response = {"error": "not_found", "reason": "missing json key: views"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() #32', function () { |
| var response = { |
| "error": "bad_request", |
| "reason": "`view` filter parameter is not provided." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("bad_request"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() #33', function () { |
| var response = { |
| "status": 404, |
| "name": "not_found", |
| "message": "missing", |
| "error": true, |
| "reason": "missing" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(404); |
| err.name.should.equal("not_found"); |
| err.message.should.equal("missing"); |
| err.error.should.equal(true); |
| }); |
| |
| it('test generateErrorFromResponse() #77', function () { |
| var response = {"error": "unknown_error", "reason": "function_clause"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unknown_error"); |
| }); |
| |
| it('test generateErrorFromResponse() #78', function () { |
| var response = "<!doctype html><html>YO THIS IS AN ERROR</html>"; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| }); |
| |
| it('test generateErrorFromResponse() #81', function () { |
| var response = { |
| "id": "0596A614-2001-05B6-93C3-6B3B6504CD05", |
| "rev": "1-8156ee4ba7898510bfaf868668a81e4f", |
| "error": "forbidden", |
| "reason": "Document must have a foo." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("forbidden"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("0596A614-2001-05B6-93C3-6B3B6504CD05"); |
| }); |
| |
| it('test generateErrorFromResponse() #87', function () { |
| var response = { |
| "id": "45E4D1A4-B01D-6898-B8FF-035B2C76AB6B", |
| "rev": "1-a531a7aa3fb56bdae69f7ce4113486c4", |
| "error": "forbidden", |
| "reason": {"foo": "is object"} |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("forbidden"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("45E4D1A4-B01D-6898-B8FF-035B2C76AB6B"); |
| }); |
| |
| it('test generateErrorFromResponse() #88', function () { |
| var response = { |
| "id": "5F99EF37-DABA-DACB-A58E-4C6D76511985", |
| "rev": "1-17702a69add79ff7d9006d43b9262ec2", |
| "error": "forbidden", |
| "reason": "Document foo is string" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("forbidden"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("5F99EF37-DABA-DACB-A58E-4C6D76511985"); |
| }); |
| |
| it('test generateErrorFromResponse() #89', function () { |
| var response = { |
| "id": "1A3F4028-2E5D-B12F-80BB-ED5234BF6E02", |
| "rev": "1-d89df54b4ec86054c05025137143b5e8", |
| "error": "unauthorized", |
| "reason": {"foo": "is object"} |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unauthorized"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("1A3F4028-2E5D-B12F-80BB-ED5234BF6E02"); |
| }); |
| |
| it('test generateErrorFromResponse() #90', function () { |
| var response = { |
| "id": "36824FB1-C1E6-76EE-BF7E-4D3614A36736", |
| "rev": "1-3b1c04d44d17dbfef815433693dc26d4", |
| "error": "unauthorized", |
| "reason": "Document foo is string" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unauthorized"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("36824FB1-C1E6-76EE-BF7E-4D3614A36736"); |
| }); |
| |
| it('test generateErrorFromResponse() #91', function () { |
| var response = { |
| "id": "6DA30042-600E-2581-8BD8-8A92F79CE53E", |
| "rev": "1-6a36583f7500873176466ffc1e2c8b41", |
| "error": "unauthorized", |
| "reason": "go away, no picture" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unauthorized"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("6DA30042-600E-2581-8BD8-8A92F79CE53E"); |
| }); |
| |
| it('test generateErrorFromResponse() #93', function () { |
| var response = { |
| "id": "foo1", |
| "rev": "1-ba250664825530e39299e870460f77d6", |
| "error": "unauthorized", |
| "reason": "go away, no picture" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unauthorized"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("foo1"); |
| }); |
| |
| it('test generateErrorFromResponse() #96', function () { |
| var response = { |
| "id": "77c03c2755ae08600a0ff58aebcaef19", |
| "rev": "1-967a00dff5e02add41819138abb3284d", |
| "error": "forbidden", |
| "reason": "Document must have a foo." |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("forbidden"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("77c03c2755ae08600a0ff58aebcaef19"); |
| }); |
| |
| it('test generateErrorFromResponse() #102', function () { |
| var response = { |
| "id": "77c03c2755ae08600a0ff58aebcb650f", |
| "rev": "1-e13a955ef7781be762def6793e1e789d", |
| "error": "forbidden", |
| "reason": "Document foo is string" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("forbidden"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("77c03c2755ae08600a0ff58aebcb650f"); |
| }); |
| |
| it('test generateErrorFromResponse() #103', function () { |
| var response = { |
| "id": "77c03c2755ae08600a0ff58aebcb7be6", |
| "rev": "1-eb291f6f3b68b37993b33ed7e5c68ebc", |
| "error": "forbidden", |
| "reason": {"foo": "is object"} |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("forbidden"); |
| err.message.should.equal(response.reason); |
| err.id.should.equal("77c03c2755ae08600a0ff58aebcb7be6"); |
| }); |
| |
| // these were generated from the map/reduce test suite |
| |
| it('test generateErrorFromResponse() via map/reduce #1', function () { |
| var response = {"error": "not_found", "reason": "missing"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal("missing"); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #2', function () { |
| var response = {"error": "not_found", "reason": "no_db_file"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #3', function () { |
| var response = { |
| "error": "invalid_value", |
| "reason": "builtin _sum function requires map values to be numbers or " + |
| "lists of numbers" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("invalid_value"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #4', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "Invalid value for positive integer: \"-1\"" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal("Invalid value for positive integer: \"-1\""); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #5', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "Invalid value for integer: \"exact\"" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal("Invalid value for integer: \"exact\""); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #6', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "Invalid value for integer: \"1a\"" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal("Invalid value for integer: \"1a\""); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #7', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "No rows can match your key range, reverse your start_key " + |
| "and end_key or set descending=true" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #8', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "`include_docs` is invalid for reduce" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #9', function () { |
| var response = { |
| "error": "query_parse_error", |
| "reason": "Multi-key fetchs for reduce views must use `group=true`" |
| }; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("query_parse_error"); |
| err.message.should.equal(response.reason); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #10', function () { |
| var response = {"error": "not_found", "reason": "missing_named_view"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal("missing_named_view"); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #11', function () { |
| var response = {"error": "not_found", "reason": "deleted"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("not_found"); |
| err.message.should.equal("deleted"); |
| }); |
| |
| it('test generateErrorFromResponse() via map/reduce #12', function () { |
| var response = {"error": "unknown_error", "reason": "function_clause"}; |
| var err = generateErrorFromResponse(response); |
| err.status.should.equal(500); |
| err.name.should.equal("unknown_error"); |
| err.message.should.equal("function_clause"); |
| }); |
| |
| |
| }); |