From bc0e4d59c08eca8e4fcb325ed69ac81feda06684 Mon Sep 17 00:00:00 2001 From: Jonathan Baldie Date: Sat, 2 May 2026 01:53:45 +0100 Subject: [PATCH] fix: keep bookmark timestamps in wall-clock time --- .../modals/bookmarks/BookmarkItem.vue | 2 +- .../modals/bookmarks/BookmarkItem.cy.js | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 client/cypress/tests/components/modals/bookmarks/BookmarkItem.cy.js diff --git a/client/components/modals/bookmarks/BookmarkItem.vue b/client/components/modals/bookmarks/BookmarkItem.vue index 6652a288..661609a6 100644 --- a/client/components/modals/bookmarks/BookmarkItem.vue +++ b/client/components/modals/bookmarks/BookmarkItem.vue @@ -2,7 +2,7 @@

- {{ this.$secondsToTimestamp(bookmark.time / playbackRate) }} + {{ this.$secondsToTimestamp(bookmark.time) }}

diff --git a/client/cypress/tests/components/modals/bookmarks/BookmarkItem.cy.js b/client/cypress/tests/components/modals/bookmarks/BookmarkItem.cy.js new file mode 100644 index 00000000..620131b0 --- /dev/null +++ b/client/cypress/tests/components/modals/bookmarks/BookmarkItem.cy.js @@ -0,0 +1,44 @@ +import BookmarkItem from '@/components/modals/bookmarks/BookmarkItem.vue' + +describe('BookmarkItem', () => { + const propsData = { + bookmark: { + libraryItemId: 'library-item-1', + time: 3661, + title: 'Chapter note' + }, + highlight: false, + playbackRate: 2 + } + + const stubs = { + 'ui-text-input': true, + 'ui-btn': true + } + + it('renders bookmark timestamps from stored wall-clock time', () => { + const mocks = { + $secondsToTimestamp: (seconds) => { + const totalSeconds = Math.floor(seconds) + const hours = Math.floor(totalSeconds / 3600) + const minutes = Math.floor((totalSeconds % 3600) / 60) + const secs = totalSeconds % 60 + return [hours, minutes, secs].map((value) => String(value).padStart(2, '0')).join(':') + }, + $axios: { + $patch: cy.stub().resolves({}) + }, + $toast: { + error: cy.stub() + }, + $strings: { + ToastFailedToUpdate: 'Failed to update' + } + } + + cy.mount(BookmarkItem, { propsData, mocks, stubs }) + + cy.contains('01:01:01').should('be.visible') + cy.contains('00:30:30').should('not.exist') + }) +})