Remove species test from root directory, and update the corresponding… (#1180)

* Remove species test from root directory, and update the corresponding test in api-tests

* fix permission test

* update species tests
This commit is contained in:
juhanikat
2026-06-29 13:56:06 +03:00
committed by GitHub
parent 17eb6dda0a
commit 8f97de1019
2 changed files with 47 additions and 148 deletions
+47 -54
View File
@@ -12,56 +12,48 @@ describe('Creating new species works', () => {
await resetDatabase()
}, resetDatabaseTimeout)
beforeEach(async () => {
await resetDatabase()
await login()
createdSpecies = null
}, resetDatabaseTimeout)
})
afterAll(async () => {
await pool.end()
})
describe('after creating a species successfully', () => {
beforeEach(async () => {
const { body: resultBody } = await send<{ species_id: number }>('species', 'PUT', {
species: { ...newSpeciesBasis, comment: 'species test' },
})
const { species_id: createdId } = resultBody
expect(typeof createdId).toEqual('number') // `Invalid result returned on write: ${createdId}`
const { body } = await send<SpeciesDetailsType>(`species/${createdId}`, 'GET')
createdSpecies = body
it('Request succeeds and returns valid number id', async () => {
const { body: resultBody } = await send<{ species_id: number }>('species', 'PUT', {
species: { ...newSpeciesBasis, comment: 'species test' },
})
const { species_id: createdId } = resultBody
it('Request succeeds and returns valid number id', () => {
expect(typeof createdSpecies?.species_id).toEqual('number')
})
expect(typeof createdId).toEqual('number') // `Invalid result returned on write: ${createdId}`
it('Contains correct data', () => {
const { species_name, now_ls } = createdSpecies!
expect(species_name).toEqual(newSpeciesBasis.species_name) // 'Name is different'
const locality = now_ls.find(ls => ls.now_loc.lid === 24750)
expect(!!locality).toEqual(true) // 'Locality in locality-species not found'
})
const { body } = await send<SpeciesDetailsType>(`species/${createdId}`, 'GET')
createdSpecies = body
})
it('Locality-species change was updated also to locality', async () => {
const localityFound = createdSpecies!.now_ls.find(ls => ls.now_loc.loc_name.startsWith('Romany'))
if (!localityFound) throw new Error('Locality was not found in now_ls')
const speciesResult = await send<LocalityDetailsType>(`locality/24750`, 'GET')
const update = speciesResult.body.now_lau.find(lau => lau.lid === 24750 && lau.lau_comment === 'species test')
if (!update) throw new Error('Update not found')
const logRows = update.updates
const expectedLogRows: Partial<LogRow>[] = [
{
oldValue: null,
value: '24750',
type: 'add',
column: 'lid',
table: 'now_ls',
},
]
testLogRows(logRows, expectedLogRows, 2)
})
it('Contains correct data', () => {
const { species_name, now_ls } = createdSpecies!
expect(species_name).toEqual(newSpeciesBasis.species_name) // 'Name is different'
const locality = now_ls.find(ls => ls.now_loc.lid === 24750)
expect(!!locality).toEqual(true) // 'Locality in locality-species not found'
})
it('Locality-species change was updated also to locality', async () => {
const localityFound = createdSpecies!.now_ls.find(ls => ls.now_loc.loc_name.startsWith('Romany'))
if (!localityFound) throw new Error('Locality was not found in now_ls')
const speciesResult = await send<LocalityDetailsType>(`locality/24750`, 'GET')
const update = speciesResult.body.now_lau.find(lau => lau.lid === 24750 && lau.lau_comment === 'species test')
if (!update) throw new Error('Update not found')
const logRows = update.updates
const expectedLogRows: Partial<LogRow>[] = [
{
oldValue: null,
value: '24750',
type: 'add',
column: 'lid',
table: 'now_ls',
},
]
testLogRows(logRows, expectedLogRows, 2)
})
it('Species without required fields fails', async () => {
@@ -72,32 +64,33 @@ describe('Creating new species works', () => {
})
it('Creation fails without reference', async () => {
const speciesWithoutRef = { ...newSpeciesBasis, species_name: 'anotherspecies', references: [] }
const resultNoRef = await send('species', 'PUT', {
species: { ...newSpeciesBasis, references: [] },
species: { ...speciesWithoutRef },
})
expect(resultNoRef.status).toEqual(403) // can't create one without a reference
expect(resultNoRef.status).toEqual(403) // can't create species without a reference
const speciesWithRef = { ...newSpeciesBasis, species_name: 'anotherspecies' }
const resultWithRef = await send('species', 'PUT', {
species: { ...newSpeciesBasis },
species: { ...speciesWithRef },
})
expect(resultWithRef.status).toEqual(200)
})
it('Creation fails without permissions for non-authenticated users', async () => {
it('Creation fails for unauthenticated users and succeeds for EditRestricted users', async () => {
logout()
const result1 = await send('species', 'PUT', {
species: { ...newSpeciesBasis, comment: 'species test' },
const newSpeciesBasis3 = { ...newSpeciesBasis, species_name: 'yetanotherspecies' }
const resultNoAuth = await send('species', 'PUT', {
species: { ...newSpeciesBasis3, comment: 'species test' },
})
expect(result1.body).toEqual(noPermError)
expect(result1.status).toEqual(403)
})
expect(resultNoAuth.body).toEqual(noPermError)
expect(resultNoAuth.status).toEqual(403)
it('Creation succeeds for EditRestricted users', async () => {
logout()
await login('testEr', 'test')
const result2 = await send('species', 'PUT', {
species: { ...newSpeciesBasis, comment: 'species test' },
const resultEr = await send('species', 'PUT', {
species: { ...newSpeciesBasis3, comment: 'species edit test' },
})
expect(result2.status).toEqual(200)
expect(resultEr.status).toEqual(200)
})
})
-94
View File
@@ -1,94 +0,0 @@
import { beforeEach, beforeAll, afterAll, describe, it, expect } from '@jest/globals'
import { LocalityDetailsType, SpeciesDetailsType } from '../../../../frontend/src/shared/types'
import { LogRow } from '../../services/write/writeOperations/types'
import { newSpeciesBasis, newSpeciesWithoutRequiredFields } from './data'
import { login, logout, resetDatabase, send, testLogRows, resetDatabaseTimeout, noPermError } from '../utils'
import { pool } from '../../utils/db'
let createdSpecies: SpeciesDetailsType | null = null
describe('Creating new species works', () => {
beforeAll(async () => {
await resetDatabase()
}, resetDatabaseTimeout)
beforeEach(async () => {
await login()
})
afterAll(async () => {
await pool.end()
})
it('Request succeeds and returns valid number id', async () => {
const { body: resultBody } = await send<{ species_id: number }>('species', 'PUT', {
species: { ...newSpeciesBasis, comment: 'species test' },
})
const { species_id: createdId } = resultBody
expect(typeof createdId).toEqual('number') // `Invalid result returned on write: ${createdId}`
const { body } = await send<SpeciesDetailsType>(`species/${createdId}`, 'GET')
createdSpecies = body
})
it('Contains correct data', () => {
const { species_name, now_ls } = createdSpecies!
expect(species_name).toEqual(newSpeciesBasis.species_name) // 'Name is different'
const locality = now_ls.find(ls => ls.now_loc.lid === 24750)
expect(!!locality).toEqual(true) // 'Locality in locality-species not found'
})
it('Locality-species change was updated also to locality', async () => {
const localityFound = createdSpecies!.now_ls.find(ls => ls.now_loc.loc_name.startsWith('Romany'))
if (!localityFound) throw new Error('Locality was not found in now_ls')
const speciesResult = await send<LocalityDetailsType>(`locality/24750`, 'GET')
const update = speciesResult.body.now_lau.find(lau => lau.lid === 24750 && lau.lau_comment === 'species test')
if (!update) throw new Error('Update not found')
const logRows = update.updates
const expectedLogRows: Partial<LogRow>[] = [
{
oldValue: null,
value: '24750',
type: 'add',
column: 'lid',
table: 'now_ls',
},
]
testLogRows(logRows, expectedLogRows, 2)
})
it('Species without required fields fails', async () => {
const res = await send('species', 'PUT', {
species: { ...newSpeciesWithoutRequiredFields, comment: 'species test' },
})
expect(res.status).toEqual(403)
})
it('Creation fails without reference', async () => {
const resultNoRef = await send('species', 'PUT', {
species: { ...newSpeciesBasis, references: [] },
})
expect(resultNoRef.status).toEqual(403) // can't create one without a reference
const resultWithRef = await send('species', 'PUT', {
species: { ...newSpeciesBasis },
})
expect(resultWithRef.status).toEqual(200)
})
it('Creation fails without permissions for non-authenticated and non-privileged users', async () => {
logout()
const result1 = await send('species', 'PUT', {
species: { ...newSpeciesBasis, comment: 'species test' },
})
expect(result1.body).toEqual(noPermError)
expect(result1.status).toEqual(403)
logout()
await login('testEr', 'test')
const result2 = await send('species', 'PUT', {
species: { ...newSpeciesBasis, comment: 'species test' },
})
expect(result2.body).toEqual(noPermError)
expect(result2.status).toEqual(403)
})
})