Files
radicle-explorer/cypress/e2e/projectCommits.spec.ts
T
Rūdolfs Ošiņš 591c19a256 Refactor typography styles
- Move all global typography styles to its own file. This makes it
  easier to find all the typography related definitions for newcomers.

- Prefix all typography related global CSS classes with a unique prefix
  `.txt-`. This allows us to grep the codebase and see exactly where
  they are applied. Another benefit of this convention is that it helps
  to avoid accidentally mixing global and local styles. Having global
  CSS classes that sometimes overlap with component CSS classes makes it
  very hard to reason about the resulting visuals and making changes
  unpredictable.

- Introduce CSS variables for standardised typography sizes and apply
  them to the whole codebase consistently. This way we can adjust the
  size in one place and it will be applied everywhere.

- Avoid using predefined HTML tags which might have differing styling
  from browser to browser, e.g. `<h1>`, `<strong>`. We should stick to
  applying styling either by adding a specific global CSS class or using
  the predefined CSS variables, this way we can be sure that the styles
  won't be overridden by browser defaults.

- Have a minimal set of modifiers `.txt-monospace` and `.txt-bold` and
  apply them consistently. Since `.txt-monospace` is defined via a CSS
  variable, we'll be able to switch out fonts via a user setting in the
  future.

Signed-off-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2022-09-09 14:50:26 +02:00

174 lines
5.6 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-unused-vars */
/// <reference types="cypress" />
import { MockProvider } from "@rsksmart/mock-web3-provider";
const groupedCommits = [
{
groupDate: "Thursday, March 3, 2022",
commits: [
{
header: {
sha: "9cd3532",
summary: "Second commit",
description: "",
committer: {
name: "dabit3",
mail: "dabit3@gmail.com",
},
committerTime: "06:51 GMT+1",
},
},
],
},
{
groupDate: "Wednesday, March 2, 2022",
commits: [
{
header: {
sha: "e045b92",
summary: "Update README",
description: "",
committer: {
name: "dabit3",
mail: "dabit3@gmail.com",
},
committerTime: "17:14 GMT+1",
},
},
{
header: {
sha: "cbf5df4",
summary: "initial commit",
description: "this is the first commit of many",
committer: {
name: "dabit3",
mail: "dabit3@gmail.com",
},
committerTime: "16:58 GMT+1",
},
},
],
},
];
describe("project commits", () => {
beforeEach(() => {
cy.intercept("/", {
fixture: "projectHome.json",
}).as("seedHome");
cy.intercept("v1/peer", {
fixture: "projectPeer.json",
}).as("seedPeer");
cy.intercept("v1/projects/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy", {
fixture: "projectInfo.json",
}).as("seedInfo");
cy.intercept(
"v1/projects/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy/remotes",
{ fixture: "projectRemotes.json" },
).as("seedRemotes");
cy.intercept(
"v1/projects/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy/tree/56e4e029c294b08546386e1fb706b772c7433c49/",
{ fixture: "projectTree56e4e02.json" },
).as("seedTree56e4e02");
cy.intercept(
"v1/projects/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy/tree/cbf5df499ab4f4a908f1756fbe2c236a4530516a/",
{ fixture: "projectTreecbf5df4.json" },
).as("seedTreecbf5df4");
cy.intercept(
"v1/projects/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy/commits?parent=56e4e029c294b08546386e1fb706b772c7433c49&verified=true",
{ fixture: "projectCommits.json" },
).as("seedCommits");
cy.intercept(
"v1/projects/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy/commits/cbf5df499ab4f4a908f1756fbe2c236a4530516a",
{ fixture: "projectCommit.json" },
).as("seedCommit");
});
it("display commit groups and commit trailers", () => {
cy.visit(
"/seeds/willow.radicle.garden/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy/history",
{
onBeforeLoad(win) {
const address = "0xB98bD7C7f656290071E52D1aA617D9cB4467Fd6D";
const privateKey =
"de926db3012af759b4f24b5a51ef6afa397f04670f634aa4f48d4480417007f3";
win.ethereum = new MockProvider({
address,
privateKey,
networkVersion: 1,
});
},
},
);
cy.wait([
"@seedHome",
"@seedPeer",
"@seedInfo",
"@seedRemotes",
"@seedTree56e4e02",
"@seedCommits",
]);
// This iterates over the commit groups and then over each commit.
cy.get(".commit-group")
.should("have.length", 2)
.each((item, index) => {
expect(Cypress.$(item.children(".commit-date")).text()).to.eq(
groupedCommits[index].groupDate,
);
const $el = Cypress.$(item.find(".commit-teaser"));
cy.wrap($el).each((commit, commitIndex) => {
expect(Cypress.$(commit).find(".hash").text()).to.eq(
groupedCommits[index].commits[commitIndex].header.sha,
);
expect(Cypress.$(commit).find(".summary").text()).to.eq(
groupedCommits[index].commits[commitIndex].header.summary,
);
expect(Cypress.$(commit).find(".committer").first().text()).to.eq(
groupedCommits[index].commits[commitIndex].header.committer.name,
);
});
});
cy.get(".commit-teaser .badge").trigger("mouseenter");
// Checking that the initial commit has the Verified badge
cy.get(".popup .header").should(
"have.text",
"✔ This commit was signed\n with the committer's radicle key.",
);
cy.get(".popup .peer").should(
"contain.text",
"hyyg555wwkkutaysg6yr67qnu5d5ji54iur3n5uzzszndh8dp7ofue",
);
cy.get(".popup .committer").should("contain.text", "dabit3");
cy.get(".commit").last().click();
});
it("display commit details", () => {
cy.location().should(location => {
expect(location.pathname).to.eq(
"/seeds/willow.radicle.garden/rad:git:hnrk8mbpirp7ua7sy66o4t9soasbq4y8uwgoy/commits/cbf5df499ab4f4a908f1756fbe2c236a4530516a",
);
});
cy.get("header .summary .txt-medium").should("have.text", "initial commit");
cy.get(".commit pre.description").should(
"have.text",
"this is the first commit of many",
);
cy.get("header .committer").should("have.text", "dabit3");
cy.get("div.changeset-summary").should(
"have.text",
"1 file(s) changed, 1 file(s) created, 1 file(s) deleted\n with\n 0 addition(s)\n and\n 0 deletion(s)",
);
cy.get("header.file-header:nth-child(1) p")
.first()
.should("have.text", "test.md")
.next()
.should("have.text", "created");
cy.get("tr.diff-line td.diff-line-number").contains("16");
cy.get("tr.diff-line td.diff-line-content").contains(
"To prevent front-running, the RAD/USDC balances are set through the Uniswap router *proxy* contract",
);
});
});