From b90609314fdad1e6ad484907b07ed232c72e3b70 Mon Sep 17 00:00:00 2001 From: endiliey Date: Mon, 16 Jul 2018 01:04:31 +0800 Subject: [PATCH] better getFile test & move out metadata to fixtures --- lib/server/__tests__/__fixtures__/metadata.js | 116 +++++++++++ lib/server/__tests__/docs.test.js | 189 +++--------------- package.json | 3 + 3 files changed, 151 insertions(+), 157 deletions(-) create mode 100644 lib/server/__tests__/__fixtures__/metadata.js diff --git a/lib/server/__tests__/__fixtures__/metadata.js b/lib/server/__tests__/__fixtures__/metadata.js new file mode 100644 index 000000000000..bf4ca08f3e14 --- /dev/null +++ b/lib/server/__tests__/__fixtures__/metadata.js @@ -0,0 +1,116 @@ +module.exports = { + 'en-doc1': { + id: 'en-doc1', + title: 'Document 1', + source: 'doc1.md', + version: 'next', + permalink: 'docs/en/next/doc1.html', + localized_id: 'doc1', + language: 'en', + sidebar: 'docs', + category: 'Test', + next_id: 'doc2', + next: 'en-doc2', + next_title: 'Document 2', + }, + 'en-doc2': { + id: 'en-doc2', + title: 'Document 2', + source: 'doc2.md', + version: 'next', + permalink: 'docs/en/next/doc2.html', + localized_id: 'doc2', + language: 'en', + sidebar: 'docs', + category: 'Test', + previous_id: 'doc1', + previous: 'en-doc1', + previous_title: 'Document 1', + }, + 'ko-doc1': { + id: 'ko-doc1', + title: '문서 1', + source: 'doc1.md', + version: 'next', + permalink: 'docs/ko/next/doc1.html', + localized_id: 'doc1', + language: 'ko', + sidebar: 'docs', + category: 'Test', + next_id: 'doc2', + next: 'ko-doc2', + next_title: '문서 2', + }, + 'ko-doc2': { + id: 'ko-doc2', + title: '문서 2', + source: 'doc2.md', + version: 'next', + permalink: 'docs/ko/next/doc2.html', + localized_id: 'doc2', + language: 'ko', + sidebar: 'docs', + category: 'Test', + previous_id: 'doc1', + previous: 'ko-doc1', + previous_title: '문서 1', + }, + 'en-version-1.0.0-doc1': { + id: 'en-version-1.0.0-doc1', + original_id: 'doc1', + title: 'Document 1', + source: 'version-1.0.0/doc1.md', + version: '1.0.0', + permalink: 'docs/en/doc1.html', + localized_id: 'version-1.0.0-doc1', + language: 'en', + sidebar: 'version-1.0.0-docs', + category: 'Test', + next_id: 'doc2', + next: 'en-version-1.0.0-doc2', + next_title: 'Document 2', + }, + 'en-version-1.0.0-doc2': { + id: 'en-version-1.0.0-doc2', + original_id: 'doc2', + title: 'Document 2', + source: 'version-1.0.0/doc2.md', + version: '1.0.0', + permalink: 'docs/en/doc2.html', + localized_id: 'version-1.0.0-doc2', + language: 'en', + sidebar: 'version-1.0.0-docs', + category: 'Test', + previous_id: 'doc1', + previous: 'en-version-1.0.0-doc1', + previous_title: 'Document 1', + }, + 'ko-version-1.0.0-doc1': { + id: 'ko-version-1.0.0-doc1', + title: '문서 1', + source: 'version-1.0.0/doc1.md', + version: '1.0.0', + permalink: 'docs/ko/doc1.html', + localized_id: 'version-1.0.0-doc1', + language: 'ko', + sidebar: 'version-1.0.0-docs', + category: 'Test', + next_id: 'doc2', + next: 'ko-version-1.0.0-doc2', + next_title: '문서 2', + }, + 'ko-version-1.0.0-doc2': { + id: 'ko-version-1.0.0-doc2', + title: '문서 2', + source: 'version-1.0.0/doc2.md', + version: '1.0.0', + permalink: 'docs/ko/doc2.html', + localized_id: 'version-1.0.0-doc2', + language: 'ko', + sidebar: 'version-1.0.0-docs', + category: 'Test', + previous_id: 'doc1', + previous: 'ko-version-1.0.0-doc1', + previous_title: '문서 1', + }, +}; diff --git a/lib/server/__tests__/docs.test.js b/lib/server/__tests__/docs.test.js index fcdf4b53f53b..4dae16e4833d 100644 --- a/lib/server/__tests__/docs.test.js +++ b/lib/server/__tests__/docs.test.js @@ -14,7 +14,6 @@ const path = require('path'); const fs = require('fs-extra'); const docs = require('../docs'); const metadataUtils = require('../metadataUtils'); -const readMetadata = require('../readMetadata.js'); jest.mock('../env', () => ({ translation: { @@ -38,122 +37,7 @@ jest.mock('../env', () => ({ }, })); -const Metadata = { - 'en-doc1': { - id: 'en-doc1', - title: 'Document 1', - source: 'doc1.md', - version: 'next', - permalink: 'docs/en/next/doc1.html', - localized_id: 'doc1', - language: 'en', - sidebar: 'docs', - category: 'Test', - next_id: 'doc2', - next: 'en-doc2', - next_title: 'Document 2', - }, - 'en-doc2': { - id: 'en-doc2', - title: 'Document 2', - source: 'doc2.md', - version: 'next', - permalink: 'docs/en/next/doc2.html', - localized_id: 'doc2', - language: 'en', - sidebar: 'docs', - category: 'Test', - previous_id: 'doc1', - previous: 'en-doc1', - previous_title: 'Document 1', - }, - 'ko-doc1': { - id: 'ko-doc1', - title: '문서 1', - source: 'doc1.md', - version: 'next', - permalink: 'docs/ko/next/doc1.html', - localized_id: 'doc1', - language: 'ko', - sidebar: 'docs', - category: 'Test', - next_id: 'doc2', - next: 'ko-doc2', - next_title: '문서 2', - }, - 'ko-doc2': { - id: 'ko-doc2', - title: '문서 2', - source: 'doc2.md', - version: 'next', - permalink: 'docs/ko/next/doc2.html', - localized_id: 'doc2', - language: 'ko', - sidebar: 'docs', - category: 'Test', - previous_id: 'doc1', - previous: 'ko-doc1', - previous_title: '문서 1', - }, - 'en-version-1.0.0-doc1': { - id: 'en-version-1.0.0-doc1', - original_id: 'doc1', - title: 'Document 1', - source: 'version-1.0.0/doc1.md', - version: '1.0.0', - permalink: 'docs/en/doc1.html', - localized_id: 'version-1.0.0-doc1', - language: 'en', - sidebar: 'version-1.0.0-docs', - category: 'Test', - next_id: 'doc2', - next: 'en-version-1.0.0-doc2', - next_title: 'Document 2', - }, - 'en-version-1.0.0-doc2': { - id: 'en-version-1.0.0-doc2', - original_id: 'doc2', - title: 'Document 2', - source: 'version-1.0.0/doc2.md', - version: '1.0.0', - permalink: 'docs/en/doc2.html', - localized_id: 'version-1.0.0-doc2', - language: 'en', - sidebar: 'version-1.0.0-docs', - category: 'Test', - previous_id: 'doc1', - previous: 'en-version-1.0.0-doc1', - previous_title: 'Document 1', - }, - 'ko-version-1.0.0-doc1': { - id: 'ko-version-1.0.0-doc1', - title: '문서 1', - source: 'version-1.0.0/doc1.md', - version: '1.0.0', - permalink: 'docs/ko/doc1.html', - localized_id: 'version-1.0.0-doc1', - language: 'ko', - sidebar: 'version-1.0.0-docs', - category: 'Test', - next_id: 'doc2', - next: 'ko-version-1.0.0-doc2', - next_title: '문서 2', - }, - 'ko-version-1.0.0-doc2': { - id: 'ko-version-1.0.0-doc2', - title: '문서 2', - source: 'version-1.0.0/doc2.md', - version: '1.0.0', - permalink: 'docs/ko/doc2.html', - localized_id: 'version-1.0.0-doc2', - language: 'ko', - sidebar: 'version-1.0.0-docs', - category: 'Test', - previous_id: 'doc1', - previous: 'ko-version-1.0.0-doc1', - previous_title: '문서 1', - }, -}; +const Metadata = require(path.join(__dirname, '__fixtures__', 'metadata.js')); const doc1 = fs.readFileSync( path.join(__dirname, '__fixtures__', 'doc1.md'), @@ -192,63 +76,54 @@ describe('mdToHtmlify', () => { }); describe('getFile', () => { + const fakeContent = { + 'website/translated_docs/ko/doc1.md': '이건 가짜 야', + 'website/versioned_docs/version-1.0.0/doc2.md': 'Document 2 is not good', + 'website/translated_docs/ko/version-1.0.0/doc1.md': + '이것은 오래된 가짜입니다.', + 'docs/doc1.md': 'Just another document', + }; + fs.existsSync = jest.fn().mockReturnValue(true); + fs.readFileSync = jest.fn().mockImplementation(file => { + const fakePath = file.replace(process.cwd().replace(/website$/, ''), ''); + return fakeContent[fakePath]; + }); + + test('docs does not exist', () => { + const metadata = Metadata['en-doc1']; + fs.existsSync.mockReturnValueOnce(null); + expect(docs.getFile(metadata)).toBeNull(); + }); + + test('null/undefined metadata', () => { + expect(docs.getFile(null)).toBeNull(); + expect(docs.getFile(undefined)).toBeNull(); + }); + test('translated docs', () => { const metadata = Metadata['ko-doc1']; - const spy = jest.spyOn(fs, 'existsSync'); - - docs.getFile(metadata); - expect(spy).toHaveBeenLastCalledWith( - path.join( - process.cwd(), - 'translated_docs', - metadata.language, - metadata.source - ) + expect(docs.getFile(metadata)).toEqual( + fakeContent['website/translated_docs/ko/doc1.md'] ); - spy.mockRestore(); }); test('versioned docs', () => { const metadata = Metadata['en-version-1.0.0-doc2']; - const spy = jest.spyOn(fs, 'existsSync'); - - docs.getFile(metadata); - expect(spy).toHaveBeenLastCalledWith( - path.join(process.cwd(), 'versioned_docs', metadata.source) + expect(docs.getFile(metadata)).toEqual( + fakeContent['website/versioned_docs/version-1.0.0/doc2.md'] ); - spy.mockRestore(); }); test('translated & versioned docs', () => { const metadata = Metadata['ko-version-1.0.0-doc1']; - const spy = jest.spyOn(fs, 'existsSync'); - - docs.getFile(metadata); - expect(spy).toHaveBeenLastCalledWith( - path.join( - process.cwd(), - 'translated_docs', - metadata.language, - metadata.source - ) + expect(docs.getFile(metadata)).toEqual( + fakeContent['website/translated_docs/ko/version-1.0.0/doc1.md'] ); - spy.mockRestore(); }); test('normal docs', () => { const metadata = Metadata['en-doc1']; - const spy = jest.spyOn(fs, 'existsSync'); - - docs.getFile(metadata); - expect(spy).toHaveBeenLastCalledWith( - path.join( - process.cwd(), - '..', - readMetadata.getDocsPath(), - metadata.source - ) - ); - spy.mockRestore(); + expect(docs.getFile(metadata)).toEqual(fakeContent['docs/doc1.md']); }); }); diff --git a/package.json b/package.json index 5ae1f738b91b..6741d6d1b044 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,9 @@ ] } }, + "jest": { + "testPathIgnorePatterns": ["/node_modules/", "__fixtures__"] + }, "bin": { "docusaurus-start": "./lib/start-server.js", "docusaurus-build": "./lib/build-files.js",