@@ -3,9 +3,13 @@ import { ALLOWED_ORIGINS, isAllowedOrigin } from "@/utils/corsOrigins.js";
33
44describe ( "isAllowedOrigin" , ( ) => {
55 const originalNodeEnv = process . env . NODE_ENV ;
6+ const originalClientUrl = process . env . CLIENT_URL ;
7+ const originalCheckoutBaseUrl = process . env . CHECKOUT_BASE_URL ;
68
79 afterEach ( ( ) => {
810 process . env . NODE_ENV = originalNodeEnv ;
11+ process . env . CLIENT_URL = originalClientUrl ;
12+ process . env . CHECKOUT_BASE_URL = originalCheckoutBaseUrl ;
913 } ) ;
1014
1115 describe ( "production" , ( ) => {
@@ -63,4 +67,55 @@ describe("isAllowedOrigin", () => {
6367 expect ( isAllowedOrigin ( "http://localhost:3000?x=1" ) ) . toBeUndefined ( ) ;
6468 } ) ;
6569 } ) ;
70+
71+ describe ( "self-hosted env URLs" , ( ) => {
72+ test ( "allows CLIENT_URL in production" , ( ) => {
73+ process . env . NODE_ENV = "production" ;
74+ process . env . CLIENT_URL =
75+ "https://autumn-dashboard-production.up.railway.app" ;
76+ expect (
77+ isAllowedOrigin ( "https://autumn-dashboard-production.up.railway.app" ) ,
78+ ) . toBe ( "https://autumn-dashboard-production.up.railway.app" ) ;
79+ } ) ;
80+
81+ test ( "allows CHECKOUT_BASE_URL in production" , ( ) => {
82+ process . env . NODE_ENV = "production" ;
83+ process . env . CHECKOUT_BASE_URL =
84+ "https://autumn-checkout-production.up.railway.app" ;
85+ expect (
86+ isAllowedOrigin ( "https://autumn-checkout-production.up.railway.app" ) ,
87+ ) . toBe ( "https://autumn-checkout-production.up.railway.app" ) ;
88+ } ) ;
89+
90+ test ( "allows both CLIENT_URL and CHECKOUT_BASE_URL simultaneously" , ( ) => {
91+ process . env . NODE_ENV = "production" ;
92+ process . env . CLIENT_URL = "https://dashboard.mycompany.com" ;
93+ process . env . CHECKOUT_BASE_URL = "https://checkout.mycompany.com" ;
94+ expect ( isAllowedOrigin ( "https://dashboard.mycompany.com" ) ) . toBe (
95+ "https://dashboard.mycompany.com" ,
96+ ) ;
97+ expect ( isAllowedOrigin ( "https://checkout.mycompany.com" ) ) . toBe (
98+ "https://checkout.mycompany.com" ,
99+ ) ;
100+ } ) ;
101+
102+ test ( "still rejects unrelated origins when env URLs are set" , ( ) => {
103+ process . env . NODE_ENV = "production" ;
104+ process . env . CLIENT_URL = "https://dashboard.mycompany.com" ;
105+ process . env . CHECKOUT_BASE_URL = "https://checkout.mycompany.com" ;
106+ expect ( isAllowedOrigin ( "https://evil.com" ) ) . toBeUndefined ( ) ;
107+ expect (
108+ isAllowedOrigin ( "https://not-autumn.up.railway.app" ) ,
109+ ) . toBeUndefined ( ) ;
110+ } ) ;
111+
112+ test ( "rejects custom domains when env URLs are unset" , ( ) => {
113+ process . env . NODE_ENV = "production" ;
114+ delete process . env . CLIENT_URL ;
115+ delete process . env . CHECKOUT_BASE_URL ;
116+ expect (
117+ isAllowedOrigin ( "https://autumn-dashboard-production.up.railway.app" ) ,
118+ ) . toBeUndefined ( ) ;
119+ } ) ;
120+ } ) ;
66121} ) ;
0 commit comments