From d8217302c63bc656c29b2d3b07b870f003a8c5ba Mon Sep 17 00:00:00 2001 From: Mysteriedev Date: Sun, 6 Mar 2022 16:18:57 +0100 Subject: [PATCH] test seeding --- .gitignore | 3 +- composer.lock | 52 ++-- cypress.json | 2 +- .../settings/settings.yaml | 129 ++++++++ .../settings/users/trendschau.yaml | 9 + .../01_setup/01-system-setup-signup.spec.js | 253 +++++++-------- .../01_setup/02-initial-frontend.spec.js | 289 +++++++++--------- cypress/plugins/index.js | 11 +- package-lock.json | 41 +++ package.json | 8 +- 10 files changed, 498 insertions(+), 299 deletions(-) create mode 100644 cypress/fixtures/01_setup/prepulate_settings_seed/settings/settings.yaml create mode 100644 cypress/fixtures/01_setup/prepulate_settings_seed/settings/users/trendschau.yaml create mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 1c1c5f3..902f6fe 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ settings/users system/vendor plugins/demo zips -build.php \ No newline at end of file +build.php +node_modules \ No newline at end of file diff --git a/composer.lock b/composer.lock index 7207d43..3cbf36e 100644 --- a/composer.lock +++ b/composer.lock @@ -367,12 +367,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "FastRoute\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -982,16 +982,16 @@ }, { "name": "symfony/finder", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e77046c252be48c48a40816187ed527703c8f76c" + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c", - "reference": "e77046c252be48c48a40816187ed527703c8f76c", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", "shasum": "" }, "require": { @@ -1025,7 +1025,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.2" + "source": "https://github.com/symfony/finder/tree/v5.4.3" }, "funding": [ { @@ -1041,11 +1041,11 @@ "type": "tidelift" } ], - "time": "2021-12-15T11:06:13+00:00" + "time": "2022-01-26T16:34:36+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -1077,12 +1077,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1107,7 +1107,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" }, "funding": [ { @@ -1127,16 +1127,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", "shasum": "" }, "require": { @@ -1153,12 +1153,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -1190,7 +1190,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" }, "funding": [ { @@ -1206,7 +1206,7 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-03-04T08:16:47+00:00" }, { "name": "symfony/yaml", @@ -1411,5 +1411,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.2.0" } diff --git a/cypress.json b/cypress.json index 91eeb63..cd7f6e3 100644 --- a/cypress.json +++ b/cypress.json @@ -1,3 +1,3 @@ { - "baseUrl": "http://localhost/EDIT_THIS_URL_FOR_YOUR_LOCAL_SETUP" + "baseUrl": "http://localhost/e2e/gitrepo/typemill" } \ No newline at end of file diff --git a/cypress/fixtures/01_setup/prepulate_settings_seed/settings/settings.yaml b/cypress/fixtures/01_setup/prepulate_settings_seed/settings/settings.yaml new file mode 100644 index 0000000..b94591e --- /dev/null +++ b/cypress/fixtures/01_setup/prepulate_settings_seed/settings/settings.yaml @@ -0,0 +1,129 @@ +setup: false +language: en +welcome: false +title: Cypress +author: robot +copyright: CC-BY-ND +year: '2017' +langattr: en +editor: visual +formats: + - markdown + - headline + - ulist + - olist + - table + - quote + - notice + - image + - video + - file + - toc + - hr + - definition + - code + - shortcode +access: null +pageaccess: null +hrdelimiter: null +restrictionnotice: '' +wraprestrictionnotice: null +headlineanchors: null +displayErrorDetails: null +twigcache: null +proxy: null +trustedproxies: '' +headersoff: null +urlschemes: '' +svg: null +recoverpw: null +recoverfrom: '' +recoversubject: '' +recovermessage: '' +securitylog: null +oldslug: null +refreshcache: null +pingsitemap: null +images: + live: + width: '820' +logo: '' +favicon: '' +theme: cyanine +themes: + cyanine: + layoutsize: standard + blogfolder: '' + landingpage: 'on' + landingpageIntro: '1' + introTitle: '' + introMarkdown: '' + introButtonLink: 'https://typemill.net' + introButtonLabel: Typemill + introImageOpacity: '' + landingpageInfo: '' + infoMarkdown: '' + landingpageTeaser: '' + teaser1title: '' + teaser1text: '' + teaser1link: '' + teaser1label: '' + teaser2title: '' + teaser2text: '' + teaser2link: '' + teaser2label: '' + teaser3title: '' + teaser3text: '' + teaser3link: '' + teaser3label: '' + landingpageContrast: '' + contrastTitle: '' + contrastText: '' + contrastLink: '' + contrastLabel: '' + landingpageNavi: '2' + naviTitle: 'Get Started' + naviDepth: '' + landingpageNews: '' + newsHeadline: '' + newsFolder: '' + newsLabel: '' + authorPosition: + top: 'on' + authorIntro: Writer + datePosition: + bottom: 'on' + dateIntro: 'Final update' + dateFormat: m/d/Y + gitPosition: + top: 'on' + gitLink: 'https://github.com/typemill/docs' + editText: '' + printText: '' + chapnum: 'on' + expand: '' + collapse: '' + next: '' + previous: '' + footer1: '' + footer2: '' + footer3: '' + copyrightlinetext: '' + font: 'BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif' + fontheadline: 'BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif' + fontnavi: 'BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif' + brandcolorprimary: '' + fontcolorprimary: '' + newsbackground: '' + newscolor: '' + brandcolortertiary: '' + fontcolortertiary: '' + bordercolortertiary: '' + fontcolorlink: '' + brandcolorsecondary: '' + fontcolorsecondary: '' + codebackground: '' + codecolor: '' + contentnavihoverbackground: '' + contentnavihovercolor: '' + thinbordercolor: '' diff --git a/cypress/fixtures/01_setup/prepulate_settings_seed/settings/users/trendschau.yaml b/cypress/fixtures/01_setup/prepulate_settings_seed/settings/users/trendschau.yaml new file mode 100644 index 0000000..d76b8c3 --- /dev/null +++ b/cypress/fixtures/01_setup/prepulate_settings_seed/settings/users/trendschau.yaml @@ -0,0 +1,9 @@ +username: trendschau +email: trendschau@gmail.com +userrole: administrator +password: $2y$10$SMeVwJeo/5vyjeI68uFi.OJZhSR.3KQTVb5zcKF5D65eZ8CDpX29. +lastlogin: 1646578390 +image: '' +description: '' +firstname: Sebastian +lastname: Schürmanns diff --git a/cypress/integration/01_setup/01-system-setup-signup.spec.js b/cypress/integration/01_setup/01-system-setup-signup.spec.js index 3dbb6c5..c8ed308 100644 --- a/cypress/integration/01_setup/01-system-setup-signup.spec.js +++ b/cypress/integration/01_setup/01-system-setup-signup.spec.js @@ -1,40 +1,43 @@ -describe("Typemill Setup with Signup", function() { - it("validates form input", function() { - // reset users and settings - cy.task("resetSetup"); - // visit setup form - cy.visit("/setup"); - // cy.visit('/setup',{ onBeforeLoad: (_contentWindow) => { Object.defineProperty(navigator, 'language', { value: 'fr-FR' }) } }) - cy.url().should("include", "/setup"); +describe("Typemill Setup with Signup", function () { + before(function () { + // reset users and settings + cy.task("resetSetup"); + }); - // add data and check attributes - cy.get('input[name="username"]') - .type("?1") - .should("have.value", "?1") - .and("have.attr", "required"); + it("validates form input", function () { + // visit setup form + cy.visit("/setup"); + // cy.visit('/setup',{ onBeforeLoad: (_contentWindow) => { Object.defineProperty(navigator, 'language', { value: 'fr-FR' }) } }) + cy.url().should("include", "/setup"); - cy.get('input[name="email"]') - .type("trendschau.net") - .should("have.value", "trendschau.net") - .and("have.attr", "required"); + // add data and check attributes + cy.get('input[name="username"]') + .type("?1") + .should("have.value", "?1") + .and("have.attr", "required"); - cy.get('input[name="password"]') - .type("pass") - .should("have.value", "pass") - .and("have.attr", "required"); + cy.get('input[name="email"]') + .type("trendschau.net") + .should("have.value", "trendschau.net") + .and("have.attr", "required"); - // submit and get validation errors - cy.get("form").submit(); - cy.get("#flash-message").should( - "contain", - "Please check your input and try again" - ); - cy.get(".error").should("contain", "invalid characters"); - cy.get(".error").should("contain", "e-mail is invalid"); - cy.get(".error").should("contain", "Length between 5 - 20"); - }); + cy.get('input[name="password"]') + .type("pass") + .should("have.value", "pass") + .and("have.attr", "required"); - /* + // submit and get validation errors + cy.get("form").submit(); + cy.get("#flash-message").should( + "contain", + "Please check your input and try again" + ); + cy.get(".error").should("contain", "invalid characters"); + cy.get(".error").should("contain", "e-mail is invalid"); + cy.get(".error").should("contain", "Length between 5 - 20"); + }); + + /* it('fails without CSRF-token', function () { cy.request({ @@ -52,111 +55,111 @@ describe("Typemill Setup with Signup", function() { .should('include', 'The form has a timeout') }) */ - it("fails without CSRF-token", function() { - cy.visit("/setup"); + it("fails without CSRF-token", function () { + cy.visit("/setup"); - // enter correct data - cy.get('input[name="username"]').clear().type("trendschau"); - cy.get('input[name="email"]').clear().type("trendschau@gmail.com"); - cy.get('input[name="password"]').clear().type("password"); - cy.get("#csrf_value").then((elem) => { - elem.val("wrongvalue"); - }); - - // submit and get validation errors - cy.get("form").submit(); - cy.get("#flash-message").should("contain", "form has a timeout"); + // enter correct data + cy.get('input[name="username"]').clear().type("trendschau"); + cy.get('input[name="email"]').clear().type("trendschau@gmail.com"); + cy.get('input[name="password"]').clear().type("password"); + cy.get("#csrf_value").then((elem) => { + elem.val("wrongvalue"); }); - it("submits valid form data and visit welcome and settings page", function() { - cy.visit("/setup"); + // submit and get validation errors + cy.get("form").submit(); + cy.get("#flash-message").should("contain", "form has a timeout"); + }); - // enter correct data - cy.get('input[name="username"]').clear().type("trendschau"); - cy.get('input[name="email"]').clear().type("trendschau@gmail.com"); - cy.get('input[name="password"]').clear().type("password"); + it("submits valid form data and visit welcome and settings page", function () { + cy.visit("/setup"); - // submits valid form - cy.get("form").submit(); - cy.url().should("include", "/welcome"); - cy.getCookie("typemill-session").should("exist"); - Cypress.Cookies.preserveOnce("typemill-session"); + // enter correct data + cy.get('input[name="username"]').clear().type("trendschau"); + cy.get('input[name="email"]').clear().type("trendschau@gmail.com"); + cy.get('input[name="password"]').clear().type("password"); - // clicks link on welcome page to settings page - // cy.get('.button').should('contain', 'Configure your website') - cy.get(".button").click(); - cy.url().should("include", "/tm/settings"); - }); + // submits valid form + cy.get("form").submit(); + cy.url().should("include", "/welcome"); + cy.getCookie("typemill-session").should("exist"); + Cypress.Cookies.preserveOnce("typemill-session"); - it("creates default settings data", function() { - cy.get('input[name="settings[title]"]') - .should("have.value", "TYPEMILL") - .and("have.attr", "required"); - cy.get('input[name="settings[author]"]'); - cy.get('select[name="settings[copyright]"]'); - cy.get('input[name="settings[year]"]').should("have.attr", "required"); - cy.get('select[name="settings[language]"]'); - // cy.get('select[name="settings[langattr]"]') - cy.get('input[name="settings[sitemap]"]') - .should("have.value", `${Cypress.config().baseUrl}/cache/sitemap.xml`) - .and("have.attr", "readonly"); - cy.get('input[name="settings[logo]"]'); - cy.get('input[name="settings[deletelogo]"]'); - cy.get('input[name="settings[favicon]"]'); - cy.get('input[name="settings[deletefav]"]'); - cy.get('input[name="settings[headlineanchors]"]'); - cy.get('input[name="settings[editor]"]'); + // clicks link on welcome page to settings page + // cy.get('.button').should('contain', 'Configure your website') + cy.get(".button").click(); + cy.url().should("include", "/tm/settings"); + }); - cy.get('select[name="settings[language]"]') - .select("en") - .should("have.value", "en"); + it("creates default settings data", function () { + cy.get('input[name="settings[title]"]') + .should("have.value", "TYPEMILL") + .and("have.attr", "required"); + cy.get('input[name="settings[author]"]'); + cy.get('select[name="settings[copyright]"]'); + cy.get('input[name="settings[year]"]').should("have.attr", "required"); + cy.get('select[name="settings[language]"]'); + // cy.get('select[name="settings[langattr]"]') + cy.get('input[name="settings[sitemap]"]') + .should("have.value", `${Cypress.config().baseUrl}/cache/sitemap.xml`) + .and("have.attr", "readonly"); + cy.get('input[name="settings[logo]"]'); + cy.get('input[name="settings[deletelogo]"]'); + cy.get('input[name="settings[favicon]"]'); + cy.get('input[name="settings[deletefav]"]'); + cy.get('input[name="settings[headlineanchors]"]'); + cy.get('input[name="settings[editor]"]'); - cy.get("form").submit(); - cy.get("#flash-message").should("contain", "Settings are stored"); + cy.get('select[name="settings[language]"]') + .select("en") + .should("have.value", "en"); - Cypress.Cookies.preserveOnce("typemill-session"); - }); + cy.get("form").submit(); + cy.get("#flash-message").should("contain", "Settings are stored"); - it("creates default user data", function() { - cy.visit("/tm/user/trendschau"); - cy.url().should("include", "/tm/user/trendschau"); - cy.get('input[name="user[username]"]').should("have.value", "trendschau"); - cy.get('input[name="user[firstname]"]') - .clear() - .type("Sebastian") - .should("have.value", "Sebastian"); - cy.get('input[name="user[lastname]"]') - .clear() - .type("Schürmanns") - .should("have.value", "Schürmanns"); - cy.get('input[name="user[email]"]').should( - "have.value", - "trendschau@gmail.com" - ); - cy.get('select[name="user[userrole]"]').should( - "have.value", - "administrator" - ); - cy.get('input[name="user[password]"]').should("have.value", ""); - cy.get('input[name="user[newpassword]"]').should("have.value", ""); + Cypress.Cookies.preserveOnce("typemill-session"); + }); - cy.get("#userform").submit(); - cy.get("#flash-message").should("contain", "Saved all changes"); - }); + it("creates default user data", function () { + cy.visit("/tm/user/trendschau"); + cy.url().should("include", "/tm/user/trendschau"); + cy.get('input[name="user[username]"]').should("have.value", "trendschau"); + cy.get('input[name="user[firstname]"]') + .clear() + .type("Sebastian") + .should("have.value", "Sebastian"); + cy.get('input[name="user[lastname]"]') + .clear() + .type("Schürmanns") + .should("have.value", "Schürmanns"); + cy.get('input[name="user[email]"]').should( + "have.value", + "trendschau@gmail.com" + ); + cy.get('select[name="user[userrole]"]').should( + "have.value", + "administrator" + ); + cy.get('input[name="user[password]"]').should("have.value", ""); + cy.get('input[name="user[newpassword]"]').should("have.value", ""); - it("logouts out", function() { - // visits logout link - cy.visit("/tm/logout"); - cy.url().should("include", "/tm/login"); + cy.get("#userform").submit(); + cy.get("#flash-message").should("contain", "Saved all changes"); + }); - // tries to open setup form again and gets redirected to login - cy.visit("/setup"); - cy.url().should("include", "/login"); - }); + it("logouts out", function () { + // visits logout link + cy.visit("/tm/logout"); + cy.url().should("include", "/tm/login"); - it("redirects when tries to setup again", function() { - // tries to open setup form again and gets redirected to login - cy.visit("/setup"); - cy.url().should("include", "/login"); - }); -}); \ No newline at end of file + // tries to open setup form again and gets redirected to login + cy.visit("/setup"); + cy.url().should("include", "/login"); + }); + + it("redirects when tries to setup again", function () { + // tries to open setup form again and gets redirected to login + cy.visit("/setup"); + cy.url().should("include", "/login"); + }); +}); diff --git a/cypress/integration/01_setup/02-initial-frontend.spec.js b/cypress/integration/01_setup/02-initial-frontend.spec.js index d9b64bf..1d54d5a 100644 --- a/cypress/integration/01_setup/02-initial-frontend.spec.js +++ b/cypress/integration/01_setup/02-initial-frontend.spec.js @@ -1,152 +1,155 @@ -describe("Typemill Initial Frontend", function() { - it("has startpage with navigation", function() { - /* visit homepage */ - cy.visit("/"); +describe("Typemill Initial Frontend", function () { + before(function () { + cy.task("prepopulateSetup"); + }); + it("has startpage with navigation", function () { + /* visit homepage */ + cy.visit("/"); - /* has startpage with headline */ - cy.get("h1").contains("Typemill"); + /* has startpage with headline */ + cy.get("h1").contains("Typemill"); - /* has start and setup button */ - cy.get("nav") - .find("a") - .should(($a) => { - expect($a).to.have.length(11); - expect($a[0].href).to.match(/welcome/); - expect($a[1].href).to.match(/welcome\/setup-your-website/); - expect($a[2].href).to.match(/welcome\/manage-access/); - expect($a[3].href).to.match(/welcome\/write-content/); - expect($a[4].href).to.match(/welcome\/get-help/); - expect($a[5].href).to.match(/welcome\/markdown-test/); - expect($a[6].href).to.match(/cyanine-theme/); - expect($a[7].href).to.match(/cyanine-theme\/landingpage/); - expect($a[8].href).to.match(/cyanine-theme\/colors-and-fonts/); - expect($a[9].href).to.match(/cyanine-theme\/footer/); - expect($a[10].href).to.match(/cyanine-theme\/content-elements/); - }); + /* has start and setup button */ + cy.get("nav") + .find("a") + .should(($a) => { + expect($a).to.have.length(11); + expect($a[0].href).to.match(/welcome/); + expect($a[1].href).to.match(/welcome\/setup-your-website/); + expect($a[2].href).to.match(/welcome\/manage-access/); + expect($a[3].href).to.match(/welcome\/write-content/); + expect($a[4].href).to.match(/welcome\/get-help/); + expect($a[5].href).to.match(/welcome\/markdown-test/); + expect($a[6].href).to.match(/cyanine-theme/); + expect($a[7].href).to.match(/cyanine-theme\/landingpage/); + expect($a[8].href).to.match(/cyanine-theme\/colors-and-fonts/); + expect($a[9].href).to.match(/cyanine-theme\/footer/); + expect($a[10].href).to.match(/cyanine-theme\/content-elements/); + }); + }); + + it("has error page", function () { + cy.request({ + url: "/error", + failOnStatusCode: false, + }).then((resp) => { + /* should return 404 not found */ + expect(resp.status).to.eq(404); }); - it("has error page", function() { - cy.request({ - url: "/error", - failOnStatusCode: false, - }).then((resp) => { - /* should return 404 not found */ - expect(resp.status).to.eq(404); - }); + cy.visit("/error", { failOnStatusCode: false }); + cy.url().should("include", "/error"); - cy.visit("/error", { failOnStatusCode: false }); - cy.url().should("include", "/error"); + cy.get("h1").contains("Not Found"); + }); - cy.get("h1").contains("Not Found"); + it("has no access to cache files", function () { + cy.request({ + url: "/cache/structure.txt", + failOnStatusCode: false, + }).then((resp) => { + // redirect status code is 302 + expect(resp.status).to.eq(403); + }); + }); + + it("has no access to dashboard", function () { + cy.visit("/tm/settings"); + cy.url().should("include", "/tm/login"); + }); + + it("has proper markdown test page", function () { + cy.visit("/welcome/markdown-test"); + cy.url().should("include", "/welcome/markdown-test"); + + /* has navigation element */ + cy.get("nav").should("exist"); + + /* check if toc exists */ + cy.get(".TOC").within(($toc) => { + /* check if a certain link in toc exists */ + cy.get("a").eq(2).should("have.attr", "href", "#h-headlines"); }); - it("has no access to cache files", function() { - cy.request({ - url: "/cache/structure.txt", - failOnStatusCode: false, - }).then((resp) => { - // redirect status code is 302 - expect(resp.status).to.eq(403); - }); + /* check if corresponding anchor exists */ + cy.get("#h-headlines").should("exist"); + + /* soft linebreaks */ + cy.get("br").should("exist"); + + /* emphasis */ + cy.get("em").should("exist"); + + /* strong */ + cy.get("strong").should("exist"); + + /* ordered list */ + cy.get("ol").should("exist"); + + /* linebreak */ + cy.get("hr").should("exist"); + + /* links exists? hard to test, any idea? We need to wrap it in a div... */ + + /* images */ + cy.get("img").eq(0).should("have.attr", "alt", "alt"); + cy.get("img") + .eq(0) + .should("have.attr", "src") + .should("include", "media/files/markdown.png"); + cy.get("figure") + .eq(2) + .should("have.id", "myid") + .and("have.class", "otherclass"); + cy.get("img") + .eq(2) + .should("have.attr", "alt", "alt-text") + .and("have.attr", "title", "my title") + .and("have.attr", "width", "150px"); + + /* blockquote */ + cy.get("blockquote").should("exist"); + + /* has navigation element */ + cy.get(".notice1").should("exist"); + cy.get(".notice2").should("exist"); + cy.get(".notice3").should("exist"); + + /* footnote */ + cy.get("sup").eq(0).should("have.id", "fnref1:1"); + cy.get("sup") + .eq(0) + .within(($sup) => { + cy.get("a") + .eq(0) + .should("have.attr", "href", "#fn%3A1") + .and("have.class", "footnote-ref"); + }); + + /* abbreviation */ + cy.get("abbr").should("exist"); + + /* definition list */ + cy.get("dl").should("exist"); + + /* table */ + cy.get("table").should("exist"); + + /* code */ + cy.get("pre").should("exist"); + cy.get("code").should("exist"); + + /* math */ + cy.get(".math").should("exist"); + + /* footnote end */ + cy.get(".footnotes").within(($footnotes) => { + cy.get("li").eq(0).should("have.id", "fn:1"); + cy.get("a") + .eq(0) + .should("have.class", "footnote-backref") + .and("have.attr", "href", "#fnref1%3A1") + .and("have.attr", "rev", "footnote"); }); - - it("has no access to dashboard", function() { - cy.visit("/tm/settings"); - cy.url().should("include", "/tm/login"); - }); - - it("has proper markdown test page", function() { - cy.visit("/welcome/markdown-test"); - cy.url().should("include", "/welcome/markdown-test"); - - /* has navigation element */ - cy.get("nav").should("exist"); - - /* check if toc exists */ - cy.get(".TOC").within(($toc) => { - /* check if a certain link in toc exists */ - cy.get("a").eq(2).should("have.attr", "href", "#h-headlines"); - }); - - /* check if corresponding anchor exists */ - cy.get("#h-headlines").should("exist"); - - /* soft linebreaks */ - cy.get("br").should("exist"); - - /* emphasis */ - cy.get("em").should("exist"); - - /* strong */ - cy.get("strong").should("exist"); - - /* ordered list */ - cy.get("ol").should("exist"); - - /* linebreak */ - cy.get("hr").should("exist"); - - /* links exists? hard to test, any idea? We need to wrap it in a div... */ - - /* images */ - cy.get("img").eq(0).should("have.attr", "alt", "alt"); - cy.get("img") - .eq(0) - .should("have.attr", "src") - .should("include", "media/files/markdown.png"); - cy.get("figure") - .eq(2) - .should("have.id", "myid") - .and("have.class", "otherclass"); - cy.get("img") - .eq(2) - .should("have.attr", "alt", "alt-text") - .and("have.attr", "title", "my title") - .and("have.attr", "width", "150px"); - - /* blockquote */ - cy.get("blockquote").should("exist"); - - /* has navigation element */ - cy.get(".notice1").should("exist"); - cy.get(".notice2").should("exist"); - cy.get(".notice3").should("exist"); - - /* footnote */ - cy.get("sup").eq(0).should("have.id", "fnref1:1"); - cy.get("sup") - .eq(0) - .within(($sup) => { - cy.get("a") - .eq(0) - .should("have.attr", "href", "#fn%3A1") - .and("have.class", "footnote-ref"); - }); - - /* abbreviation */ - cy.get("abbr").should("exist"); - - /* definition list */ - cy.get("dl").should("exist"); - - /* table */ - cy.get("table").should("exist"); - - /* code */ - cy.get("pre").should("exist"); - cy.get("code").should("exist"); - - /* math */ - cy.get(".math").should("exist"); - - /* footnote end */ - cy.get(".footnotes").within(($footnotes) => { - cy.get("li").eq(0).should("have.id", "fn:1"); - cy.get("a") - .eq(0) - .should("have.class", "footnote-backref") - .and("have.attr", "href", "#fnref1%3A1") - .and("have.attr", "rev", "footnote"); - }); - }); -}); \ No newline at end of file + }); +}); diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index 7438135..9b34b67 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -1,4 +1,4 @@ -const fs = require("fs"); +const fs = require("fs-extra"); /// // *********************************************************** @@ -33,6 +33,15 @@ module.exports = (on, config) => { ); } + return null; + }, + prepopulateSetup() { + const settings = "settings"; + const settingsFixture = + "cypress/fixtures/01_setup/prepulate_settings_seed/settings"; + // of course files need to exist in order to perform a delete + fs.copySync(settingsFixture, settings); + return null; }, }); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8be4d23 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,41 @@ +{ + "name": "typemill", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } +} diff --git a/package.json b/package.json index e858ce0..3bf9aef 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "TYPEMILL is a lightweight flat file cms for micro-publishers. You can use it for documentations, manuals, special interest websites, and any other information-driven web-project. You can also enhance Typemill with plugins and generate professional e-books in pdf-format with it. The website http://typemill.net runs with Typemill.", "main": "index.js", "scripts": { - "e2e": "composer update && cypress open --project ." + "e2e": "cypress open --project .", + "install-and-e2e": "npm i && composer update && cypress open --project ." }, "repository": { "type": "git", @@ -15,5 +16,8 @@ "bugs": { "url": "https://github.com/typemill/typemill/issues" }, - "homepage": "https://github.com/typemill/typemill#readme" + "homepage": "https://github.com/typemill/typemill#readme", + "devDependencies": { + "fs-extra": "^10.0.1" + } } \ No newline at end of file