Begin writing tests
This commit is contained in:
parent
d49998801f
commit
22036c419d
6 changed files with 172 additions and 0 deletions
5
module/__tests__/README.md
Normal file
5
module/__tests__/README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
The stat-tracker module utilizes [quench](https://foundryvtt.com/packages/quench)
|
||||||
|
for it's end-to-end tests and unit tests, enabling us to be sure that the module
|
||||||
|
is as stable as possible and detect when there are breaking changes.
|
||||||
9
module/__tests__/registration.mjs
Normal file
9
module/__tests__/registration.mjs
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { barGraphTests } from "./schemas/barGraph.mjs";
|
||||||
|
import { numberBucketTests } from "./schemas/numberBucket.mjs";
|
||||||
|
import { stringBucketTests } from "./schemas/stringBucket.mjs";
|
||||||
|
|
||||||
|
Hooks.on(`quenchReady`, (quench) => {
|
||||||
|
numberBucketTests(quench);
|
||||||
|
stringBucketTests(quench);
|
||||||
|
barGraphTests(quench);
|
||||||
|
});
|
||||||
51
module/__tests__/schemas/barGraph.mjs
Normal file
51
module/__tests__/schemas/barGraph.mjs
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
import { api } from "../../api.mjs";
|
||||||
|
|
||||||
|
export function barGraphTests(quench) {
|
||||||
|
quench.registerBatch(
|
||||||
|
`${__ID__}.barGraphSchema`,
|
||||||
|
(ctx) => {
|
||||||
|
const { describe, it, expect } = ctx;
|
||||||
|
|
||||||
|
describe(`the bar graph schema`, () => {
|
||||||
|
it(`should default any additional properties left out`, () => {
|
||||||
|
const { value, error } = api.schemas.graphs.bar.validate(
|
||||||
|
{ type: `bar` },
|
||||||
|
);
|
||||||
|
expect(value).to.have.keys(`type`, `stacked`, `showEmptyBuckets`);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should allow stacked to be provided specifically`, () => {
|
||||||
|
const { value, error } = api.schemas.graphs.bar.validate(
|
||||||
|
{ type: `bar`, stacked: true },
|
||||||
|
);
|
||||||
|
expect(value).to.have.keys(`type`, `stacked`, `showEmptyBuckets`);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should allow showEmptyBuckets to be provided specifically`, () => {
|
||||||
|
const { value, error } = api.schemas.graphs.bar.validate(
|
||||||
|
{ type: `bar`, showEmptyBuckets: true },
|
||||||
|
);
|
||||||
|
expect(value).to.have.keys(`type`, `stacked`, `showEmptyBuckets`);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should only allow showEmptyBuckets to be a boolean`, () => {
|
||||||
|
const { value, error } = api.schemas.graphs.bar.validate(
|
||||||
|
{ type: `bar`, showEmptyBuckets: `a potato` },
|
||||||
|
);
|
||||||
|
expect(value).to.have.keys(`type`, `stacked`, `showEmptyBuckets`);
|
||||||
|
expect(error).not.to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should only allow stacked to be a boolean`, () => {
|
||||||
|
const { error } = api.schemas.graphs.bar.validate(
|
||||||
|
{ type: `bar`, stacked: `a potato` },
|
||||||
|
);
|
||||||
|
expect(error).not.to.be.undefined;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
61
module/__tests__/schemas/numberBucket.mjs
Normal file
61
module/__tests__/schemas/numberBucket.mjs
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
import { api } from "../../api.mjs";
|
||||||
|
|
||||||
|
export function numberBucketTests(quench) {
|
||||||
|
quench.registerBatch(
|
||||||
|
`${__ID__}.numberBucketSchema`,
|
||||||
|
(ctx) => {
|
||||||
|
const { describe, it, expect } = ctx;
|
||||||
|
|
||||||
|
describe(`the number bucket schema`, () => {
|
||||||
|
it(`should allow all additional properties to be left out`, () => {
|
||||||
|
const { error } = api.schemas.buckets.number.validate(
|
||||||
|
{ type: `number` },
|
||||||
|
);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should allow the min additional property if only it is provided with the type`, () => {
|
||||||
|
const { error } = api.schemas.buckets.number.validate(
|
||||||
|
{ type: `number`, min: 0 },
|
||||||
|
);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should allow the max additional property if only it is provided with the type`, () => {
|
||||||
|
const { error } = api.schemas.buckets.number.validate(
|
||||||
|
{ type: `number`, max: 10 },
|
||||||
|
);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should not allow the step additional property if only it is provided with the type`, () => {
|
||||||
|
const { error } = api.schemas.buckets.number.validate(
|
||||||
|
{ type: `number`, step: 1 },
|
||||||
|
);
|
||||||
|
expect(error).not.to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should not allow max to be less than min`, () => {
|
||||||
|
const { error } = api.schemas.buckets.number.validate(
|
||||||
|
{ type: `number`, min: 10, max: 5 },
|
||||||
|
);
|
||||||
|
expect(error).not.to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should not allow max to be less than min`, () => {
|
||||||
|
const { error } = api.schemas.buckets.number.validate(
|
||||||
|
{ type: `number`, min: 10, max: 15 },
|
||||||
|
);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should allow step when min is also provided`, () => {
|
||||||
|
const { error } = api.schemas.buckets.number.validate(
|
||||||
|
{ type: `number`, min: 10, step: 5 },
|
||||||
|
);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
40
module/__tests__/schemas/stringBucket.mjs
Normal file
40
module/__tests__/schemas/stringBucket.mjs
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
import { api } from "../../api.mjs";
|
||||||
|
|
||||||
|
export function stringBucketTests(quench) {
|
||||||
|
quench.registerBatch(
|
||||||
|
`${__ID__}.stringBucketSchema`,
|
||||||
|
(ctx) => {
|
||||||
|
const { describe, it, expect } = ctx;
|
||||||
|
|
||||||
|
describe(`the string bucket schema`, () => {
|
||||||
|
it(`should allow all additional properties to be left out`, () => {
|
||||||
|
const { error } = api.schemas.buckets.string.validate(
|
||||||
|
{ type: `string` },
|
||||||
|
);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should allow specific choices to be provided`, () => {
|
||||||
|
const { error } = api.schemas.buckets.string.validate(
|
||||||
|
{ type: `string`, choices: [`choice 1`, `choice 2`] },
|
||||||
|
);
|
||||||
|
expect(error).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`shouldn't allow specific choices to be empty`, () => {
|
||||||
|
const { error } = api.schemas.buckets.string.validate(
|
||||||
|
{ type: `string`, choices: [] },
|
||||||
|
);
|
||||||
|
expect(error).not.to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should only allow specific choices to be strings`, () => {
|
||||||
|
const { error } = api.schemas.buckets.string.validate(
|
||||||
|
{ type: `string`, choices: [`choice 1`, 5] },
|
||||||
|
);
|
||||||
|
expect(error).not.to.be.undefined;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
@ -6,3 +6,9 @@ import "./hooks/ready.mjs";
|
||||||
|
|
||||||
// Document Hooks
|
// Document Hooks
|
||||||
import "./hooks/preCreateChatMessage.mjs";
|
import "./hooks/preCreateChatMessage.mjs";
|
||||||
|
|
||||||
|
// Dev Only imports
|
||||||
|
import "./__tests__/registration.mjs";
|
||||||
|
// if (import.meta.env.DEV) {
|
||||||
|
// import(`./__tests__/registration.mjs`);
|
||||||
|
// }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue