Merge branch 'master' into 2913-feature-mirgate-transactions-table-for-x-community-sendcoins

This commit is contained in:
clauspeterhuebner 2023-05-04 00:24:20 +02:00 committed by GitHub
commit 65aaba9d9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 379 additions and 401 deletions

View File

@ -30,6 +30,9 @@
admin: &admin
- 'admin/**/*'
backend: &backend
- 'backend/**/*'
dht_node: &dht_node
- 'dht-node/**/*'
@ -42,5 +45,8 @@ federation: &federation
frontend: &frontend
- 'frontend/**/*'
mariadb: &mariadb
- 'mariadb/**/*'
nginx: &nginx
- 'nginx/**/*'

View File

@ -1,195 +0,0 @@
name: gradido test CI
on: push
jobs:
##############################################################################
# JOB: DOCKER BUILD TEST BACKEND #############################################
##############################################################################
build_test_backend:
name: Docker Build Test - Backend
runs-on: ubuntu-latest
#needs: [nothing]
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# BACKEND ################################################################
##########################################################################
- name: Backend | Build `test` image
run: |
docker build -f ./backend/Dockerfile --target test -t "gradido/backend:test" .
docker save "gradido/backend:test" > /tmp/backend.tar
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: docker-backend-test
path: /tmp/backend.tar
##############################################################################
# JOB: DOCKER BUILD TEST DATABASE UP #########################################
##############################################################################
build_test_database_up:
name: Docker Build Test - Database up
runs-on: ubuntu-latest
#needs: [nothing]
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# DATABASE UP ############################################################
##########################################################################
- name: Database | Build `test_up` image
run: |
docker build --target test_up -t "gradido/database:test_up" database/
docker save "gradido/database:test_up" > /tmp/database_up.tar
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: docker-database-test_up
path: /tmp/database_up.tar
##############################################################################
# JOB: DOCKER BUILD TEST MARIADB #############################################
##############################################################################
build_test_mariadb:
name: Docker Build Test - MariaDB
runs-on: ubuntu-latest
#needs: [nothing]
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# BUILD MARIADB DOCKER IMAGE #############################################
##########################################################################
- name: mariadb | Build `test` image
run: |
docker build --target mariadb_server -t "gradido/mariadb:test" -f ./mariadb/Dockerfile ./
docker save "gradido/mariadb:test" > /tmp/mariadb.tar
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: docker-mariadb-test
path: /tmp/mariadb.tar
##############################################################################
# JOB: LINT BACKEND ##########################################################
##############################################################################
lint_backend:
name: Lint - Backend
runs-on: ubuntu-latest
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# LINT BACKEND ###########################################################
##########################################################################
- name: backend | Lint
run: cd database && yarn && cd ../backend && yarn && yarn run lint
##############################################################################
# JOB: LOCALES BACKEND #######################################################
##############################################################################
locales_backend:
name: Locales - Backend
runs-on: ubuntu-latest
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# LOCALES BACKEND #####################################################
##########################################################################
- name: Backend | Locales
run: cd backend && yarn && yarn locales
##############################################################################
# JOB: LINT DATABASE UP ######################################################
##############################################################################
lint_database_up:
name: Lint - Database Up
runs-on: ubuntu-latest
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# LINT DATABASE ##########################################################
##########################################################################
- name: Database | Lint
run: cd database && yarn && yarn run lint
##############################################################################
# JOB: UNIT TEST BACKEND ####################################################
##############################################################################
unit_test_backend:
name: Unit tests - Backend
runs-on: ubuntu-latest
needs: [build_test_mariadb]
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# DOWNLOAD DOCKER IMAGES #################################################
##########################################################################
- name: Download Docker Image (Mariadb)
uses: actions/download-artifact@v3
with:
name: docker-mariadb-test
path: /tmp
- name: Load Docker Image
run: docker load < /tmp/mariadb.tar
##########################################################################
# UNIT TESTS BACKEND #####################################################
##########################################################################
- name: backend | docker-compose mariadb
run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb
- name: Sleep for 30 seconds
run: sleep 30s
shell: bash
- name: backend | docker-compose database
run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database
- name: backend Unit tests | test
run: cd database && yarn && yarn build && cd ../backend && yarn && yarn test
##########################################################################
# DATABASE MIGRATION TEST UP + RESET #####################################
##########################################################################
database_migration_test:
name: Database Migration Test - Up + Reset
runs-on: ubuntu-latest
#needs: [nothing]
steps:
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
- name: Checkout code
uses: actions/checkout@v3
##########################################################################
# DOCKER COMPOSE DATABASE UP + RESET #####################################
##########################################################################
- name: database | docker-compose
run: docker-compose -f docker-compose.yml up --detach mariadb
- name: database | up
run: docker-compose -f docker-compose.yml run -T database yarn up
- name: database | reset
run: docker-compose -f docker-compose.yml run -T database yarn reset

81
.github/workflows/test_backend.yml vendored Normal file
View File

@ -0,0 +1,81 @@
name: Gradido Backend Test CI
on: push
jobs:
files-changed:
name: Detect File Changes - Backend
runs-on: ubuntu-latest
outputs:
backend: ${{ steps.changes.outputs.backend }}
database: ${{ steps.changes.outputs.database }}
docker-compose: ${{ steps.changes.outputs.docker-compose }}
mariadb: ${{ steps.changes.outputs.mariadb }}
steps:
- uses: actions/checkout@v3.3.0
- name: Check for frontend file changes
uses: dorny/paths-filter@v2.11.1
id: changes
with:
token: ${{ github.token }}
filters: .github/file-filters.yml
list-files: shell
build_test:
if: needs.files-changed.outputs.backend == 'true'
name: Docker Build Test - Backend
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Backend | Build 'test' image
run: docker build -f ./backend/Dockerfile --target test -t "gradido/backend:test" .
unit_test:
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.mariadb == 'true'
name: Unit tests - Backend
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Backend | docker-compose mariadb
run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb
- name: Sleep for 30 seconds
run: sleep 30s
shell: bash
- name: Backend | docker-compose database
run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database
- name: Backend | Unit tests
run: cd database && yarn && yarn build && cd ../backend && yarn && yarn test
lint:
if: needs.files-changed.outputs.backend == 'true'
name: Lint - Backend
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Backend | Lint
run: cd database && yarn && cd ../backend && yarn && yarn run lint
locales:
if: needs.files-changed.outputs.backend == 'true'
name: Locales - Backend
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Backend | Locales
run: cd backend && yarn && yarn locales

64
.github/workflows/test_database.yml vendored Normal file
View File

@ -0,0 +1,64 @@
name: Gradido Database Test CI
on: push
jobs:
files-changed:
name: Detect File Changes - Database
runs-on: ubuntu-latest
outputs:
database: ${{ steps.changes.outputs.database }}
docker-compose: ${{ steps.changes.outputs.docker-compose }}
mariadb: ${{ steps.changes.outputs.mariadb }}
steps:
- uses: actions/checkout@v3.3.0
- name: Check for frontend file changes
uses: dorny/paths-filter@v2.11.1
id: changes
with:
token: ${{ github.token }}
filters: .github/file-filters.yml
list-files: shell
build:
if: needs.files-changed.outputs.database == 'true'
name: Docker Build Test - Database up
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Database | Build 'test_up' image
run: docker build --target test_up -t "gradido/database:test_up" database/
database_migration_test:
if: needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.mariadb == 'true'
name: Database Migration Test - Up + Reset
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Database | docker-compose
run: docker-compose -f docker-compose.yml up --detach mariadb
- name: Database | up
run: docker-compose -f docker-compose.yml run -T database yarn up
- name: Database | reset
run: docker-compose -f docker-compose.yml run -T database yarn reset
lint:
if: needs.files-changed.outputs.database == 'true'
name: Lint - Database Up
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Database | Lint
run: cd database && yarn && yarn run lint

View File

@ -7,6 +7,7 @@ jobs:
name: Detect File Changes - DHT Node
runs-on: ubuntu-latest
outputs:
database: ${{ steps.changes.outputs.database }}
dht_node: ${{ steps.changes.outputs.dht_node }}
docker-compose: ${{ steps.changes.outputs.docker-compose }}
steps:
@ -54,7 +55,7 @@ jobs:
unit_test:
name: Unit Tests - DHT Node
if: needs.files-changed.outputs.dht_node == 'true' || needs.files-changed.outputs.docker-compose == 'true'
if: needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.dht_node == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.mariadb == 'true'
needs: [files-changed, build]
runs-on: ubuntu-latest
steps:

View File

@ -54,7 +54,7 @@ jobs:
unit_test:
name: Unit Tests - Federation
if: needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.federation == 'true'
if: needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.federation == 'true' || needs.files-changed.outputs.mariadb == 'true'
needs: [files-changed, build]
runs-on: ubuntu-latest
steps:

32
.github/workflows/test_mariadb.yml vendored Normal file
View File

@ -0,0 +1,32 @@
name: Gradido MariaDB Test CI
on: push
jobs:
files-changed:
name: Detect File Changes - MariaDB
runs-on: ubuntu-latest
outputs:
mariadb: ${{ steps.changes.outputs.mariadb }}
steps:
- uses: actions/checkout@v3.3.0
- name: Check for frontend file changes
uses: dorny/paths-filter@v2.11.1
id: changes
with:
token: ${{ github.token }}
filters: .github/file-filters.yml
list-files: shell
build_test:
if: needs.files-changed.outputs.mariadb == 'true'
name: Docker Build Test - MariaDB
needs: files-changed
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: MariaDB | Build 'test' image
run: docker build --target mariadb_server -t "gradido/mariadb:test" -f ./mariadb/Dockerfile ./

View File

@ -5,7 +5,7 @@ module.exports = {
node: true,
},
parser: '@typescript-eslint/parser',
plugins: ['prettier', '@typescript-eslint', 'type-graphql', 'jest', 'import', 'n', 'promise'],
plugins: ['prettier', '@typescript-eslint', 'type-graphql', 'import', 'n', 'promise'],
extends: [
'standard',
'eslint:recommended',
@ -33,12 +33,6 @@ module.exports = {
htmlWhitespaceSensitivity: 'ignore',
},
],
// jest
'jest/no-disabled-tests': 'error',
'jest/no-focused-tests': 'error',
'jest/no-identical-title': 'error',
'jest/prefer-to-have-length': 'error',
'jest/valid-expect': 'error',
// import
'import/export': 'error',
'import/no-deprecated': 'error',
@ -183,5 +177,18 @@ module.exports = {
EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true,
},
},
{
files: ['*.test.ts'],
plugins: ['jest'],
rules: {
'jest/no-disabled-tests': 'error',
'jest/no-focused-tests': 'error',
'jest/no-identical-title': 'error',
'jest/prefer-to-have-length': 'error',
'jest/valid-expect': 'error',
'@typescript-eslint/unbound-method': 'off',
'jest/unbound-method': 'error',
},
},
],
}

View File

@ -1,5 +1,4 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/unbound-method */
import { createTransport } from 'nodemailer'
import { logger, i18n } from '@test/testSetup'

View File

@ -1,8 +1,9 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import { Connection } from '@dbTools/typeorm'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Decimal } from 'decimal.js-light'
import { testEnvironment } from '@test/helpers'
@ -23,8 +24,12 @@ import {
sendTransactionReceivedEmail,
} from './sendEmailVariants'
let con: any
let testEnv: any
let con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment(logger, localization)

View File

@ -1,19 +1,18 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Connection } from '@dbTools/typeorm'
import { Community as DbCommunity } from '@entity/Community'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { testEnvironment, cleanDB } from '@test/helpers'
import { logger } from '@test/testSetup'
import { validateCommunities } from './validateCommunities'
let con: any
let testEnv: any
let con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment(logger)

View File

@ -1,8 +1,3 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { User } from '@entity/User'
import { AuthChecker } from 'type-graphql'
@ -10,9 +5,10 @@ import { INALIENABLE_RIGHTS } from '@/auth/INALIENABLE_RIGHTS'
import { decode, encode } from '@/auth/JWT'
import { RIGHTS } from '@/auth/RIGHTS'
import { ROLE_UNAUTHORIZED, ROLE_USER, ROLE_ADMIN } from '@/auth/ROLES'
import { Context } from '@/server/context'
import { LogError } from '@/server/LogError'
export const isAuthorized: AuthChecker<any> = async ({ context }, rights) => {
export const isAuthorized: AuthChecker<Context> = async ({ context }, rights) => {
context.role = ROLE_UNAUTHORIZED // unauthorized user
// is rights an inalienable right?
@ -47,7 +43,7 @@ export const isAuthorized: AuthChecker<any> = async ({ context }, rights) => {
}
// check for correct rights
const missingRights = (<RIGHTS[]>rights).filter((right) => !context.role.hasRight(right))
const missingRights = (<RIGHTS[]>rights).filter((right) => !context.role?.hasRight(right))
if (missingRights.length !== 0) {
throw new LogError('401 Unauthorized')
}

View File

@ -1,21 +1,19 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Connection } from '@dbTools/typeorm'
import { Community as DbCommunity } from '@entity/Community'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { testEnvironment } from '@test/helpers'
import { getCommunities } from '@/seeds/graphql/queries'
let query: any
// to do: We need a setup for the tests that closes the connection
let con: any
let testEnv: any
let query: ApolloServerTestClient['query'], con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment()

View File

@ -1,12 +1,9 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
import { Event as DbEvent } from '@entity/Event'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Decimal } from 'decimal.js-light'
import { GraphQLError } from 'graphql'
@ -25,8 +22,14 @@ import { listContributionLinks } from '@/seeds/graphql/queries'
import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { peterLustig } from '@/seeds/users/peter-lustig'
let mutate: any, query: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'],
query: ApolloServerTestClient['query'],
con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment()

View File

@ -1,12 +1,11 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { Event as DbEvent } from '@entity/Event'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { GraphQLError } from 'graphql'
import { cleanDB, resetToken, testEnvironment } from '@test/helpers'
@ -36,8 +35,12 @@ jest.mock('@/emails/sendEmailVariants', () => {
}
})
let mutate: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'], con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
let result: any
beforeAll(async () => {

View File

@ -1,23 +1,18 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { Contribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
import { Transaction as DbTransaction } from '@entity/Transaction'
import { User } from '@entity/User'
import { UserInputError } from 'apollo-server-express'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Decimal } from 'decimal.js-light'
import { GraphQLError } from 'graphql'
import { ContributionStatus } from '@enum/ContributionStatus'
import { Order } from '@enum/Order'
import { ContributionListResult } from '@model/Contribution'
import { UnconfirmedContribution } from '@model/UnconfirmedContribution'
import {
cleanDB,
resetToken,
@ -63,8 +58,14 @@ import { stephenHawking } from '@/seeds/users/stephen-hawking'
jest.mock('@/emails/sendEmailVariants')
let mutate: any, query: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'],
query: ApolloServerTestClient['query'],
con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
let creation: Contribution | void
let admin: User
let pendingContribution: any
@ -166,7 +167,7 @@ describe('ContributionResolver', () => {
describe('createContribution', () => {
describe('unauthenticated', () => {
it('returns an error', async () => {
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: createContribution,
variables: { amount: 100.0, memo: 'Test Contribution', creationDate: 'not-valid' },
})
@ -191,7 +192,7 @@ describe('ContributionResolver', () => {
it('throws error when memo length smaller than 5 chars', async () => {
jest.clearAllMocks()
const date = new Date()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: createContribution,
variables: {
amount: 100.0,
@ -210,7 +211,7 @@ describe('ContributionResolver', () => {
it('throws error when memo length greater than 255 chars', async () => {
jest.clearAllMocks()
const date = new Date()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: createContribution,
variables: {
amount: 100.0,
@ -227,7 +228,7 @@ describe('ContributionResolver', () => {
it('throws error when creationDate not-valid', async () => {
jest.clearAllMocks()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: createContribution,
variables: {
amount: 100.0,
@ -250,7 +251,7 @@ describe('ContributionResolver', () => {
it('throws error when creationDate 3 month behind', async () => {
jest.clearAllMocks()
const date = new Date()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: createContribution,
variables: {
amount: 100.0,
@ -298,7 +299,7 @@ describe('ContributionResolver', () => {
describe('updateContribution', () => {
describe('unauthenticated', () => {
it('returns an error', async () => {
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: updateContribution,
variables: {
contributionId: 1,
@ -327,7 +328,7 @@ describe('ContributionResolver', () => {
it('throws error', async () => {
jest.clearAllMocks()
const date = new Date()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: updateContribution,
variables: {
contributionId: pendingContribution.data.createContribution.id,
@ -348,7 +349,7 @@ describe('ContributionResolver', () => {
it('throws error', async () => {
jest.clearAllMocks()
const date = new Date()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: updateContribution,
variables: {
contributionId: pendingContribution.data.createContribution.id,
@ -400,7 +401,7 @@ describe('ContributionResolver', () => {
it('throws an error', async () => {
jest.clearAllMocks()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: updateContribution,
variables: {
contributionId: pendingContribution.data.createContribution.id,
@ -433,7 +434,7 @@ describe('ContributionResolver', () => {
it('throws an error', async () => {
jest.clearAllMocks()
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: adminUpdateContribution,
variables: {
id: pendingContribution.data.createContribution.id,
@ -512,7 +513,7 @@ describe('ContributionResolver', () => {
it('throws an error', async () => {
jest.clearAllMocks()
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: updateContribution,
variables: {
contributionId: pendingContribution.data.createContribution.id,
@ -541,7 +542,7 @@ describe('ContributionResolver', () => {
it('throws an error', async () => {
jest.clearAllMocks()
const date = new Date()
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: updateContribution,
variables: {
contributionId: pendingContribution.data.createContribution.id,
@ -564,7 +565,7 @@ describe('ContributionResolver', () => {
it('updates contribution', async () => {
const {
data: { updateContribution: contribution },
}: { data: { updateContribution: UnconfirmedContribution } } = await mutate({
} = await mutate({
mutation: updateContribution,
variables: {
contributionId: pendingContribution.data.createContribution.id,
@ -603,7 +604,7 @@ describe('ContributionResolver', () => {
describe('denyContribution', () => {
describe('unauthenticated', () => {
it('returns an error', async () => {
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: denyContribution,
variables: {
id: 1,
@ -626,7 +627,7 @@ describe('ContributionResolver', () => {
})
it('returns an error', async () => {
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: denyContribution,
variables: {
id: 1,
@ -651,7 +652,7 @@ describe('ContributionResolver', () => {
describe('wrong contribution id', () => {
it('throws an error', async () => {
jest.clearAllMocks()
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: denyContribution,
variables: {
id: -1,
@ -695,7 +696,7 @@ describe('ContributionResolver', () => {
},
})
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: denyContribution,
variables: {
id: contribution.data.createContribution.id,
@ -740,7 +741,7 @@ describe('ContributionResolver', () => {
variables: { email: 'peter@lustig.de', password: 'Aa12345_' },
})
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: denyContribution,
variables: {
id: contribution.data.createContribution.id,
@ -785,7 +786,7 @@ describe('ContributionResolver', () => {
},
})
const { errors: errorObjects }: { errors: GraphQLError[] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: denyContribution,
variables: {
id: contribution.data.createContribution.id,
@ -807,7 +808,7 @@ describe('ContributionResolver', () => {
})
const {
data: { denyContribution: isDenied },
}: { data: { denyContribution: boolean } } = await mutate({
} = await mutate({
mutation: denyContribution,
variables: {
id: contributionToDeny.data.createContribution.id,
@ -846,8 +847,8 @@ describe('ContributionResolver', () => {
describe('deleteContribution', () => {
describe('unauthenticated', () => {
it('returns an error', async () => {
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
query: deleteContribution,
const { errors: errorObjects } = await mutate({
mutation: deleteContribution,
variables: {
id: -1,
},
@ -871,7 +872,7 @@ describe('ContributionResolver', () => {
describe('wrong contribution id', () => {
it('returns an error', async () => {
jest.clearAllMocks()
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: deleteContribution,
variables: {
id: -1,
@ -899,7 +900,7 @@ describe('ContributionResolver', () => {
})
it('returns an error', async () => {
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: deleteContribution,
variables: {
id: contributionToDelete.data.createContribution.id,
@ -935,7 +936,7 @@ describe('ContributionResolver', () => {
it('deletes successfully', async () => {
const {
data: { deleteContribution: isDenied },
}: { data: { deleteContribution: boolean } } = await mutate({
} = await mutate({
mutation: deleteContribution,
variables: {
id: contributionToDelete.data.createContribution.id,
@ -974,7 +975,7 @@ describe('ContributionResolver', () => {
mutation: login,
variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' },
})
const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({
const { errors: errorObjects } = await mutate({
mutation: deleteContribution,
variables: {
id: contributionToConfirm.data.createContribution.id,
@ -998,7 +999,7 @@ describe('ContributionResolver', () => {
describe('listContributions', () => {
describe('unauthenticated', () => {
it('returns an error', async () => {
const { errors: errorObjects }: { errors: [GraphQLError] } = await query({
const { errors: errorObjects } = await query({
query: listContributions,
variables: {
currentPage: 1,
@ -1026,7 +1027,7 @@ describe('ContributionResolver', () => {
it('returns creations', async () => {
const {
data: { listContributions: contributionListResult },
}: { data: { listContributions: ContributionListResult } } = await query({
} = await query({
query: listContributions,
variables: {
currentPage: 1,
@ -1078,7 +1079,7 @@ describe('ContributionResolver', () => {
it('returns only unconfirmed creations', async () => {
const {
data: { listContributions: contributionListResult },
}: { data: { listContributions: ContributionListResult } } = await query({
} = await query({
query: listContributions,
variables: {
currentPage: 1,
@ -1128,7 +1129,7 @@ describe('ContributionResolver', () => {
describe('listAllContribution', () => {
describe('unauthenticated', () => {
it('returns an error', async () => {
const { errors: errorObjects }: { errors: [GraphQLError] } = await query({
const { errors: errorObjects } = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1154,7 +1155,7 @@ describe('ContributionResolver', () => {
})
it('throws an error with "NOT_VALID" in statusFilter', async () => {
const { errors: errorObjects }: { errors: [GraphQLError | UserInputError] } = await query({
const { errors: errorObjects } = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1171,7 +1172,7 @@ describe('ContributionResolver', () => {
})
it('throws an error with a null in statusFilter', async () => {
const { errors: errorObjects }: { errors: [Error] } = await query({
const { errors: errorObjects } = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1188,7 +1189,7 @@ describe('ContributionResolver', () => {
})
it('throws an error with null and "NOT_VALID" in statusFilter', async () => {
const { errors: errorObjects }: { errors: [Error] } = await query({
const { errors: errorObjects } = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1210,7 +1211,7 @@ describe('ContributionResolver', () => {
it('returns all contributions without statusFilter', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1274,7 +1275,7 @@ describe('ContributionResolver', () => {
it('returns all contributions for statusFilter = null', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1339,7 +1340,7 @@ describe('ContributionResolver', () => {
it('returns all contributions for statusFilter = []', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1404,7 +1405,7 @@ describe('ContributionResolver', () => {
it('returns all CONFIRMED contributions', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1454,7 +1455,7 @@ describe('ContributionResolver', () => {
it('returns all PENDING contributions', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1492,7 +1493,7 @@ describe('ContributionResolver', () => {
it('returns all IN_PROGRESS Creation', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1530,7 +1531,7 @@ describe('ContributionResolver', () => {
it('returns all DENIED Creation', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1574,7 +1575,7 @@ describe('ContributionResolver', () => {
it('does not return any DELETED Creation', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -1593,7 +1594,7 @@ describe('ContributionResolver', () => {
it('returns all CONFIRMED and PENDING Creation', async () => {
const {
data: { listAllContributions: contributionListObject },
}: { data: { listAllContributions: ContributionListResult } } = await query({
} = await query({
query: listAllContributions,
variables: {
currentPage: 1,
@ -2676,7 +2677,7 @@ describe('ContributionResolver', () => {
it('returns 17 creations in total', async () => {
const {
data: { adminListContributions: contributionListObject },
}: { data: { adminListContributions: ContributionListResult } } = await query({
} = await query({
query: adminListContributions,
})
expect(contributionListObject.contributionList).toHaveLength(17)
@ -2843,7 +2844,7 @@ describe('ContributionResolver', () => {
it('returns two pending creations with page size set to 2', async () => {
const {
data: { adminListContributions: contributionListObject },
}: { data: { adminListContributions: ContributionListResult } } = await query({
} = await query({
query: adminListContributions,
variables: {
currentPage: 1,

View File

@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
import { IsNull, getConnection } from '@dbTools/typeorm'
import { Contribution as DbContribution } from '@entity/Contribution'
import { ContributionMessage } from '@entity/ContributionMessage'
@ -230,11 +229,11 @@ export class ContributionResolver {
contributionMessage.createdAt = contributionToUpdate.updatedAt
? contributionToUpdate.updatedAt
: contributionToUpdate.createdAt
const changeMessage = `${contributionToUpdate.contributionDate}
const changeMessage = `${contributionToUpdate.contributionDate.toString()}
---
${contributionToUpdate.memo}
---
${contributionToUpdate.amount}`
${contributionToUpdate.amount.toString()}`
contributionMessage.message = changeMessage
contributionMessage.isModerator = false
contributionMessage.userId = user.id
@ -260,7 +259,7 @@ export class ContributionResolver {
@Ctx() context: Context,
): Promise<Decimal[]> {
logger.info(
`adminCreateContribution(email=${email}, amount=${amount}, memo=${memo}, creationDate=${creationDate})`,
`adminCreateContribution(email=${email}, amount=${amount.toString()}, memo=${memo}, creationDate=${creationDate})`,
)
const clientTimezoneOffset = getClientTimezoneOffset(context)
if (!isValidDateString(creationDate)) {

View File

@ -1,10 +1,8 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Connection } from '@dbTools/typeorm'
import { User as DbUser } from '@entity/User'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { GraphQLError } from 'graphql'
import { testEnvironment, cleanDB } from '@test/helpers'
@ -13,8 +11,14 @@ import { CONFIG } from '@/config'
import { createUser, setPassword, forgotPassword } from '@/seeds/graphql/mutations'
import { queryOptIn } from '@/seeds/graphql/queries'
let mutate: any, query: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'],
query: ApolloServerTestClient['query'],
con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
CONFIG.EMAIL_CODE_VALID_TIME = 1440
CONFIG.EMAIL_CODE_REQUEST_TIME = 10

View File

@ -1,16 +1,13 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
import { Event as DbEvent } from '@entity/Event'
import { Transaction } from '@entity/Transaction'
import { User } from '@entity/User'
import { UserContact } from '@entity/UserContact'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Decimal } from 'decimal.js-light'
import { GraphQLError } from 'graphql'
@ -45,8 +42,14 @@ import { transactionLinkCode } from './TransactionLinkResolver'
jest.mock('@/util/TRANSACTIONS_LOCK')
TRANSACTIONS_LOCK.acquire = jest.fn().mockResolvedValue(jest.fn())
let mutate: any, query: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'],
query: ApolloServerTestClient['query'],
con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
let user: User

View File

@ -1,13 +1,11 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { Event as DbEvent } from '@entity/Event'
import { Transaction } from '@entity/Transaction'
import { User } from '@entity/User'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Decimal } from 'decimal.js-light'
import { GraphQLError } from 'graphql'
@ -27,13 +25,16 @@ import { garrickOllivander } from '@/seeds/users/garrick-ollivander'
import { peterLustig } from '@/seeds/users/peter-lustig'
import { stephenHawking } from '@/seeds/users/stephen-hawking'
let mutate: any, query: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'], con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment(logger)
mutate = testEnv.mutate
query = testEnv.query
con = testEnv.con
await cleanDB()
})
@ -274,7 +275,7 @@ describe('send coins', () => {
})
// login as admin
await query({ mutation: login, variables: peterData })
await mutate({ mutation: login, variables: peterData })
// confirm the contribution
await mutate({
@ -283,7 +284,7 @@ describe('send coins', () => {
})
// login as bob again
await query({ mutation: login, variables: bobData })
await mutate({ mutation: login, variables: bobData })
})
afterAll(async () => {

View File

@ -2,14 +2,14 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { Event as DbEvent } from '@entity/Event'
import { TransactionLink } from '@entity/TransactionLink'
import { User } from '@entity/User'
import { UserContact } from '@entity/UserContact'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { GraphQLError } from 'graphql'
import { v4 as uuidv4, validate as validateUUID, version as versionUUID } from 'uuid'
@ -88,8 +88,14 @@ jest.mock('@/apis/KlicktippController', () => {
let admin: User
let user: User
let mutate: any, query: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'],
query: ApolloServerTestClient['query'],
con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment(logger, localization)
@ -236,7 +242,7 @@ describe('UserResolver', () => {
})
describe('user already exists', () => {
let mutation: User
let mutation: any
beforeAll(async () => {
mutation = await mutate({ mutation: createUser, variables })
})
@ -638,7 +644,7 @@ describe('UserResolver', () => {
publisherId: 1234,
}
let result: User
let result: any
afterAll(async () => {
await cleanDB()

View File

@ -1,9 +1,8 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Decimal } from 'decimal.js-light'
import { cleanDB, testEnvironment, contributionDateFormatter } from '@test/helpers'
@ -23,8 +22,12 @@ import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { bobBaumeister } from '@/seeds/users/bob-baumeister'
import { peterLustig } from '@/seeds/users/peter-lustig'
let mutate: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'], con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment()

View File

@ -1,11 +1,7 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Connection } from '@dbTools/typeorm'
import { Contribution } from '@entity/Contribution'
import { User } from '@entity/User'
import { ApolloServerTestClient } from 'apollo-server-testing'
import { testEnvironment, cleanDB, contributionDateFormatter } from '@test/helpers'
@ -16,8 +12,12 @@ import { peterLustig } from '@/seeds/users/peter-lustig'
import { getUserCreation } from './creations'
let mutate: any, con: any
let testEnv: any
let mutate: ApolloServerTestClient['mutate'], con: Connection
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: Connection
}
beforeAll(async () => {
testEnv = await testEnvironment()

View File

@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { CONFIG } from './config'
import { startValidateCommunities } from './federation/validateCommunities'
import { createServer } from './server/createServer'

View File

@ -2,9 +2,6 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Contribution } from '@entity/Contribution'
import { Transaction } from '@entity/Transaction'
import { ApolloServerTestClient } from 'apollo-server-testing'
@ -12,7 +9,6 @@ import { ApolloServerTestClient } from 'apollo-server-testing'
import { findUserByEmail } from '@/graphql/resolver/UserResolver'
import { CreationInterface } from '@/seeds/creation/CreationInterface'
import { login, createContribution, confirmContribution } from '@/seeds/graphql/mutations'
// import CONFIG from '@/config/index'
export const nMonthsBefore = (date: Date, months = 1): string => {
return new Date(date.getFullYear(), date.getMonth() - months, 1).toISOString()

View File

@ -1,10 +1,3 @@
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { entities } from '@entity/index'
import { createTestClient } from 'apollo-server-testing'
import { name, internet, datatype } from 'faker'
@ -43,10 +36,12 @@ export const cleanDB = async () => {
}
}
const resetEntity = async (entity: any) => {
const [entityTypes] = entities
const resetEntity = async (entity: typeof entityTypes) => {
const items = await entity.find({ withDeleted: true })
if (items.length > 0) {
const ids = items.map((i: any) => i.id)
const ids = items.map((i) => i.id)
await entity.delete(ids)
}
}

View File

@ -1,5 +1,4 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
import { logger } from '@test/testSetup'
import { LogError } from './LogError'

View File

@ -13,6 +13,7 @@ export interface Context {
role?: Role
user?: dbUser
clientTimezoneOffset?: number
gradidoID?: string
// hack to use less DB calls for Balance Resolver
lastTransaction?: dbTransaction
transactionCount?: number

View File

@ -5,7 +5,6 @@
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import clonedeep from 'lodash.clonedeep'
const setHeadersPlugin = {

View File

@ -1,12 +1,4 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { entities } from '@entity/index'
import { createTestClient } from 'apollo-server-testing'
@ -15,6 +7,7 @@ import { createServer } from '@/server/createServer'
import { i18n, logger } from './testSetup'
export const headerPushMock = jest.fn((t) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
context.token = t.value
})
@ -34,7 +27,7 @@ export const cleanDB = async () => {
}
}
export const testEnvironment = async (testLogger: any = logger, testI18n: any = i18n) => {
export const testEnvironment = async (testLogger = logger, testI18n = i18n) => {
const server = await createServer(context, testLogger, testI18n)
const con = server.con
const testClient = createTestClient(server.apollo)
@ -43,10 +36,12 @@ export const testEnvironment = async (testLogger: any = logger, testI18n: any =
return { mutate, query, con }
}
export const resetEntity = async (entity: any) => {
const [entityTypes] = entities
export const resetEntity = async (entity: typeof entityTypes) => {
const items = await entity.find({ withDeleted: true })
if (items.length > 0) {
const ids = items.map((i: any) => i.id)
const ids = items.map((i) => i.id)
await entity.delete(ids)
}
}

View File

@ -1,5 +1,3 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-return */
import { CONFIG } from '@/config'
import { i18n } from '@/server/localization'
import { backendLogger as logger } from '@/server/logger'
@ -10,7 +8,7 @@ CONFIG.EMAIL_TEST_MODUS = false
jest.setTimeout(1000000)
jest.mock('@/server/logger', () => {
const originalModule = jest.requireActual('@/server/logger')
const originalModule = jest.requireActual<typeof logger>('@/server/logger')
return {
__esModule: true,
...originalModule,
@ -27,7 +25,7 @@ jest.mock('@/server/logger', () => {
})
jest.mock('@/server/localization', () => {
const originalModule = jest.requireActual('@/server/localization')
const originalModule = jest.requireActual<typeof i18n>('@/server/localization')
return {
__esModule: true,
...originalModule,

View File

@ -198,11 +198,9 @@ Follow the commands in `./install.sh` as installation pattern.
## Define Cronjob To Compensate Yarn Output In `/tmp`
`yarn` creates output in `/tmp` directory, which must be deleted regularly and will be done per Cron-Job.
`yarn` creates output in `/tmp` directory. This output is generated whenever `yarn start` is called. This is especially problematic on staging systems where instable versions are automatically deployed which can lead to an ever restarting, hence generating a lot of yarn output.
### On `stage1`
An hourly job is necessary on `stage1` by setting the following job in the `crontab` for the `gradido` user.
To solve this you can install the following hourly cron using `crontab` as `gradido` user.
Run:
@ -213,24 +211,11 @@ crontab -e
This opens the crontab in edit-mode and insert the following entry:
```bash
0 * * * * find /tmp -name "yarn--*" -cmin +60 -exec rm -r {} \; > /dev/null
0 * * * * find /tmp -name "yarn--*" -exec rm -r {} \; > /dev/null
```
### On `stage2`
A daily job is necessary on `stage2` by setting the following job in the `crontab` for the `gradido` user.
Run:
```bash
crontab -e
```
This opens the `crontab` in edit-mode and insert the following entry:
```bash
0 4 * * * find /tmp -name "yarn--*" -ctime +1 -exec rm -r {} \; > /dev/null
```
For production systems this is not needed by default since the yarn output is deleted when `start.sh` is executed. If the service runs stable and does not restart frequently, the yarn output to the tmp folder scales with the amount of services running.
## Define Cronjob To start backup script automatically

View File

@ -2,8 +2,3 @@
# mariadb server
#########################################################################################################
FROM mariadb/server:10.5 as mariadb_server
# ENV DOCKER_WORKDIR="/docker-entrypoint-initdb.d"
# RUN mkdir -p ${DOCKER_WORKDIR}
# WORKDIR ${DOCKER_WORKDIR}