Skip to content

Commit

Permalink
fix: renterd dialogs, bucket policy, delete
Browse files Browse the repository at this point in the history
  • Loading branch information
alexfreska committed Jun 11, 2024
1 parent 64da64b commit 16e89c5
Show file tree
Hide file tree
Showing 17 changed files with 132 additions and 29 deletions.
5 changes: 5 additions & 0 deletions .changeset/lovely-teachers-move.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'renterd': patch
---

Fixed an issue where selecting a bucket context menu option would also navigate into the bucket. Closes https://github.com/SiaFoundation/renterd/issues/1277
5 changes: 5 additions & 0 deletions .changeset/tender-pants-decide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'renterd': patch
---

Fixed an issue that broke some dialogs including the bucket policy and bucket delete dialogs. Closes https://github.com/SiaFoundation/renterd/issues/1277
2 changes: 1 addition & 1 deletion apps/hostd-e2e/src/fixtures/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ export async function login({ page }: { page: Page }) {
process.env.HOSTD_E2E_TEST_API_PASSWORD
)
await page.locator('input[name=password]').press('Enter')
await expect(page.locator('#navbar').getByText('Overview')).toBeVisible()
await expect(page.getByTestId('navbar').getByText('Overview')).toBeVisible()
}
4 changes: 3 additions & 1 deletion apps/hostd-e2e/src/fixtures/navigateToConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,7 @@ import { Page, expect } from '@playwright/test'

export async function navigateToConfig({ page }: { page: Page }) {
await page.getByLabel('Configuration').click()
await expect(page.locator('#navbar').getByText('Configuration')).toBeVisible()
await expect(
page.getByTestId('navbar').getByText('Configuration')
).toBeVisible()
}
2 changes: 1 addition & 1 deletion apps/hostd-e2e/src/fixtures/navigateToDashboard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ import { Page, expect } from '@playwright/test'

export async function navigateToDashboard({ page }: { page: Page }) {
await page.getByLabel('Overview').click()
await expect(page.locator('#navbar').getByText('Overview')).toBeVisible()
await expect(page.getByTestId('navbar').getByText('Overview')).toBeVisible()
}
2 changes: 1 addition & 1 deletion apps/hostd-e2e/src/specs/login.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ import { login } from '../fixtures/login'

test('login', async ({ page }) => {
await login({ page })
await expect(page.locator('#navbar').getByText('Overview')).toBeVisible()
await expect(page.getByTestId('navbar').getByText('Overview')).toBeVisible()
})
43 changes: 43 additions & 0 deletions apps/renterd-e2e/src/fixtures/buckets.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { Page, expect } from '@playwright/test'
import { navigateToBuckets } from './navigateToBuckets'
import { fillTextInputByName } from './textInput'
import { clearToasts } from './clearToasts'

export async function createBucket(page: Page, name: string) {
await navigateToBuckets({ page })
await expect(page.getByTestId('navbar').getByText('Buckets')).toBeVisible()

await page.getByText('Create bucket').click()
await fillTextInputByName(page, 'name', name)
await page.locator('input[name=name]').press('Enter')
await expect(page.getByRole('dialog')).toBeHidden()
await expect(page.getByText('Bucket created')).toBeVisible()
await clearToasts({ page })
await expect(page.getByRole('cell', { name })).toBeVisible()
}

export async function deleteBucket(page: Page, name: string) {
// Open bucket context menu.
await page.getByRole('row', { name }).getByRole('button').first().click()

// Open delete bucket dialog.
await page.getByRole('menuitem', { name: 'Delete bucket' }).click()

// Assert bucket name is correct.
await fillTextInputByName(page, 'name', name)
await page.locator('input[name=name]').press('Enter')
await expect(page.getByRole('dialog')).toBeHidden()

// Assert bucket is deleted.
await expect(page.getByRole('table').getByText(name)).toBeHidden()
}

export async function deleteBucketIfExists(page: Page, name: string) {
const doesBucketExist = await page
.getByRole('table')
.getByText(name)
.isVisible()
if (doesBucketExist) {
await deleteBucket(page, name)
}
}
2 changes: 1 addition & 1 deletion apps/renterd-e2e/src/fixtures/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ export async function login({ page }: { page: Page }) {
process.env.RENTERD_E2E_TEST_API_PASSWORD
)
await page.locator('input[name=password]').press('Enter')
await expect(page.locator('#navbar').getByText('Buckets')).toBeVisible()
await expect(page.getByTestId('navbar').getByText('Buckets')).toBeVisible()
}
2 changes: 1 addition & 1 deletion apps/renterd-e2e/src/fixtures/navigateToBuckets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ import { Page, expect } from '@playwright/test'

export async function navigateToBuckets({ page }: { page: Page }) {
await page.getByLabel('Files').click()
await expect(page.locator('#navbar').getByText('Buckets')).toBeVisible()
await expect(page.getByTestId('navbar').getByText('Buckets')).toBeVisible()
}
4 changes: 3 additions & 1 deletion apps/renterd-e2e/src/fixtures/navigateToConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,7 @@ import { Page, expect } from '@playwright/test'

export async function navigateToConfig({ page }: { page: Page }) {
await page.getByLabel('Configuration').click()
await expect(page.locator('#navbar').getByText('Configuration')).toBeVisible()
await expect(
page.getByTestId('navbar').getByText('Configuration')
).toBeVisible()
}
40 changes: 40 additions & 0 deletions apps/renterd-e2e/src/specs/buckets.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { test, expect } from '@playwright/test'
import { navigateToBuckets } from '../fixtures/navigateToBuckets'
import { login } from '../fixtures/login'
import {
createBucket,
deleteBucket,
deleteBucketIfExists,
} from '../fixtures/buckets'

test('can change a buckets policy', async ({ page }) => {
await login({ page })
await navigateToBuckets({ page })

// Open default bucket context menu.
await page
.getByRole('row', { name: 'default' })
.getByRole('button')
.first()
.click()

// Open change policy dialog.
await page.getByRole('menuitem', { name: 'Change policy' }).click()

// Assert bucket name is correct.
// await page.getByRole('heading', { name: 'Change Policy: default' }).click();
await page.getByRole('heading', { name: 'Change Policy: default' }).click()
await page.getByRole('combobox').selectOption('public')
await page.getByRole('button', { name: 'Update policy' }).click()
await expect(page.getByText('Bucket policy has been updated')).toBeVisible()

// Assert still viewing buckets list.
await expect(page.getByRole('table').getByText('default')).toBeVisible()
})

test('can create and delete a bucket', async ({ page }) => {
await login({ page })
await deleteBucketIfExists(page, 'my-new-bucket')
await createBucket(page, 'my-new-bucket')
await deleteBucket(page, 'my-new-bucket')
})
2 changes: 1 addition & 1 deletion apps/renterd-e2e/src/specs/login.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ import { login } from '../fixtures/login'

test('login', async ({ page }) => {
await login({ page })
await expect(page.locator('#navbar').getByText('Buckets')).toBeVisible()
await expect(page.getByTestId('navbar').getByText('Buckets')).toBeVisible()
})
7 changes: 6 additions & 1 deletion apps/renterd/components/Files/BucketContextMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ export function BucketContextMenu({ name }: Props) {
<BucketIcon size={16} />
</Button>
}
contentProps={{ align: 'start' }}
contentProps={{
align: 'start',
onClick: (e) => {
e.stopPropagation()
},
}}
>
<DropdownMenuLabel>Actions</DropdownMenuLabel>
<DropdownMenuItem
Expand Down
7 changes: 4 additions & 3 deletions apps/renterd/contexts/config/useAutopilotEvaluations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,20 @@ export function useAutopilotEvaluations({
form,
resources,
isAutopilotEnabled,
configViewMode,
estimatedSpendingPerMonth,
}: {
form: UseFormReturn<SettingsData>
resources: Resources
isAutopilotEnabled: boolean
configViewMode: ConfigViewMode
estimatedSpendingPerMonth: BigNumber
}) {
const values = form.watch()
const renterdState = useBusState()

const hasDataToEvaluate = useMemo(() => {
if (!isAutopilotEnabled) {
return false
}
if (!checkIfAllResourcesLoaded(resources)) {
return false
}
Expand All @@ -46,7 +47,7 @@ export function useAutopilotEvaluations({
return false
}
return true
}, [form.formState.isValid, resources, renterdState.data])
}, [isAutopilotEnabled, form.formState.isValid, resources, renterdState.data])

// We need to pass valid settings data into transformUp to get the payloads.
// The form can be invalid or have empty fields depending on the mode, so we
Expand Down
30 changes: 15 additions & 15 deletions apps/renterd/contexts/dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export function Dialogs() {
address={wallet.data?.address}
isValidating={wallet.isValidating}
open={dialog === 'addressDetails'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<RenterdTransactionDetailsDialog />
<SyncerConnectPeerDialog
Expand All @@ -159,60 +159,60 @@ export function Dialogs() {
payload: address,
})
}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<FilesBucketCreateDialog
open={dialog === 'filesCreateBucket'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<FilesBucketDeleteDialog
open={dialog === 'filesDeleteBucket'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<FilesBucketPolicyDialog
open={dialog === 'filesBucketPolicy'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<FilesCreateDirectoryDialog
open={dialog === 'filesCreateDirectory'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<FilesSearchDialog
open={dialog === 'filesSearch'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<FileRenameDialog
id={id}
open={dialog === 'fileRename'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<HostsAllowBlockDialog
open={dialog === 'hostsManageAllowBlock'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<HostsFilterAddressDialog
open={dialog === 'hostsFilterAddress'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<HostsFilterPublicKeyDialog
open={dialog === 'hostsFilterPublicKey'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<ContractsFilterAddressDialog
open={dialog === 'contractsFilterAddress'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<ContractsFilterContractSetDialog
open={dialog === 'contractsFilterContractSet'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<ContractsFilterPublicKeyDialog
open={dialog === 'contractsFilterPublicKey'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<KeysCreateDialog
open={dialog === 'keysCreate'}
onOpenChange={(val) => (val ? openDialog(dialog) : closeDialog())}
onOpenChange={onOpenChange}
/>
<ConfirmDialog
open={dialog === 'confirm'}
Expand Down
2 changes: 1 addition & 1 deletion apps/walletd-e2e/src/fixtures/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ export async function login({ page }: { page: Page }) {
process.env.WALLETD_E2E_TEST_API_PASSWORD
)
await page.locator('input[name=password]').press('Enter')
await expect(page.locator('#navbar').getByText('Wallets')).toBeVisible()
await expect(page.getByTestId('navbar').getByText('Wallets')).toBeVisible()
}
2 changes: 1 addition & 1 deletion libs/design-system/src/app/AppNavbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export function AppNavbar({ title, nav, stats, actions, after }: Props) {
return (
<>
<div
id="navbar"
data-testid="navbar"
className="flex items-center gap-2 px-6 h-14 z-10 bg-white dark:bg-graydark-50 border-b border-gray-500 dark:border-graydark-500"
>
{title ? (
Expand Down

0 comments on commit 16e89c5

Please sign in to comment.