chore(deps): bump yup

This commit is contained in:
Fredrik Adelöw
2020-10-16 13:29:45 +02:00
parent 275b7f001a
commit c91054ac17
15 changed files with 98 additions and 50 deletions
+2 -2
View File
@@ -22,11 +22,11 @@
"dependencies": {
"@backstage/config": "^0.1.1-alpha.25",
"@types/json-schema": "^7.0.5",
"@types/yup": "^0.28.2",
"@types/yup": "^0.29.8",
"json-schema": "^0.2.5",
"lodash": "^4.17.15",
"uuid": "^8.0.0",
"yup": "^0.29.1"
"yup": "^0.29.3"
},
"devDependencies": {
"@backstage/cli": "^0.1.1-alpha.25",
@@ -18,24 +18,26 @@ import * as yup from 'yup';
import { EntityPolicy } from '../../types';
import { Entity } from '../Entity';
const DEFAULT_ENTITY_SCHEMA = yup.object({
apiVersion: yup.string().required(),
kind: yup.string().required(),
metadata: yup
.object({
uid: yup.string().notRequired().min(1),
etag: yup.string().notRequired().min(1),
generation: yup.number().notRequired().integer().min(1),
name: yup.string().required(),
namespace: yup.string().notRequired(),
description: yup.string().notRequired(),
labels: yup.object<Record<string, string>>().notRequired(),
annotations: yup.object<Record<string, string>>().notRequired(),
tags: yup.array<string>().notRequired(),
})
.required(),
spec: yup.object({}).notRequired(),
});
const DEFAULT_ENTITY_SCHEMA = yup
.object({
apiVersion: yup.string().required(),
kind: yup.string().required(),
metadata: yup
.object({
uid: yup.string().notRequired().min(1),
etag: yup.string().notRequired().min(1),
generation: yup.number().notRequired().integer().min(1),
name: yup.string().required(),
namespace: yup.string().notRequired(),
description: yup.string().notRequired(),
labels: yup.object<Record<string, string>>().notRequired(),
annotations: yup.object<Record<string, string>>().notRequired(),
tags: yup.array<string>().notRequired(),
})
.required(),
spec: yup.object({}).notRequired(),
})
.required();
/**
* Ensures that the entity spec is valid according to a schema.
@@ -101,4 +101,24 @@ describe('ComponentV1alpha1Policy', () => {
(entity as any).spec.owner = '';
await expect(policy.enforce(entity)).rejects.toThrow(/owner/);
});
it('accepts missing implementsApis', async () => {
delete (entity as any).spec.implementsApis;
await expect(policy.enforce(entity)).resolves.toBe(entity);
});
it('rejects empty implementsApis', async () => {
(entity as any).spec.implementsApis = [''];
await expect(policy.enforce(entity)).rejects.toThrow(/implementsApis/);
});
it('rejects undefined implementsApis', async () => {
(entity as any).spec.implementsApis = [undefined];
await expect(policy.enforce(entity)).rejects.toThrow(/implementsApis/);
});
it('accepts no implementsApis', async () => {
(entity as any).spec.implementsApis = [];
await expect(policy.enforce(entity)).resolves.toBe(entity);
});
});
@@ -29,7 +29,7 @@ const schema = yup.object<Partial<ComponentEntityV1alpha1>>({
type: yup.string().required().min(1),
lifecycle: yup.string().required().min(1),
owner: yup.string().required().min(1),
implementsApis: yup.array(yup.string()).notRequired(),
implementsApis: yup.array(yup.string().required()).notRequired(),
})
.required(),
});
@@ -90,9 +90,14 @@ describe('GroupV1alpha1Policy', () => {
await expect(policy.enforce(entity)).rejects.toThrow(/ancestor/);
});
it('accepts empty ancestors', async () => {
it('rejects empty ancestors', async () => {
(entity as any).spec.ancestors = [''];
await expect(policy.enforce(entity)).resolves.toBe(entity);
await expect(policy.enforce(entity)).rejects.toThrow(/ancestor/);
});
it('rejects undefined ancestors', async () => {
(entity as any).spec.ancestors = [undefined];
await expect(policy.enforce(entity)).rejects.toThrow(/ancestor/);
});
it('accepts no ancestors', async () => {
@@ -105,9 +110,14 @@ describe('GroupV1alpha1Policy', () => {
await expect(policy.enforce(entity)).rejects.toThrow(/children/);
});
it('accepts empty children', async () => {
it('rejects empty children', async () => {
(entity as any).spec.children = [''];
await expect(policy.enforce(entity)).resolves.toBe(entity);
await expect(policy.enforce(entity)).rejects.toThrow(/children/);
});
it('rejects undefined children', async () => {
(entity as any).spec.children = [undefined];
await expect(policy.enforce(entity)).rejects.toThrow(/children/);
});
it('accepts no children', async () => {
@@ -120,9 +130,14 @@ describe('GroupV1alpha1Policy', () => {
await expect(policy.enforce(entity)).rejects.toThrow(/descendants/);
});
it('accepts empty descendants', async () => {
it('rejects empty descendants', async () => {
(entity as any).spec.descendants = [''];
await expect(policy.enforce(entity)).resolves.toBe(entity);
await expect(policy.enforce(entity)).rejects.toThrow(/descendants/);
});
it('rejects undefined descendants', async () => {
(entity as any).spec.descendants = [undefined];
await expect(policy.enforce(entity)).rejects.toThrow(/descendants/);
});
it('accepts no descendants', async () => {
@@ -30,21 +30,23 @@ const schema = yup.object<Partial<GroupEntityV1alpha1>>({
parent: yup.string().notRequired().min(1),
// Use these manual tests because yup .required() requires at least
// one element and there is no simple workaround -_-
ancestors: yup.array(yup.string()).test({
// the cast is there to convince typescript that the array itself is
// required without using .required()
ancestors: yup.array(yup.string().required()).test({
name: 'isDefined',
message: 'ancestors must be defined',
test: v => Boolean(v),
}),
children: yup.array(yup.string()).test({
}) as yup.ArraySchema<string, object>,
children: yup.array(yup.string().required()).test({
name: 'isDefined',
message: 'children must be defined',
test: v => Boolean(v),
}),
descendants: yup.array(yup.string()).test({
}) as yup.ArraySchema<string, object>,
descendants: yup.array(yup.string().required()).test({
name: 'isDefined',
message: 'descendants must be defined',
test: v => Boolean(v),
}),
}) as yup.ArraySchema<string, object>,
})
.required(),
});
@@ -93,6 +93,11 @@ describe('LocationV1alpha1Policy', () => {
await expect(policy.enforce(entity)).resolves.toBe(entity);
});
it('accepts empty targets', async () => {
(entity as any).spec.targets = [];
await expect(policy.enforce(entity)).resolves.toBe(entity);
});
it('rejects wrong targets', async () => {
(entity as any).spec.targets = 7;
await expect(policy.enforce(entity)).rejects.toThrow(/targets/);
@@ -28,7 +28,7 @@ const schema = yup.object<Partial<LocationEntityV1alpha1>>({
.object({
type: yup.string().required().min(1),
target: yup.string().notRequired().min(1),
targets: yup.array(yup.string()).notRequired(),
targets: yup.array(yup.string().required()).notRequired(),
})
.required(),
});
@@ -35,11 +35,13 @@ const schema = yup.object<Partial<UserEntityV1alpha1>>({
.notRequired(),
// Use this manual test because yup .required() requires at least one
// element and there is no simple workaround -_-
memberOf: yup.array(yup.string()).test({
// the cast is there to convince typescript that the array itself is
// required without using .required()
memberOf: yup.array(yup.string().required()).test({
name: 'isDefined',
message: 'memberOf must be defined',
test: v => Boolean(v),
}),
}) as yup.ArraySchema<string, object>,
})
.required(),
});
@@ -22,7 +22,8 @@ export const locationSpecSchema = yup
type: yup.string().required(),
target: yup.string().required(),
})
.noUnknown();
.noUnknown()
.required();
export const locationSchema = yup
.object<Location>({
@@ -30,4 +31,5 @@ export const locationSchema = yup
type: yup.string().required(),
target: yup.string().required(),
})
.noUnknown();
.noUnknown()
.required();
+2 -2
View File
@@ -33,13 +33,13 @@
"@backstage/config": "^0.1.1-alpha.25",
"fs-extra": "^9.0.0",
"yaml": "^1.9.2",
"yup": "^0.29.1"
"yup": "^0.29.3"
},
"devDependencies": {
"@types/jest": "^26.0.7",
"@types/mock-fs": "^4.10.0",
"@types/node": "^12.0.0",
"@types/yup": "^0.28.2",
"@types/yup": "^0.29.8",
"mock-fs": "^4.13.0"
},
"files": [
+1 -1
View File
@@ -58,7 +58,7 @@ const secretLoaderSchemas = {
};
// The top-level secret schema, which figures out what type of secret it is.
const secretSchema = yup.lazy<object>(value => {
const secretSchema = yup.lazy<object | undefined>(value => {
if (typeof value !== 'object' || value === null) {
return yup.object().required().label('secret');
}
+2 -2
View File
@@ -43,7 +43,7 @@
"winston": "^3.2.1",
"yaml": "^1.9.2",
"yn": "^4.0.0",
"yup": "^0.29.1"
"yup": "^0.29.3"
},
"devDependencies": {
"@backstage/cli": "^0.1.1-alpha.25",
@@ -53,7 +53,7 @@
"@types/lodash": "^4.14.151",
"@types/supertest": "^2.0.8",
"@types/uuid": "^8.0.0",
"@types/yup": "^0.28.2",
"@types/yup": "^0.29.8",
"jest-fetch-mock": "^3.0.3",
"msw": "^0.20.5",
"supertest": "^4.0.2"
+2 -2
View File
@@ -31,7 +31,7 @@
"winston": "^3.2.1",
"yaml": "^1.9.2",
"yn": "^4.0.0",
"yup": "^0.29.1"
"yup": "^0.29.3"
},
"devDependencies": {
"@backstage/cli": "^0.1.1-alpha.25",
@@ -39,7 +39,7 @@
"@types/node-fetch": "^2.5.7",
"@types/supertest": "^2.0.8",
"@types/uuid": "^8.0.0",
"@types/yup": "^0.28.2",
"@types/yup": "^0.29.8",
"jest-fetch-mock": "^3.0.3",
"supertest": "^4.0.2"
},
+5 -5
View File
@@ -5820,10 +5820,10 @@
dependencies:
"@types/yargs-parser" "*"
"@types/yup@^0.28.2":
version "0.28.3"
resolved "https://registry.npmjs.org/@types/yup/-/yup-0.28.3.tgz#387c35f9a6a36b8d3561f6601eb4e72518b92899"
integrity sha512-0Sir2LxOmupF8HBUvpJoZghLmOqKfZsBk1GYlMwSIccLDDUoN04LHvo0KzDp9qxt1IKf9Fudpj35SrJ8VqetkQ==
"@types/yup@^0.29.8":
version "0.29.8"
resolved "https://registry.npmjs.org/@types/yup/-/yup-0.29.8.tgz#83db15735987db9fe5a38772a0fb9500e3c5bf39"
integrity sha512-MBSp62AjB1KrSOI3gX9GekddXU5YYQAVA93+aSl78biBqoSzxg876aQY2KJK5Gnfbpqq7O2cadVX5kPAtBqIXw==
"@types/zen-observable@^0.8.0":
version "0.8.0"
@@ -24123,7 +24123,7 @@ yn@^4.0.0:
resolved "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz#611480051ea43b510da1dfdbe177ed159f00a979"
integrity sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==
yup@^0.29.1:
yup@^0.29.3:
version "0.29.3"
resolved "https://registry.npmjs.org/yup/-/yup-0.29.3.tgz#69a30fd3f1c19f5d9e31b1cf1c2b851ce8045fea"
integrity sha512-RNUGiZ/sQ37CkhzKFoedkeMfJM0vNQyaz+wRZJzxdKE7VfDeVKH8bb4rr7XhRLbHJz5hSjoDNwMEIaKhuMZ8gQ==