Skip to content

Commit 1c8fc17

Browse files
authored
Merge pull request #836 from citation-file-format/835-parsing-double-braces
2 parents 003d43b + ebf93a4 commit 1c8fc17

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

src/store/cff.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,16 @@ export const updateCff = (newCffstr: string) => {
5050
throw new Error('Error: CFF is invalid. It should be a YAML map.')
5151
}
5252

53-
cff.value = getInitialData()
5453
const existingCffProperties = Object.getOwnPropertyNames(existingCff) as Array<keyof typeof existingCff>
54+
if (existingCffProperties.length === 0) {
55+
throw new Error('Error: CFF is empty.')
56+
} else if (existingCffProperties.filter(x => x === '[object Object]').length > 0) {
57+
throw new Error('Error: invalid object in keys (did you use {} as key?).')
58+
} else if (existingCffProperties.filter(x => !x).length > 0) {
59+
throw new Error('Error: invalid null property.')
60+
}
61+
62+
cff.value = getInitialData()
5563
const cffProperties = Object.getOwnPropertyNames(cff.value) as Array<keyof CffType>
5664
existingCffProperties.forEach((property) => {
5765
const camelCaseProperty = camelCase(property) as keyof CffType

test/jest/__tests__/store/cffupdate.jest.spec.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,45 @@ describe('Update of existing CFF', () => {
164164
expect(msg).toHaveLength(0)
165165
expect(success).toBe(true)
166166
})
167+
test('catches {}', () => {
168+
const { msg, success } = updateCff('{}')
169+
expect(msg).toHaveLength(1)
170+
expect(msg[0]).toBe('Error: CFF is empty.')
171+
expect(success).toBe(false)
172+
})
173+
test('catches {{}}', () => {
174+
const { msg, success } = updateCff('{{}}')
175+
expect(msg).toHaveLength(1)
176+
expect(msg[0]).toBe('Error: invalid object in keys (did you use {} as key?).')
177+
expect(success).toBe(false)
178+
})
179+
test('catches {[]}', () => {
180+
const { msg, success } = updateCff('{[]}')
181+
expect(msg).toHaveLength(1)
182+
expect(msg[0]).toBe('Error: invalid null property.')
183+
expect(success).toBe(false)
184+
})
185+
test('allow {title: Title, message: CITE ME}', () => {
186+
const { msg, success } = updateCff('{title: Title, message: CITE ME}')
187+
expect(msg).toHaveLength(0)
188+
expect(success).toBe(true)
189+
})
190+
test('catches {}: 1', () => {
191+
const { msg, success } = updateCff('{}: 1\nb: 2')
192+
expect(msg).toHaveLength(1)
193+
expect(msg[0]).toBe('Error: invalid object in keys (did you use {} as key?).')
194+
expect(success).toBe(false)
195+
})
196+
test('catches []: 1', () => {
197+
const { msg, success } = updateCff('[]: 1\nb: 2')
198+
expect(msg).toHaveLength(1)
199+
expect(msg[0]).toBe('Error: invalid null property.')
200+
expect(success).toBe(false)
201+
})
202+
test("catches '': 1", () => {
203+
const { msg, success } = updateCff("'': 1\nb: 2")
204+
expect(msg).toHaveLength(1)
205+
expect(msg[0]).toBe('Error: invalid null property.')
206+
expect(success).toBe(false)
207+
})
167208
})

0 commit comments

Comments
 (0)