Skip to content

Commit

Permalink
feat: refactoring of api, lib and stores tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gromdimon committed Jan 15, 2024
1 parent c35ae0f commit bd93955
Show file tree
Hide file tree
Showing 31 changed files with 1,131 additions and 132 deletions.
31 changes: 31 additions & 0 deletions frontend/src/api/__tests__/acmgSeqvar.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { type AcmgRatingBackend } from '@/stores/seqvarAcmgRating'

const fetchMocker = createFetchMock(vi)

// Test data
const seqVar = new SeqvarImpl('grch37', '1', 123, 'A', 'G')
const mockAcmgRating: AcmgRatingBackend = {
comment: 'exampleComment',
Expand All @@ -26,117 +27,147 @@ describe.concurrent('AcmgSeqVar Client', () => {
})

it('lists ACMG ratings correctly', async () => {
// arrange:
fetchMocker.mockResponse(JSON.stringify([mockAcmgRating]))

// act:
const client = new AcmgSeqVarClient()
const result = await client.listAcmgRatings()

// assert:
expect(result).toEqual([mockAcmgRating])
})

it('fails to list ACMG ratings', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('acmgSeqvar/list')) {
return Promise.resolve(JSON.stringify({ status: 500 }))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AcmgSeqVarClient()
const result = await client.listAcmgRatings()

// assert:
expect(result).toEqual({ status: 500 })
})

it('fetches ACMG rating correctly', async () => {
// arrange:
fetchMocker.mockResponse(JSON.stringify(mockAcmgRating))

// act:
const client = new AcmgSeqVarClient()
const result = await client.fetchAcmgRating(seqVar)

// assert:
expect(result).toEqual(mockAcmgRating)
})

it('fails to fetch ACMG rating', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('acmgSeqvar/get')) {
return Promise.resolve(JSON.stringify({ status: 500 }))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AcmgSeqVarClient()
const result = await client.fetchAcmgRating(seqVar)

// assert:
expect(result).toEqual({ status: 500 })
})

it('saves ACMG rating correctly', async () => {
// arrange:
fetchMocker.mockResponse(JSON.stringify(mockAcmgRating))

// act:
const client = new AcmgSeqVarClient()
const result = await client.saveAcmgRating(seqVar, mockAcmgRating)

// assert:
expect(result).toEqual(mockAcmgRating)
})

it('fails to save ACMG rating', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('acmgSeqvar/create')) {
return Promise.resolve(JSON.stringify({ status: 500 }))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AcmgSeqVarClient()
const result = await client.saveAcmgRating(seqVar, mockAcmgRating)

// assert:
expect(result).toEqual({ status: 500 })
})

it('updates ACMG rating correctly', async () => {
// arrange:
fetchMocker.mockResponse(JSON.stringify(mockAcmgRating))

// act:
const client = new AcmgSeqVarClient()
const result = await client.updateAcmgRating(seqVar, mockAcmgRating)

// assert:
expect(result).toEqual(mockAcmgRating)
})

it('fails to update ACMG rating', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('acmgSeqvar/update')) {
return Promise.resolve(JSON.stringify({ status: 500 }))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AcmgSeqVarClient()
const result = await client.updateAcmgRating(seqVar, mockAcmgRating)

// assert:
expect(result).toEqual({ status: 500 })
})

it('deletes ACMG rating correctly', async () => {
// arrange:
fetchMocker.mockResponse(JSON.stringify({}))

// act:
const client = new AcmgSeqVarClient()
const result = await client.deleteAcmgRating(seqVar)

// assert:
expect(result).toEqual({})
})

it('fails to delete ACMG rating', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('acmgSeqvar/delete')) {
return Promise.resolve(JSON.stringify({ status: 500 }))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AcmgSeqVarClient()
const result = await client.deleteAcmgRating(seqVar)

// assert:
expect(result).toEqual({ status: 500 })
})
})
45 changes: 45 additions & 0 deletions frontend/src/api/__tests__/annonars.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { SeqvarImpl } from '@/lib/genomicVars'

const fetchMocker = createFetchMock(vi)

// Test data
const seqVar = new SeqvarImpl('grch37', '1', 123, 'A', 'G')

describe.concurrent('Annonars Client', () => {
Expand All @@ -18,48 +19,65 @@ describe.concurrent('Annonars Client', () => {
})

it('fetches gene info correctly', async () => {
// arrange:
fetchMocker.mockResponseOnce(JSON.stringify(BRCA1geneInfo))

// act:
const client = new AnnonarsClient()
const result = await client.fetchGeneInfo('BRCA1')

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify(BRCA1geneInfo))
})

it('fails to fetch gene info with wrong HGNC id', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('hgnc_id=BRCA1')) {
return Promise.resolve(JSON.stringify(BRCA1geneInfo))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AnnonarsClient()
const result = await client.fetchGeneInfo('123')

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify({ status: 400 }))
})

it('fetches variant info correctly', async () => {
// arrange:
fetchMocker.mockResponseOnce(JSON.stringify(BRCA1VariantInfo))

// act:
const client = new AnnonarsClient()
const result = await client.fetchVariantInfo(seqVar)

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify(BRCA1VariantInfo))
})

it('do removes chr prefix from chromosome if genome release is grch38', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('chr')) {
return Promise.resolve(JSON.stringify(BRCA1VariantInfo))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AnnonarsClient()
const result = await client.fetchVariantInfo(seqVar)

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify(BRCA1VariantInfo))
})

it('fails to fetch variant info with wrong variant', async () => {
// arrange:
const seqVarInvalid = new SeqvarImpl('grch37', '1', 123, 'A', 'T')
fetchMocker.mockResponse((req) => {
if (req.url.includes('alternative=G')) {
Expand All @@ -68,72 +86,99 @@ describe.concurrent('Annonars Client', () => {
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AnnonarsClient()
const result = await client.fetchVariantInfo(seqVarInvalid)

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify({ status: 400 }))
})

it('fetches gene clinvar info correctly', async () => {
// arrange:
fetchMocker.mockResponseOnce(JSON.stringify(BRCA1geneInfo))

// act:
const client = new AnnonarsClient()
const result = await client.fetchGeneClinvarInfo('BRCA1')

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify(BRCA1geneInfo))
})

it('fails to fetch gene clinvar info with wrong HGNC id', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('hgnc_id=BRCA1')) {
return Promise.resolve(JSON.stringify(BRCA1geneInfo))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AnnonarsClient()
const result = await client.fetchGeneClinvarInfo('123')

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify({ status: 400 }))
})

it('fetches genes correctly', async () => {
// arrange:
fetchMocker.mockResponseOnce(JSON.stringify(EMPSearchInfo))

// act:
const client = new AnnonarsClient()
const result = await client.fetchGenes(
'q=BRCA1&fields=hgnc_id,ensembl_gene_id,ncbi_gene_id,symbol'
)

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify(EMPSearchInfo))
})

it('fails to fetch genes with wrong query', async () => {
// arrange:
fetchMocker.mockResponse((req) => {
if (req.url.includes('q=BRCA1')) {
return Promise.resolve(JSON.stringify(EMPSearchInfo))
}
return Promise.resolve(JSON.stringify({ status: 400 }))
})

// act:
const client = new AnnonarsClient()
const result = await client.fetchGenes(
'q=BRCA2&fields=hgnc_id,ensembl_gene_id,ncbi_gene_id,symbol'
)

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify({ status: 400 }))
})

it('fetches gene infos correctly', async () => {
// arrange:
fetchMocker.mockResponse(JSON.stringify(BRCA1geneInfo))

// act:
const client = new AnnonarsClient()
const result = await client.fetchGeneInfos(['BRCA1', 'BRCA2'])

// assert:
expect(JSON.stringify(result)).toMatch(JSON.stringify(BRCA1geneInfo['genes']['HGNC:1100']))
})

it.fails('fails to fetch gene infos with wrong HGNC id', async () => {
// arrange:
fetchMocker.mockResponse(() => {
return Promise.resolve(JSON.stringify({ status: 500 }))
})

// act:
const client = new AnnonarsClient()
const result = await client.fetchGeneInfos(['123', 'BRCA2'])

// assert:
expect(JSON.stringify(result)).toEqual(JSON.stringify({ status: 500 }))
})
})
12 changes: 12 additions & 0 deletions frontend/src/api/__tests__/auth.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,50 @@ describe.concurrent('AuthClient', () => {
})

it('should login successfully', async () => {
// arrange:
fetchMocker.mockResponseOnce('', { status: 204 })

// act:
const client = new AuthClient()
const result = await client.login('testuser', 'password123')

// assert:
expect(result).toBe(true)
})

it('should fail to login with incorrect credentials', async () => {
// arrange:
fetchMocker.mockResponseOnce('', { status: 401 })

// act:
const client = new AuthClient()
const result = await client.login('invaliduser', 'invalidpassword')

// assert:
expect(result).toBe(false)
})

it('should logout successfully', async () => {
// arrange:
fetchMocker.mockResponseOnce('Logout Successful', { status: 200 })

// act:
const client = new AuthClient()
const result = await client.logout()

// assert:
expect(result).toBe('Logout Successful')
})

it('should handle logout failure', async () => {
// arrange:
fetchMocker.mockResponseOnce('Logout Failed', { status: 500 })

// act:
const client = new AuthClient()
const result = await client.logout()

// assert:
expect(result).toBe('Logout Failed')
})
})
Loading

0 comments on commit bd93955

Please sign in to comment.