diff --git a/cypress.json b/cypress.json index 0967ef424..5bbd44927 100644 --- a/cypress.json +++ b/cypress.json @@ -1 +1 @@ -{} +{"defaultCommandTimeout": 10000} diff --git a/cypress/integration/app/window.cljs b/cypress/integration/app/window.cljs index 54a01d146..f7e3cd755 100644 --- a/cypress/integration/app/window.cljs +++ b/cypress/integration/app/window.cljs @@ -1,10 +1,52 @@ (ns app.window - (:require-macros [latte.core :refer [describe beforeEach it]])) + (:require-macros [latte.core :refer [describe beforeEach before it]]) + (:require [latte.chai :refer (expect)]) + (:refer-clojure :exclude [first get])) (def cy js/cy) +(defn back-to-home + [] + (.. cy (get ".cp__header-logo") + (first) + (click))) + +(defn edit-block + [content] + (.. cy (get "textarea") + (first) + (click) + (type content))) + + (describe "Window" (beforeEach [] - (.visit cy "https://example.cypress.io/commands/window")) - (it "cy.window() - get the global window object" [] - (.should (.window cy) "have.property" "top"))) + (.clearIndexedDB cy)) + (before [] + (.visit cy "http://localhost:3001")) + + (it "Search" [] + (.. cy + (get "#search-field") + (click) + (type "welcome to Logseq")) + (.. cy (get "#ui__ac-inner") + (should (fn [result] + (expect result :to.have.length 1)))) + (back-to-home) + + ;; create new page + (.. cy + (get "#search-field") + (click) + (type "new page")) + + (.wait cy 1000) + + (.. cy + (get "#search-field") + (type "{enter}")) + + ;; edit bullet + (edit-block "this is my first bullet {enter}") + (edit-block "this is my second bullet {enter}"))) diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 119ab03f7..df1136dff 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -23,3 +23,22 @@ // // -- This will overwrite an existing command -- // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) + +Cypress.Commands.add('clearIndexedDB', async () => { + const databases = await window.indexedDB.databases(); + + await Promise.all( + databases.map( + ({ name }) => + new Promise((resolve, reject) => { + const request = window.indexedDB.deleteDatabase(name); + + request.addEventListener('success', resolve); + // Note: we need to also listen to the "blocked" event + // (and resolve the promise) due to https://stackoverflow.com/a/35141818 + request.addEventListener('blocked', resolve); + request.addEventListener('error', reject); + }), + ), + ); +});