Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(Walk > Rename): Port /api/rename from hapi to Next.js #623

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ yarn-error.log*
# typescript
tsconfig.tsbuildinfo

# IDE
.vscode

api/node_modules
api/.nyc_output
api/server/plugins/*/public/assets
Expand Down
1 change: 1 addition & 0 deletions api/server/plugins/rename/lib/filenames.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Ported to Next.js
const path = require('path');

const utils = require('../../utils');
Expand Down
2 changes: 1 addition & 1 deletion api/server/plugins/rename/test/filenames.spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const tape = require('tape-catch');

// Ported to Next.js
tape('Filenames', { skip: false }, (describe) => {
const lib = require('../lib/filenames');

Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"@emotion/styled": "^11.13.0",
"@hello-pangea/dnd": "^16.6.0",
"@mui/joy": "^5.0.0-beta.32",
"async": "2.6.4",
"boom": "^7.3.0",
"camelcase": "^6.3.0",
"color-thief-react": "^2.1.0",
Expand All @@ -39,6 +40,7 @@
"@playwright/test": "^1.48.2",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^15.0.7",
"@types/async": "2.6.4",
"@types/boom": "^7.3.5",
"@types/geojson": "^7946.0.14",
"@types/heic-convert": "^1.2.3",
Expand Down
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
292 changes: 292 additions & 0 deletions src/lib/__tests__/filenames.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,292 @@
import { futureFilenamesOutputs, uniqueFiles, videoTypeInList } from '../filenames'

describe('Filenames', () => {
/*
* # # #######
* # # # # # #### # # ###### # # # ###### ####
* # # ## # # # # # # # # # # # #
* # # # # # # # # # # ##### ##### # # ##### ####
* # # # # # # # # # # # # # # # # #
* # # # ## # # # # # # # # # # # #
* ##### # # # ### # #### ###### # # ###### ###### ####
*
*/
describe('Unique', () => {
test('One photo per day', () => {
const sourceFilenames = ['media1.jpg']
const result = uniqueFiles(sourceFilenames)
const results = result.values()

expect(result.size).toBe(1)
expect(results.next().value).toBe('media1')
})

test('Two photos per day', () => {
const sourceFilenames = ['media1.jpg', 'media1.avi', 'media2.jpg']
const result = uniqueFiles(sourceFilenames)
const results = result.values()

expect(result.size).toBe(2)
expect(results.next().value).toBe('media1')
expect(results.next().value).toBe('media2')
})

test('Three photos per day', () => {
const sourceFilenames = ['media1.jpg', 'media2.avi', 'media3.mts']
const result = uniqueFiles(sourceFilenames)
const results = result.values()

expect(result.size).toBe(3)
expect(results.next().value).toBe('media1')
expect(results.next().value).toBe('media2')
expect(results.next().value).toBe('media3')
})
})

/*
* # # #######
* # # # ##### ###### #### # # # ##### ######
* # # # # # # # # # # # # # #
* # # # # # ##### # # # # # # #####
* # # # # # # # # # # ##### #
* # # # # # # # # # # # #
* # # ##### ###### #### # # # ######
*
*/
describe('Video Type', () => {
test('Blank photo', () => {
const sourceFilenames = ['']
const result = videoTypeInList(sourceFilenames, 'media1')

expect(result).toBe(false)
})

test('One photo', () => {
const sourceFilenames = ['media1.jpg']
const result = videoTypeInList(sourceFilenames, 'media1')

expect(result).toBe(false)
})

test('Two photos', () => {
const sourceFilenames = ['media1.jpg', 'media2.jpg', 'media2.avi']
const result = videoTypeInList(sourceFilenames, 'media2')

expect(result).toBe(true)
})
})

/*
* ####### #######
* # # # ##### # # ##### ###### # # # ###### # # ## # # ###### ####
* # # # # # # # # # # # # # ## # # # ## ## # #
* ##### # # # # # # # ##### ##### # # ##### # # # # # # ## # ##### ####
* # # # # # # ##### # # # # # # # # ###### # # # #
* # # # # # # # # # # # # # # ## # # # # # # #
* # #### # #### # # ###### # # ###### ###### # # # # # # ###### ####
*
*/
describe('Future', () => {
test('One photo per day', () => {
const sourceFilenames = ['media1.jpg']
const prefix = '2016-12-01'
const result = futureFilenamesOutputs(sourceFilenames, prefix)

expect(result.filenames[0]).toBe(`${prefix}-50.jpg`)
expect(result.files[0]).toBe(`${prefix}-50`)
expect(result.xml).toBe(`<item id="100"><filename>${prefix}-50.jpg</filename></item>`)
})

test('Two photos per day', () => {
const sourceFilenames = ['media1.jpg', 'media2.jpg']
const prefix = '2016-12-02'
const result = futureFilenamesOutputs(sourceFilenames, prefix)

expect(result.filenames[0]).toBe(`${prefix}-50.jpg`)
expect(result.filenames[1]).toBe(`${prefix}-90.jpg`)
expect(result.files[0]).toBe(`${prefix}-50`)
expect(result.files[1]).toBe(`${prefix}-90`)
expect(result.xml).toBe(
`<item id="100"><filename>${prefix}-50.jpg</filename></item>`
+ `<item id="101"><filename>${prefix}-90.jpg</filename></item>`,
'XML',
)
})

test('Three photos per day', () => {
const sourceFilenames = ['media1.jpg', 'media2.jpg', 'media3.jpeg']
const prefix = '2016-12-03'
const result = futureFilenamesOutputs(sourceFilenames, prefix)

expect(result.filenames[0]).toBe(`${prefix}-37.jpg`)
expect(result.filenames[1]).toBe(`${prefix}-64.jpg`)
expect(result.filenames[2]).toBe(`${prefix}-90.jpg`)
expect(result.files[0]).toBe(`${prefix}-37`)
expect(result.files[1]).toBe(`${prefix}-64`)
expect(result.files[2]).toBe(`${prefix}-90`)
expect(result.xml).toBe(
`<item id="100"><filename>${prefix}-37.jpg</filename></item>`
+ `<item id="101"><filename>${prefix}-64.jpg</filename></item>`
+ `<item id="102"><filename>${prefix}-90.jpg</filename></item>`,
'XML',
)
})

test('Four photos per day', () => {
const sourceFilenames = ['media1.jpg', 'media2.jpg', 'media3.jpeg', 'media3.m2ts', 'media4.jpeg']
const prefix = '2016-12-04'
const result = futureFilenamesOutputs(sourceFilenames, prefix)

expect(result.filenames[0]).toBe(`${prefix}-30.jpg`)
expect(result.filenames[1]).toBe(`${prefix}-50.jpg`)
expect(result.filenames[2]).toBe(`${prefix}-70.jpg`)
expect(result.filenames[3]).toBe(`${prefix}-90.jpg`)
expect(result.files[0]).toBe(`${prefix}-30`)
expect(result.files[1]).toBe(`${prefix}-50`)
expect(result.files[2]).toBe(`${prefix}-70`)
expect(result.files[3]).toBe(`${prefix}-90`)
expect(result.xml).toBe(
`<item id="100"><filename>${prefix}-30.jpg</filename></item>`
+ `<item id="101"><filename>${prefix}-50.jpg</filename></item>`
+ `<item id="102"><type>video</type><filename>${prefix}-70.mp4</filename><filename>${prefix}-70.webm</filename></item>`
+ `<item id="103"><filename>${prefix}-90.jpg</filename></item>`,
'XML',
)
})

test('Five photos per day', () => {
const sourceFilenames = ['media1.jpg', 'media2.jpg', 'media3.jpeg', 'media3.m2ts', 'media4.jpeg', 'media5.jpg']
const prefix = '2016-12-05'
const result = futureFilenamesOutputs(sourceFilenames, prefix)

expect(result.filenames[0]).toBe(`${prefix}-26.jpg`)
expect(result.filenames[1]).toBe(`${prefix}-42.jpg`)
expect(result.filenames[2]).toBe(`${prefix}-58.jpg`)
expect(result.filenames[3]).toBe(`${prefix}-74.jpg`)
expect(result.filenames[4]).toBe(`${prefix}-90.jpg`)
expect(result.files[0]).toBe(`${prefix}-26`)
expect(result.files[1]).toBe(`${prefix}-42`)
expect(result.files[2]).toBe(`${prefix}-58`)
expect(result.files[3]).toBe(`${prefix}-74`)
expect(result.files[4]).toBe(`${prefix}-90`)
})

test('34 photos per day', () => {
const sourceFilenames = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg', '10.jpg',
'11.jpg', '12.jpg', '13.jpg', '14.jpg', '15.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '20.jpg',
'21.jpg', '22.jpg', '23.jpg', '24.jpg', '25.jpg', '26.jpg', '27.jpg', '28.jpg', '29.jpg', '30.jpg',
'31.jpg', '32.jpg', '33.jpg', '34.jpg']
const prefix = '2017-01-03'
const result = futureFilenamesOutputs(sourceFilenames, prefix)

expect(result.files[0]).toBe(`${prefix}-12`)
expect(result.files[1]).toBe(`${prefix}-14`)
expect(result.files[2]).toBe(`${prefix}-17`)
expect(result.files[3]).toBe(`${prefix}-19`)
expect(result.files[4]).toBe(`${prefix}-21`)
expect(result.files[5]).toBe(`${prefix}-24`)
expect(result.files[6]).toBe(`${prefix}-26`)
expect(result.files[7]).toBe(`${prefix}-29`)
expect(result.files[8]).toBe(`${prefix}-31`)
expect(result.files[9]).toBe(`${prefix}-33`)
expect(result.files[10]).toBe(`${prefix}-36`)
expect(result.files[11]).toBe(`${prefix}-38`)
expect(result.files[12]).toBe(`${prefix}-40`)
expect(result.files[13]).toBe(`${prefix}-43`)
expect(result.files[14]).toBe(`${prefix}-45`)
expect(result.files[15]).toBe(`${prefix}-48`)
expect(result.files[16]).toBe(`${prefix}-50`)
expect(result.files[17]).toBe(`${prefix}-52`)
expect(result.files[18]).toBe(`${prefix}-55`)
expect(result.files[19]).toBe(`${prefix}-57`)
expect(result.files[20]).toBe(`${prefix}-60`)

expect(result.files[33]).toBe(`${prefix}-90`)
})

test('62 photos per day', () => {
const sourceFilenames = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg', '10.jpg',
'11.jpg', '12.jpg', '13.jpg', '14.jpg', '15.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '20.jpg',
'21.jpg', '22.jpg', '23.jpg', '24.jpg', '25.jpg', '26.jpg', '27.jpg', '28.jpg', '29.jpg', '30.jpg',
'31.jpg', '32.jpg', '33.jpg', '34.jpg', '35.jpg', '36.jpg', '37.jpg', '38.jpg', '39.jpg', '40.jpg',
'41.jpg', '42.jpg', '43.jpg', '44.jpg', '45.jpg', '46.jpg', '47.jpg', '48.jpg', '49.jpg', '50.jpg',
'51.jpg', '52.jpg', '53.jpg', '54.jpg', '55.jpg', '56.jpg', '57.jpg', '58.jpg', '59.jpg', '60.jpg',
'61.jpg', '62.jpg']
const prefix = '2017-03-01'
const result = futureFilenamesOutputs(sourceFilenames, prefix)

expect(result.files[0]).toBe(`${prefix}-11`)
expect(result.files[1]).toBe(`${prefix}-12`)
expect(result.files[2]).toBe(`${prefix}-13`)
expect(result.files[3]).toBe(`${prefix}-15`)
expect(result.files[4]).toBe(`${prefix}-16`)
expect(result.files[5]).toBe(`${prefix}-17`)
expect(result.files[6]).toBe(`${prefix}-19`)
expect(result.files[7]).toBe(`${prefix}-20`)
expect(result.files[8]).toBe(`${prefix}-21`)
expect(result.files[9]).toBe(`${prefix}-23`)
expect(result.files[10]).toBe(`${prefix}-24`)
expect(result.files[11]).toBe(`${prefix}-25`)
expect(result.files[12]).toBe(`${prefix}-26`)
expect(result.files[13]).toBe(`${prefix}-28`)
expect(result.files[14]).toBe(`${prefix}-29`)
expect(result.files[15]).toBe(`${prefix}-30`)
expect(result.files[16]).toBe(`${prefix}-32`)
expect(result.files[17]).toBe(`${prefix}-33`)
expect(result.files[18]).toBe(`${prefix}-34`)
expect(result.files[19]).toBe(`${prefix}-36`)
expect(result.files[20]).toBe(`${prefix}-37`)

expect(result.files[60]).toBe(`${prefix}-89`)
expect(result.files[61]).toBe(`${prefix}-90`)
})

test('One photo per day with a XML starting point', () => {
const sourceFilenames = ['media1.arw', 'media1.mov', 'media1.jpg']
const prefix = '2016-01-31'
const result = futureFilenamesOutputs(sourceFilenames, prefix, 10)

expect(result.filenames[0]).toBe(`${prefix}-50.jpg`)
expect(result.files[0]).toBe(`${prefix}-50`)
expect(result.xml).toBe(
`<item id="10"><type>video</type><filename>${prefix}-50.mp4</filename><filename>${prefix}-50.webm</filename></item>`,
'XML',
)
})

test('Two photos per day with a XML starting point', () => {
const sourceFilenames = ['media1.arw', 'media1.mts', 'media1.jpg', 'media2.raw', 'media2.avi', 'media2.jpg']
const prefix = '2016-02-31'
const result = futureFilenamesOutputs(sourceFilenames, prefix, 20)

expect(result.filenames[0]).toBe(`${prefix}-50.jpg`)
expect(result.filenames[1]).toBe(`${prefix}-90.jpg`)
expect(result.files[0]).toBe(`${prefix}-50`)
expect(result.files[1]).toBe(`${prefix}-90`)
expect(result.xml).toBe(
`<item id="20"><type>video</type><filename>${prefix}-50.mp4</filename><filename>${prefix}-50.webm</filename></item>`
+ `<item id="21"><type>video</type><filename>${prefix}-90.mp4</filename><filename>${prefix}-90.webm</filename></item>`,
'XML',
)
})

test('Three photos per day with a XML starting point', () => {
const sourceFilenames = ['media1.arw', 'media1.mov', 'media1.jpg', 'media2.raw', 'media2.avi', 'media2.jpg', 'media3.jpg']
const prefix = '2016-03-31'
const result = futureFilenamesOutputs(sourceFilenames, prefix, 30)

expect(result.filenames[0]).toBe(`${prefix}-37.jpg`)
expect(result.filenames[1]).toBe(`${prefix}-64.jpg`)
expect(result.filenames[2]).toBe(`${prefix}-90.jpg`)
expect(result.files[0]).toBe(`${prefix}-37`)
expect(result.files[1]).toBe(`${prefix}-64`)
expect(result.files[2]).toBe(`${prefix}-90`)
expect(result.xml).toBe(
`<item id="30"><type>video</type><filename>${prefix}-37.mp4</filename><filename>${prefix}-37.webm</filename></item>`
+ `<item id="31"><type>video</type><filename>${prefix}-64.mp4</filename><filename>${prefix}-64.webm</filename></item>`
+ `<item id="32"><filename>${prefix}-90.jpg</filename></item>`,
'XML',
)
})
})
})
Loading
Loading