const should = require("should"); describe("fileNameParser", () => { describe("with default options", () => { const parser = require("../lib/fileNameParser")({ file: { dir: "/path/to/file", base: "thefile.log", ext: ".log", name: "thefile" } }); it("should return null for filenames that do not match", () => { should(parser("cheese.txt")).not.be.ok(); should(parser("thefile.log.biscuits")).not.be.ok(); }); it("should take a filename and return the index", () => { parser("thefile.log.2").should.eql({ filename: "thefile.log.2", index: 2, isCompressed: false }); parser("thefile.log.2.gz").should.eql({ filename: "thefile.log.2.gz", index: 2, isCompressed: true }); }); }); describe("with pattern option", () => { const parser = require("../lib/fileNameParser")({ file: { dir: "/path/to/file", base: "thefile.log", ext: ".log", name: "thefile" }, pattern: "yyyy-MM-dd" }); it("should return null for files that do not match", () => { should(parser("thefile.log.biscuits")).not.be.ok(); should(parser("thefile.log.2019")).not.be.ok(); should(parser("thefile.log.3.2")).not.be.ok(); should(parser("thefile.log.04-18")).not.be.ok(); should(parser("anotherfile.log.2020-04-18")).not.be.ok(); should(parser("2020-05-18")).not.be.ok(); }); it("should take a filename and return the date", () => { parser("thefile.log.2019-07-17").should.eql({ filename: "thefile.log.2019-07-17", index: 0, date: "2019-07-17", timestamp: new Date(2019, 6, 17).getTime(), isCompressed: false }); parser("thefile.log.gz").should.eql({ filename: "thefile.log.gz", index: 0, isCompressed: true }); }); it("should take a filename and return both date and index", () => { parser("thefile.log.2019-07-17.2").should.eql({ filename: "thefile.log.2019-07-17.2", index: 2, date: "2019-07-17", timestamp: new Date(2019, 6, 17).getTime(), isCompressed: false }); parser("thefile.log.2019-07-17.2.gz").should.eql({ filename: "thefile.log.2019-07-17.2.gz", index: 2, date: "2019-07-17", timestamp: new Date(2019, 6, 17).getTime(), isCompressed: true }); }); }); describe("with keepFileExt option", () => { const parser = require("../lib/fileNameParser")({ file: { dir: "/path/to/file", base: "thefile.log", ext: ".log", name: "thefile" }, keepFileExt: true }); it("should take a filename and return the index", () => { should(parser("thefile.log.2")).not.be.ok(); should(parser("thefile.log.2.gz")).not.be.ok(); parser("thefile.2.log").should.eql({ filename: "thefile.2.log", index: 2, isCompressed: false }); parser("thefile.2.log.gz").should.eql({ filename: "thefile.2.log.gz", index: 2, isCompressed: true }); }); }); describe("with a two-digit date pattern", () => { const parser = require("../lib/fileNameParser")({ file: { dir: "/path/to/file", base: "thing.log", ext: ".log", name: "thing" }, pattern: "mm" }); it("should take a filename and return the date", () => { const expectedTimestamp = new Date(0, 0); expectedTimestamp.setMinutes(34); parser("thing.log.34").should.eql({ filename: "thing.log.34", date: "34", isCompressed: false, index: 0, timestamp: expectedTimestamp.getTime() }); }); }) describe("with a four-digit date pattern", () => { const parser = require("../lib/fileNameParser")({ file: { dir: "/path/to/file", base: "stuff.log", ext: ".log", name: "stuff" }, pattern: "mm-ss" }); it("should return null for files that do not match", () => { should(parser("stuff.log.2020-04-18")).not.be.ok(); should(parser("09-18")).not.be.ok(); }); it("should take a filename and return the date", () => { const expectedTimestamp = new Date(0, 0); expectedTimestamp.setMinutes(34); expectedTimestamp.setSeconds(59); parser("stuff.log.34-59").should.eql({ filename: "stuff.log.34-59", date: "34-59", isCompressed: false, index: 0, timestamp: expectedTimestamp.getTime() }); }); it("should take a filename and return both date and index", () => { const expectedTimestamp_1 = new Date(0, 0); expectedTimestamp_1.setMinutes(7); expectedTimestamp_1.setSeconds(17); parser("stuff.log.07-17.2").should.eql({ filename: "stuff.log.07-17.2", index: 2, date: "07-17", timestamp: expectedTimestamp_1.getTime(), isCompressed: false }); const expectedTimestamp_2 = new Date(0, 0); expectedTimestamp_2.setMinutes(17); expectedTimestamp_2.setSeconds(30); parser("stuff.log.17-30.3.gz").should.eql({ filename: "stuff.log.17-30.3.gz", index: 3, date: "17-30", timestamp: expectedTimestamp_2.getTime(), isCompressed: true }); }); }) });