UNPKG

repolinter

Version:
212 lines (187 loc) 5.8 kB
// Copyright 2017 TODO Group. All rights reserved. // SPDX-License-Identifier: Apache-2.0 const chai = require('chai') const expect = chai.expect const FileSystem = require('../../lib/file_system') describe('rule', () => { describe('files_contents', () => { const fileContents = require('../../rules/file-contents') it('returns passes if requested file contents exists', async () => { /** @type {any} */ const mockfs = { findAllFiles() { return ['README.md'] }, getFileContents() { return 'foo' }, targetDir: '.' } const ruleopts = { globsAll: ['README*'], content: 'foo' } const actual = await fileContents(mockfs, ruleopts) expect(actual.passed).to.equal(true) expect(actual.targets).to.have.length(1) expect(actual.targets[0]).to.deep.include({ passed: true, path: 'README.md' }) }) it('returns passes and display context if requested file contents exists', async () => { /** @type {any} */ const mockfs = { findAllFiles() { return ['README.md'] }, getFileContents() { return 'foo get test' }, targetDir: '.' } const ruleopts = { globsAll: ['README*'], content: 'get', 'display-result-context': true, 'context-char-length': 2 } const actual = await fileContents(mockfs, ruleopts) console.log(actual) expect(actual.passed).to.equal(true) expect(actual.targets).to.have.length(1) expect(actual.targets[0]).to.deep.include({ passed: true, path: 'README.md', message: "Contains 'get' on line 1, context: \n\t|o get t" }) }) it('returns failure and display context if requested file contents exists', async () => { /** @type {any} */ const mockfs = { findAllFiles() { return ['README.md'] }, getFileContents() { return 'foo get test' }, targetDir: '.' } const ruleopts = { globsAll: ['README*'], content: 'get', 'display-result-context': true, 'context-char-length': 2 } const actual = await fileContents(mockfs, ruleopts, true) console.log(actual) expect(actual.passed).to.equal(false) expect(actual.targets).to.have.length(1) expect(actual.targets[0]).to.deep.include({ passed: false, path: 'README.md', message: "Contains 'get' on line 1, context: \n\t|o get t" }) }) it('returns passes if requested file contents exists with human-readable contents', async () => { /** @type {any} */ const mockfs = { findAllFiles() { return ['README.md'] }, getFileContents() { return 'foo' }, targetDir: '.' } const ruleopts = { globsAll: ['README*'], content: '[abcdef][oO0][^q]', 'human-readable-content': 'actually foo' } const actual = await fileContents(mockfs, ruleopts) expect(actual.passed).to.equal(true) expect(actual.targets).to.have.length(1) expect(actual.targets[0]).to.deep.include({ passed: true, path: 'README.md' }) expect(actual.targets[0].message).to.contain( ruleopts['human-readable-content'] ) }) it('returns fails if requested file contents does not exist', async () => { /** @type {any} */ const mockfs = { findAllFiles() { return ['README.md'] }, getFileContents() { return 'foo' }, targetDir: '.' } const ruleopts = { globsAll: ['README*'], content: 'bar' } const actual = await fileContents(mockfs, ruleopts) expect(actual.passed).to.equal(false) expect(actual.targets).to.have.length(1) expect(actual.targets[0]).to.deep.include({ passed: false, path: 'README.md' }) expect(actual.targets[0].message).to.contain(ruleopts.content) }) it('returns the pattern if requested file does not exist', async () => { /** @type {any} */ const mockfs = { findAllFiles() { return [] }, getFileContents() {}, targetDir: '.' } const ruleopts = { globsAll: ['README.md'], content: 'foo' } const actual = await fileContents(mockfs, ruleopts) expect(actual.passed).to.equal(true) expect(actual.targets).to.have.length(1) expect(actual.targets[0].passed).to.equal(true) expect(actual.targets[0].pattern).to.equal(ruleopts.globsAll[0]) }) it('returns failure if file does not exist with failure flag', async () => { /** @type {any} */ const mockfs = { findAllFiles() { return [] }, getFileContents() {}, targetDir: '.' } const ruleopts = { globsAll: ['README.md', 'READMOI.md'], content: 'foo', 'fail-on-non-existent': true } const actual = await fileContents(mockfs, ruleopts) expect(actual.passed).to.equal(false) }) it('should handle broken symlinks', async () => { const brokenSymlink = './tests/rules/broken_symlink_for_test' const stat = require('fs').lstatSync(brokenSymlink) expect(stat.isSymbolicLink()).to.equal(true) const fs = new FileSystem(require('path').resolve('.')) const rule = { globsAll: [brokenSymlink], lineCount: 1, patterns: ['something'] } const actual = await fileContents(fs, rule) expect(actual.passed).to.equal(true) }) }) })