blob: 70b9f80051d863af2d63ea8b5433aa43b875a916 [file] [log] [blame]
'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");
});
});