From 29d340961b9df7ad6fd11fead1ff804e4cd28c7b Mon Sep 17 00:00:00 2001 From: Sebastian Martinez Date: Mon, 3 Jun 2024 20:31:50 +0200 Subject: [PATCH] Add a new e2e test case for commit messages with double colons --- tests/e2e/project.spec.ts | 32 ++++++++--- tests/e2e/project/commit.spec.ts | 5 +- tests/e2e/project/commits.spec.ts | 56 ++++++++++++++++--- tests/e2e/router.ts | 10 +++- tests/fixtures/repos/source-browsing.tar.bz2 | Bin 12420 -> 14874 bytes tests/support/fixtures.ts | 9 ++- 6 files changed, 93 insertions(+), 19 deletions(-) diff --git a/tests/e2e/project.spec.ts b/tests/e2e/project.spec.ts index a08f713f9..5f0616dc2 100644 --- a/tests/e2e/project.spec.ts +++ b/tests/e2e/project.spec.ts @@ -1,8 +1,12 @@ import { + aliceMainCommitCount, + aliceMainCommitMessage, aliceMainHead, + bobMainCommitCount, cobUrl, expect, markdownUrl, + shortAliceHead, shortBobHead, sourceBrowsingRid, sourceBrowsingUrl, @@ -30,11 +34,15 @@ test("navigate to project", async ({ page }) => { { await expect(page.getByTitle("Change branch")).toBeVisible(); await expect( - page.getByRole("button", { name: "4a9f278 Add submodule" }).first(), + page + .getByRole("button", { + name: `${shortAliceHead} ${aliceMainCommitMessage}`, + }) + .first(), ).toBeVisible(); await expect( page.getByRole("link", { - name: "Commits 7", + name: `Commits ${aliceMainCommitCount}`, }), ).toBeVisible(); } @@ -54,7 +62,9 @@ test("navigate to project", async ({ page }) => { test("show source tree at specific revision", async ({ page }) => { await page.goto(sourceBrowsingUrl); - await page.getByRole("link", { name: "Commits 7" }).click(); + await page + .getByRole("link", { name: `Commits ${aliceMainCommitCount}` }) + .click(); await page .locator(".teaser", { hasText: "335dd6d" }) @@ -290,11 +300,15 @@ test("peer and branch switching", async ({ page }) => { { await expect(page.getByTitle("Change branch")).toHaveText("main"); await expect( - page.getByRole("button", { name: "4a9f278 Add submodule" }).first(), + page + .getByRole("button", { + name: `${shortAliceHead} ${aliceMainCommitMessage}`, + }) + .first(), ).toBeVisible(); await expect( page.getByRole("link", { - name: "Commits 7", + name: `Commits ${aliceMainCommitCount}`, }), ).toBeVisible(); } @@ -347,7 +361,11 @@ test("peer and branch switching", async ({ page }) => { await expect(page.getByTitle("Change branch")).toBeVisible(); await expect( - page.getByRole("button", { name: "4a9f278 Add submodule" }).first(), + page + .getByRole("button", { + name: `${shortAliceHead} ${aliceMainCommitMessage}`, + }) + .first(), ).toBeVisible(); await expect(page.getByText("Git test repository")).toBeVisible(); } @@ -369,7 +387,7 @@ test("peer and branch switching", async ({ page }) => { ).toBeVisible(); await expect( page.getByRole("link", { - name: "Commits 8", + name: `Commits ${bobMainCommitCount}`, }), ).toBeVisible(); await expect( diff --git a/tests/e2e/project/commit.spec.ts b/tests/e2e/project/commit.spec.ts index f6a47a079..6ce4ffbba 100644 --- a/tests/e2e/project/commit.spec.ts +++ b/tests/e2e/project/commit.spec.ts @@ -1,6 +1,7 @@ import { aliceRemote, bobHead, + bobMainCommitCount, expect, shortBobHead, sourceBrowsingUrl, @@ -14,7 +15,9 @@ test("navigation from commit list", async ({ page }) => { await page.goto(sourceBrowsingUrl); await page.getByTitle("Change peer").click(); await page.getByRole("link", { name: "bob" }).click(); - await page.getByRole("link", { name: "Commits 8" }).click(); + await page + .getByRole("link", { name: `Commits ${bobMainCommitCount}` }) + .click(); await page.getByText("Update readme").first().click(); await expect(page).toHaveURL(commitUrl); diff --git a/tests/e2e/project/commits.spec.ts b/tests/e2e/project/commits.spec.ts index de99b5e21..8be16ce30 100644 --- a/tests/e2e/project/commits.spec.ts +++ b/tests/e2e/project/commits.spec.ts @@ -1,5 +1,8 @@ import { + aliceMainCommitCount, + aliceMainCommitMessage, aliceMainHead, + bobMainCommitCount, expect, gitOptions, shortBobHead, @@ -11,7 +14,9 @@ import sinon from "sinon"; test("peer and branch switching", async ({ page }) => { await page.goto(sourceBrowsingUrl); - await page.getByRole("link", { name: "Commits 7" }).click(); + await page + .getByRole("link", { name: `Commits ${aliceMainCommitCount}` }) + .click(); // Alice's peer. { @@ -25,10 +30,12 @@ test("peer and branch switching", async ({ page }) => { await expect(page.getByTitle("Change peer")).toHaveText("alice Delegate"); await expect(page.getByText("Thursday, November 17, 2022")).toBeVisible(); - await expect(page.locator(".list .teaser")).toHaveCount(7); + await expect(page.locator(".list .teaser")).toHaveCount( + aliceMainCommitCount, + ); const latestCommit = page.locator(".teaser").first(); - await expect(latestCommit).toContainText("Add submodule"); + await expect(latestCommit).toContainText(aliceMainCommitMessage); await expect(latestCommit).toContainText(aliceMainHead.substring(0, 7)); const earliestCommit = page.locator(".teaser").last(); @@ -44,7 +51,7 @@ test("peer and branch switching", async ({ page }) => { page.getByRole("button", { name: "feature/branch" }), ).toBeVisible(); await expect(page.getByText("Thursday, November 17, 2022")).toBeVisible(); - await expect(page.locator(".list .teaser")).toHaveCount(9); + await expect(page.locator(".list .teaser")).toHaveCount(bobMainCommitCount); await page.getByTitle("Change branch").click(); await page.getByText("orphaned-branch").click(); @@ -85,14 +92,47 @@ test("peer and branch switching", async ({ page }) => { } }); +test("commit messages with double colon not converted into single colon", async ({ + page, +}) => { + const commitMessage = "Verify that crate::DoubleColon::should_work()"; + const shortCommit = "7babd25"; + await page.goto(sourceBrowsingUrl); + await page + .getByRole("link", { name: `Commits ${aliceMainCommitCount}` }) + .click(); + + await expect( + page.getByRole("button", { + name: `${shortCommit} ${commitMessage}`, + }), + ).toBeVisible(); + await expect( + page.getByRole("link", { + name: commitMessage, + exact: true, + }), + ).toBeVisible(); + + await page + .getByRole("link", { + name: commitMessage, + exact: true, + }) + .click(); + await expect(page.getByText(commitMessage, { exact: true })).toBeVisible(); +}); + test("expand commit message", async ({ page }) => { await page.goto(sourceBrowsingUrl); - await page.getByRole("link", { name: "Commits 7" }).click(); + await page + .getByRole("link", { name: `Commits ${aliceMainCommitCount}` }) + .click(); const commitToggle = page.getByRole("button", { name: "expand" }).first(); await commitToggle.click(); const expandedCommit = page.getByText( - "Signed-off-by: Alice Liddell ", + "This shouldn't replace double colons with simple colons", ); await expect(expandedCommit).toBeVisible(); @@ -111,7 +151,9 @@ test("relative timestamps", async ({ page }) => { }); await page.goto(sourceBrowsingUrl); - await page.getByRole("link", { name: "Commits 7" }).click(); + await page + .getByRole("link", { name: `Commits ${aliceMainCommitCount}` }) + .click(); await page.getByTitle("Change peer").click(); await page.getByRole("link", { name: "bob" }).click(); diff --git a/tests/e2e/router.ts b/tests/e2e/router.ts index c0f99f961..dd5c32986 100644 --- a/tests/e2e/router.ts +++ b/tests/e2e/router.ts @@ -1,4 +1,5 @@ import { + aliceMainCommitCount, aliceMainHead, aliceRemote, expect, @@ -63,7 +64,10 @@ test.describe("project page navigation", () => { .waitFor({ state: "hidden" }); await expect(page).toHaveURL(projectTreeURL); - await page.getByRole("link", { name: "Commits 7" }).click(); + await page + .getByRole("link", { name: `Commits ${aliceMainCommitCount}` }) + .click(); + await expect(page).toHaveURL( `${sourceBrowsingUrl}/history/${aliceMainHead}`, ); @@ -86,7 +90,9 @@ test.describe("project page navigation", () => { await page.getByText(".hidden").click(); await expect(page).toHaveURL(`${projectTreeURL}/tree/.hidden`); - await page.getByRole("link", { name: "Commits 7" }).click(); + await page + .getByRole("link", { name: `Commits ${aliceMainCommitCount}` }) + .click(); await expect(page).toHaveURL(`${sourceBrowsingUrl}/history`); }); diff --git a/tests/fixtures/repos/source-browsing.tar.bz2 b/tests/fixtures/repos/source-browsing.tar.bz2 index 5e6eea3f36d5370c26e9357d28a029350ef59f11..c9d89827a05b89fd997c2353d55c5c8eb77f0e31 100644 GIT binary patch literal 14874 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%0D!G^ahCbu*gJ2{LO!Aw0~iIf9g18 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