diff --git a/src/views/projects/Browser.svelte b/src/views/projects/Browser.svelte
index 76e760112..bf4b64142 100644
--- a/src/views/projects/Browser.svelte
+++ b/src/views/projects/Browser.svelte
@@ -175,7 +175,7 @@
();
diff --git a/src/views/projects/Tree/Folder.svelte b/src/views/projects/Tree/Folder.svelte
index cade3f366..84d396ba1 100644
--- a/src/views/projects/Tree/Folder.svelte
+++ b/src/views/projects/Tree/Folder.svelte
@@ -15,7 +15,7 @@
export let peer: string | undefined;
export let prefix: string;
export let projectId: string;
- export let revision: string;
+ export let revision: string | undefined;
$: expanded = currentPath.indexOf(prefix) === 0;
$: tree = expanded
diff --git a/tests/e2e/hashRouter.spec.ts b/tests/e2e/hashRouter.spec.ts
index 1e0b19716..15c90b4e6 100644
--- a/tests/e2e/hashRouter.spec.ts
+++ b/tests/e2e/hashRouter.spec.ts
@@ -55,39 +55,67 @@ test.describe("project page navigation", () => {
});
test("navigate between tree and commit history", async ({ page }) => {
- const projectTreeURL = `/#${sourceBrowsingUrl}`;
+ const projectTreeURL = `/#${sourceBrowsingUrl}/tree/${aliceMainHead}`;
await page.goto(projectTreeURL);
+ await page
+ .getByRole("progressbar", { name: "Page loading" })
+ .waitFor({ state: "hidden" });
await expect(page).toHaveURL(projectTreeURL);
await page.getByRole("link", { name: "6 commits" }).click();
- await expect(page).toHaveURL(`/#${sourceBrowsingUrl}/history`);
+ await expect(page).toHaveURL(
+ `/#${sourceBrowsingUrl}/history/${aliceMainHead}`,
+ );
await expectBackAndForwardNavigationWorks(projectTreeURL, page);
await expectUrlPersistsReload(page);
});
- test("navigate project paths", async ({ page }) => {
+ test("navigate between tree and commit history while a file is selected", async ({
+ page,
+ }) => {
const projectTreeURL = `/#${sourceBrowsingUrl}`;
+ await page.goto(projectTreeURL);
+ await page
+ .getByRole("progressbar", { name: "Page loading" })
+ .waitFor({ state: "hidden" });
+ await expect(page).toHaveURL(projectTreeURL);
+
+ await page.getByText(".hidden").click();
+ await expect(page).toHaveURL(`${projectTreeURL}/tree/.hidden`);
+
+ await page.getByRole("link", { name: "6 commits" }).click();
+ await expect(page).toHaveURL(`${projectTreeURL}/history`);
+ });
+
+ test("navigate project paths", async ({ page }) => {
+ const projectTreeURL = `/#${sourceBrowsingUrl}/tree/${aliceMainHead}`;
+
await page.goto(projectTreeURL);
await expect(page).toHaveURL(projectTreeURL);
await page.getByText(".hidden").click();
- await expect(page).toHaveURL(`${projectTreeURL}/tree/main/.hidden`);
+ await expect(page).toHaveURL(`${projectTreeURL}/.hidden`);
await page.getByText("bin/").click();
await page.getByText("true").click();
- await expect(page).toHaveURL(`${projectTreeURL}/tree/main/bin/true`);
+ await expect(page).toHaveURL(`${projectTreeURL}/bin/true`);
await expectBackAndForwardNavigationWorks(
- `${projectTreeURL}/tree/main/.hidden`,
+ `${projectTreeURL}/.hidden`,
page,
);
await expectUrlPersistsReload(page);
});
- test("navigate project paths with a selected peer", async ({ page }) => {
+ test("navigate project paths with an explicitly selected peer", async ({
+ page,
+ }) => {
+ // If a branch isn't explicitly specified, the code assumes the project
+ // default branch is selected. We omit showing the default branch in the URL.
+
const projectTreeURL = `/#${sourceBrowsingUrl}/remotes/${aliceRemote.substring(
8,
)}`;
@@ -96,14 +124,38 @@ test.describe("project page navigation", () => {
await expect(page).toHaveURL(projectTreeURL);
await page.getByText(".hidden").click();
- await expect(page).toHaveURL(`${projectTreeURL}/tree/main/.hidden`);
+ await expect(page).toHaveURL(`${projectTreeURL}/tree/.hidden`);
await page.getByText("bin/").click();
await page.getByText("true").click();
- await expect(page).toHaveURL(`${projectTreeURL}/tree/main/bin/true`);
+ await expect(page).toHaveURL(`${projectTreeURL}/tree/bin/true`);
await expectBackAndForwardNavigationWorks(
- `${projectTreeURL}/tree/main/.hidden`,
+ `${projectTreeURL}/tree/.hidden`,
+ page,
+ );
+ await expectUrlPersistsReload(page);
+ });
+
+ test("navigate project paths with an explicitly selected peer and branch", async ({
+ page,
+ }) => {
+ const projectTreeURL = `/#${sourceBrowsingUrl}/remotes/${aliceRemote.substring(
+ 8,
+ )}/tree/main`;
+
+ await page.goto(projectTreeURL);
+ await expect(page).toHaveURL(projectTreeURL);
+
+ await page.getByText(".hidden").click();
+ await expect(page).toHaveURL(`${projectTreeURL}/.hidden`);
+
+ await page.getByText("bin/").click();
+ await page.getByText("true").click();
+ await expect(page).toHaveURL(`${projectTreeURL}/bin/true`);
+
+ await expectBackAndForwardNavigationWorks(
+ `${projectTreeURL}/.hidden`,
page,
);
await expectUrlPersistsReload(page);
diff --git a/tests/e2e/historyRouter.spec.ts b/tests/e2e/historyRouter.spec.ts
index f538a630e..cb3629bfe 100644
--- a/tests/e2e/historyRouter.spec.ts
+++ b/tests/e2e/historyRouter.spec.ts
@@ -72,6 +72,24 @@ test.describe("project page navigation", () => {
await expectUrlPersistsReload(page);
});
+ test("navigate between tree and commit history while a file is selected", async ({
+ page,
+ }) => {
+ const projectTreeURL = `${sourceBrowsingUrl}`;
+
+ await page.goto(projectTreeURL);
+ await page
+ .getByRole("progressbar", { name: "Page loading" })
+ .waitFor({ state: "hidden" });
+ await expect(page).toHaveURL(projectTreeURL);
+
+ await page.getByText(".hidden").click();
+ await expect(page).toHaveURL(`${projectTreeURL}/tree/.hidden`);
+
+ await page.getByRole("link", { name: "6 commits" }).click();
+ await expect(page).toHaveURL(`${sourceBrowsingUrl}/history`);
+ });
+
test("navigate project paths", async ({ page }) => {
const projectTreeURL = `${sourceBrowsingUrl}/tree/${aliceMainHead}`;
@@ -92,7 +110,12 @@ test.describe("project page navigation", () => {
await expectUrlPersistsReload(page);
});
- test("navigate project paths with a selected peer", async ({ page }) => {
+ test("navigate project paths with an explicitly selected peer", async ({
+ page,
+ }) => {
+ // If a branch isn't explicitly specified, the code assumes the project
+ // default branch is selected. We omit showing the default branch in the URL.
+
const projectTreeURL = `${sourceBrowsingUrl}/remotes/${aliceRemote.substring(
8,
)}`;
@@ -101,14 +124,38 @@ test.describe("project page navigation", () => {
await expect(page).toHaveURL(projectTreeURL);
await page.getByText(".hidden").click();
- await expect(page).toHaveURL(`${projectTreeURL}/tree/main/.hidden`);
+ await expect(page).toHaveURL(`${projectTreeURL}/tree/.hidden`);
await page.getByText("bin/").click();
await page.getByText("true").click();
- await expect(page).toHaveURL(`${projectTreeURL}/tree/main/bin/true`);
+ await expect(page).toHaveURL(`${projectTreeURL}/tree/bin/true`);
await expectBackAndForwardNavigationWorks(
- `${projectTreeURL}/tree/main/.hidden`,
+ `${projectTreeURL}/tree/.hidden`,
+ page,
+ );
+ await expectUrlPersistsReload(page);
+ });
+
+ test("navigate project paths with an explicitly selected peer and branch", async ({
+ page,
+ }) => {
+ const projectTreeURL = `${sourceBrowsingUrl}/remotes/${aliceRemote.substring(
+ 8,
+ )}/tree/main`;
+
+ await page.goto(projectTreeURL);
+ await expect(page).toHaveURL(projectTreeURL);
+
+ await page.getByText(".hidden").click();
+ await expect(page).toHaveURL(`${projectTreeURL}/.hidden`);
+
+ await page.getByText("bin/").click();
+ await page.getByText("true").click();
+ await expect(page).toHaveURL(`${projectTreeURL}/bin/true`);
+
+ await expectBackAndForwardNavigationWorks(
+ `${projectTreeURL}/.hidden`,
page,
);
await expectUrlPersistsReload(page);