@@ -37,11 +37,17 @@ mock.module("next/headers", () => ({
3737 } ) ,
3838} ) ) ;
3939
40+ const hasAccessToVercelTeamSlugMock = mock ( async ( ) => false ) ;
41+
4042mock . module ( "@/lib/vercel/oauth" , ( ) => ( {
4143 exchangeVercelCode : exchangeVercelCodeMock ,
4244 getVercelUserInfo : getVercelUserInfoMock ,
4345} ) ) ;
4446
47+ mock . module ( "@/lib/vercel/projects" , ( ) => ( {
48+ hasAccessToVercelTeamSlug : hasAccessToVercelTeamSlugMock ,
49+ } ) ) ;
50+
4551mock . module ( "@/lib/db/users" , ( ) => ( {
4652 upsertUser : upsertUserMock ,
4753} ) ) ;
@@ -85,6 +91,7 @@ beforeEach(() => {
8591
8692 exchangeVercelCodeMock . mockClear ( ) ;
8793 getVercelUserInfoMock . mockClear ( ) ;
94+ hasAccessToVercelTeamSlugMock . mockClear ( ) ;
8895 upsertUserMock . mockClear ( ) ;
8996 encryptMock . mockClear ( ) ;
9097 encryptJWEMock . mockClear ( ) ;
@@ -153,6 +160,34 @@ describe("GET /api/auth/vercel/callback", () => {
153160 expect ( upsertUserMock ) . toHaveBeenCalledTimes ( 1 ) ;
154161 } ) ;
155162
163+ test ( "includes isAllowedTeamMember in the encrypted session" , async ( ) => {
164+ hasAccessToVercelTeamSlugMock . mockResolvedValueOnce ( true ) ;
165+
166+ const { GET } = await routeModulePromise ;
167+ await GET ( createRequest ( ) ) ;
168+
169+ expect ( hasAccessToVercelTeamSlugMock ) . toHaveBeenCalledWith (
170+ "access-token" ,
171+ "vercel" ,
172+ ) ;
173+ const sessionArg = (
174+ encryptJWEMock . mock . calls as unknown as [ Record < string , unknown > ] [ ]
175+ ) [ 0 ] [ 0 ] ;
176+ expect ( sessionArg . isAllowedTeamMember ) . toBe ( true ) ;
177+ } ) ;
178+
179+ test ( "sets isAllowedTeamMember to false for non-team users" , async ( ) => {
180+ hasAccessToVercelTeamSlugMock . mockResolvedValueOnce ( false ) ;
181+
182+ const { GET } = await routeModulePromise ;
183+ await GET ( createRequest ( ) ) ;
184+
185+ const sessionArg = (
186+ encryptJWEMock . mock . calls as unknown as [ Record < string , unknown > ] [ ]
187+ ) [ 0 ] [ 0 ] ;
188+ expect ( sessionArg . isAllowedTeamMember ) . toBe ( false ) ;
189+ } ) ;
190+
156191 test ( "allows non-Vercel emails on self-hosted deployments" , async ( ) => {
157192 process . env . VERCEL_GIT_REPO_OWNER = "someone-else" ;
158193 process . env . VERCEL_GIT_REPO_SLUG = "open-harness-clone" ;
0 commit comments