2
0
mirror of https://github.com/thumbsup/thumbsup synced 2024-11-05 12:01:04 +00:00
thumbsup/test/input/album-pattern.spec.js
Romain 286dc8d15f feat(albums): --albums-from can be a list of patterns with special keywords
- %path expands to the path of the photo/video
- %keywords expands to the IPTC keywords of the photo
- {format} expands to the photo's EXIF date, e.g. {YYYY MM}
2017-12-23 20:32:10 +11:00

99 lines
3.3 KiB
JavaScript

const should = require('should/as-function')
const pattern = require('../../src/input/album-pattern.js')
const fixtures = require('../fixtures.js')
describe('AlbumPattern', function () {
describe('text', () => {
it('can return a plain text album name', function () {
const func = pattern.create('Holidays/Canada')
const file = fixtures.photo()
should(func(file)).eql(['Holidays/Canada'])
})
it('can have extra text around keywords', function () {
const func = pattern.create('Holidays/%path')
const file = fixtures.photo({
path: 'Canada/IMG_0001.jpg'
})
should(func(file)).eql(['Holidays/Canada'])
})
})
describe('path', () => {
it('%path returns the relative path of the photo', function () {
const func = pattern.create('%path')
const file = fixtures.photo({
path: 'Holidays/IMG_0001.jpg'
})
should(func(file)).eql(['Holidays'])
})
it('%path includes all subfolders', function () {
const func = pattern.create('%path')
const file = fixtures.photo({
path: 'Holidays/Canada/IMG_0001.jpg'
})
should(func(file)).eql(['Holidays/Canada'])
})
})
describe('creation date', () => {
it('can use a moment.js format: {YYYY MM}', function () {
const func = pattern.create('{YYYY MM}')
const file = fixtures.photo({
date: '2016:07:14 12:07:41'
})
should(func(file)).eql(['2016 07'])
})
it('can include slashes in the format: {YYYY/MM}', function () {
const func = pattern.create('{YYYY/MM}')
const file = fixtures.photo({
date: '2016:07:14 12:07:41'
})
should(func(file)).eql(['2016/07'])
})
it('can have multiple dates in the same pattern: {YYYY}/{MM}', function () {
const func = pattern.create('{YYYY}/{MM}')
const file = fixtures.photo({
date: '2016:07:14 12:07:41'
})
should(func(file)).eql(['2016/07'])
})
})
describe('keywords', () => {
it('can return a single keyword', () => {
const func = pattern.create('%keywords')
const file = fixtures.photo({
keywords: ['beach']
})
should(func(file)).eql(['beach'])
})
it('can return multiple keyword', () => {
const func = pattern.create('%keywords')
const file = fixtures.photo({
keywords: ['beach', 'sunset']
})
should(func(file)).eql(['beach', 'sunset'])
})
it('can use plain text around the keywords', () => {
const func = pattern.create('Tags/%keywords')
const file = fixtures.photo({
keywords: ['beach', 'sunset']
})
should(func(file)).eql(['Tags/beach', 'Tags/sunset'])
})
it('does not return any albums if the photo does not have keywords', () => {
const func = pattern.create('{YYYY}/tags/%keywords')
const file = fixtures.photo()
should(func(file)).eql([])
})
})
describe('Complex patterns', () => {
it('can mix several tokens inside a complex pattern', () => {
const func = pattern.create('{YYYY}/%path/%keywords')
const file = fixtures.photo({
path: 'Holidays/IMG_0001.jpg',
date: '2016:07:14 12:07:41',
keywords: ['beach', 'sunset']
})
should(func(file)).eql(['2016/Holidays/beach', '2016/Holidays/sunset'])
})
})
})