Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Commit

Permalink
Merge pull request #160 from technologiestiftung/chore/prod-deps
Browse files Browse the repository at this point in the history
  • Loading branch information
ff6347 authored Jul 4, 2022
2 parents cb1f6cb + 66a575b commit e43225a
Show file tree
Hide file tree
Showing 11 changed files with 937 additions and 1,007 deletions.
1,522 changes: 726 additions & 796 deletions package-lock.json

Large diffs are not rendered by default.

23 changes: 11 additions & 12 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,14 @@
"@types/uuid": "8.3.4",
"commitizen": "4.2.4",
"cz-conventional-changelog": "3.3.0",
"date-fns": "2.28.0",
"dotenv": "16.0.1",
"esbuild": "0.14.48",
"eslint": "8.19.0",
"date-fns": "2.28.0",
"glob": "8.0.3",
"is-ci": "3.0.1",
"jest-each": "27.5.1",
"jsonwebtoken": "8.5.1",
"nock": "13.1.3",
"node-fetch": "2.6.1",
"nodemon": "2.0.18",
"semantic-release": "19.0.3",
Expand All @@ -72,28 +71,28 @@
"typescript": "4.7.4"
},
"dependencies": {
"@fastify/auth": "3.0.2",
"@fastify/cors": "8.0.0",
"@fastify/helmet": "9.1.0",
"@fastify/jwt": "6.2.0",
"@fastify/postgres": "5.0.0",
"@fastify/rate-limit": "7.0.0",
"@humanwhocodes/env": "2.2.0",
"@supabase/supabase-js": "1.31.1",
"ajv-errors": "1.0.1",
"ajv-errors": "3.0.0",
"bcrypt": "5.0.1",
"config": "3.3.7",
"fastify": "3.28.0",
"fastify-auth": "1.1.0",
"fastify": "4.2.0",
"fastify-blipp": "3.1.0",
"fastify-cors": "6.0.3",
"fastify-helmet": "7.0.1",
"fastify-jwt": "4.1.3",
"fastify-plugin": "3.0.1",
"fastify-postgres": "3.6.0",
"fastify-rate-limit": "5.8.0",
"fastify-sensible": "3.1.2",
"fluent-json-schema": "3.1.0",
"ioredis": "4.28.5",
"make-promises-safe": "5.1.0",
"pg": "8.7.3",
"pino": "7.10.0",
"pino": "8.1.0",
"pino-logflare": "0.3.12",
"pino-pretty": "7.6.1",
"pino-pretty": "8.1.0",
"pino-syslog": "2.0.0",
"uuid": "8.3.2"
},
Expand Down
5 changes: 1 addition & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ if (!logFlareApiKey || !logFlareSourceToken) {

import buildServer from "./lib/server";

const _logger: FastifyLoggerOptions = {
prettyPrint: true,
};
const server = buildServer({
jwtSecret,
supabaseUrl,
Expand All @@ -56,7 +53,7 @@ const server = buildServer({
});
async function main(): Promise<void> {
try {
await server.listen(port, "0.0.0.0");
await server.listen({ port, host: "0.0.0.0" });
server.log.info(`Server listening on http://localhost:${port}`);
server.blipp();
} catch (error) {
Expand Down
4 changes: 2 additions & 2 deletions src/integrations/http.batch-insert.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ describe("tests for the http integration", () => {
expect(responseArray.json()).toMatchInlineSnapshot(`
Object {
"error": "Bad Request",
"message": "body/records/5 should have required property 'measurements', body should match \\"then\\" schema",
"message": "body/records/5 must have required property 'measurements', body must match \\"then\\" schema",
"statusCode": 400,
}
`);
Expand Down Expand Up @@ -292,7 +292,7 @@ describe("tests for the http integration", () => {
expect(responseArray.json()).toMatchInlineSnapshot(`
Object {
"error": "Bad Request",
"message": "body/records/5 should have required property 'recorded_at', body/records/100 should have required property 'recorded_at', body should match \\"then\\" schema",
"message": "body/records/5 must have required property 'recorded_at', body/records/100 must have required property 'recorded_at', body must match \\"then\\" schema",
"statusCode": 400,
}
`);
Expand Down
2 changes: 1 addition & 1 deletion src/integrations/http.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ describe("tests for the http integration", () => {
});
expect(response.statusCode).toBe(400);
expect(response.body).toMatchInlineSnapshot(
`"{\\"statusCode\\":400,\\"error\\":\\"Bad Request\\",\\"message\\":\\"body should be object\\"}"`
`"{\\"statusCode\\":400,\\"error\\":\\"Bad Request\\",\\"message\\":\\"body must be object\\"}"`
);
await deleteUser(user.token);
});
Expand Down
5 changes: 3 additions & 2 deletions src/integrations/http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ interface HTTPPostParams {
const apiVersion = config.get("apiVersion");
const mountPoint = config.get<string>("mountPoint");
const recordSchema = S.object()
.id("#record")
// .id("#record")
.additionalProperties(true)
.raw({
errorMessage: {
Expand All @@ -52,6 +52,7 @@ const recordSchema = S.object()
.prop("measurements", S.array().items(S.number()).required());

const recordsSchema = S.object()
// .id("#records")
.additionalProperties(true)
.prop(
"records",
Expand All @@ -61,7 +62,7 @@ const recordsSchema = S.object()
);

const postHTTPBodySchema = S.object()
.id("/integration/http")
.id("/integration/http/records")
.title("Validation for data coming in via HTTP")
.additionalProperties(true)
.ifThenElse(
Expand Down
4 changes: 2 additions & 2 deletions src/integrations/ttn.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe("tests for the ttn integration", () => {
});
expect(response.statusCode).toBe(400);
expect(response.body).toMatchInlineSnapshot(
`"{\\"statusCode\\":400,\\"error\\":\\"Bad Request\\",\\"message\\":\\"body should be object\\"}"`
`"{\\"statusCode\\":400,\\"error\\":\\"Bad Request\\",\\"message\\":\\"body must be object\\"}"`
);
});
test("should be rejected due to no wrong body", async () => {
Expand All @@ -74,7 +74,7 @@ describe("tests for the ttn integration", () => {
});
expect(response.statusCode).toBe(400);
expect(response.body).toMatchInlineSnapshot(
`"{\\"statusCode\\":400,\\"error\\":\\"Bad Request\\",\\"message\\":\\"body should have required property 'end_device_ids', body should have required property 'received_at', body should have required property 'uplink_message'\\"}"`
`"{\\"statusCode\\":400,\\"error\\":\\"Bad Request\\",\\"message\\":\\"body must have required property 'end_device_ids', body must have required property 'received_at', body must have required property 'uplink_message'\\"}"`
);
});
test("should be rejected due to no authorization header", async () => {
Expand Down
151 changes: 77 additions & 74 deletions src/lib/__tests__/authtokens.error.test.ts
Original file line number Diff line number Diff line change
@@ -1,87 +1,90 @@
/* eslint-disable jest/no-commented-out-tests */
/* eslint-disable jest/no-disabled-tests */
/* eslint-disable jest/no-hooks */
import nock from "nock";
// import nock from "nock";
// import * as supabase from "@supabase/supabase-js";
import {
authtokenEndpoint,
buildServerOpts,
closePool,
connectPool,
deleteUser,
signupUser,
supabaseUrl,
truncateTables,
} from "../../__test-utils";
// import {
// // authtokenEndpoint,
// // buildServerOpts,
// closePool,
// connectPool,
// // deleteUser,
// // signupUser,
// // supabaseUrl,
// truncateTables,
// } from "../../__test-utils";

import { buildServer } from "../server";
// import { buildServer } from "../server";
// import { PostgrestError } from "@supabase/supabase-js";
// jest.mock("@supabase/supabase-js", () => ({
// createClient: jest.fn(),
// }));
describe("error handling", () => {
beforeAll(async () => {
await connectPool();
});
beforeEach(async () => {
await truncateTables();
});
// eslint-disable-next-line jest/no-hooks
afterAll(async () => {
await truncateTables();
await closePool();
});
test("should throw an error in GET due to returned postgres error", async () => {
const server = buildServer(buildServerOpts);
const user = await signupUser();

const logSpy = jest.spyOn(server.log, "error");
// const httpErrorsSpy = jest.spyOn(server.httpErrors, "internalServerError");
const scope = nock(supabaseUrl)
.get("/rest/v1/auth_tokens")
.query(true)
.reply(500);

const res = await server.inject({
method: "GET",
url: authtokenEndpoint,
headers: { authorization: `Bearer ${user.token}` },
});
expect(res.statusCode).toBe(500);
expect(logSpy).toHaveBeenCalledTimes(1);
scope.done();
nock.cleanAll();
nock.enableNetConnect();
jest.resetAllMocks();
// expect(httpErrorsSpy).toHaveBeenCalledTimes(1);
await deleteUser(user.token);
});
describe("error handling for auth tokens", () => {
// beforeAll(async () => {
// await connectPool();
// });
// beforeEach(async () => {
// await truncateTables();
// });
// // eslint-disable-next-line jest/no-hooks
// afterAll(async () => {
// await truncateTables();
// await closePool();
// });
// TODO: Create new test for auth tokens errors, since nock did interfear with all other tests
test.todo("should throw an error in GET due to returned postgres error - use nock",);
});
//async () => {
// const server = buildServer(buildServerOpts);
// const user = await signupUser();

// test.only("should mock supabase and return error", async () => {
// const err: PostgrestError = {
// code: "500",
// message: "string",
// details: "string",
// hint: "string",
// };
// const postgrestResponse: any = {
// from: jest.fn().mockRejectedValue({ error: err }),
// select: jest.fn().mockRejectedValue({ error: err }),
// };
// //@ts-ignore
// supabase.createClient.mockImplementation(() => {
// return postgrestResponse;
// });
// const server = buildServer(buildServerOpts);
// const user = await signupUser();
// const res = await server.inject({
// method: "GET",
// url: authtokenEndpoint,
// headers: { authorization: `Bearer ${user.token}` },
// const logSpy = jest.spyOn(server.log, "error");
// // const httpErrorsSpy = jest.spyOn(server.httpErrors, "internalServerError");
// const scope = nock(supabaseUrl)
// .get("/rest/v1/auth_tokens")
// .query(true)
// .reply(500);

// const res = await server.inject({
// method: "GET",
// url: authtokenEndpoint,
// headers: { authorization: `Bearer ${user.token}` },
// });
// expect(res.statusCode).toBe(500);
// expect(logSpy).toHaveBeenCalledTimes(1);
// scope.done();
// nock.cleanAll();
// nock.enableNetConnect();
// jest.resetAllMocks();
// // expect(httpErrorsSpy).toHaveBeenCalledTimes(1);
// await deleteUser(user.token);
// });
// expect(res.statusCode).toBe(500);
// expect(supabase.createClient).toHaveBeenCalledTimes(1);
// expect(postgrestResponse.select).toHaveBeenCalledTimes(1);
// await deleteUser(user.token);
// });

// // test.only("should mock supabase and return error", async () => {
// // const err: PostgrestError = {
// // code: "500",
// // message: "string",
// // details: "string",
// // hint: "string",
// // };
// // const postgrestResponse: any = {
// // from: jest.fn().mockRejectedValue({ error: err }),
// // select: jest.fn().mockRejectedValue({ error: err }),
// // };
// // //@ts-ignore
// // supabase.createClient.mockImplementation(() => {
// // return postgrestResponse;
// // });
// // const server = buildServer(buildServerOpts);
// // const user = await signupUser();
// // const res = await server.inject({
// // method: "GET",
// // url: authtokenEndpoint,
// // headers: { authorization: `Bearer ${user.token}` },
// // });
// // expect(res.statusCode).toBe(500);
// // expect(supabase.createClient).toHaveBeenCalledTimes(1);
// // expect(postgrestResponse.select).toHaveBeenCalledTimes(1);
// // await deleteUser(user.token);
// // });
2 changes: 1 addition & 1 deletion src/lib/__tests__/sensors.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ describe(`all ${sensorsEndpoint} tests`, () => {
expect(response.json()).toMatchInlineSnapshot(`
Object {
"error": "Bad Request",
"message": "querystring should NOT have additional properties",
"message": "querystring must NOT have additional properties",
"statusCode": 400,
}
`);
Expand Down
8 changes: 4 additions & 4 deletions src/lib/sensors-records.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ const sensorsRecordsRoutes: FastifyPluginAsync = async (fastify) => {
url: `/${mountPoint}/v${apiVersion}/sensors/:sensorId/records/:recordId`,
schema: {
params: getRecordParamsSchema,
response: { response: { $ref: "get-response-default#" } },
// response: { response: { $ref: "get-response-default#" } },
},
method: ["GET", "HEAD"],
logLevel,
Expand Down Expand Up @@ -190,7 +190,7 @@ const sensorsRecordsRoutes: FastifyPluginAsync = async (fastify) => {
schema: {
params: getSensorParamsSchema,
querystring: getQuerySchemaRecords,
response: { response: { $ref: "get-response-default#" } },
// response: { response: { $ref: "get-response-default#" } },
},
method: ["HEAD", "GET"],
logLevel,
Expand Down Expand Up @@ -278,7 +278,7 @@ const sensorsRecordsRoutes: FastifyPluginAsync = async (fastify) => {
url: `/${mountPoint}/v${apiVersion}/sensors/:sensorId`,
schema: {
params: getSensorParamsSchema,
response: { response: { $ref: "get-response-default#" } },
// response: { response: { $ref: "get-response-default#" } },
},
method: ["GET", "HEAD"],
logLevel,
Expand Down Expand Up @@ -343,7 +343,7 @@ const sensorsRecordsRoutes: FastifyPluginAsync = async (fastify) => {
url: `/${mountPoint}/v${apiVersion}/sensors/`,
schema: {
querystring: getQuerySchemaSensors,
response: { response: { $ref: "get-response-default#" } },
// response: { response: { $ref: "get-response-default#" } },
},
method: ["GET", "HEAD"],
logLevel,
Expand Down
Loading

0 comments on commit e43225a

Please sign in to comment.