Skip to content

Commit f7c59cf

Browse files
authored
adjust secret link for personal orgs (#3927)
1 parent f1d0a86 commit f7c59cf

File tree

4 files changed

+91
-12
lines changed

4 files changed

+91
-12
lines changed

src/pages/RepoPage/CoverageOnboarding/GitHubActions/GitHubActions.test.tsx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { MemoryRouter, Route } from 'react-router-dom'
88

99
import { eventTracker } from 'services/events/events'
1010
import { ThemeContextProvider } from 'shared/ThemeContext'
11+
import { Plans } from 'shared/utils/billing'
1112

1213
import GitHubActions from './GitHubActions'
1314

@@ -74,6 +75,49 @@ const mockRegenerateOrgUploadToken = {
7475
},
7576
}
7677

78+
const mockCurrentUser = {
79+
me: {
80+
owner: {
81+
defaultOrgUsername: 'codecov',
82+
},
83+
84+
privateAccess: true,
85+
onboardingCompleted: true,
86+
businessEmail: '[email protected]',
87+
termsAgreement: true,
88+
user: {
89+
name: 'Jane Doe',
90+
username: 'janedoe',
91+
avatarUrl: 'http://127.0.0.1/avatar-url',
92+
avatar: 'http://127.0.0.1/avatar-url',
93+
student: false,
94+
studentCreatedAt: null,
95+
studentUpdatedAt: null,
96+
},
97+
trackingMetadata: {
98+
service: 'github',
99+
ownerid: 123,
100+
serviceId: '123',
101+
plan: Plans.USERS_DEVELOPER,
102+
staff: false,
103+
hasYaml: false,
104+
bot: null,
105+
delinquent: null,
106+
didTrial: null,
107+
planProvider: null,
108+
planUserCount: 1,
109+
createdAt: 'timestamp',
110+
updatedAt: 'timestamp',
111+
profile: {
112+
createdAt: 'timestamp',
113+
otherGoal: null,
114+
typeProjects: [],
115+
goals: [],
116+
},
117+
},
118+
},
119+
}
120+
77121
const queryClient = new QueryClient({
78122
defaultOptions: {
79123
queries: {
@@ -134,6 +178,9 @@ describe('GitHubActions', () => {
134178
graphql.query('DetailOwner', () => {
135179
return HttpResponse.json({ data: mockDetailOwner })
136180
}),
181+
graphql.query('CurrentUser', () => {
182+
return HttpResponse.json({ data: mockCurrentUser })
183+
}),
137184
graphql.mutation('regenerateOrgUploadToken', () => {
138185
return HttpResponse.json({ data: mockRegenerateOrgUploadToken })
139186
})

src/pages/RepoPage/CoverageOnboarding/GitHubActions/GitHubActions.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { useRef, useState } from 'react'
1+
import { useEffect, useRef, useState } from 'react'
22
import { useParams } from 'react-router-dom'
33

44
import { useOrgUploadToken } from 'services/orgUploadToken/useOrgUploadToken'
55
import { useRepo } from 'services/repo'
66
import { useUploadTokenRequired } from 'services/uploadTokenRequired'
7+
import { useUser } from 'services/user'
78
import { Provider } from 'shared/api/helpers'
89
import A from 'ui/A'
910
import { Card } from 'ui/Card'
@@ -31,8 +32,17 @@ function GitHubActions() {
3132
provider,
3233
owner,
3334
})
35+
const { data: currentUser } = useUser()
36+
const isCurrentUser = currentUser?.user.username === owner
3437

3538
const [isUsingGlobalToken, setIsUsingGlobalToken] = useState<boolean>(true)
39+
40+
// Update token selection based on user ownership when currentUser data loads
41+
useEffect(() => {
42+
if (currentUser) {
43+
setIsUsingGlobalToken(!isCurrentUser)
44+
}
45+
}, [currentUser, isCurrentUser])
3646
const { data: repoData } = useRepo({ provider, owner, repo })
3747
const repoUploadToken = repoData?.repository?.uploadToken ?? ''
3848
const previouslyGeneratedOrgToken = useRef<string | null | undefined>()
@@ -79,6 +89,7 @@ function GitHubActions() {
7989
showAddTokenStep={showAddTokenStep}
8090
showTokenSelector={showTokenSelector}
8191
framework={framework}
92+
isCurrentUser={isCurrentUser}
8293
/>
8394
<WorkflowYMLStep
8495
framework={framework}

src/pages/RepoPage/CoverageOnboarding/GitHubActions/TokenStep.test.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ describe('TokenStepSection', () => {
114114
isUsingGlobalToken={false}
115115
setIsUsingGlobalToken={vi.fn()}
116116
framework="Jest"
117+
isCurrentUser={false}
117118
/>,
118119
{
119120
wrapper: wrapper(),
@@ -134,6 +135,7 @@ describe('TokenStepSection', () => {
134135
isUsingGlobalToken={true}
135136
setIsUsingGlobalToken={vi.fn()}
136137
framework="Jest"
138+
isCurrentUser={true}
137139
/>,
138140
{
139141
wrapper: wrapper(),
@@ -153,6 +155,7 @@ describe('TokenStepSection', () => {
153155
isUsingGlobalToken={false}
154156
setIsUsingGlobalToken={vi.fn()}
155157
framework="Jest"
158+
isCurrentUser={true}
156159
/>,
157160
{
158161
wrapper: wrapper(),
@@ -172,6 +175,7 @@ describe('TokenStepSection', () => {
172175
isUsingGlobalToken={false}
173176
setIsUsingGlobalToken={vi.fn()}
174177
framework="Jest"
178+
isCurrentUser={true}
175179
/>,
176180
{
177181
wrapper: wrapper(),
@@ -190,6 +194,7 @@ describe('TokenStepSection', () => {
190194
isUsingGlobalToken={true}
191195
setIsUsingGlobalToken={vi.fn()}
192196
framework="Jest"
197+
isCurrentUser={false}
193198
/>,
194199
{
195200
wrapper: wrapper(),
@@ -211,6 +216,7 @@ describe('TokenStepSection', () => {
211216
isUsingGlobalToken={false}
212217
setIsUsingGlobalToken={vi.fn()}
213218
framework="Jest"
219+
isCurrentUser={true}
214220
/>,
215221
{
216222
wrapper: wrapper(),
@@ -236,6 +242,7 @@ describe('TokenStepSection', () => {
236242
isUsingGlobalToken={true}
237243
setIsUsingGlobalToken={vi.fn()}
238244
framework="Jest"
245+
isCurrentUser={false}
239246
/>,
240247
{
241248
wrapper: wrapper(),
@@ -255,6 +262,7 @@ describe('TokenStepSection', () => {
255262
isUsingGlobalToken={true}
256263
setIsUsingGlobalToken={vi.fn()}
257264
framework="Jest"
265+
isCurrentUser={true}
258266
/>,
259267
{
260268
wrapper: wrapper(),
@@ -278,6 +286,7 @@ describe('TokenStepSection', () => {
278286
isUsingGlobalToken={true}
279287
setIsUsingGlobalToken={vi.fn()}
280288
framework="Jest"
289+
isCurrentUser={true}
281290
/>,
282291
{
283292
wrapper: wrapper(),
@@ -299,6 +308,7 @@ describe('TokenStepSection', () => {
299308
isUsingGlobalToken={true}
300309
setIsUsingGlobalToken={vi.fn()}
301310
framework="Jest"
311+
isCurrentUser={true}
302312
/>,
303313
{
304314
wrapper: wrapper(),
@@ -319,6 +329,7 @@ describe('TokenStepSection', () => {
319329
isUsingGlobalToken={true}
320330
setIsUsingGlobalToken={vi.fn()}
321331
framework="Jest"
332+
isCurrentUser={true}
322333
/>,
323334
{
324335
wrapper: wrapper(),
@@ -341,6 +352,7 @@ describe('TokenStepSection', () => {
341352
isUsingGlobalToken={false}
342353
setIsUsingGlobalToken={vi.fn()}
343354
framework="Jest"
355+
isCurrentUser={true}
344356
/>,
345357
{
346358
wrapper: wrapper(),
@@ -364,6 +376,7 @@ describe('TokenStepSection', () => {
364376
isUsingGlobalToken={true}
365377
setIsUsingGlobalToken={vi.fn()}
366378
framework="Jest"
379+
isCurrentUser={true}
367380
/>,
368381
{
369382
wrapper: wrapper(),
@@ -385,6 +398,7 @@ describe('TokenStepSection', () => {
385398
isUsingGlobalToken={false}
386399
setIsUsingGlobalToken={vi.fn()}
387400
framework="Jest"
401+
isCurrentUser={true}
388402
/>,
389403
{
390404
wrapper: wrapper(),

src/pages/RepoPage/CoverageOnboarding/GitHubActions/TokenStep.tsx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,14 @@ interface OrgOrRepoTokenSelectorProps {
113113
isUsingGlobalToken: boolean
114114
handleValueChange: (value: string) => void
115115
hasOrgUploadToken: boolean
116+
isCurrentUser: boolean
116117
}
117118

118119
function OrgOrRepoTokenSelector({
119120
isUsingGlobalToken,
120121
handleValueChange,
121122
hasOrgUploadToken,
123+
isCurrentUser,
122124
}: OrgOrRepoTokenSelectorProps) {
123125
const { owner, repo } = useParams<URLParams>()
124126
const isAdmin = useIsCurrentUserAnAdmin({ owner })
@@ -131,16 +133,18 @@ function OrgOrRepoTokenSelector({
131133
name="token-selection"
132134
onValueChange={handleValueChange}
133135
>
134-
<RadioTileGroup.Item
135-
value={TOKEN_OPTIONS.GLOBAL}
136-
data-testid="global-token-radio"
137-
>
138-
<RadioTileGroup.Label>Global upload token</RadioTileGroup.Label>
139-
<RadioTileGroup.Description>
140-
Use it for uploading coverage reports across all your
141-
organization&apos;s repositories.
142-
</RadioTileGroup.Description>
143-
</RadioTileGroup.Item>
136+
{!isCurrentUser && (
137+
<RadioTileGroup.Item
138+
value={TOKEN_OPTIONS.GLOBAL}
139+
data-testid="global-token-radio"
140+
>
141+
<RadioTileGroup.Label>Global upload token</RadioTileGroup.Label>
142+
<RadioTileGroup.Description>
143+
Use it for uploading coverage reports across all your
144+
organization&apos;s repositories.
145+
</RadioTileGroup.Description>
146+
</RadioTileGroup.Item>
147+
)}
144148
<RadioTileGroup.Item
145149
value={TOKEN_OPTIONS.REPO}
146150
data-testid="repo-token-radio"
@@ -151,7 +155,7 @@ function OrgOrRepoTokenSelector({
151155
</RadioTileGroup.Description>
152156
</RadioTileGroup.Item>
153157
</RadioTileGroup>
154-
{isUsingGlobalToken && !hasOrgUploadToken && (
158+
{isUsingGlobalToken && !hasOrgUploadToken && !isCurrentUser && (
155159
<>
156160
<div className="flex items-center justify-between pb-3.5 pt-7">
157161
<p className="font-semibold">Generate a global upload token</p>
@@ -237,6 +241,7 @@ interface TokenStepSectionProps {
237241
showAddTokenStep: boolean
238242
showTokenSelector: boolean
239243
framework: Framework
244+
isCurrentUser: boolean
240245
}
241246

242247
function TokenStepSection({
@@ -245,6 +250,7 @@ function TokenStepSection({
245250
showAddTokenStep,
246251
showTokenSelector,
247252
framework,
253+
isCurrentUser,
248254
}: TokenStepSectionProps) {
249255
const { provider, owner } = useParams<URLParams>()
250256
const { data: uploadTokenRequiredData } = useUploadTokenRequired({
@@ -280,6 +286,7 @@ function TokenStepSection({
280286
isUsingGlobalToken={isUsingGlobalToken}
281287
handleValueChange={handleValueChange}
282288
hasOrgUploadToken={!!orgUploadToken}
289+
isCurrentUser={isCurrentUser}
283290
/>
284291
</Card.Content>
285292
</Card>

0 commit comments

Comments
 (0)