From b3b9d13f54d0af19cb42ee2f30a3093a5d3f2dfd Mon Sep 17 00:00:00 2001 From: Jose Antonio Carmona Date: Mon, 12 Dec 2022 17:06:05 +0100 Subject: [PATCH] [bitnami/ghost] Revisit tests (#13755) * [bitnami/ghost] Revisit tests Signed-off-by: Jose Antonio Carmona * Format and improve tests resiliency Signed-off-by: Jose Antonio Carmona * Update cypress params Signed-off-by: Jose Antonio Carmona Signed-off-by: Jose Antonio Carmona --- .vib/ghost/cypress/cypress.json | 5 +- .../cypress/fixtures/images/post_image.png | Bin 28012 -> 0 bytes .../cypress/fixtures/images/test_image.jpeg | Bin 0 -> 12265 bytes .../cypress/cypress/fixtures/members.csv | 3 - .../ghost/cypress/cypress/fixtures/pages.json | 6 - .../ghost/cypress/cypress/fixtures/posts.json | 2 +- .../cypress/fixtures/user-settings.json | 6 - .../cypress/cypress/integration/ghost_spec.js | 118 +++--------------- .../ghost/cypress/cypress/support/commands.js | 12 +- .vib/ghost/cypress/cypress/support/utils.js | 10 +- .vib/ghost/goss/goss.yaml | 37 +++--- .vib/ghost/goss/vars.yaml | 14 +++ .vib/ghost/vib-publish.json | 6 +- .vib/ghost/vib-verify.json | 6 +- 14 files changed, 75 insertions(+), 150 deletions(-) delete mode 100644 .vib/ghost/cypress/cypress/fixtures/images/post_image.png create mode 100644 .vib/ghost/cypress/cypress/fixtures/images/test_image.jpeg delete mode 100644 .vib/ghost/cypress/cypress/fixtures/members.csv delete mode 100644 .vib/ghost/cypress/cypress/fixtures/pages.json delete mode 100644 .vib/ghost/cypress/cypress/fixtures/user-settings.json create mode 100644 .vib/ghost/goss/vars.yaml diff --git a/.vib/ghost/cypress/cypress.json b/.vib/ghost/cypress/cypress.json index 8fe5cb5ce..6658e5fee 100644 --- a/.vib/ghost/cypress/cypress.json +++ b/.vib/ghost/cypress/cypress.json @@ -1,10 +1,11 @@ { "env": { - "email": "user@example.com", + "email": "vim-tests@example.com", + "username": "bitnamiTest", "password": "Complicated123!4" }, "hosts": { - "bitnami-ghost.my": "{{ TARGET_IP }}" + "vmware-ghost.my": "{{ TARGET_IP }}" }, "defaultCommandTimeout": 60000 } diff --git a/.vib/ghost/cypress/cypress/fixtures/images/post_image.png b/.vib/ghost/cypress/cypress/fixtures/images/post_image.png deleted file mode 100644 index 87ad739c0975a639b66ea5a456cd2a8c7929617b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28012 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 -import { - random, - getPageUrlFromTitle, - getUserFromEmail, -} from '../support/utils'; +import { random } from '../support/utils'; -it('allows to log in and out', () => { - cy.login(); - cy.get("div[class*='avatar']").click(); - cy.contains('Sign out').click(); - cy.contains('Sign in'); -}); - -it('allows to create and publish a new post', () => { +it('allows to create and publish a new post with an image', () => { cy.login(); cy.visit('/ghost/#/posts'); cy.contains('New post').click(); - cy.get('input[type="file"]').selectFile( - 'cypress/fixtures/images/post_image.png', + cy.get('[type="file"]').selectFile( + 'cypress/fixtures/images/test_image.jpeg', { force: true } ); - cy.fixture('posts').then(($posts) => { + cy.fixture('posts').then((posts) => { cy.get('textarea[placeholder="Post title"]').type( - `${$posts.newPost.title}-${random}` + `${posts.newPost.title}-${random}` ); - cy.get('article div[contenteditable="true"]').type(`${$posts.newPost.content}-${random}`, {force: true}); + cy.get('article div[contenteditable="true"]').type(posts.newPost.content, { + force: true, + }); }); // Publishing a post needs 3 steps // Step 1: Open drop-down menu @@ -37,86 +28,15 @@ it('allows to create and publish a new post', () => { cy.get('div[class=gh-publish-cta]').within(() => { cy.contains('Publish').click(); }); - cy.contains('It’s out there').should('be.visible'); - cy.visit('/'); - cy.fixture('posts').then(($posts) => { - cy.contains(`${$posts.newPost.title}-${random}`); - cy.get(`img[alt='${$posts.newPost.title}-${random}']`); - }); -}); - -it('allows to create a new page', () => { - cy.login(); - cy.visit('/ghost/#/pages'); - cy.contains('New page').click(); - cy.fixture('pages').then(($pages) => { - cy.get('textarea[placeholder="Page title"]').type( - `${$pages.newPage.title}-${random}` - ); - // Clicking a different element to trigger save event - cy.get('article').click() - cy.contains('div[class=gh-editor-post-status]', 'Saved'); - cy.get('article').type(`${$pages.newPage.content}-${random}`); - // Ensure content has been saved before publishing - cy.get('textarea[placeholder="Page title"]').click() - cy.contains('div[class=gh-editor-post-status]', 'Saved'); - }); - // Publishing a page needs 3 steps - // Step 1: Open drop down-menu - cy.contains('Publish').click(); - // Step 2: Select the option from the menu - cy.get('div[class=gh-publish-cta]').within(() => { - cy.contains('Continue').click(); - }); - // Step 3: Confirmation pop-up - cy.get('div[class=gh-publish-cta]').within(() => { - cy.contains('Publish').click(); - }); - cy.contains('It’s out there').should('be.visible'); - cy.fixture('pages').then(($pages) => { - cy.visit(getPageUrlFromTitle(`${$pages.newPage.title}-${random}`)); - cy.contains(`${$pages.newPage.title}-${random}`); - cy.contains(`${$pages.newPage.content}-${random}`); - }); -}); - -it('allows to import members', () => { - cy.login(); - cy.visit('/ghost/#/members/import'); - cy.contains('h1', 'Import members').should('be.visible'); - cy.get('input[type="file"]').selectFile('cypress/fixtures/members.csv', { - force: true, - }); - cy.contains('button', 'Import').click(); - cy.contains('Import complete'); - cy.visit('/ghost/#/members/'); - cy.fixture('members') - .then(($rawMembers) => { - // Get an arbitrary member from the collection - let membersArray = $rawMembers.split('\n'); - membersArray.shift(); // Delete CSV column header - return membersArray[Math.floor(Math.random() * membersArray.length)]; - }) - .then(($randomMember) => { - const EMAIL_COLUMN_CSV = 1; - cy.contains($randomMember.split(',')[EMAIL_COLUMN_CSV]); - }); -}); - -it('allows to change users settings', () => { - cy.login(); - cy.visit(`/ghost/#/settings/staff/${getUserFromEmail()}`); - cy.fixture('user-settings').then(($us) => { - cy.get('input#user-name') - .clear() - .type(`${$us.admin.fullname}-${random}`, { force: true }); - cy.get('textarea#user-bio') - .clear() - .type(`${$us.admin.bio}-${random}`, { force: true }); - cy.contains('button', 'Save').click(); - - cy.visit(`/author/${getUserFromEmail()}`); - cy.contains(`${$us.admin.fullname}-${random}`); - cy.contains(`${$us.admin.bio}-${random}`); + cy.fixture('posts').then((posts) => { + // Avoid new tab + cy.contains('a', `${posts.newPost.title}-${random}`) + .invoke('attr', 'href') + .then((url) => { + cy.visit(url); + cy.contains(Cypress.env('username')); + cy.contains(posts.newPost.content); + cy.get(`img[alt='${posts.newPost.title}-${random}']`); + }); }); }); diff --git a/.vib/ghost/cypress/cypress/support/commands.js b/.vib/ghost/cypress/cypress/support/commands.js index 85690c79f..df9927d15 100644 --- a/.vib/ghost/cypress/cypress/support/commands.js +++ b/.vib/ghost/cypress/cypress/support/commands.js @@ -1,5 +1,5 @@ const COMMAND_DELAY = 2000; -const BASE_URL = 'http://bitnami-ghost.my'; +const BASE_URL = 'http://vmware-ghost.my'; for (const command of ['click']) { Cypress.Commands.overwrite(command, (originalFn, ...args) => { @@ -19,20 +19,22 @@ for (const command of ['click']) { // // Further details: https://github.com/cypress-io/cypress/issues/20647 Cypress.Commands.overwrite('visit', (originalFn, url, options) => { - return originalFn(`${BASE_URL}${url}`, options); + // Only replace relative URLs + const targetUrl = url.includes('://') ? url : `${BASE_URL}${url}`; + return originalFn(targetUrl, options); }); Cypress.Commands.add( 'login', (email = Cypress.env('email'), password = Cypress.env('password')) => { cy.visit('/ghost/'); - cy.get('input[type="email"]').should('be.enabled').type(email); - cy.get('input[type="password"]').should('be.enabled').type(password); + cy.get('[type="email"]').type(email); + cy.get('[type="password"]').type(password); cy.contains('button', 'Sign in').click(); // In Ghost, logging is not considered as completed until the Dashboard view // is visible. Navigating to any other site before that will lead to an error // 500 - cy.contains('Dashboard').should('be.visible'); + cy.contains('h2', 'Dashboard').should('be.visible'); } ); diff --git a/.vib/ghost/cypress/cypress/support/utils.js b/.vib/ghost/cypress/cypress/support/utils.js index 7b80bf8e8..445a887ae 100644 --- a/.vib/ghost/cypress/cypress/support/utils.js +++ b/.vib/ghost/cypress/cypress/support/utils.js @@ -1,11 +1,3 @@ /// -export let random = (Math.random() + 1).toString(36).substring(7); - -export const getPageUrlFromTitle = (title) => { - return '/'.concat(title.toLocaleLowerCase().replace(' ', '-')); -}; - -export const getUserFromEmail = (email = Cypress.env('email')) => { - return email.substring(0, email.indexOf('@')); -}; +export let random = (Math.random() + 1).toString(36).substring(7); \ No newline at end of file diff --git a/.vib/ghost/goss/goss.yaml b/.vib/ghost/goss/goss.yaml index f95350f14..751508135 100644 --- a/.vib/ghost/goss/goss.yaml +++ b/.vib/ghost/goss/goss.yaml @@ -1,20 +1,27 @@ +http: + http://localhost:{{ .Vars.containerPorts.http }}: + status: 200 command: - which-ghost: - exec: which ghost +{{- $checkCmd := "ghost config get %s -d /opt/bitnami/ghost | grep -q %d" }} +{{- $dbCheck := printf $checkCmd "database.connection.database" .Vars.mysql.auth.database }} +{{- $userCheck := printf $checkCmd "database.connection.user" .Vars.mysql.auth.username }} +{{- $passCheck := printf $checkCmd "database.connection.password" .Vars.mysql.auth.password }} + check-db-config: + exec: ($dbCheck) && ($userCheck) && ($passCheck) + exit-status: 0 + check-user-info: + exec: id exit-status: 0 stdout: - - "/opt/bitnami/ghost/bin/ghost" - stderr: [ ] - timeout: 40000 + - uid={{ .Vars.containerSecurityContext.runAsUser }} + - /groups=.*{{ .Vars.podSecurityContext.fsGroup }}/ file: - /opt/bitnami/ghost/content: - filetype: symlink - linked-to: /bitnami/ghost/content - exists: true - /bitnami/ghost/config.production.json: - mode: "0644" - filetype: file - exists: true -user: - ghost: + /bitnami/ghost: exists: true + filetype: directory + mode: '2775' + owner: root + /var/run/secrets/kubernetes.io/serviceaccount: + exists: {{ .Vars.serviceAccount.automountServiceAccountToken }} + filetype: directory + mode: "3777" \ No newline at end of file diff --git a/.vib/ghost/goss/vars.yaml b/.vib/ghost/goss/vars.yaml new file mode 100644 index 000000000..d9073155f --- /dev/null +++ b/.vib/ghost/goss/vars.yaml @@ -0,0 +1,14 @@ +containerPorts: + http: 2369 +podSecurityContext: + fsGroup: 1002 +containerSecurityContext: + runAsUser: 1002 +mysql: + auth: + database: bitnami_test_ghost + username: bn_test_ghost + password: bitnami_test_password +serviceAccount: + create: true + automountServiceAccountToken: true \ No newline at end of file diff --git a/.vib/ghost/vib-publish.json b/.vib/ghost/vib-publish.json index 5242a06df..6eea7c23c 100644 --- a/.vib/ghost/vib-publish.json +++ b/.vib/ghost/vib-publish.json @@ -22,7 +22,7 @@ "url": "{SHA_ARCHIVE}", "path": "/bitnami/ghost" }, - "runtime_parameters": "Z2hvc3RVc2VybmFtZTogdXNlcgpnaG9zdFBhc3N3b3JkOiBDb21wbGljYXRlZDEyMyE0Cmdob3N0RW1haWw6IHVzZXJAZXhhbXBsZS5jb20KZ2hvc3RIb3N0OiBiaXRuYW1pLWdob3N0Lm15CnNlcnZpY2U6CiAgdHlwZTogTG9hZEJhbGFuY2VyCiAgcG9ydHM6CiAgICBodHRwOiA4MAo=", + "runtime_parameters": "Z2hvc3RVc2VybmFtZTogYml0bmFtaVRlc3QKZ2hvc3RQYXNzd29yZDogQ29tcGxpY2F0ZWQxMjMhNApnaG9zdEVtYWlsOiB2aW0tdGVzdHNAZXhhbXBsZS5jb20KZ2hvc3RIb3N0OiB2bXdhcmUtZ2hvc3QubXkKZ2hvc3RTa2lwSW5zdGFsbDogZmFsc2UKY29udGFpbmVyUG9ydHM6CiAgaHR0cDogMjM2OQpwb2RTZWN1cml0eUNvbnRleHQ6CiAgZW5hYmxlZDogdHJ1ZQogIGZzR3JvdXA6IDEwMDIKY29udGFpbmVyU2VjdXJpdHlDb250ZXh0OgogIGVuYWJsZWQ6IHRydWUKICBydW5Bc1VzZXI6IDEwMDIKc2VydmljZToKICB0eXBlOiBMb2FkQmFsYW5jZXIKICBwb3J0czoKICAgIGh0dHA6IDgwCm15c3FsOgogIGVuYWJsZWQ6IHRydWUKICBhdXRoOgogICAgZGF0YWJhc2U6IGJpdG5hbWlfdGVzdF9naG9zdAogICAgdXNlcm5hbWU6IGJuX3Rlc3RfZ2hvc3QKICAgIHBhc3N3b3JkOiBiaXRuYW1pX3Rlc3RfcGFzc3dvcmQKc2VydmljZUFjY291bnQ6CiAgY3JlYXRlOiB0cnVlCiAgYXV0b21vdW50U2VydmljZUFjY291bnRUb2tlbjogdHJ1ZQ==", "target_platform": { "target_platform_id": "{VIB_ENV_TARGET_PLATFORM}", "size": { @@ -44,6 +44,7 @@ "resources": { "path": "/.vib/ghost/goss" }, + "vars_file": "vars.yaml", "remote": { "workload": "deploy-ghost" } @@ -58,7 +59,8 @@ "endpoint": "lb-ghost-http", "app_protocol": "HTTP", "env": { - "email": "user@example.com", + "email": "vim-tests@example.com", + "username": "bitnamiTest", "password": "Complicated123!4" } } diff --git a/.vib/ghost/vib-verify.json b/.vib/ghost/vib-verify.json index 64e4adce7..c749d43e6 100644 --- a/.vib/ghost/vib-verify.json +++ b/.vib/ghost/vib-verify.json @@ -22,7 +22,7 @@ "url": "{SHA_ARCHIVE}", "path": "/bitnami/ghost" }, - "runtime_parameters": "Z2hvc3RVc2VybmFtZTogdXNlcgpnaG9zdFBhc3N3b3JkOiBDb21wbGljYXRlZDEyMyE0Cmdob3N0RW1haWw6IHVzZXJAZXhhbXBsZS5jb20KZ2hvc3RIb3N0OiBiaXRuYW1pLWdob3N0Lm15CnNlcnZpY2U6CiAgdHlwZTogTG9hZEJhbGFuY2VyCiAgcG9ydHM6CiAgICBodHRwOiA4MAo=", + "runtime_parameters": "Z2hvc3RVc2VybmFtZTogYml0bmFtaVRlc3QKZ2hvc3RQYXNzd29yZDogQ29tcGxpY2F0ZWQxMjMhNApnaG9zdEVtYWlsOiB2aW0tdGVzdHNAZXhhbXBsZS5jb20KZ2hvc3RIb3N0OiB2bXdhcmUtZ2hvc3QubXkKZ2hvc3RTa2lwSW5zdGFsbDogZmFsc2UKY29udGFpbmVyUG9ydHM6CiAgaHR0cDogMjM2OQpwb2RTZWN1cml0eUNvbnRleHQ6CiAgZW5hYmxlZDogdHJ1ZQogIGZzR3JvdXA6IDEwMDIKY29udGFpbmVyU2VjdXJpdHlDb250ZXh0OgogIGVuYWJsZWQ6IHRydWUKICBydW5Bc1VzZXI6IDEwMDIKc2VydmljZToKICB0eXBlOiBMb2FkQmFsYW5jZXIKICBwb3J0czoKICAgIGh0dHA6IDgwCm15c3FsOgogIGVuYWJsZWQ6IHRydWUKICBhdXRoOgogICAgZGF0YWJhc2U6IGJpdG5hbWlfdGVzdF9naG9zdAogICAgdXNlcm5hbWU6IGJuX3Rlc3RfZ2hvc3QKICAgIHBhc3N3b3JkOiBiaXRuYW1pX3Rlc3RfcGFzc3dvcmQKc2VydmljZUFjY291bnQ6CiAgY3JlYXRlOiB0cnVlCiAgYXV0b21vdW50U2VydmljZUFjY291bnRUb2tlbjogdHJ1ZQ==", "target_platform": { "target_platform_id": "{VIB_ENV_TARGET_PLATFORM}", "size": { @@ -44,6 +44,7 @@ "resources": { "path": "/.vib/ghost/goss" }, + "vars_file": "vars.yaml", "remote": { "workload": "deploy-ghost" } @@ -58,7 +59,8 @@ "endpoint": "lb-ghost-http", "app_protocol": "HTTP", "env": { - "email": "user@example.com", + "email": "vim-tests@example.com", + "username": "bitnamiTest", "password": "Complicated123!4" } }