diff --git a/packages/entities/entities-certificates/sandbox/pages/CertificateFormPage.vue b/packages/entities/entities-certificates/sandbox/pages/CertificateFormPage.vue index a126501c36..ca845e2a20 100644 --- a/packages/entities/entities-certificates/sandbox/pages/CertificateFormPage.vue +++ b/packages/entities/entities-certificates/sandbox/pages/CertificateFormPage.vue @@ -11,6 +11,7 @@ @@ -48,6 +49,7 @@ const kongManagerConfig = ref({ workspace: 'default', apiBaseUrl: '/kong-manager', // For local dev server proxy cancelRoute: { name: 'certificate-list' }, + sniListRoute: { name: 'sni-list' }, }) const onError = (error: AxiosError) => { diff --git a/packages/entities/entities-certificates/src/components/CertificateForm.cy.ts b/packages/entities/entities-certificates/src/components/CertificateForm.cy.ts index 0f14b3c66f..86841f2aea 100644 --- a/packages/entities/entities-certificates/src/components/CertificateForm.cy.ts +++ b/packages/entities/entities-certificates/src/components/CertificateForm.cy.ts @@ -6,19 +6,22 @@ import type { KongManagerCertificateFormConfig, KonnectCertificateFormConfig } f import CertificateForm from './CertificateForm.vue' const cancelRoute = { name: 'certificates-list' } +const sniListRoute = { name: 'snis-list' } -const baseConfigKonnect:KonnectCertificateFormConfig = { +const baseConfigKonnect: KonnectCertificateFormConfig = { app: 'konnect', controlPlaneId: '1234-abcd-ilove-cats', apiBaseUrl: '/us/kong-api', cancelRoute, + sniListRoute, } -const baseConfigKM:KongManagerCertificateFormConfig = { +const baseConfigKM: KongManagerCertificateFormConfig = { app: 'kongManager', workspace: 'default', apiBaseUrl: '/kong-manager', cancelRoute, + sniListRoute, } /** @@ -120,6 +123,7 @@ describe('', () => { cy.mount(CertificateForm, { props: { config: baseConfigKM, + showSnisField: true, }, }) cy.get('.kong-ui-entities-certificates-form').should('be.visible') @@ -134,6 +138,7 @@ describe('', () => { cy.getTestId('certificate-form-key').should('be.visible') cy.getTestId('certificate-form-cert-alt').should('be.visible') cy.getTestId('certificate-form-key-alt').should('be.visible') + cy.getTestId('sni-field-input-1').should('be.visible') cy.getTestId('certificate-form-tags').should('be.visible') }) @@ -151,8 +156,8 @@ describe('', () => { cy.getTestId('form-cancel').should('be.enabled') cy.getTestId('form-submit').should('be.disabled') // enables save when required fields have values - cy.getTestId('certificate-form-cert').type(certificate1.cert) - cy.getTestId('certificate-form-key').type(certificate1.key) + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) cy.getTestId('form-submit').should('be.enabled') // disables save when required field is cleared cy.getTestId('certificate-form-cert').clear() @@ -279,12 +284,12 @@ describe('', () => { cy.getTestId('form-cancel').should('be.enabled') cy.getTestId('form-submit').should('be.disabled') // enables save when required fields have values - cy.getTestId('certificate-form-cert').type(certificate1.cert) - cy.getTestId('certificate-form-key').type(certificate1.key) + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) // replaces all the newlines with spaces; this should fail the validation - cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert.replaceAll('\n', ' ')) - cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key.replaceAll('\n', ' ')) + cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert.replaceAll('\n', ' '), { delay: 0 }) + cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key.replaceAll('\n', ' '), { delay: 0 }) cy.getTestId('form-submit').should('be.enabled') @@ -312,12 +317,43 @@ describe('', () => { cy.getTestId('form-cancel').should('be.enabled') cy.getTestId('form-submit').should('be.disabled') // enables save when required fields have values - cy.getTestId('certificate-form-cert').type(certificate1.cert) - cy.getTestId('certificate-form-key').type(certificate1.key) + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) // replaces all the newlines with spaces; this should fail the validation - cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert) - cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key) + cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert, { delay: 0 }) + cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key, { delay: 0 }) + + cy.getTestId('form-submit').should('be.enabled') + + cy.get('@vueWrapper').then((wrapper: any) => wrapper.findComponent(EntityBaseForm) + .vm.$emit('submit')) + + cy.wait('@validateCertificate').its('response.statusCode').should('eq', 200) + cy.wait('@createCertificate').its('response.statusCode').should('eq', 200) + }) + + it('should not fail when SNI is provided', () => { + interceptKM() + interceptUpdate() + + cy.mount(CertificateForm, { + props: { + config: baseConfigKM, + showSnisField: true, + }, + }).then(({ wrapper }) => wrapper) + .as('vueWrapper') + + cy.get('.kong-ui-entities-certificates-form').should('be.visible') + // default button state + cy.getTestId('form-cancel').should('be.visible') + cy.getTestId('form-submit').should('be.visible') + cy.getTestId('form-cancel').should('be.enabled') + cy.getTestId('form-submit').should('be.disabled') + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) + cy.getTestId('sni-field-input-1').type('foo') cy.getTestId('form-submit').should('be.enabled') @@ -391,6 +427,7 @@ describe('', () => { cy.mount(CertificateForm, { props: { config: baseConfigKonnect, + showSnisField: true, }, }) @@ -406,6 +443,7 @@ describe('', () => { cy.getTestId('certificate-form-key').should('be.visible') cy.getTestId('certificate-form-cert-alt').should('be.visible') cy.getTestId('certificate-form-key-alt').should('be.visible') + cy.getTestId('sni-field-input-1').should('be.visible') cy.getTestId('certificate-form-tags').should('be.visible') }) @@ -422,8 +460,8 @@ describe('', () => { cy.getTestId('form-cancel').should('be.enabled') cy.getTestId('form-submit').should('be.disabled') // enables save when required fields have values - cy.getTestId('certificate-form-cert').type(certificate1.cert) - cy.getTestId('certificate-form-key').type(certificate1.key) + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) cy.getTestId('form-submit').should('be.enabled') // disables save when required field is cleared cy.getTestId('certificate-form-cert').clear() @@ -550,12 +588,12 @@ describe('', () => { cy.getTestId('form-cancel').should('be.enabled') cy.getTestId('form-submit').should('be.disabled') // enables save when required fields have values - cy.getTestId('certificate-form-cert').type(certificate1.cert) - cy.getTestId('certificate-form-key').type(certificate1.key) + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) // replaces all the newlines with spaces; this should fail the validation - cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert.replaceAll('\n', ' ')) - cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key.replaceAll('\n', ' ')) + cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert.replaceAll('\n', ' '), { delay: 0 }) + cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key.replaceAll('\n', ' '), { delay: 0 }) cy.getTestId('form-submit').should('be.enabled') @@ -583,12 +621,43 @@ describe('', () => { cy.getTestId('form-cancel').should('be.enabled') cy.getTestId('form-submit').should('be.disabled') // enables save when required fields have values - cy.getTestId('certificate-form-cert').type(certificate1.cert) - cy.getTestId('certificate-form-key').type(certificate1.key) + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) // replaces all the newlines with spaces; this should fail the validation - cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert) - cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key) + cy.getTestId('certificate-form-cert-alt').type(secp384r1CertKeyPair.cert, { delay: 0 }) + cy.getTestId('certificate-form-key-alt').type(secp384r1CertKeyPair.key, { delay: 0 }) + + cy.getTestId('form-submit').should('be.enabled') + + cy.get('@vueWrapper').then((wrapper: any) => wrapper.findComponent(EntityBaseForm) + .vm.$emit('submit')) + + cy.wait('@validateCertificate').its('response.statusCode').should('eq', 200) + cy.wait('@createCertificate').its('response.statusCode').should('eq', 200) + }) + + it('should not fail when SNI is provided', () => { + interceptKonnect() + interceptUpdate() + + cy.mount(CertificateForm, { + props: { + config: baseConfigKonnect, + showSnisField: true, + }, + }).then(({ wrapper }) => wrapper) + .as('vueWrapper') + + cy.get('.kong-ui-entities-certificates-form').should('be.visible') + // default button state + cy.getTestId('form-cancel').should('be.visible') + cy.getTestId('form-submit').should('be.visible') + cy.getTestId('form-cancel').should('be.enabled') + cy.getTestId('form-submit').should('be.disabled') + cy.getTestId('certificate-form-cert').type(certificate1.cert, { delay: 0 }) + cy.getTestId('certificate-form-key').type(certificate1.key, { delay: 0 }) + cy.getTestId('sni-field-input-1').type('foo') cy.getTestId('form-submit').should('be.enabled')