refactor: remove history page

This needs to be done since the backend does not include code
for the history page anymore. This will be replaced with the
explore page in the near future anyway.

Co-authored-by: Philip Molares <philip.molares@udo.edu>
Signed-off-by: Philip Molares <philip.molares@udo.edu>
Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
Erik Michelson 2025-05-17 23:27:15 +02:00
parent c0ce00b3f9
commit d67e44f540
No known key found for this signature in database
GPG key ID: DB99ADDDC5C0AF82
75 changed files with 76 additions and 2727 deletions

View file

@ -1,206 +0,0 @@
/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import type { HistoryEntry } from '../../src/api/history/types'
describe('History', () => {
describe('History Mode', () => {
beforeEach(() => {
cy.visitHistory()
})
it('Cards', () => {
cy.getByCypressId('history-card').should('be.visible')
})
it('Table', () => {
cy.getByCypressId('history-mode-table').click()
cy.getByCypressId('history-table').should('be.visible')
})
})
describe('entry title', () => {
describe('is as given when not empty', () => {
beforeEach(() => {
cy.clearLocalStorage('history')
cy.intercept('GET', '/api/private/me/history', {
body: [
{
identifier: 'cypress',
title: 'Features',
lastVisitedAt: '2020-05-16T22:26:56.547Z',
pinStatus: false,
tags: []
} as HistoryEntry
]
})
cy.visitHistory()
})
it('in table view', () => {
cy.getByCypressId('history-mode-table').click()
cy.getByCypressId('history-table').should('be.visible')
cy.getByCypressId('history-entry-title').contains('Features')
})
it('in cards view', () => {
cy.getByCypressId('history-entry-title').contains('Features')
})
})
describe('is untitled when not empty', () => {
beforeEach(() => {
cy.clearLocalStorage('history')
cy.intercept('GET', '/api/private/me/history', {
body: [
{
identifier: 'cypress-no-title',
title: '',
lastVisitedAt: '2020-05-16T22:26:56.547Z',
pinStatus: false,
tags: []
} as HistoryEntry
]
})
cy.visitHistory()
})
it('in table view', () => {
cy.getByCypressId('history-mode-table').click()
cy.getByCypressId('history-table').should('be.visible')
cy.getByCypressId('history-entry-title').contains('Untitled')
})
it('in cards view', () => {
cy.getByCypressId('history-entry-title').contains('Untitled')
})
})
})
describe('Pinning', () => {
beforeEach(() => {
cy.visitHistory()
})
describe('working', () => {
beforeEach(() => {
cy.intercept('PUT', '/api/private/me/history/features', (req) => {
req.reply(200, req.body)
})
})
it('Cards', () => {
cy.getByCypressId('history-card').should('be.visible')
cy.get('[data-cypress-card-title=Features]')
.findByCypressId('history-entry-pin-button')
.should('have.attr', 'data-cypress-pinned', 'true')
.click()
cy.get('[data-cypress-card-title=Features]')
.findByCypressId('history-entry-pin-button')
.should('have.attr', 'data-cypress-pinned', 'false')
})
it('Table', () => {
cy.getByCypressId('history-mode-table').click()
cy.get('[data-cypress-entry-title=Features]')
.findByCypressId('history-entry-pin-button')
.should('have.attr', 'data-cypress-pinned', 'true')
.click()
cy.get('[data-cypress-entry-title=Features]')
.findByCypressId('history-entry-pin-button')
.should('have.attr', 'data-cypress-pinned', 'false')
})
})
describe('failing', () => {
beforeEach(() => {
cy.intercept('PUT', '/api/private/me/history/features', {
statusCode: 401
})
})
it('Cards', () => {
cy.getByCypressId('history-card').should('be.visible')
cy.get('[data-cypress-card-title=Features]')
.findByCypressId('history-entry-pin-button')
.should('have.attr', 'data-cypress-pinned', 'true')
.click()
cy.getByCypressId('notification-toast').should('be.visible')
})
it('Table', () => {
cy.getByCypressId('history-mode-table').click()
cy.get('[data-cypress-entry-title=Features]')
.findByCypressId('history-entry-pin-button')
.should('have.attr', 'data-cypress-pinned', 'true')
.click()
cy.getByCypressId('notification-toast').should('be.visible')
})
})
})
describe('Import', () => {
beforeEach(() => {
cy.clearLocalStorage('history')
cy.intercept('GET', '/api/private/me/history', {
body: []
})
cy.visitHistory()
cy.logOut()
cy.fixture('history.json').as('history')
cy.fixture('history-2.json').as('history-2')
cy.fixture('invalid-history.txt').as('invalid-history')
})
it('works with valid file', () => {
cy.getByCypressId('import-history-file-button').should('be.visible')
cy.getByCypressId('import-history-file-input').selectFile(
{
contents: '@history',
fileName: 'history.json',
mimeType: 'application/json'
},
{ force: true }
)
cy.getByCypressId('history-entry-title').should('have.length', 1).contains('cy-Test')
})
it('fails on invalid file', () => {
cy.getByCypressId('import-history-file-button').should('be.visible')
cy.getByCypressId('import-history-file-input').selectFile(
{
contents: '@invalid-history',
fileName: 'invalid-history.txt',
mimeType: 'text/plain'
},
{ force: true }
)
cy.getByCypressId('notification-toast').should('be.visible')
})
it('works when selecting two files with the same name', () => {
cy.getByCypressId('import-history-file-button').should('be.visible')
cy.getByCypressId('import-history-file-input').selectFile(
{
contents: '@history',
fileName: 'history.json',
mimeType: 'application/json'
},
{ force: true }
)
cy.getByCypressId('history-entry-title').should('have.length', 1).contains('cy-Test')
cy.getByCypressId('import-history-file-button').should('be.visible')
cy.getByCypressId('import-history-file-input').selectFile(
{
contents: '@history-2',
fileName: 'history.json',
mimeType: 'application/json'
},
{ force: true }
)
cy.getByCypressId('history-entry-title').should('have.length', 2).contains('cy-Test2')
})
})
})

View file

@ -19,7 +19,7 @@ describe('Revision modal', () => {
createdAt: defaultCreatedAt,
length: 2788,
authorUsernames: [],
anonymousAuthorCount: 4,
guestAuthorUuids: ['1', '2', '3', '4'],
title: 'Features',
description: 'Many features, such wow!',
tags: ['hedgedoc', 'demo', 'react']
@ -29,7 +29,7 @@ describe('Revision modal', () => {
createdAt: defaultCreatedAt,
length: 2782,
authorUsernames: [],
anonymousAuthorCount: 2,
guestAuthorUuids: ['1', '2'],
title: 'Features',
description: 'Many more features, such wow!',
tags: ['hedgedoc', 'demo', 'react']
@ -81,7 +81,7 @@ describe('Revision modal', () => {
edits: [],
length: 2788,
authorUsernames: [],
anonymousAuthorCount: 4,
authorGuestUuids: ['1', '2', '3'],
content: testContent
})

View file

@ -8,20 +8,13 @@ import type { NoteDto } from '@hedgedoc/commons'
export const testNoteId = 'test'
const mockMetadata = {
id: testNoteId,
aliases: [
{
name: 'mock-note',
primaryAlias: true,
noteId: testNoteId
}
],
aliases: ['mock-note'],
primaryAlias: 'mock-note',
title: 'Mock Note',
description: 'Mocked note for testing',
tags: ['test', 'mock', 'cypress'],
updatedAt: '2021-04-24T09:27:51.000Z',
lastUpdatedBy: null,
viewCount: 0,
version: 2,
createdAt: '2021-04-24T09:27:51.000Z',
editedBy: [],

View file

@ -19,10 +19,6 @@ 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',