From 4768e99d4ca8ec077a5894eeaac140d5b725acf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Sverre=20Lien=20Sell=C3=A6g?= Date: Fri, 17 Jul 2020 14:44:33 +0200 Subject: [PATCH] add images directory test --- src/logic.js | 15 +++++++-- src/scrape.js | 1 - tests/create_images_directory.test.js | 47 ++++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/logic.js b/src/logic.js index 28b8db1..0bab2c6 100644 --- a/src/logic.js +++ b/src/logic.js @@ -7,6 +7,8 @@ const page_url = (page_id) => `https://www.facebook.com/${page_id}`; const page_events_url = (page_id) => page_url(page_id) + '/events/'; const fs = require('fs').promises; +const filesystem = require('fs'); + const gm = require('gm').subClass({ imageMagick: true }); const parse_output = (argv) => { @@ -122,8 +124,17 @@ const get_city_name = (event) => const get_event_host = (event) => pathOr('', 'event_place.contextual_name'.split('.'), event); -const create_images_directory = (images_directory) => - fs.mkdir(images_directory, { recursive: true }).catch(console.error); +const create_images_directory = (images_directory) => { + if (images_directory === null || images_directory === undefined) { + return Promise.reject('Image path was not set'); + } + + if (!filesystem.existsSync(images_directory)) { + return fs.mkdir(images_directory, { recursive: true }).catch(console.error); + } + + return Promise.resolve(); +}; const read_previous_events = (path) => { if (path !== null) { diff --git a/src/scrape.js b/src/scrape.js index 18b767c..90471f7 100644 --- a/src/scrape.js +++ b/src/scrape.js @@ -2,7 +2,6 @@ const puppeteer = require('puppeteer'); const { pathOr, maxBy } = require('ramda'); const path = require('path'); const fs = require('fs').promises; -const filesystem = require('fs'); const { graphql_endpoint } = require('./constants'); const { parse_args, create_images_directory } = require('./logic'); diff --git a/tests/create_images_directory.test.js b/tests/create_images_directory.test.js index 333eb09..2e69868 100644 --- a/tests/create_images_directory.test.js +++ b/tests/create_images_directory.test.js @@ -1,5 +1,50 @@ import { create_images_directory } from '../src/logic'; +beforeEach(jest.restoreAllMocks); + +const fs = require('fs').promises; +const filesystem = require('fs'); + describe('create_images_directory', () => { - it('', () => {}); + it('creates images directory', () => { + const mock = jest + .spyOn(fs, 'mkdir') + .mockImplementation(() => Promise.resolve()); + jest.spyOn(filesystem, 'existsSync').mockImplementation(() => false); + const dir = 'new directory'; + expect.assertions(2); + return create_images_directory(dir).then(() => { + expect(mock).toHaveBeenCalledTimes(1); + expect(mock).toHaveBeenCalledWith(dir, { recursive: true }); + }); + }); + + it('it skips creating images directory', () => { + const fs_mock = jest + .spyOn(fs, 'mkdir') + .mockImplementation(() => Promise.resolve()); + const exist_mock = jest + .spyOn(filesystem, 'existsSync') + .mockImplementation(() => true); + const dir = 'new directory'; + expect.assertions(3); + return create_images_directory(dir).then(() => { + expect(fs_mock).toHaveBeenCalledTimes(0); + expect(exist_mock).toHaveBeenCalledTimes(1); + expect(exist_mock).toHaveBeenCalledWith(dir); + }); + }); + + [undefined, null].forEach((dir) => + it('throws if directory is not set', () => { + const mock = jest + .spyOn(filesystem, 'existsSync') + .mockImplementation(() => true); + expect.assertions(2); + return create_images_directory(dir).catch((error) => { + expect(mock).toHaveBeenCalledTimes(0); + expect(error).toEqual('Image path was not set'); + }); + }), + ); });