mirror of
https://github.com/CompassConnections/Compass.git
synced 2026-03-30 04:23:03 -04:00
Fix unit tests
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
import {APIErrors, APIHandler} from 'api/helpers/endpoint'
|
||||
import {recomputeCompatibilityScoresForUser} from 'shared/compatibility/compute-scores'
|
||||
import {
|
||||
recomputeCompatibilityScoresForUser,
|
||||
updateCompatibilityPromptsMetrics,
|
||||
} from 'shared/compatibility/compute-scores'
|
||||
import {createSupabaseDirectClient} from 'shared/supabase/init'
|
||||
|
||||
export const deleteCompatibilityAnswer: APIHandler<'delete-compatibility-answer'> = async (
|
||||
@@ -33,12 +36,8 @@ export const deleteCompatibilityAnswer: APIHandler<'delete-compatibility-answer'
|
||||
)
|
||||
|
||||
const continuation = async () => {
|
||||
// Update importance counts for the question
|
||||
await pg.oneOrNone('SELECT update_compatibility_prompt_community_importance_score($1)', [
|
||||
questionId,
|
||||
])
|
||||
// Recompute precomputed compatibility scores for this user
|
||||
await recomputeCompatibilityScoresForUser(auth.uid, pg)
|
||||
await updateCompatibilityPromptsMetrics(questionId)
|
||||
await recomputeCompatibilityScoresForUser(auth.uid)
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import {Row} from 'common/supabase/utils'
|
||||
import {recomputeCompatibilityScoresForUser} from 'shared/compatibility/compute-scores'
|
||||
import {
|
||||
recomputeCompatibilityScoresForUser,
|
||||
updateCompatibilityPromptsMetrics,
|
||||
} from 'shared/compatibility/compute-scores'
|
||||
import {createSupabaseDirectClient} from 'shared/supabase/init'
|
||||
|
||||
import {APIHandler} from './helpers/endpoint'
|
||||
@@ -26,12 +29,8 @@ export const setCompatibilityAnswer: APIHandler<'set-compatibility-answer'> = as
|
||||
})
|
||||
|
||||
const continuation = async () => {
|
||||
// Update importance counts for the question
|
||||
await pg.oneOrNone('SELECT update_compatibility_prompt_community_importance_score($1)', [
|
||||
questionId,
|
||||
])
|
||||
// Recompute precomputed compatibility scores for this user
|
||||
await recomputeCompatibilityScoresForUser(auth.uid, pg)
|
||||
await updateCompatibilityPromptsMetrics(questionId)
|
||||
await recomputeCompatibilityScoresForUser(auth.uid)
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -4,7 +4,10 @@ jest.mock('shared/compatibility/compute-scores')
|
||||
import {deleteCompatibilityAnswer} from 'api/delete-compatibility-answer'
|
||||
import {AuthedUser} from 'api/helpers/endpoint'
|
||||
import {sqlMatch} from 'common/test-utils'
|
||||
import {recomputeCompatibilityScoresForUser} from 'shared/compatibility/compute-scores'
|
||||
import {
|
||||
recomputeCompatibilityScoresForUser,
|
||||
updateCompatibilityPromptsMetrics,
|
||||
} from 'shared/compatibility/compute-scores'
|
||||
import * as supabaseInit from 'shared/supabase/init'
|
||||
|
||||
describe('deleteCompatibilityAnswers', () => {
|
||||
@@ -28,22 +31,26 @@ describe('deleteCompatibilityAnswers', () => {
|
||||
}
|
||||
const mockAuth = {uid: '321'} as AuthedUser
|
||||
const mockReq = {} as any
|
||||
const mockAnswer = {question_id: 69}
|
||||
|
||||
;(mockPg.oneOrNone as jest.Mock).mockResolvedValue(true)
|
||||
;(mockPg.oneOrNone as jest.Mock).mockResolvedValue(mockAnswer)
|
||||
;(mockPg.none as jest.Mock).mockResolvedValue(null)
|
||||
|
||||
const results: any = await deleteCompatibilityAnswer(mockProps, mockAuth, mockReq)
|
||||
const response: any = await deleteCompatibilityAnswer(mockProps, mockAuth, mockReq)
|
||||
|
||||
expect(results.status).toBe('success')
|
||||
expect(response.result.status).toBe('success')
|
||||
expect(mockPg.oneOrNone).toBeCalledTimes(1)
|
||||
expect(mockPg.oneOrNone).toBeCalledWith(sqlMatch(`SELECT *`), [mockProps.id, mockAuth.uid])
|
||||
expect(mockPg.none).toBeCalledTimes(1)
|
||||
expect(mockPg.none).toBeCalledWith(sqlMatch('DELETE'), [mockProps.id, mockAuth.uid])
|
||||
|
||||
await results.continue()
|
||||
await response.continue()
|
||||
;(recomputeCompatibilityScoresForUser as jest.Mock).mockResolvedValue(null)
|
||||
expect(recomputeCompatibilityScoresForUser).toBeCalledTimes(1)
|
||||
expect(recomputeCompatibilityScoresForUser).toBeCalledWith(mockAuth.uid, expect.any(Object))
|
||||
expect(recomputeCompatibilityScoresForUser).toBeCalledWith(mockAuth.uid)
|
||||
|
||||
expect(updateCompatibilityPromptsMetrics).toBeCalledTimes(1)
|
||||
expect(updateCompatibilityPromptsMetrics).toBeCalledWith(mockAnswer.question_id)
|
||||
})
|
||||
})
|
||||
describe('when an error occurs', () => {
|
||||
|
||||
@@ -47,7 +47,12 @@ describe('getCompatibilityQuestions', () => {
|
||||
expect(results.questions).toBe(mockQuestions)
|
||||
expect(sql).toEqual(expect.stringContaining('FROM compatibility_prompts'))
|
||||
expect(sql).toEqual(expect.stringContaining('LEFT JOIN compatibility_prompts_translations'))
|
||||
expect(sql).toEqual(expect.stringContaining('COUNT(ca.question_id)'))
|
||||
expect(sql).toEqual(expect.stringContaining('cp.answer_count'))
|
||||
expect(sql).toEqual(
|
||||
expect.stringContaining(
|
||||
'cp.community_importance_score * (cp.answer_count::float / (cp.answer_count + 20)) AS community_importance_score',
|
||||
),
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -4,7 +4,10 @@ jest.mock('shared/compatibility/compute-scores')
|
||||
import {AuthedUser} from 'api/helpers/endpoint'
|
||||
import {setCompatibilityAnswer} from 'api/set-compatibility-answer'
|
||||
import {sqlMatch} from 'common/test-utils'
|
||||
import {recomputeCompatibilityScoresForUser} from 'shared/compatibility/compute-scores'
|
||||
import {
|
||||
recomputeCompatibilityScoresForUser,
|
||||
updateCompatibilityPromptsMetrics,
|
||||
} from 'shared/compatibility/compute-scores'
|
||||
import * as supabaseInit from 'shared/supabase/init'
|
||||
|
||||
describe('setCompatibilityAnswer', () => {
|
||||
@@ -13,6 +16,7 @@ describe('setCompatibilityAnswer', () => {
|
||||
jest.resetAllMocks()
|
||||
mockPg = {
|
||||
one: jest.fn(),
|
||||
oneOrNone: jest.fn(),
|
||||
}
|
||||
;(supabaseInit.createSupabaseDirectClient as jest.Mock).mockReturnValue(mockPg)
|
||||
})
|
||||
@@ -65,7 +69,10 @@ describe('setCompatibilityAnswer', () => {
|
||||
await result.continue()
|
||||
|
||||
expect(recomputeCompatibilityScoresForUser).toBeCalledTimes(1)
|
||||
expect(recomputeCompatibilityScoresForUser).toBeCalledWith(mockAuth.uid, expect.any(Object))
|
||||
expect(recomputeCompatibilityScoresForUser).toBeCalledWith(mockAuth.uid)
|
||||
|
||||
expect(updateCompatibilityPromptsMetrics).toBeCalledTimes(1)
|
||||
expect(updateCompatibilityPromptsMetrics).toBeCalledWith(mockProps.questionId)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -15,6 +15,7 @@ function canonicalPair(a: string, b: string) {
|
||||
return a < b ? ([a, b] as const) : ([b, a] as const)
|
||||
}
|
||||
|
||||
// Recompute precomputed compatibility scores for this user
|
||||
export async function recomputeCompatibilityScoresForUser(
|
||||
userId: string,
|
||||
client?: SupabaseDirectClient,
|
||||
@@ -100,3 +101,11 @@ export async function recomputeCompatibilityScoresForUser(
|
||||
|
||||
return rows
|
||||
}
|
||||
|
||||
// Update community importance counts for the question
|
||||
export async function updateCompatibilityPromptsMetrics(questionId: number) {
|
||||
const pg = createSupabaseDirectClient()
|
||||
await pg.oneOrNone('SELECT update_compatibility_prompt_community_importance_score($1)', [
|
||||
questionId,
|
||||
])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user