Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/admin/src/lib/api/auth.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ vi.mock("axios", () => ({
vi.mock("@/lib/auth/environment", () => ({
getApiBaseUrlForEnvironment: (environment: string) =>
environment === "dev" ? "https://api.stage.solid-connection.com" : "https://api.solid-connection.com",
resolveEnvironmentFromEmail: (email: string) => (email.endsWith("@dev.solid-connection.com") ? "dev" : "prod"),
resolveEnvironmentFromEmail: (email: string) => (email === "dev@solid-connection.com" ? "dev" : "prod"),
}));

vi.mock("@/lib/env", () => ({
Expand Down Expand Up @@ -64,13 +64,13 @@ describe("어드민 인증 API", () => {
it("어드민 전용 로그인 API를 이메일 환경에 맞춰 호출한다", async () => {
post.mockResolvedValue({ data: { accessToken: "access-token" } });

await adminSignInApi("admin@dev.solid-connection.com", "password");
await adminSignInApi("dev@solid-connection.com", "password");

expect(removeAccessToken).toHaveBeenCalledOnce();
expect(saveAdminApiEnvironment).toHaveBeenCalledWith("dev");
expect(post).toHaveBeenCalledWith(
"/admin/auth/sign-in",
{ email: "admin@dev.solid-connection.com", password: "password" },
{ email: "dev@solid-connection.com", password: "password" },
{ baseURL: "https://api.stage.solid-connection.com" },
);
});
Expand Down
14 changes: 7 additions & 7 deletions apps/admin/src/lib/auth/environment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@ import { describe, expect, it } from "vitest";
import { getApiBaseUrlForEnvironment, resolveEnvironmentFromEmail } from "./environment";

describe("resolveEnvironmentFromEmail", () => {
it("dev 도메인 이메일은 dev 환경으로 판별한다", () => {
expect(resolveEnvironmentFromEmail("admin@dev.solid-connection.com")).toBe("dev");
it("dev 계정 이메일(dev@solid-connection.com)은 dev 환경으로 판별한다", () => {
expect(resolveEnvironmentFromEmail("dev@solid-connection.com")).toBe("dev");
});

it("대소문자와 앞뒤 공백을 무시하고 판별한다", () => {
expect(resolveEnvironmentFromEmail(" Admin@Dev.Solid-Connection.Com ")).toBe("dev");
expect(resolveEnvironmentFromEmail(" Dev@Solid-Connection.Com ")).toBe("dev");
});

it("dev 도메인이 아닌 이메일은 prod 환경으로 판별한다", () => {
it("dev 계정 이메일이 아닌 이메일은 prod 환경으로 판별한다", () => {
expect(resolveEnvironmentFromEmail("admin@solid-connection.com")).toBe("prod");
});

it("dev 도메인을 부분 문자열로만 포함하는 이메일은 prod로 판별한다", () => {
expect(resolveEnvironmentFromEmail("admin@notdev.solid-connection.com")).toBe("prod");
expect(resolveEnvironmentFromEmail("admin@dev.solid-connection.com.evil.com")).toBe("prod");
it("로컬파트가 dev로 시작하지만 정확히 일치하지 않는 이메일은 prod로 판별한다", () => {
expect(resolveEnvironmentFromEmail("dev2@solid-connection.com")).toBe("prod");
expect(resolveEnvironmentFromEmail("dev@notsolid-connection.com")).toBe("prod");
});
});

Expand Down
4 changes: 2 additions & 2 deletions apps/admin/src/lib/auth/environment.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export type AdminApiEnvironment = "dev" | "prod";

const DEV_EMAIL_DOMAIN = "dev.solid-connection.com";
const DEV_ACCOUNT_EMAIL = "dev@solid-connection.com";

const API_BASE_URLS: Record<AdminApiEnvironment, string> = {
dev: "https://api.stage.solid-connection.com",
Expand All @@ -9,7 +9,7 @@ const API_BASE_URLS: Record<AdminApiEnvironment, string> = {

export const resolveEnvironmentFromEmail = (email: string): AdminApiEnvironment => {
const normalizedEmail = email.trim().toLowerCase();
return normalizedEmail.endsWith(`@${DEV_EMAIL_DOMAIN}`) ? "dev" : "prod";
return normalizedEmail === DEV_ACCOUNT_EMAIL ? "dev" : "prod";
};

export const getApiBaseUrlForEnvironment = (environment: AdminApiEnvironment): string => API_BASE_URLS[environment];
Loading