fix: Move content into to frontend directory

Doing this BEFORE the merge prevents a lot of merge conflicts.

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
Tilman Vatteroth 2022-11-11 11:16:18 +01:00
parent 4e18ce38f3
commit 762a0a850e
No known key found for this signature in database
GPG key ID: B97799103358209B
1051 changed files with 0 additions and 35 deletions

View file

@ -0,0 +1,19 @@
/*
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
declare namespace Cypress {
interface Chainable {
/**
* Custom command to check an external Link.
* @example cy.get(a#extern).checkExternalLink('http://example.com')
*/
checkExternalLink(url: string): Chainable<Element>
}
}
Cypress.Commands.add('checkExternalLink', { prevSubject: 'element' }, ($element: JQuery, url: string) => {
cy.wrap($element).should('have.attr', 'href', url).should('have.attr', 'target', '_blank')
})

View file

@ -0,0 +1,103 @@
/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { AuthProviderType } from '../../src/api/config/types'
declare namespace Cypress {
interface Chainable {
loadConfig(): Chainable<Window>
}
}
export const branding = {
name: 'DEMO Corp',
logo: 'public/img/demo.png'
}
export const authProviders = [
{
type: AuthProviderType.FACEBOOK
},
{
type: AuthProviderType.GITHUB
},
{
type: AuthProviderType.TWITTER
},
{
type: AuthProviderType.DROPBOX
},
{
type: AuthProviderType.GOOGLE
},
{
type: AuthProviderType.LOCAL
},
{
type: AuthProviderType.LDAP,
identifier: 'test-ldap',
providerName: 'Test LDAP'
},
{
type: AuthProviderType.OAUTH2,
identifier: 'test-oauth2',
providerName: 'Test OAuth2'
},
{
type: AuthProviderType.SAML,
identifier: 'test-saml',
providerName: 'Test SAML'
},
{
type: AuthProviderType.GITLAB,
identifier: 'test-gitlab',
providerName: 'Test GitLab'
}
]
export const config = {
allowAnonymous: true,
allowRegister: true,
authProviders: authProviders,
branding: branding,
useImageProxy: false,
specialUrls: {
privacy: 'https://example.com/privacy',
termsOfUse: 'https://example.com/termsOfUse',
imprint: 'https://example.com/imprint'
},
version: {
major: 0,
minor: 0,
patch: 0,
preRelease: '',
commit: 'MOCK'
},
plantumlServer: 'http://mock-plantuml.local',
maxDocumentLength: 200
}
Cypress.Commands.add('loadConfig', (additionalConfig?: Partial<typeof config>) => {
return cy.intercept('api/private/config', {
statusCode: 200,
body: {
...config,
...additionalConfig
}
})
})
beforeEach(() => {
cy.loadConfig()
cy.intercept('GET', 'public/motd.md', {
body: '404 Not Found!',
statusCode: 404
})
cy.intercept('HEAD', 'public/motd.md', {
statusCode: 404
})
})

View file

@ -0,0 +1,30 @@
/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
// ***********************************************************
// This example support/index.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 'cypress-commands'
import './check-links'
import './config'
import './fill'
import './get-by-id'
import './get-iframe-content'
import './logout'
import './visit-test-editor'
import './visit'

View file

@ -0,0 +1,29 @@
/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import 'cypress-fill-command'
declare namespace Cypress {
interface Chainable {
setCodemirrorContent(value: string): Chainable<Element>
}
}
Cypress.Commands.add('setCodemirrorContent', (content: string) => {
const line = content.split('\n').find((value) => value !== '')
cy.getByCypressId('editor-pane')
.should('have.attr', 'data-cypress-editor-ready', 'true')
.get('.cm-editor')
.click()
.get('.cm-content')
.fill(content)
if (line) {
cy.getByCypressId('editor-pane')
.should('have.attr', 'data-cypress-editor-ready', 'true')
.get('.cm-editor')
.find('.cm-line')
.should('contain.text', line)
}
})

View file

@ -0,0 +1,28 @@
/*
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
declare namespace Cypress {
interface Chainable {
getByCypressId(id: string): Chainable<Element>
findByCypressId(id: string): Chainable<Element>
}
}
const CYPRESS_ATTR = 'data-cypress-id'
Cypress.Commands.add('getByCypressId', (id: string) => {
return cy.get(`[${CYPRESS_ATTR}="${id}"]`)
})
Cypress.Commands.add(
'findByCypressId',
{
prevSubject: 'element'
},
(parent: JQuery<HTMLElement>, id: string) => {
return cy.wrap(parent).find(`[${CYPRESS_ATTR}="${id}"]`)
}
)

View file

@ -0,0 +1,49 @@
/*
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { RendererType } from '../../src/components/render-page/window-post-message-communicator/rendering-message'
declare namespace Cypress {
interface Chainable<Subject = unknown> {
getIframeBody(rendererType?: RendererType): Chainable<Element>
getReveal(): Chainable<Element>
getMarkdownBody(): Chainable<Element>
getIntroBody(): Chainable<Element>
getMotdBody(): Chainable<Element>
}
}
Cypress.Commands.add('getIframeBody', (rendererType?: RendererType) => {
const renderTypeAttribute = rendererType ? `[data-cypress-renderer-type="${rendererType}"]` : ''
return cy
.get(`iframe[data-cypress-id="documentIframe"][data-cypress-renderer-ready="true"]${renderTypeAttribute}`)
.should('be.visible')
.its('0.contentDocument')
.should('exist')
.its('body')
.should('not.be.undefined')
.then(cy.wrap.bind(cy))
})
Cypress.Commands.add('getReveal', () => {
return cy.getIframeBody(RendererType.SLIDESHOW).find('.reveal')
})
Cypress.Commands.add('getMarkdownBody', () => {
return cy.getIframeBody(RendererType.DOCUMENT).findByCypressId('markdown-body')
})
Cypress.Commands.add('getIntroBody', () => {
return cy.getIframeBody(RendererType.INTRO).findByCypressId('markdown-body')
})
Cypress.Commands.add('getMotdBody', () => {
return cy.getIframeBody(RendererType.MOTD).findByCypressId('markdown-body')
})

View file

@ -0,0 +1,20 @@
/*
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
declare namespace Cypress {
interface Chainable {
/**
* Custom command to log the user out.
* @example cy.logout()
*/
logout(): Chainable<Window>
}
}
Cypress.Commands.add('logout', () => {
cy.getByCypressId('user-dropdown').click()
cy.getByCypressId('user-dropdown-sign-out-button').click()
})

View file

@ -0,0 +1,32 @@
/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
export const testNoteId = 'test'
beforeEach(() => {
cy.intercept(`api/private/notes/${testNoteId}`, {
content: '',
metadata: {
id: testNoteId,
alias: ['mock-note'],
primaryAlias: 'mock-note',
title: 'Mock Note',
description: 'Mocked note for testing',
tags: ['test', 'mock', 'cypress'],
updateTime: '2021-04-24T09:27:51.000Z',
updateUser: null,
viewCount: 0,
version: 2,
createTime: '2021-04-24T09:27:51.000Z',
editedBy: [],
permissions: {
owner: null,
sharedToUsers: [],
sharedToGroups: []
}
},
editedByAtPosition: []
})
})

View file

@ -0,0 +1,38 @@
/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { testNoteId } from './visit-test-editor'
declare namespace Cypress {
interface Chainable {
visitTestNote(pageMode?: PAGE_MODE, query?: string): Chainable<Cypress.AUTWindow>
visitHome(): Chainable<Cypress.AUTWindow>
visitHistory(): Chainable<Cypress.AUTWindow>
}
}
Cypress.Commands.add('visitHome', () => {
return cy.visit('/', { retryOnNetworkFailure: true, retryOnStatusCodeFailure: true })
})
Cypress.Commands.add('visitHistory', () => {
return cy.visit(`/history`, { retryOnNetworkFailure: true, retryOnStatusCodeFailure: true })
})
export enum PAGE_MODE {
EDITOR = 'n',
PRESENTATION = 'p',
DOCUMENT_READ_ONLY = 's'
}
Cypress.Commands.add('visitTestNote', (pageMode: PAGE_MODE = PAGE_MODE.EDITOR, query?: string) => {
return cy.visit(`/${pageMode}/${testNoteId}${query ? `?${query}` : ''}`, {
retryOnNetworkFailure: true,
retryOnStatusCodeFailure: true
})
})