@@ -5,6 +5,8 @@ import { setupServer } from 'msw/node'
5
5
import { Suspense } from 'react'
6
6
import { MemoryRouter , Route } from 'react-router-dom'
7
7
8
+ import { Plans } from 'shared/utils/billing'
9
+
8
10
import TokenlessBanner from './TokenlessBanner'
9
11
10
12
const mocks = vi . hoisted ( ( ) => ( {
@@ -15,6 +17,8 @@ vi.mock('shared/featureFlags', () => ({
15
17
useFlags : mocks . useFlags ,
16
18
} ) )
17
19
20
+ vi . mock ( 'services/users' )
21
+
18
22
vi . mock ( './TokenRequiredBanner' , ( ) => ( {
19
23
default : ( ) => 'TokenRequiredBanner' ,
20
24
} ) )
@@ -41,6 +45,50 @@ afterAll(() => {
41
45
server . close ( )
42
46
} )
43
47
48
+ const mockSignedInUser = {
49
+ me : {
50
+ owner : {
51
+ defaultOrgUsername : 'codecov' ,
52
+ } ,
53
+
54
+ privateAccess : true ,
55
+ onboardingCompleted : true ,
56
+ businessEmail :
'[email protected] ' ,
57
+ termsAgreement : true ,
58
+ user : {
59
+ name : 'Jane Doe' ,
60
+ username : 'janedoe' ,
61
+ avatarUrl : 'http://127.0.0.1/avatar-url' ,
62
+ avatar : 'http://127.0.0.1/avatar-url' ,
63
+ student : false ,
64
+ studentCreatedAt : null ,
65
+ studentUpdatedAt : null ,
66
+ customerIntent : 'PERSONAL' ,
67
+ } ,
68
+ trackingMetadata : {
69
+ service : 'github' ,
70
+ ownerid : 123 ,
71
+ serviceId : '123' ,
72
+ plan : Plans . USERS_BASIC ,
73
+ staff : false ,
74
+ hasYaml : false ,
75
+ bot : null ,
76
+ delinquent : null ,
77
+ didTrial : null ,
78
+ planProvider : null ,
79
+ planUserCount : 1 ,
80
+ createdAt : 'timestamp' ,
81
+ updatedAt : 'timestamp' ,
82
+ profile : {
83
+ createdAt : 'timestamp' ,
84
+ otherGoal : null ,
85
+ typeProjects : [ ] ,
86
+ goals : [ ] ,
87
+ } ,
88
+ } ,
89
+ } ,
90
+ }
91
+
44
92
const wrapper =
45
93
( initialEntries = [ '/gh/codecov' ] ) : React . FC < React . PropsWithChildren > =>
46
94
( { children } ) => (
@@ -57,9 +105,11 @@ describe('TokenlessBanner', () => {
57
105
function setup ( {
58
106
tokenlessSection = true ,
59
107
uploadTokenRequired = false ,
108
+ currentUser,
60
109
} : {
61
110
tokenlessSection ?: boolean
62
111
uploadTokenRequired ?: boolean
112
+ currentUser ?: any
63
113
} = { } ) {
64
114
mocks . useFlags . mockReturnValue ( { tokenlessSection } )
65
115
@@ -74,15 +124,16 @@ describe('TokenlessBanner', () => {
74
124
} ,
75
125
} ,
76
126
} )
127
+ } ) ,
128
+ graphql . query ( 'CurrentUser' , ( ) => {
129
+ return HttpResponse . json ( { data : currentUser } )
77
130
} )
78
131
)
79
132
}
80
133
81
134
it ( 'renders nothing when tokenlessSection flag is false' , ( ) => {
82
- setup ( { tokenlessSection : false } )
83
- const { container } = render ( < TokenlessBanner /> , {
84
- wrapper : wrapper ( [ '/gh/codecov' ] ) ,
85
- } )
135
+ setup ( { tokenlessSection : false , currentUser : mockSignedInUser } )
136
+ const { container } = render ( < TokenlessBanner /> , { wrapper : wrapper ( [ '/gh/codecov' ] ) } )
86
137
expect ( container ) . toBeEmptyDOMElement ( )
87
138
} )
88
139
@@ -95,7 +146,7 @@ describe('TokenlessBanner', () => {
95
146
} )
96
147
97
148
it ( 'renders TokenRequiredBanner when uploadTokenRequired is true' , async ( ) => {
98
- setup ( { uploadTokenRequired : true } )
149
+ setup ( { uploadTokenRequired : true , currentUser : mockSignedInUser } )
99
150
render ( < TokenlessBanner /> , { wrapper : wrapper ( [ '/gh/codecov' ] ) } )
100
151
101
152
await waitFor ( ( ) => {
@@ -105,7 +156,7 @@ describe('TokenlessBanner', () => {
105
156
} )
106
157
107
158
it ( 'renders TokenNotRequiredBanner when uploadTokenRequired is false' , async ( ) => {
108
- setup ( { uploadTokenRequired : false } )
159
+ setup ( { uploadTokenRequired : false , currentUser : mockSignedInUser } )
109
160
render ( < TokenlessBanner /> , { wrapper : wrapper ( [ '/gh/codecov' ] ) } )
110
161
111
162
await waitFor ( ( ) => {
@@ -115,7 +166,7 @@ describe('TokenlessBanner', () => {
115
166
} )
116
167
117
168
it ( 'renders nothing if coming from onboarding' , async ( ) => {
118
- setup ( { uploadTokenRequired : true } )
169
+ setup ( { uploadTokenRequired : true , currentUser : mockSignedInUser } )
119
170
render ( < TokenlessBanner /> , {
120
171
wrapper : wrapper ( [ '/gh/codecov?source=onboarding' ] ) ,
121
172
} )
@@ -128,4 +179,10 @@ describe('TokenlessBanner', () => {
128
179
) . not . toBeInTheDocument ( )
129
180
} )
130
181
} )
182
+
183
+ it ( 'renders nothing when currentUser is not provided' , ( ) => {
184
+ setup ( { uploadTokenRequired : false , currentUser : mockSignedInUser } )
185
+ const { container } = render ( < TokenlessBanner /> , { wrapper : wrapper ( ) } )
186
+ expect ( container ) . toBeEmptyDOMElement ( )
187
+ } )
131
188
} )
0 commit comments