Fix navigating to history when a file is selected

Co-authored-by: Thomas Scholtes <geigerzaehler@axiom.fm>
Signed-off-by: Rūdolfs Ošiņš <rudolfs@osins.org>
This commit is contained in:
Rūdolfs Ošiņš
2023-07-26 14:17:18 +02:00
co-authored by Thomas Scholtes
parent b5980a12ac
commit 391f188b69
5 changed files with 116 additions and 17 deletions
+1 -1
View File
@@ -175,7 +175,7 @@
<div class="source-tree sticky">
<TreeComponent
projectId={project.id}
revision={revision ?? project.defaultBranch}
{revision}
{baseUrl}
{fetchTree}
{path}
+1 -1
View File
@@ -12,7 +12,7 @@
export let path: string;
export let peer: string | undefined;
export let projectId: string;
export let revision: string;
export let revision: string | undefined;
export let tree: Tree;
const dispatch = createEventDispatcher<{ select: string }>();
+1 -1
View File
@@ -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
+62 -10
View File
@@ -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);
+51 -4
View File
@@ -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);