UNPKG

decap-cms-core

Version:

Decap CMS core application, see decap-cms package for the main distribution.

163 lines (149 loc) 4.57 kB
import { stripIndent } from 'common-tags'; import yaml from '../yaml'; describe('yaml', () => { describe('fromFile', () => { test('loads valid yaml', () => { expect(yaml.fromFile('[]')).toEqual([]); const result = yaml.fromFile(stripIndent` date: 2020-04-02T16:08:03.327Z dateString: 2020-04-02 boolean: true number: 1 `); expect(result).toEqual({ date: new Date('2020-04-02T16:08:03.327Z'), dateString: '2020-04-02', boolean: true, number: 1, }); expect(yaml.fromFile('# Comment a\na: a\nb:\n # Comment c\n c:\n d: d\n')).toEqual({ a: 'a', b: { c: { d: 'd' } }, }); expect( yaml.fromFile(stripIndent` # template comment template: post # title comment title: title # image comment image: /media/netlify.png # date comment date: 2020-04-02T13:27:48.617Z # object comment object: # object_title comment object_title: object_title # object_list comment object_list: - object_list_item_1: "1" object_list_item_2: "2" # list comment list: - "1" `), ).toEqual({ list: ['1'], object: { object_title: 'object_title', object_list: [{ object_list_item_1: '1', object_list_item_2: '2' }], }, date: new Date('2020-04-02T13:27:48.617Z'), image: '/media/netlify.png', title: 'title', template: 'post', }); }); test('does not fail on closing separator', () => { expect(yaml.fromFile('---\n[]\n---')).toEqual([]); }); test('parses single quoted string as string', () => { expect(yaml.fromFile('name: y')).toEqual({ name: 'y' }); }); test('parses ISO date string as date', () => { expect(yaml.fromFile('date: 2020-04-02T16:08:03.327Z')).toEqual({ date: new Date('2020-04-02T16:08:03.327Z'), }); }); test('parses partial date string as string', () => { expect(yaml.fromFile('date: 2020-06-12')).toEqual({ date: '2020-06-12', }); expect(yaml.fromFile('date: 12-06-2012')).toEqual({ date: '12-06-2012', }); }); test('parses partial time value as string', () => { expect(yaml.fromFile('time: 10:05')).toEqual({ time: '10:05', }); }); }); describe('toFile', () => { test('outputs valid yaml', () => { expect(yaml.toFile([])).toEqual('[]\n'); }); test('should sort keys', () => { expect(yaml.toFile({ a: 'a', b: 'b', c: 'c', d: 'd' })).toEqual('a: a\nb: b\nc: c\nd: d\n'); expect(yaml.toFile({ a: 'a', b: 'b', c: 'c', d: 'd' }, ['d', 'b', 'a', 'c'])).toEqual( 'd: d\nb: b\na: a\nc: c\n', ); expect(yaml.toFile({ a: 'a', b: 'b', c: 'c', d: 'd' }, ['d', 'b', 'c'])).toEqual( 'a: a\nd: d\nb: b\nc: c\n', ); }); test('should add comments', () => { expect( yaml.toFile({ a: 'a', b: { c: { d: 'd' } } }, [], { a: 'Comment a', 'b.c': 'Comment c' }), ).toEqual('# Comment a\na: a\nb:\n # Comment c\n c:\n d: d\n'); const expected = `# template comment template: post # title comment title: title # image comment image: /media/netlify.png # date comment date: 2020-04-02T13:27:48.617Z # object comment object: # object_title comment object_title: object_title # object_list comment object_list: - object_list_item_1: "1" object_list_item_2: "2" # list comment list: - "1" `; const result = yaml.toFile( { list: ['1'], object: { object_title: 'object_title', object_list: [{ object_list_item_1: '1', object_list_item_2: '2' }], }, date: new Date('2020-04-02T13:27:48.617Z'), image: '/media/netlify.png', title: 'title', template: 'post', }, ['template', 'title', 'image', 'date', 'object', 'list'], { list: 'list comment', object: 'object comment', 'object.object_title': 'object_title comment', 'object.object_list': 'object_list comment', date: 'date comment', image: 'image comment', title: 'title comment', template: 'template comment', }, ); expect(result).toEqual(expected); expect(yaml.toFile({ a: 'a' }, [], { a: 'line 1\\nline 2' })).toEqual( '# line 1\n# line 2\na: a\n', ); }); }); });