auth fix
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import { AxiosError } from "axios";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { SessionManager } from "../src/auth/SessionManager";
|
||||
import { SapB1Config } from "../src/config";
|
||||
import { SapB1Error } from "../src/errors/SapB1Error";
|
||||
|
||||
const config: SapB1Config = {
|
||||
baseUrl: "https://sap.example.local:50000",
|
||||
@@ -65,6 +67,38 @@ describe("SessionManager", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("surfaces the SAP status, code and message when SAP rejects the login", async () => {
|
||||
const rejection = new AxiosError("Request failed with status code 401", "ERR_BAD_REQUEST");
|
||||
rejection.response = {
|
||||
status: 401,
|
||||
statusText: "Unauthorized",
|
||||
headers: {},
|
||||
config: {} as never,
|
||||
data: { error: { code: "301", message: { value: "Invalid company database" } } }
|
||||
};
|
||||
const http = { post: vi.fn().mockRejectedValue(rejection) };
|
||||
|
||||
const sessionManager = new SessionManager(http as never, config);
|
||||
const error = await sessionManager.getSession().catch((e) => e);
|
||||
|
||||
expect(error).toBeInstanceOf(SapB1Error);
|
||||
expect(error.status).toBe(401);
|
||||
expect(error.code).toBe("301");
|
||||
expect(error.message).toBe("Invalid company database");
|
||||
});
|
||||
|
||||
it("keeps the generic login message for a transport error with no HTTP response", async () => {
|
||||
const transportError = new AxiosError("connect ECONNREFUSED 10.0.0.1:50000", "ECONNREFUSED");
|
||||
const http = { post: vi.fn().mockRejectedValue(transportError) };
|
||||
|
||||
const sessionManager = new SessionManager(http as never, config);
|
||||
const error = await sessionManager.getSession().catch((e) => e);
|
||||
|
||||
expect(error).toBeInstanceOf(SapB1Error);
|
||||
expect(error.status).toBeUndefined();
|
||||
expect(error.message).toBe("connect ECONNREFUSED 10.0.0.1:50000");
|
||||
});
|
||||
|
||||
it("logs out and clears the current session", async () => {
|
||||
const http = {
|
||||
post: vi
|
||||
|
||||
Reference in New Issue
Block a user