Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/backend/src/controllers/finance.controllers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,15 @@ export default class FinanceController {
next(error);
}
}

static async createSponsorTier(req: Request, res: Response, next: NextFunction) {
try {
const { name, colorHexCode } = req.body;

const sponsor = await FinanceServices.createSponsorTier(req.currentUser, name, req.organization, colorHexCode);
res.status(200).json(sponsor);
} catch (error: unknown) {
next(error);
}
}
}
2 changes: 2 additions & 0 deletions src/backend/src/prisma/seed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2032,6 +2032,8 @@ const performSeed: () => Promise<void> = async () => {
ner,
'googlecode'
);

await FinanceServices.createSponsorTier(thomasEmrax, 'Silver', ner, 'C0C0C0');
};

performSeed()
Expand Down
10 changes: 9 additions & 1 deletion src/backend/src/routes/finance.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import FinanceController from '../controllers/finance.controllers';
const financeRouter = express.Router();

financeRouter.post(
'/finance/sponsor/create',
'/sponsor/create',
nonEmptyString(body('name')),
body('activeStatus').isBoolean(),
body('sponsorValue').isInt(),
Expand All @@ -23,4 +23,12 @@ financeRouter.post(

financeRouter.delete('/sponsor/:sponsorId/delete', FinanceController.deleteSponsor);

financeRouter.post(
'/sponsorTier/create',
nonEmptyString(body('name')),
nonEmptyString(body('colorHexCode')),
validateInputs,
FinanceController.createSponsorTier
);

export default financeRouter;
18 changes: 18 additions & 0 deletions src/backend/src/services/finance.services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,22 @@ export default class FinanceServices {

return deletedSponsor;
}

static async createSponsorTier(submitter: User, name: string, organization: Organization, colorHexCode: string) {
if (!(await userHasPermission(submitter.userId, organization.organizationId, isHead)))
throw new AccessDeniedAdminOnlyException('create a sponsor tier');

const sponsor = await prisma.sponsor_Tier.create({
data: {
name,
organizationId: organization.organizationId,
colorHexCode
},
include: {
organization: true
}
});

return sponsor;
}
}
27 changes: 27 additions & 0 deletions src/backend/tests/unit/finance.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,31 @@ describe('Finance Tests', () => {
);
});
});

describe('Create a sponsor tier', () => {
it('Fails if user is not a head', async () => {
await expect(
async () =>
await FinanceServices.createSponsorTier(
await createTestUser(wonderwomanGuest, orgId),
'Silver',
organization,
'C0C0C0'
)
).rejects.toThrow(new AccessDeniedAdminOnlyException('create a sponsor tier'));
});

it('Succeeds and creates a sponsor tier', async () => {
const result = await FinanceServices.createSponsorTier(
await createTestUser(batmanAppAdmin, orgId),
'Silver',
organization,
'C0C0C0'
);

expect(result.name).toEqual('Silver');
expect(result.colorHexCode).toEqual('C0C0C0');
expect(result.organizationId).toEqual(orgId);
});
});
});