|
| 1 | +import { |
| 2 | + createApplicationForm, |
| 3 | + createApplicationFormField, |
| 4 | + createOpportunity, |
| 5 | + createOrUpdateBaseField, |
| 6 | + createProposal, |
| 7 | + createProposalFieldValue, |
| 8 | + createProposalVersion, |
| 9 | + db, |
| 10 | + loadSystemFunder, |
| 11 | + loadSystemSource, |
| 12 | +} from '../..'; |
| 13 | +import { getAuthContext, loadTestUser } from '../../../test/utils'; |
| 14 | +import { |
| 15 | + BaseFieldDataType, |
| 16 | + BaseFieldScope, |
| 17 | + BaseFieldSensitivityClassification, |
| 18 | +} from '../../../types'; |
| 19 | + |
| 20 | +describe('/proposal_field_value_to_json', () => { |
| 21 | + it('returns a db error if attempting to load a forbidden proposal_field_value_to_json', async () => { |
| 22 | + const testUser = await loadTestUser(); |
| 23 | + const testUserAuthContext = getAuthContext(testUser); |
| 24 | + const systemSource = await loadSystemSource(db, null); |
| 25 | + const systemFunder = await loadSystemFunder(db, null); |
| 26 | + await createOpportunity(db, null, { |
| 27 | + title: '🔥', |
| 28 | + funderShortCode: systemFunder.shortCode, |
| 29 | + }); |
| 30 | + await createProposal(db, testUserAuthContext, { |
| 31 | + externalId: 'proposal-1', |
| 32 | + opportunityId: 1, |
| 33 | + }); |
| 34 | + await createApplicationForm(db, null, { |
| 35 | + opportunityId: 1, |
| 36 | + }); |
| 37 | + const forbiddenBaseField = await createOrUpdateBaseField(db, null, { |
| 38 | + label: 'Forbidden Field', |
| 39 | + description: 'This field should not be used in proposal versions', |
| 40 | + shortCode: 'forbiddenField', |
| 41 | + dataType: BaseFieldDataType.STRING, |
| 42 | + scope: BaseFieldScope.PROPOSAL, |
| 43 | + valueRelevanceHours: null, |
| 44 | + sensitivityClassification: BaseFieldSensitivityClassification.RESTRICTED, |
| 45 | + }); |
| 46 | + const forbiddenApplicationFormField = await createApplicationFormField( |
| 47 | + db, |
| 48 | + null, |
| 49 | + { |
| 50 | + applicationFormId: 1, |
| 51 | + baseFieldShortCode: forbiddenBaseField.shortCode, |
| 52 | + position: 1, |
| 53 | + label: 'Forbidden Field', |
| 54 | + }, |
| 55 | + ); |
| 56 | + await createProposal(db, testUserAuthContext, { |
| 57 | + externalId: `proposal-2525-01-04T00Z`, |
| 58 | + opportunityId: 1, |
| 59 | + }); |
| 60 | + await createProposalVersion(db, testUserAuthContext, { |
| 61 | + proposalId: 1, |
| 62 | + applicationFormId: 1, |
| 63 | + sourceId: systemSource.id, |
| 64 | + }); |
| 65 | + await createProposalFieldValue(db, null, { |
| 66 | + proposalVersionId: 1, |
| 67 | + applicationFormFieldId: forbiddenApplicationFormField.id, |
| 68 | + position: 1, |
| 69 | + value: 'Should not be returned', |
| 70 | + isValid: true, |
| 71 | + goodAsOf: null, |
| 72 | + }); |
| 73 | + await createOrUpdateBaseField(db, null, { |
| 74 | + ...forbiddenBaseField, |
| 75 | + sensitivityClassification: BaseFieldSensitivityClassification.FORBIDDEN, |
| 76 | + }); |
| 77 | + |
| 78 | + await expect( |
| 79 | + db.query( |
| 80 | + 'SELECT proposal_field_value_to_json(proposal_field_values.*) FROM proposal_field_values WHERE proposal_field_values.id = 1', |
| 81 | + ), |
| 82 | + ).rejects.toThrow( |
| 83 | + 'Attempt to convert forbidden proposal_field_value to JSON (1)', |
| 84 | + ); |
| 85 | + }); |
| 86 | +}); |
0 commit comments