mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-03-05 07:45:25 +00:00
183 lines
6.5 KiB
TypeScript
183 lines
6.5 KiB
TypeScript
import { ARMError } from "../Utils/arm/request";
|
|
import { isExpectedError } from "./ErrorClassification";
|
|
|
|
describe("ErrorClassification", () => {
|
|
describe("isExpectedError", () => {
|
|
describe("ARMError with expected codes", () => {
|
|
it("returns true for AuthorizationFailed code", () => {
|
|
const error = new ARMError("Authorization failed");
|
|
error.code = "AuthorizationFailed";
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for Forbidden code", () => {
|
|
const error = new ARMError("Forbidden");
|
|
error.code = "Forbidden";
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for Unauthorized code", () => {
|
|
const error = new ARMError("Unauthorized");
|
|
error.code = "Unauthorized";
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for InvalidAuthenticationToken code", () => {
|
|
const error = new ARMError("Invalid token");
|
|
error.code = "InvalidAuthenticationToken";
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for ExpiredAuthenticationToken code", () => {
|
|
const error = new ARMError("Token expired");
|
|
error.code = "ExpiredAuthenticationToken";
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for numeric 401 code", () => {
|
|
const error = new ARMError("Unauthorized");
|
|
error.code = 401;
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for numeric 403 code", () => {
|
|
const error = new ARMError("Forbidden");
|
|
error.code = 403;
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns false for unexpected ARM error code", () => {
|
|
const error = new ARMError("Internal error");
|
|
error.code = "InternalServerError";
|
|
expect(isExpectedError(error)).toBe(false);
|
|
});
|
|
|
|
it("returns false for numeric 500 code", () => {
|
|
const error = new ARMError("Server error");
|
|
error.code = 500;
|
|
expect(isExpectedError(error)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("MSAL AuthError with expected errorCodes", () => {
|
|
it("returns true for popup_window_error", () => {
|
|
const error = { errorCode: "popup_window_error", message: "Popup blocked" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for interaction_required", () => {
|
|
const error = { errorCode: "interaction_required", message: "User interaction required" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for user_cancelled", () => {
|
|
const error = { errorCode: "user_cancelled", message: "User cancelled" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for consent_required", () => {
|
|
const error = { errorCode: "consent_required", message: "Consent required" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for login_required", () => {
|
|
const error = { errorCode: "login_required", message: "Login required" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for no_account_error", () => {
|
|
const error = { errorCode: "no_account_error", message: "No account" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns false for unexpected MSAL error code", () => {
|
|
const error = { errorCode: "unknown_error", message: "Unknown" };
|
|
expect(isExpectedError(error)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("HTTP status codes", () => {
|
|
it("returns true for error with status 401", () => {
|
|
const error = { status: 401, message: "Unauthorized" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for error with status 403", () => {
|
|
const error = { status: 403, message: "Forbidden" };
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns false for error with status 500", () => {
|
|
const error = { status: 500, message: "Internal Server Error" };
|
|
expect(isExpectedError(error)).toBe(false);
|
|
});
|
|
|
|
it("returns false for error with status 404", () => {
|
|
const error = { status: 404, message: "Not Found" };
|
|
expect(isExpectedError(error)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("Firewall error message pattern", () => {
|
|
it("returns true for firewall error in Error message", () => {
|
|
const error = new Error("Request blocked by firewall");
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for IP not allowed error", () => {
|
|
const error = new Error("Client IP address is not allowed");
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for ip not allowed (no 'address')", () => {
|
|
const error = new Error("Your ip not allowed to access this resource");
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns true for string error with firewall", () => {
|
|
expect(isExpectedError("firewall rules prevent access")).toBe(true);
|
|
});
|
|
|
|
it("returns true for case-insensitive firewall match", () => {
|
|
const error = new Error("FIREWALL blocked request");
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
|
|
it("returns false for unrelated error message", () => {
|
|
const error = new Error("Database connection failed");
|
|
expect(isExpectedError(error)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("Edge cases", () => {
|
|
it("returns false for null", () => {
|
|
expect(isExpectedError(null)).toBe(false);
|
|
});
|
|
|
|
it("returns false for undefined", () => {
|
|
expect(isExpectedError(undefined)).toBe(false);
|
|
});
|
|
|
|
it("returns false for empty object", () => {
|
|
expect(isExpectedError({})).toBe(false);
|
|
});
|
|
|
|
it("returns false for plain Error without expected patterns", () => {
|
|
const error = new Error("Something went wrong");
|
|
expect(isExpectedError(error)).toBe(false);
|
|
});
|
|
|
|
it("returns false for string without firewall pattern", () => {
|
|
expect(isExpectedError("Generic error occurred")).toBe(false);
|
|
});
|
|
|
|
it("handles error with multiple matching criteria", () => {
|
|
// ARMError with both code and firewall message
|
|
const error = new ARMError("Request blocked by firewall");
|
|
error.code = "Forbidden";
|
|
expect(isExpectedError(error)).toBe(true);
|
|
});
|
|
});
|
|
});
|
|
});
|