73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | /* global describe it expect */ | ||
|  | const mockAST = require('./fixtures/challenge-html-ast.json'); | ||
|  | const textToData = require('./text-to-data'); | ||
|  | 
 | ||
|  | describe('text-to-data', () => { | ||
|  |   const expectedField = 'description'; | ||
|  |   const otherExpectedField = 'instructions'; | ||
|  |   const unexpectedField = 'does-not-exis'; | ||
|  |   let file = { data: {} }; | ||
|  | 
 | ||
|  |   beforeEach(() => { | ||
|  |     file = { data: {} }; | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should take return a function', () => { | ||
|  |     const plugin = textToData(['a-section-id']); | ||
|  | 
 | ||
|  |     expect(typeof plugin).toEqual('function'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('throws when no argument or the incorrect argument is supplied', () => { | ||
|  |     expect.assertions(5); | ||
|  |     const expectedError = | ||
|  |       "textToData must have an array of section id's supplied"; | ||
|  |     expect(() => { | ||
|  |       textToData(); | ||
|  |     }).toThrow(expectedError); | ||
|  |     expect(() => { | ||
|  |       textToData(''); | ||
|  |     }).toThrow(expectedError); | ||
|  |     expect(() => { | ||
|  |       textToData({}); | ||
|  |     }).toThrow(expectedError); | ||
|  |     expect(() => { | ||
|  |       textToData(1); | ||
|  |     }).toThrow(expectedError); | ||
|  |     expect(() => { | ||
|  |       textToData([]); | ||
|  |     }).toThrow(expectedError); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it("should only add a value for 'found' section id's", () => { | ||
|  |     const plugin = textToData([expectedField, unexpectedField]); | ||
|  |     plugin(mockAST, file); | ||
|  |     expect(expectedField in file.data && !(unexpectedField in file.data)).toBe( | ||
|  |       true | ||
|  |     ); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should add a string relating to the section id to `file.data`', () => { | ||
|  |     const plugin = textToData([expectedField]); | ||
|  |     plugin(mockAST, file); | ||
|  |     const expectedText = 'Welcome to freeCodeCamp'; | ||
|  |     expect(file.data[expectedField].includes(expectedText)).toBe(true); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should preserve nested html', () => { | ||
|  |     const plugin = textToData([expectedField]); | ||
|  |     plugin(mockAST, file); | ||
|  |     const expectedText = `<blockquote>
 | ||
|  | <p>Some text in a blockquote</p> | ||
|  | <p>Some text in a blockquote, with <code>code</code></p> | ||
|  | </blockquote>`; | ||
|  |     expect(file.data[expectedField].includes(expectedText)).toBe(true); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should have an output to match the snapshot', () => { | ||
|  |     const plugin = textToData([expectedField, otherExpectedField]); | ||
|  |     plugin(mockAST, file); | ||
|  |     expect(file.data).toMatchSnapshot(); | ||
|  |   }); | ||
|  | }); |