Skip to content

Commit

Permalink
Merge pull request #13 from gemini-hlsw/test-setup
Browse files Browse the repository at this point in the history
Add integration test setup
  • Loading branch information
hugo-vrijswijk authored Jul 13, 2024
2 parents f3f779f + 2e0c1db commit 616e0bd
Show file tree
Hide file tree
Showing 24 changed files with 1,008 additions and 195 deletions.
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
"type": "module",
"packageManager": "[email protected]",
"scripts": {
"test": "mocha --node-option enable-source-maps --forbid-only --forbid-pending dist/**/*.spec.js",
"test": "pnpm test:unit && pnpm test:integration",
"test:unit": "mocha --node-option enable-source-maps --forbid-only --forbid-pending dist/**/*.spec.js",
"test:integration": "mocha --node-option enable-source-maps --timeout 15s --forbid-only --forbid-pending dist/integration/**/*.test.js",
"generate": "prisma generate",
"prebuild": "pnpm generate",
"build": "tsc",
Expand Down Expand Up @@ -34,12 +36,14 @@
"@graphql-codegen/typescript": "^4.0.9",
"@graphql-codegen/typescript-resolvers": "^4.2.1",
"@parcel/watcher": "^2.4.1",
"@testcontainers/postgresql": "^10.10.3",
"@types/chai": "^4.3.16",
"@types/eslint__js": "^8.42.3",
"@types/mocha": "^10.0.7",
"@types/node": "^20.14.10",
"chai": "^5.1.1",
"eslint": "^9.6.0",
"execa": "^9.3.0",
"husky": "^9.0.11",
"lint-staged": "^15.2.7",
"mocha": "^10.6.0",
Expand Down
664 changes: 664 additions & 0 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
provider = "prisma-client-js"
binaryTargets = ["debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"]
provider = "prisma-client-js"
}

datasource db {
Expand Down
47 changes: 24 additions & 23 deletions src/graphql/gen/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql';
import { ApolloContext } from '../../server.js';
export type Maybe<T> = T | null;
export type InputMaybe<T> = T | undefined;
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
Expand Down Expand Up @@ -741,7 +742,7 @@ export type ResolversParentTypes = {
User: User;
};

export type AltairGuideLoopResolvers<ContextType = any, ParentType extends ResolversParentTypes['AltairGuideLoop'] = ResolversParentTypes['AltairGuideLoop']> = {
export type AltairGuideLoopResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['AltairGuideLoop'] = ResolversParentTypes['AltairGuideLoop']> = {
aoEnabled?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
focus?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
oiBlend?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
Expand All @@ -754,7 +755,7 @@ export type AltairGuideLoopResolvers<ContextType = any, ParentType extends Resol
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type AltairInstrumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['AltairInstrument'] = ResolversParentTypes['AltairInstrument']> = {
export type AltairInstrumentResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['AltairInstrument'] = ResolversParentTypes['AltairInstrument']> = {
adjustAdc?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
beamsplitter?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
deployAdc?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
Expand All @@ -769,13 +770,13 @@ export type AltairInstrumentResolvers<ContextType = any, ParentType extends Reso
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type AzResolvers<ContextType = any, ParentType extends ResolversParentTypes['Az'] = ResolversParentTypes['Az']> = {
export type AzResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Az'] = ResolversParentTypes['Az']> = {
degrees?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
dms?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type ConfigurationResolvers<ContextType = any, ParentType extends ResolversParentTypes['Configuration'] = ResolversParentTypes['Configuration']> = {
export type ConfigurationResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Configuration'] = ResolversParentTypes['Configuration']> = {
obsId?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
obsInstrument?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
obsSubtitle?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
Expand All @@ -796,29 +797,29 @@ export interface DateTimeScalarConfig extends GraphQLScalarTypeConfig<ResolversT
name: 'DateTime';
}

export type DecResolvers<ContextType = any, ParentType extends ResolversParentTypes['Dec'] = ResolversParentTypes['Dec']> = {
export type DecResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Dec'] = ResolversParentTypes['Dec']> = {
degrees?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
dms?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type DistinctInstrumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['DistinctInstrument'] = ResolversParentTypes['DistinctInstrument']> = {
export type DistinctInstrumentResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['DistinctInstrument'] = ResolversParentTypes['DistinctInstrument']> = {
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type DistinctPortResolvers<ContextType = any, ParentType extends ResolversParentTypes['DistinctPort'] = ResolversParentTypes['DistinctPort']> = {
export type DistinctPortResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['DistinctPort'] = ResolversParentTypes['DistinctPort']> = {
issPort?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type ElResolvers<ContextType = any, ParentType extends ResolversParentTypes['El'] = ResolversParentTypes['El']> = {
export type ElResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['El'] = ResolversParentTypes['El']> = {
degrees?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
dms?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type GemsGuideLoopResolvers<ContextType = any, ParentType extends ResolversParentTypes['GemsGuideLoop'] = ResolversParentTypes['GemsGuideLoop']> = {
export type GemsGuideLoopResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['GemsGuideLoop'] = ResolversParentTypes['GemsGuideLoop']> = {
anisopl?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
aoEnabled?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
flexure?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
Expand All @@ -829,28 +830,28 @@ export type GemsGuideLoopResolvers<ContextType = any, ParentType extends Resolve
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type GemsInstrumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['GemsInstrument'] = ResolversParentTypes['GemsInstrument']> = {
export type GemsInstrumentResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['GemsInstrument'] = ResolversParentTypes['GemsInstrument']> = {
adc?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
astrometricMode?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
beamsplitter?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
pk?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type GuideAlarmResolvers<ContextType = any, ParentType extends ResolversParentTypes['GuideAlarm'] = ResolversParentTypes['GuideAlarm']> = {
export type GuideAlarmResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['GuideAlarm'] = ResolversParentTypes['GuideAlarm']> = {
enabled?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
limit?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type GuideAlarmsResolvers<ContextType = any, ParentType extends ResolversParentTypes['GuideAlarms'] = ResolversParentTypes['GuideAlarms']> = {
export type GuideAlarmsResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['GuideAlarms'] = ResolversParentTypes['GuideAlarms']> = {
OIWFS?: Resolver<ResolversTypes['GuideAlarm'], ParentType, ContextType>;
PWFS1?: Resolver<ResolversTypes['GuideAlarm'], ParentType, ContextType>;
PWFS2?: Resolver<ResolversTypes['GuideAlarm'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type GuideLoopResolvers<ContextType = any, ParentType extends ResolversParentTypes['GuideLoop'] = ResolversParentTypes['GuideLoop']> = {
export type GuideLoopResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['GuideLoop'] = ResolversParentTypes['GuideLoop']> = {
daytimeMode?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
lightPath?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
m1CorrectionsEnable?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
Expand All @@ -867,7 +868,7 @@ export type GuideLoopResolvers<ContextType = any, ParentType extends ResolversPa
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type InstrumentResolvers<ContextType = any, ParentType extends ResolversParentTypes['Instrument'] = ResolversParentTypes['Instrument']> = {
export type InstrumentResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Instrument'] = ResolversParentTypes['Instrument']> = {
ao?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
extraParams?: Resolver<ResolversTypes['JSON'], ParentType, ContextType>;
focusOffset?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
Expand All @@ -885,7 +886,7 @@ export interface JsonScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes
name: 'JSON';
}

export type MechanismResolvers<ContextType = any, ParentType extends ResolversParentTypes['Mechanism'] = ResolversParentTypes['Mechanism']> = {
export type MechanismResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Mechanism'] = ResolversParentTypes['Mechanism']> = {
agAcPickoffPark?: Resolver<ResolversTypes['StatusType'], ParentType, ContextType>;
agAoFoldPark?: Resolver<ResolversTypes['StatusType'], ParentType, ContextType>;
agParkAll?: Resolver<ResolversTypes['StatusType'], ParentType, ContextType>;
Expand Down Expand Up @@ -926,7 +927,7 @@ export type MechanismResolvers<ContextType = any, ParentType extends ResolversPa
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type MutationResolvers<ContextType = any, ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation']> = {
export type MutationResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation']> = {
createConfiguration?: Resolver<ResolversTypes['Configuration'], ParentType, ContextType, RequireFields<MutationCreateConfigurationArgs, 'oiGuidingType' | 'p1GuidingType' | 'p2GuidingType'>>;
createInstrument?: Resolver<ResolversTypes['Instrument'], ParentType, ContextType, RequireFields<MutationCreateInstrumentArgs, 'issPort' | 'name'>>;
createTarget?: Resolver<ResolversTypes['Target'], ParentType, ContextType, RequireFields<MutationCreateTargetArgs, 'name' | 'type'>>;
Expand All @@ -946,7 +947,7 @@ export type MutationResolvers<ContextType = any, ParentType extends ResolversPar
updateTarget?: Resolver<ResolversTypes['Target'], ParentType, ContextType, RequireFields<MutationUpdateTargetArgs, 'pk'>>;
};

export type QueryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
export type QueryResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
altairGuideLoop?: Resolver<Maybe<ResolversTypes['AltairGuideLoop']>, ParentType, ContextType>;
altairInstrument?: Resolver<Maybe<ResolversTypes['AltairInstrument']>, ParentType, ContextType>;
configuration?: Resolver<Maybe<ResolversTypes['Configuration']>, ParentType, ContextType, Partial<QueryConfigurationArgs>>;
Expand All @@ -967,20 +968,20 @@ export type QueryResolvers<ContextType = any, ParentType extends ResolversParent
users?: Resolver<Array<ResolversTypes['User']>, ParentType, ContextType>;
};

export type RaResolvers<ContextType = any, ParentType extends ResolversParentTypes['RA'] = ResolversParentTypes['RA']> = {
export type RaResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['RA'] = ResolversParentTypes['RA']> = {
degrees?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
hms?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type RotatorResolvers<ContextType = any, ParentType extends ResolversParentTypes['Rotator'] = ResolversParentTypes['Rotator']> = {
export type RotatorResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Rotator'] = ResolversParentTypes['Rotator']> = {
angle?: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
pk?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
tracking?: Resolver<ResolversTypes['TrackingType'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type SlewFlagsResolvers<ContextType = any, ParentType extends ResolversParentTypes['SlewFlags'] = ResolversParentTypes['SlewFlags']> = {
export type SlewFlagsResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['SlewFlags'] = ResolversParentTypes['SlewFlags']> = {
autoparkAowfs?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
autoparkGems?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
autoparkOiwfs?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
Expand All @@ -1001,7 +1002,7 @@ export type SlewFlagsResolvers<ContextType = any, ParentType extends ResolversPa
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type TargetResolvers<ContextType = any, ParentType extends ResolversParentTypes['Target'] = ResolversParentTypes['Target']> = {
export type TargetResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['Target'] = ResolversParentTypes['Target']> = {
az?: Resolver<Maybe<ResolversTypes['Az']>, ParentType, ContextType>;
createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
dec?: Resolver<Maybe<ResolversTypes['Dec']>, ParentType, ContextType>;
Expand All @@ -1015,13 +1016,13 @@ export type TargetResolvers<ContextType = any, ParentType extends ResolversParen
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type UserResolvers<ContextType = any, ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']> = {
export type UserResolvers<ContextType = ApolloContext, ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']> = {
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
pk?: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};

export type Resolvers<ContextType = any> = {
export type Resolvers<ContextType = ApolloContext> = {
AltairGuideLoop?: AltairGuideLoopResolvers<ContextType>;
AltairInstrument?: AltairInstrumentResolvers<ContextType>;
Az?: AzResolvers<ContextType>;
Expand Down
5 changes: 2 additions & 3 deletions src/graphql/resolvers/AltairGuideLoop.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { prisma } from '../../prisma/db.js';
import { Resolvers } from '../gen/index.js';

export const AltairGuideLoopResolver: Resolvers = {
Query: {
altairGuideLoop: (_parent, args) => {
altairGuideLoop: (_parent, args, { prisma }) => {
return prisma.altairGuideLoop.findFirst({ where: args });
},
},
Mutation: {
updateAltairGuideLoop: (_parent, args) => {
updateAltairGuideLoop: (_parent, args, { prisma }) => {
return prisma.altairGuideLoop.update({
where: { pk: args.pk },
data: args,
Expand Down
5 changes: 2 additions & 3 deletions src/graphql/resolvers/AltairInstrument.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { prisma } from '../../prisma/db.js';
import { Resolvers } from '../gen/index.js';

export const AltairInstrumentResolver: Resolvers = {
Query: {
altairInstrument: (_parent, args) => {
altairInstrument: (_parent, args, { prisma }) => {
return prisma.altairInstrument.findFirst({ where: args });
},
},
Mutation: {
updateAltairInstrument: (_parent, args) => {
updateAltairInstrument: (_parent, args, { prisma }) => {
return prisma.altairInstrument.update({
where: { pk: args.pk },
data: args,
Expand Down
7 changes: 3 additions & 4 deletions src/graphql/resolvers/Configuration.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import { prisma } from '../../prisma/db.js';
import { Resolvers } from '../gen/index.js';

export const ConfigurationResolver: Resolvers = {
Query: {
configuration: (_parent, args) => {
configuration: (_parent, args, { prisma }) => {
return prisma.configuration.findFirst({ where: args });
},
},
Mutation: {
createConfiguration: (_parent, args) => {
createConfiguration: (_parent, args, { prisma }) => {
return prisma.configuration.create({ data: args });
},

updateConfiguration: (_parent, args) => {
updateConfiguration: (_parent, args, { prisma }) => {
return prisma.configuration.update({
where: { pk: args.pk },
data: args,
Expand Down
5 changes: 2 additions & 3 deletions src/graphql/resolvers/GemsGuideLoop.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { prisma } from '../../prisma/db.js';
import { Resolvers } from '../gen/index.js';

export const GemsGuideLoopResolver: Resolvers = {
Query: {
gemsGuideLoop: (_parent, args) => {
gemsGuideLoop: (_parent, args, { prisma }) => {
return prisma.gemsGuideLoop.findFirst({ where: args });
},
},
Mutation: {
updateGemsGuideLoop: (_parent, args) => {
updateGemsGuideLoop: (_parent, args, { prisma }) => {
return prisma.gemsGuideLoop.update({
where: { pk: args.pk },
data: args,
Expand Down
5 changes: 2 additions & 3 deletions src/graphql/resolvers/GemsInstrument.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { prisma } from '../../prisma/db.js';
import { Resolvers } from '../gen/index.js';

export const GemsInstrumentResolver: Resolvers = {
Query: {
gemsInstrument: (_parent, args) => {
gemsInstrument: (_parent, args, { prisma }) => {
return prisma.gemsInstrument.findFirst({ where: args });
},
},
Mutation: {
updateGemsInstrument: (_parent, args) => {
updateGemsInstrument: (_parent, args, { prisma }) => {
return prisma.gemsInstrument.update({
where: { pk: args.pk },
data: args,
Expand Down
5 changes: 2 additions & 3 deletions src/graphql/resolvers/GuideAlarm.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { GuideAlarm } from '@prisma/client';
import { FieldNode } from 'graphql';
import { prisma } from '../../prisma/db.js';
import { Resolvers, WfsType } from '../gen/index.js';

export const GuideAlarmResolver: Resolvers = {
Query: {
async guideAlarms(_parent, _args, _context, info) {
async guideAlarms(_parent, _args, { prisma }, info) {
// Get the wfs types to query for from the graphql info object
const wfsTypesToQuery =
((info.fieldNodes[0]?.selectionSet?.selections as FieldNode[])
Expand All @@ -25,7 +24,7 @@ export const GuideAlarmResolver: Resolvers = {
},
},
Mutation: {
updateGuideAlarm(_parent, args) {
updateGuideAlarm(_parent, args, { prisma }) {
return prisma.guideAlarm.update({
where: { wfs: args.wfs },
data: args,
Expand Down
5 changes: 2 additions & 3 deletions src/graphql/resolvers/GuideLoop.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { prisma } from '../../prisma/db.js';
import { Resolvers } from '../gen/index.js';

export const GuideLoopResolver: Resolvers = {
Query: {
guideLoop: (_parent, args) => {
guideLoop: (_parent, args, { prisma }) => {
return prisma.guideLoop.findFirst({ where: args });
},
},
Mutation: {
updateGuideLoop: (_parent, args) => {
updateGuideLoop: (_parent, args, { prisma }) => {
return prisma.guideLoop.update({
where: { pk: args.pk },
data: args,
Expand Down
Loading

0 comments on commit 616e0bd

Please sign in to comment.