diff --git a/cypress/e2e/main.cy.ts b/cypress/e2e/main.cy.ts
new file mode 100644
index 000000000..42c92e978
--- /dev/null
+++ b/cypress/e2e/main.cy.ts
@@ -0,0 +1,102 @@
+import { OAuthToken } from "../../static/scripts/onboarding/github-login-button";
+
+describe("Homepage tests", () => {
+ const ORG_NAME = "Ubiquity";
+ let loginToken: OAuthToken;
+
+ beforeEach(() => {
+ cy.fixture("get-user.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/users/${ORG_NAME}`, (req) => {
+ req.reply(file);
+ }).as("githubGetUser");
+ });
+ cy.fixture("get-ubiquibot-config.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/repos/${ORG_NAME}/ubiquibot-config`, (req) => {
+ req.reply(file);
+ }).as("githubGetUbiquibotConfig");
+ });
+ cy.fixture("get-repos.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/orgs/${ORG_NAME}/repos`, (req) => {
+ req.reply(file);
+ }).as("githubGetRepos");
+ });
+ cy.fixture("get-installations.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/orgs/${ORG_NAME}/installations**`, (req) => {
+ req.reply(file);
+ }).as("githubGetInstallations");
+ });
+ cy.fixture("get-installation-repositories.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/user/installations/47252474/repositories`, (req) => {
+ req.reply(file);
+ }).as("githubGetInstallationRepositories");
+ });
+ cy.fixture("put-file.json").then((file) => {
+ cy.intercept("PUT", `https://api.github.com/user/installations/47252474/repositories/641336624`, (req) => {
+ req.reply(file);
+ }).as("githubPutInstallation");
+ });
+ cy.fixture("put-file.json").then((file) => {
+ cy.intercept("PUT", `https://api.github.com/repos/${ORG_NAME}/ubiquibot-config/contents/.github%2Fubiquibot-config.yml`, (req) => {
+ req.reply(file);
+ }).as("githubPutConfigFile");
+ });
+ cy.fixture("get-orgs.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/user/orgs**`, (req) => {
+ req.reply(file);
+ }).as("githubGetUserOrgs");
+ });
+ cy.fixture("get-org-installations.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/orgs/${ORG_NAME.toLowerCase()}/installations**`, (req) => {
+ req.reply(file);
+ }).as("githubGetOrgInstallations");
+ });
+ cy.fixture("get-search.json").then((file) => {
+ cy.intercept("GET", `https://api.github.com/search/repositories**`, (req) => {
+ req.reply(file);
+ }).as("githubSearch");
+ });
+ cy.fixture("put-config.json").then((file) => {
+ cy.intercept("PUT", `https://api.github.com/repos/${ORG_NAME.toLowerCase()}/ubiquibot-config/contents/.github**`, (req) => {
+ req.reply(file);
+ }).as("githubPutContents");
+ });
+ cy.fixture("user-token.json").then((content) => {
+ loginToken = content;
+ });
+ });
+
+ it("Console is cleared of errors and warnings", () => {
+ cy.visit("/", {
+ onBeforeLoad(win) {
+ cy.stub(win.console, "error").as("consoleError");
+ },
+ });
+ cy.get("@consoleError").should("not.be.called");
+ cy.get("body").should("exist");
+ });
+
+ it.only("Create onboarding repository", () => {
+ cy.visit("/");
+ cy.intercept("https://github.com/login/oauth/authorize**", (req) => {
+ req.reply({
+ statusCode: 200,
+ });
+ // Simulate login token
+ // cspell:ignore wfzpewmlyiozupulbuur
+ window.localStorage.setItem("sb-wfzpewmlyiozupulbuur-auth-token", JSON.stringify(loginToken));
+ }).as("githubLogin");
+ cy.get("#github-login-button").click();
+ cy.visit("/");
+ cy.wait("@githubGetUserOrgs");
+ cy.get("#setBtn").click();
+ cy.log("Display warning on empty WALLET_PRIVATE_KEY");
+ cy.get(":nth-child(3) > .status-log.warn").contains(/.+/);
+ cy.get("#orgName").select("ubiquity");
+ cy.get("#setBtn").click();
+ cy.get("#outKey").then((e) => {
+ expect(e.val()).not.to.be.empty;
+ });
+ cy.log("Expected to be a step 2 of the form");
+ cy.get("#stepper > :nth-child(2)").should("have.class", "active");
+ });
+});
diff --git a/cypress/fixtures/get-installation-repositories.json b/cypress/fixtures/get-installation-repositories.json
new file mode 100644
index 000000000..fea6b4e02
--- /dev/null
+++ b/cypress/fixtures/get-installation-repositories.json
@@ -0,0 +1,114 @@
+{
+ "total_count": 1,
+ "repositories": [
+ {
+ "id": 767829567,
+ "node_id": "R_kgDOLcQmPw",
+ "name": "ubiquibot-config",
+ "full_name": "Ubiquity/ubiquibot-config",
+ "private": true,
+ "owner": {
+ "login": "Ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Ubiquity",
+ "html_url": "https://github.com/Ubiquity",
+ "followers_url": "https://api.github.com/users/Ubiquity/followers",
+ "following_url": "https://api.github.com/users/Ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/Ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/Ubiquity/repos",
+ "events_url": "https://api.github.com/users/Ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "html_url": "https://github.com/Ubiquity/ubiquibot-config",
+ "description": null,
+ "fork": false,
+ "url": "https://api.github.com/repos/Ubiquity/ubiquibot-config",
+ "forks_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/forks",
+ "keys_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/teams",
+ "hooks_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/hooks",
+ "issue_events_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/events",
+ "assignees_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/tags",
+ "blobs_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/languages",
+ "stargazers_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/stargazers",
+ "contributors_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/contributors",
+ "subscribers_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/subscribers",
+ "subscription_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/subscription",
+ "commits_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/merges",
+ "archive_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/downloads",
+ "issues_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/labels{/name}",
+ "releases_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/deployments",
+ "created_at": "2024-03-06T01:00:06Z",
+ "updated_at": "2024-03-06T01:00:07Z",
+ "pushed_at": "2024-03-06T01:00:07Z",
+ "git_url": "git://github.com/Ubiquity/ubiquibot-config.git",
+ "ssh_url": "git@github.com:Ubiquity/ubiquibot-config.git",
+ "clone_url": "https://github.com/Ubiquity/ubiquibot-config.git",
+ "svn_url": "https://github.com/Ubiquity/ubiquibot-config",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_projects": true,
+ "has_downloads": true,
+ "has_wiki": false,
+ "has_pages": false,
+ "has_discussions": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "archived": false,
+ "disabled": false,
+ "open_issues_count": 0,
+ "license": null,
+ "allow_forking": false,
+ "is_template": false,
+ "web_commit_signoff_required": false,
+ "topics": [
+
+ ],
+ "visibility": "private",
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "main",
+ "permissions": {
+ "admin": true,
+ "maintain": true,
+ "push": true,
+ "triage": true,
+ "pull": true
+ }
+ }
+ ]
+}
diff --git a/cypress/fixtures/get-installations.json b/cypress/fixtures/get-installations.json
new file mode 100644
index 000000000..e0170d15f
--- /dev/null
+++ b/cypress/fixtures/get-installations.json
@@ -0,0 +1,130 @@
+{
+ "total_count": 2,
+ "installations": [
+ {
+ "id": 47252474,
+ "account": {
+ "login": "Ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Ubiquity",
+ "html_url": "https://github.com/Ubiquity",
+ "followers_url": "https://api.github.com/users/Ubiquity/followers",
+ "following_url": "https://api.github.com/users/Ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/Ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/Ubiquity/repos",
+ "events_url": "https://api.github.com/users/Ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "repository_selection": "all",
+ "access_tokens_url": "https://api.github.com/app/installations/47252474/access_tokens",
+ "repositories_url": "https://api.github.com/installation/repositories",
+ "html_url": "https://github.com/organizations/Ubiquity/settings/installations/47252474",
+ "app_id": 236521,
+ "app_slug": "ubiquibot",
+ "target_id": 159901852,
+ "target_type": "Organization",
+ "permissions": {
+ "issues": "write",
+ "actions": "write",
+ "members": "read",
+ "contents": "write",
+ "metadata": "read",
+ "pull_requests": "write"
+ },
+ "events": [
+ "commit_comment",
+ "create",
+ "delete",
+ "fork",
+ "gollum",
+ "issues",
+ "issue_comment",
+ "label",
+ "member",
+ "membership",
+ "merge_queue_entry",
+ "milestone",
+ "organization",
+ "public",
+ "pull_request",
+ "pull_request_review",
+ "pull_request_review_comment",
+ "pull_request_review_thread",
+ "push",
+ "release",
+ "repository",
+ "repository_dispatch",
+ "star",
+ "team",
+ "team_add",
+ "watch",
+ "workflow_dispatch",
+ "workflow_job",
+ "workflow_run"
+ ],
+ "created_at": "2024-02-13T19:37:30.000+09:00",
+ "updated_at": "2024-02-13T19:37:31.000+09:00",
+ "single_file_name": null,
+ "has_multiple_single_files": false,
+ "single_file_paths": [
+
+ ],
+ "suspended_by": null,
+ "suspended_at": null
+ },
+ {
+ "id": 47255717,
+ "account": {
+ "login": "Ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Ubiquity",
+ "html_url": "https://github.com/Ubiquity",
+ "followers_url": "https://api.github.com/users/Ubiquity/followers",
+ "following_url": "https://api.github.com/users/Ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/Ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/Ubiquity/repos",
+ "events_url": "https://api.github.com/users/Ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "repository_selection": "selected",
+ "access_tokens_url": "https://api.github.com/app/installations/47255717/access_tokens",
+ "repositories_url": "https://api.github.com/installation/repositories",
+ "html_url": "https://github.com/organizations/Ubiquity/settings/installations/47255717",
+ "app_id": 827286,
+ "app_slug": "ubi",
+ "target_id": 159901852,
+ "target_type": "Organization",
+ "permissions": {
+
+ },
+ "events": [
+
+ ],
+ "created_at": "2024-02-13T21:12:10.000+09:00",
+ "updated_at": "2024-02-13T21:12:10.000+09:00",
+ "single_file_name": null,
+ "has_multiple_single_files": false,
+ "single_file_paths": [
+
+ ],
+ "suspended_by": null,
+ "suspended_at": null
+ }
+ ]
+}
diff --git a/cypress/fixtures/get-org-installations.json b/cypress/fixtures/get-org-installations.json
new file mode 100644
index 000000000..69afcbe5b
--- /dev/null
+++ b/cypress/fixtures/get-org-installations.json
@@ -0,0 +1,84 @@
+{
+ "total_count": 1,
+ "installations": [
+ {
+ "id": 47252474,
+ "account": {
+ "login": "ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/ubiquity",
+ "html_url": "https://github.com/ubiquity",
+ "followers_url": "https://api.github.com/users/ubiquity/followers",
+ "following_url": "https://api.github.com/users/ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/ubiquity/repos",
+ "events_url": "https://api.github.com/users/ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "repository_selection": "selected",
+ "access_tokens_url": "https://api.github.com/app/installations/47252474/access_tokens",
+ "repositories_url": "https://api.github.com/installation/repositories",
+ "html_url": "https://github.com/organizations/ubiquity/settings/installations/47252474",
+ "app_id": 236521,
+ "app_slug": "ubiquibot",
+ "target_id": 159901852,
+ "target_type": "Organization",
+ "permissions": {
+ "issues": "write",
+ "actions": "write",
+ "members": "read",
+ "contents": "write",
+ "metadata": "read",
+ "pull_requests": "write"
+ },
+ "events": [
+ "commit_comment",
+ "create",
+ "delete",
+ "fork",
+ "gollum",
+ "issues",
+ "issue_comment",
+ "label",
+ "member",
+ "membership",
+ "merge_queue_entry",
+ "milestone",
+ "organization",
+ "public",
+ "pull_request",
+ "pull_request_review",
+ "pull_request_review_comment",
+ "pull_request_review_thread",
+ "push",
+ "release",
+ "repository",
+ "repository_dispatch",
+ "star",
+ "team",
+ "team_add",
+ "watch",
+ "workflow_dispatch",
+ "workflow_job",
+ "workflow_run"
+ ],
+ "created_at": "2024-02-13T19:37:30.000+09:00",
+ "updated_at": "2024-03-11T20:40:33.000+09:00",
+ "single_file_name": null,
+ "has_multiple_single_files": false,
+ "single_file_paths": [
+
+ ],
+ "suspended_by": null,
+ "suspended_at": null
+ }
+ ]
+}
diff --git a/cypress/fixtures/get-orgs.json b/cypress/fixtures/get-orgs.json
new file mode 100644
index 000000000..4d1b47bb1
--- /dev/null
+++ b/cypress/fixtures/get-orgs.json
@@ -0,0 +1,30 @@
+[
+ {
+ "login": "ubiquity2",
+ "id": 76412718,
+ "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2NDEyNzE4",
+ "url": "https://api.github.com/orgs/ubiquity2",
+ "repos_url": "https://api.github.com/orgs/ubiquity2/repos",
+ "events_url": "https://api.github.com/orgs/ubiquity2/events",
+ "hooks_url": "https://api.github.com/orgs/ubiquity2/hooks",
+ "issues_url": "https://api.github.com/orgs/ubiquity2/issues",
+ "members_url": "https://api.github.com/orgs/ubiquity2/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/ubiquity2/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/76412717?v=4",
+ "description": "The Metaverse Bank 2."
+ },
+ {
+ "login": "ubiquity",
+ "id": 76412717,
+ "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2NDEyNzE3",
+ "url": "https://api.github.com/orgs/ubiquity",
+ "repos_url": "https://api.github.com/orgs/ubiquity/repos",
+ "events_url": "https://api.github.com/orgs/ubiquity/events",
+ "hooks_url": "https://api.github.com/orgs/ubiquity/hooks",
+ "issues_url": "https://api.github.com/orgs/ubiquity/issues",
+ "members_url": "https://api.github.com/orgs/ubiquity/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/ubiquity/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/76412717?v=4",
+ "description": "The Metaverse Bank."
+ }
+]
diff --git a/cypress/fixtures/get-repos.json b/cypress/fixtures/get-repos.json
new file mode 100644
index 000000000..4ea6823db
--- /dev/null
+++ b/cypress/fixtures/get-repos.json
@@ -0,0 +1,145 @@
+{
+ "id": 767829567,
+ "node_id": "R_kgDOLcQmPw",
+ "name": "ubiquibot-config",
+ "full_name": "Ubiquity/ubiquibot-config",
+ "private": true,
+ "owner": {
+ "login": "Ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Ubiquity",
+ "html_url": "https://github.com/Ubiquity",
+ "followers_url": "https://api.github.com/users/Ubiquity/followers",
+ "following_url": "https://api.github.com/users/Ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/Ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/Ubiquity/repos",
+ "events_url": "https://api.github.com/users/Ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "html_url": "https://github.com/Ubiquity/ubiquibot-config",
+ "description": null,
+ "fork": false,
+ "url": "https://api.github.com/repos/Ubiquity/ubiquibot-config",
+ "forks_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/forks",
+ "keys_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/teams",
+ "hooks_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/hooks",
+ "issue_events_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/events",
+ "assignees_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/tags",
+ "blobs_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/languages",
+ "stargazers_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/stargazers",
+ "contributors_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/contributors",
+ "subscribers_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/subscribers",
+ "subscription_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/subscription",
+ "commits_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/merges",
+ "archive_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/downloads",
+ "issues_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/labels{/name}",
+ "releases_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/deployments",
+ "created_at": "2024-03-06T01:00:06Z",
+ "updated_at": "2024-03-06T01:00:07Z",
+ "pushed_at": "2024-03-06T01:00:07Z",
+ "git_url": "git://github.com/Ubiquity/ubiquibot-config.git",
+ "ssh_url": "git@github.com:Ubiquity/ubiquibot-config.git",
+ "clone_url": "https://github.com/Ubiquity/ubiquibot-config.git",
+ "svn_url": "https://github.com/Ubiquity/ubiquibot-config",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_projects": true,
+ "has_downloads": true,
+ "has_wiki": false,
+ "has_pages": false,
+ "has_discussions": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "archived": false,
+ "disabled": false,
+ "open_issues_count": 0,
+ "license": null,
+ "allow_forking": false,
+ "is_template": false,
+ "web_commit_signoff_required": false,
+ "topics": [
+
+ ],
+ "visibility": "private",
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "main",
+ "permissions": {
+ "admin": true,
+ "maintain": true,
+ "push": true,
+ "triage": true,
+ "pull": true
+ },
+ "allow_squash_merge": true,
+ "allow_merge_commit": true,
+ "allow_rebase_merge": true,
+ "allow_auto_merge": false,
+ "delete_branch_on_merge": false,
+ "allow_update_branch": false,
+ "use_squash_pr_title_as_default": false,
+ "squash_merge_commit_message": "COMMIT_MESSAGES",
+ "squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
+ "merge_commit_message": "PR_TITLE",
+ "merge_commit_title": "MERGE_MESSAGE",
+ "custom_properties": {
+
+ },
+ "organization": {
+ "login": "Ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Ubiquity",
+ "html_url": "https://github.com/Ubiquity",
+ "followers_url": "https://api.github.com/users/Ubiquity/followers",
+ "following_url": "https://api.github.com/users/Ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/Ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/Ubiquity/repos",
+ "events_url": "https://api.github.com/users/Ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "network_count": 0,
+ "subscribers_count": 0
+}
diff --git a/cypress/fixtures/get-search.json b/cypress/fixtures/get-search.json
new file mode 100644
index 000000000..f99cfadc8
--- /dev/null
+++ b/cypress/fixtures/get-search.json
@@ -0,0 +1,116 @@
+{
+ "total_count": 1,
+ "incomplete_results": false,
+ "items": [
+ {
+ "id": 770341621,
+ "node_id": "R_kgDOLep69Q",
+ "name": "ubiquibot-config",
+ "full_name": "ubiquity/ubiquibot-config",
+ "private": true,
+ "owner": {
+ "login": "ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/ubiquity",
+ "html_url": "https://github.com/ubiquity",
+ "followers_url": "https://api.github.com/users/ubiquity/followers",
+ "following_url": "https://api.github.com/users/ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/ubiquity/repos",
+ "events_url": "https://api.github.com/users/ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "html_url": "https://github.com/ubiquity/ubiquibot-config",
+ "description": null,
+ "fork": false,
+ "url": "https://api.github.com/repos/ubiquity/ubiquibot-config",
+ "forks_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/forks",
+ "keys_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/teams",
+ "hooks_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/hooks",
+ "issue_events_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/events",
+ "assignees_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/tags",
+ "blobs_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/languages",
+ "stargazers_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/stargazers",
+ "contributors_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/contributors",
+ "subscribers_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/subscribers",
+ "subscription_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/subscription",
+ "commits_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/merges",
+ "archive_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/downloads",
+ "issues_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/labels{/name}",
+ "releases_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/deployments",
+ "created_at": "2024-03-11T11:39:17Z",
+ "updated_at": "2024-03-11T11:39:17Z",
+ "pushed_at": "2024-03-11T11:39:18Z",
+ "git_url": "git://github.com/ubiquity/ubiquibot-config.git",
+ "ssh_url": "git@github.com:ubiquity/ubiquibot-config.git",
+ "clone_url": "https://github.com/ubiquity/ubiquibot-config.git",
+ "svn_url": "https://github.com/ubiquity/ubiquibot-config",
+ "homepage": null,
+ "size": 2,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_projects": true,
+ "has_downloads": true,
+ "has_wiki": false,
+ "has_pages": false,
+ "has_discussions": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "archived": false,
+ "disabled": false,
+ "open_issues_count": 0,
+ "license": null,
+ "allow_forking": false,
+ "is_template": false,
+ "web_commit_signoff_required": false,
+ "topics": [
+
+ ],
+ "visibility": "private",
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "main",
+ "permissions": {
+ "admin": true,
+ "maintain": true,
+ "push": true,
+ "triage": true,
+ "pull": true
+ },
+ "score": 1.0
+ }
+ ]
+}
diff --git a/cypress/fixtures/get-ubiquibot-config.json b/cypress/fixtures/get-ubiquibot-config.json
new file mode 100644
index 000000000..b285e3489
--- /dev/null
+++ b/cypress/fixtures/get-ubiquibot-config.json
@@ -0,0 +1,146 @@
+{
+ "id": 641336624,
+ "node_id": "R_kgDOJjoFMA",
+ "name": "ubiquibot-config",
+ "full_name": "ubiquity/ubiquibot-config",
+ "private": true,
+ "owner": {
+ "login": "ubiquity",
+ "id": 76412717,
+ "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2NDEyNzE3",
+ "avatar_url": "https://avatars.githubusercontent.com/u/76412717?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/ubiquity",
+ "html_url": "https://github.com/ubiquity",
+ "followers_url": "https://api.github.com/users/ubiquity/followers",
+ "following_url": "https://api.github.com/users/ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/ubiquity/repos",
+ "events_url": "https://api.github.com/users/ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "html_url": "https://github.com/ubiquity/ubiquibot-config",
+ "description": "The organization-wide default UbiquiBot configuration.",
+ "fork": false,
+ "url": "https://api.github.com/repos/ubiquity/ubiquibot-config",
+ "forks_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/forks",
+ "keys_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/teams",
+ "hooks_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/hooks",
+ "issue_events_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/events",
+ "assignees_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/tags",
+ "blobs_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/languages",
+ "stargazers_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/stargazers",
+ "contributors_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/contributors",
+ "subscribers_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/subscribers",
+ "subscription_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/subscription",
+ "commits_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/merges",
+ "archive_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/downloads",
+ "issues_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/labels{/name}",
+ "releases_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/ubiquity/ubiquibot-config/deployments",
+ "created_at": "2023-05-16T09:05:13Z",
+ "updated_at": "2023-08-27T05:04:55Z",
+ "pushed_at": "2024-02-02T10:21:15Z",
+ "git_url": "git://github.com/ubiquity/ubiquibot-config.git",
+ "ssh_url": "git@github.com:ubiquity/ubiquibot-config.git",
+ "clone_url": "https://github.com/ubiquity/ubiquibot-config.git",
+ "svn_url": "https://github.com/ubiquity/ubiquibot-config",
+ "homepage": "",
+ "size": 46,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_projects": true,
+ "has_downloads": true,
+ "has_wiki": false,
+ "has_pages": false,
+ "has_discussions": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "archived": false,
+ "disabled": false,
+ "open_issues_count": 0,
+ "license": null,
+ "allow_forking": true,
+ "is_template": false,
+ "web_commit_signoff_required": false,
+ "topics": [
+
+ ],
+ "visibility": "private",
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "development",
+ "permissions": {
+ "admin": false,
+ "maintain": false,
+ "push": true,
+ "triage": true,
+ "pull": true
+ },
+ "temp_clone_token": "ACK2JIAP6BCCDFY4KMHIIHDF43KQE",
+ "allow_squash_merge": true,
+ "allow_merge_commit": true,
+ "allow_rebase_merge": true,
+ "allow_auto_merge": false,
+ "delete_branch_on_merge": false,
+ "allow_update_branch": false,
+ "use_squash_pr_title_as_default": false,
+ "squash_merge_commit_message": "COMMIT_MESSAGES",
+ "squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
+ "merge_commit_message": "PR_TITLE",
+ "merge_commit_title": "MERGE_MESSAGE",
+ "custom_properties": {
+
+ },
+ "organization": {
+ "login": "ubiquity",
+ "id": 76412717,
+ "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2NDEyNzE3",
+ "avatar_url": "https://avatars.githubusercontent.com/u/76412717?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/ubiquity",
+ "html_url": "https://github.com/ubiquity",
+ "followers_url": "https://api.github.com/users/ubiquity/followers",
+ "following_url": "https://api.github.com/users/ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/ubiquity/repos",
+ "events_url": "https://api.github.com/users/ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "network_count": 0,
+ "subscribers_count": 1
+}
diff --git a/cypress/fixtures/get-user.json b/cypress/fixtures/get-user.json
new file mode 100644
index 000000000..4a33ca070
--- /dev/null
+++ b/cypress/fixtures/get-user.json
@@ -0,0 +1,34 @@
+{
+ "login": "ubiquity",
+ "id": 76412717,
+ "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2NDEyNzE3",
+ "avatar_url": "https://avatars.githubusercontent.com/u/76412717?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/ubiquity",
+ "html_url": "https://github.com/ubiquity",
+ "followers_url": "https://api.github.com/users/ubiquity/followers",
+ "following_url": "https://api.github.com/users/ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/ubiquity/repos",
+ "events_url": "https://api.github.com/users/ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false,
+ "name": "Ubiquity DAO",
+ "company": null,
+ "blog": "https://ubiquitydao.xyz",
+ "location": null,
+ "email": "github.home@ubiquitydao.xyz",
+ "hireable": null,
+ "bio": "The Metaverse Bank.",
+ "twitter_username": "UbiquityDAO",
+ "public_repos": 56,
+ "public_gists": 0,
+ "followers": 78,
+ "following": 0,
+ "created_at": "2020-12-21T00:21:13Z",
+ "updated_at": "2024-02-15T01:23:04Z"
+}
diff --git a/cypress/fixtures/metamask-chrome.zip b/cypress/fixtures/metamask-chrome.zip
new file mode 100644
index 000000000..11133c7b8
Binary files /dev/null and b/cypress/fixtures/metamask-chrome.zip differ
diff --git a/cypress/fixtures/put-config.json b/cypress/fixtures/put-config.json
new file mode 100644
index 000000000..69afcbe5b
--- /dev/null
+++ b/cypress/fixtures/put-config.json
@@ -0,0 +1,84 @@
+{
+ "total_count": 1,
+ "installations": [
+ {
+ "id": 47252474,
+ "account": {
+ "login": "ubiquity",
+ "id": 159901852,
+ "node_id": "O_kgDOCYfonA",
+ "avatar_url": "https://avatars.githubusercontent.com/u/159901852?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/ubiquity",
+ "html_url": "https://github.com/ubiquity",
+ "followers_url": "https://api.github.com/users/ubiquity/followers",
+ "following_url": "https://api.github.com/users/ubiquity/following{/other_user}",
+ "gists_url": "https://api.github.com/users/ubiquity/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/ubiquity/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/ubiquity/subscriptions",
+ "organizations_url": "https://api.github.com/users/ubiquity/orgs",
+ "repos_url": "https://api.github.com/users/ubiquity/repos",
+ "events_url": "https://api.github.com/users/ubiquity/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/ubiquity/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "repository_selection": "selected",
+ "access_tokens_url": "https://api.github.com/app/installations/47252474/access_tokens",
+ "repositories_url": "https://api.github.com/installation/repositories",
+ "html_url": "https://github.com/organizations/ubiquity/settings/installations/47252474",
+ "app_id": 236521,
+ "app_slug": "ubiquibot",
+ "target_id": 159901852,
+ "target_type": "Organization",
+ "permissions": {
+ "issues": "write",
+ "actions": "write",
+ "members": "read",
+ "contents": "write",
+ "metadata": "read",
+ "pull_requests": "write"
+ },
+ "events": [
+ "commit_comment",
+ "create",
+ "delete",
+ "fork",
+ "gollum",
+ "issues",
+ "issue_comment",
+ "label",
+ "member",
+ "membership",
+ "merge_queue_entry",
+ "milestone",
+ "organization",
+ "public",
+ "pull_request",
+ "pull_request_review",
+ "pull_request_review_comment",
+ "pull_request_review_thread",
+ "push",
+ "release",
+ "repository",
+ "repository_dispatch",
+ "star",
+ "team",
+ "team_add",
+ "watch",
+ "workflow_dispatch",
+ "workflow_job",
+ "workflow_run"
+ ],
+ "created_at": "2024-02-13T19:37:30.000+09:00",
+ "updated_at": "2024-03-11T20:40:33.000+09:00",
+ "single_file_name": null,
+ "has_multiple_single_files": false,
+ "single_file_paths": [
+
+ ],
+ "suspended_by": null,
+ "suspended_at": null
+ }
+ ]
+}
diff --git a/cypress/fixtures/put-file.json b/cypress/fixtures/put-file.json
new file mode 100644
index 000000000..ef2ffbb68
--- /dev/null
+++ b/cypress/fixtures/put-file.json
@@ -0,0 +1,52 @@
+{
+ "content": {
+ "name": "ubiquibot-config.yml",
+ "path": ".github/ubiquibot-config.yml",
+ "sha": "1778de0cb51522aa6a9c16e2c38ba2dfe3bc1a73",
+ "size": 3598,
+ "url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/contents/.github/ubiquibot-config.yml?ref=main",
+ "html_url": "https://github.com/Ubiquity/ubiquibot-config/blob/main/.github/ubiquibot-config.yml",
+ "git_url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/blobs/1778de0cb51522aa6a9c16e2c38ba2dfe3bc1a73",
+ "download_url": "https://raw.githubusercontent.com/Ubiquity/ubiquibot-config/main/.github/ubiquibot-config.yml?token=ACK2JIBIHVQCOZNR77YFVNLF47AFK",
+ "type": "file",
+ "_links": {
+ "self": "https://api.github.com/repos/Ubiquity/ubiquibot-config/contents/.github/ubiquibot-config.yml?ref=main",
+ "git": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/blobs/1778de0cb51522aa6a9c16e2c38ba2dfe3bc1a73",
+ "html": "https://github.com/Ubiquity/ubiquibot-config/blob/main/.github/ubiquibot-config.yml"
+ }
+ },
+ "commit": {
+ "sha": "63937105dea81cda4f7eb8ef4c16b9f12d63a8ff",
+ "node_id": "C_kwDOLcQmP9oAKDYzOTM3MTA1ZGVhODFjZGE0ZjdlYjhlZjRjMTZiOWYxMmQ2M2E4ZmY",
+ "url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/commits/63937105dea81cda4f7eb8ef4c16b9f12d63a8ff",
+ "html_url": "https://github.com/Ubiquity/ubiquibot-config/commit/63937105dea81cda4f7eb8ef4c16b9f12d63a8ff",
+ "author": {
+ "name": "Ubiquity",
+ "email": "ubiquity@users.noreply.github.com",
+ "date": "2024-03-06T01:00:09Z"
+ },
+ "committer": {
+ "name": "Ubiquity",
+ "email": "ubiquity@users.noreply.github.com",
+ "date": "2024-03-06T01:00:09Z"
+ },
+ "tree": {
+ "sha": "70bf542678602ebe2fb59c8d255665c0b443fe59",
+ "url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/trees/70bf542678602ebe2fb59c8d255665c0b443fe59"
+ },
+ "message": "31c1b6ab-f534-43aa-9c02-c04955dadb4d",
+ "parents": [
+ {
+ "sha": "9313261f872b9af3b904fde7b63af158533e4998",
+ "url": "https://api.github.com/repos/Ubiquity/ubiquibot-config/git/commits/9313261f872b9af3b904fde7b63af158533e4998",
+ "html_url": "https://github.com/Ubiquity/ubiquibot-config/commit/9313261f872b9af3b904fde7b63af158533e4998"
+ }
+ ],
+ "verification": {
+ "verified": false,
+ "reason": "unsigned",
+ "signature": null,
+ "payload": null
+ }
+ }
+}
diff --git a/cypress/fixtures/user-token.json b/cypress/fixtures/user-token.json
new file mode 100644
index 000000000..f55ae07cb
--- /dev/null
+++ b/cypress/fixtures/user-token.json
@@ -0,0 +1,60 @@
+{
+ "provider_token": "123",
+ "access_token": "123",
+ "refresh_token": "123",
+ "token_type": "bearer",
+ "user": {
+ "id": "1",
+ "aud": "authenticated",
+ "role": "authenticated",
+ "email": "octocat@github.com",
+ "email_confirmed_at": "2024-02-12T05:14:35.030647Z",
+ "phone": "",
+ "confirmed_at": "2024-02-12T05:14:35.030647Z",
+ "last_sign_in_at": "2024-02-26T05:05:04.909151Z",
+ "app_metadata": {
+ "provider": "github",
+ "providers": ["github"]
+ },
+ "user_metadata": {
+ "avatar_url": "https://github.com/images/error/octocat_happy.gif",
+ "email": "octocat@github.com",
+ "email_verified": true,
+ "full_name": "Octocat",
+ "iss": "https://api.github.com",
+ "name": "Octocat",
+ "phone_verified": false,
+ "preferred_username": "Octocat",
+ "provider_id": "1",
+ "sub": "1",
+ "user_name": "Octocat"
+ },
+ "identities": [
+ {
+ "identity_id": "1",
+ "id": "1",
+ "user_id": "1",
+ "identity_data": {
+ "avatar_url": "https://github.com/images/error/octocat_happy.gif",
+ "email": "octocat@github.com",
+ "email_verified": true,
+ "full_name": "Octocat",
+ "iss": "https://api.github.com",
+ "name": "Octocat",
+ "phone_verified": false,
+ "preferred_username": "Octocat",
+ "provider_id": "1",
+ "sub": "1",
+ "user_name": "Octocat"
+ },
+ "provider": "github",
+ "last_sign_in_at": "2024-02-12T05:14:35.023638Z",
+ "created_at": "2024-02-12T05:14:35.023688Z",
+ "updated_at": "2024-02-26T05:05:04.904114Z",
+ "email": "octocat@github.com"
+ }
+ ],
+ "created_at": "2024-02-12T05:14:35.020841Z",
+ "updated_at": "2024-02-26T05:05:04.917327Z"
+ }
+}
diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts
new file mode 100644
index 000000000..95857aea4
--- /dev/null
+++ b/cypress/support/commands.ts
@@ -0,0 +1,37 @@
+///
+// ***********************************************
+// This example commands.ts shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
+//
+// declare global {
+// namespace Cypress {
+// interface Chainable {
+// login(email: string, password: string): Chainable
+// drag(subject: string, options?: Partial): Chainable
+// dismiss(subject: string, options?: Partial): Chainable
+// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable
+// }
+// }
+// }
diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts
new file mode 100644
index 000000000..6a173d6fc
--- /dev/null
+++ b/cypress/support/e2e.ts
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/e2e.ts is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import "./commands";
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')