harvest-overtime
Version:
Track the overtime!
158 lines (149 loc) • 5.01 kB
text/typescript
import { expect } from "chai";
import { Employee, ReportEmployee } from "../../src/models";
import report from "../../src/report/scraper";
const REGULAR_DAY_HOURS = 8;
describe("Reporter.Scraper", () => {
context("when there is an element", () => {
context("and is an employee", () => {
it("returns the report", () => {
const employees: Employee[] = [
{
date: "2018-08-06",
employee: true,
hours: 5,
name: "Jane Austen",
},
];
const result: ReportEmployee[] = report(REGULAR_DAY_HOURS)(employees);
expect(result[0]).to.have.property("employee", "Jane Austen");
expect(result[0]).to.have.property("report");
expect(result[0]).to.have.property("timesheet");
});
});
context("and is not an employee", () => {
it("returns an empty report", () => {
const employees: Employee[] = [
{
date: "2018-08-06",
employee: false,
hours: 5,
name: "Jane Austen",
},
];
const result: ReportEmployee[] = report(REGULAR_DAY_HOURS)(employees);
expect(result).to.be.empty;
});
});
});
context("when there are several elements", () => {
context("and there are several employees", () => {
context("and there is a single entry for each one", () => {
it("returns the reports", () => {
const employees: Employee[] = [
{
date: "2018-08-06",
employee: true,
hours: 5,
name: "Jane Austen",
},
{
date: "2018-08-07",
employee: true,
hours: 8,
name: "Emily Bronte",
},
];
const result: ReportEmployee[] = report(REGULAR_DAY_HOURS)(employees);
expect(result).to.have.lengthOf(2);
expect(result[0]).to.have.property("employee", "Jane Austen");
expect(result[0]).to.have.property("report");
expect(result[0]).to.have.property("timesheet");
expect(result[1]).to.have.property("employee", "Emily Bronte");
expect(result[1]).to.have.property("report");
expect(result[1]).to.have.property("timesheet");
});
});
context("and there are several entries for each one", () => {
it("returns the reports", () => {
const employees: Employee[] = [
{
date: "2018-08-06",
employee: true,
hours: 5,
name: "Jane Austen",
},
{
date: "2018-08-07",
employee: true,
hours: 8,
name: "Emily Bronte",
},
{
date: "2018-08-06",
employee: true,
hours: 2,
name: "Jane Austen",
},
{
date: "2018-08-07",
employee: true,
hours: 1,
name: "Emily Bronte",
},
];
const result: ReportEmployee[] = report(REGULAR_DAY_HOURS)(employees);
expect(result).to.have.lengthOf(2);
expect(result[0]).to.have.property("employee", "Jane Austen");
expect(result[0]).to.have.property("report");
expect(result[0]).to.have.property("timesheet");
expect(result[1]).to.have.property("employee", "Emily Bronte");
expect(result[1]).to.have.property("report");
expect(result[1]).to.have.property("timesheet");
});
});
});
context("and there are several employees and non-employee", () => {
it("returns the reports without non-employees", () => {
const employees: Employee[] = [
{
date: "2018-08-06",
employee: true,
hours: 5,
name: "Jane Austen",
},
{
date: "2018-08-07",
employee: false,
hours: 8,
name: "Emily Bronte",
},
];
const result: ReportEmployee[] = report(REGULAR_DAY_HOURS)(employees);
expect(result).to.have.lengthOf(1);
expect(result[0]).to.have.property("employee", "Jane Austen");
expect(result[0]).to.have.property("report");
expect(result[0]).to.have.property("timesheet");
});
});
context("and there are several non-employees", () => {
it("returns an empty report", () => {
const employees: Employee[] = [
{
date: "2018-08-06",
employee: false,
hours: 5,
name: "Jane Austen",
},
{
date: "2018-08-07",
employee: false,
hours: 5,
name: "Emily Bronte",
},
];
const result: ReportEmployee[] = report(REGULAR_DAY_HOURS)(employees);
expect(result).to.be.empty;
});
});
});
});