-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
fdbd3c5
commit d4b7343
Showing
3 changed files
with
101 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
import { QueryResult } from 'pg'; | ||
import supertest from 'supertest'; | ||
import db from '../../../db'; | ||
import loader from '../../../loader'; | ||
import setupAuth from '../../setupAuth'; | ||
|
||
const decks: QueryResult[] = []; | ||
const notOurDecks: QueryResult[] = []; | ||
const cards: QueryResult[] = []; | ||
let token: string; | ||
beforeEach(async () => { | ||
token = await setupAuth(); | ||
decks[0] = await db.query(/* sql */ ` | ||
INSERT INTO decks ("name", "public", "course") | ||
VALUES ($1, $2, $3) | ||
RETURNING deck_id;`, | ||
['foobar', false, null]); | ||
|
||
decks[1] = await db.query(/* sql */ ` | ||
INSERT INTO decks ("name", "public", "course") | ||
VALUES ($1, $2, $3) | ||
RETURNING deck_id;`, | ||
['foobar2', false, null]); | ||
|
||
notOurDecks[0] = await db.query(/* sql */ ` | ||
INSERT INTO decks ("name", "public", "course") | ||
VALUES ($1, $2, $3) | ||
RETURNING deck_id;`, | ||
['notOurs', false, null]); | ||
|
||
await db.query(/* sql */ ` | ||
INSERT INTO "user_decks" ("user_id", "deck_id") | ||
VALUES | ||
(1, $1);`, // Our test user has an ID of 1. | ||
[decks[0].rows[0].deck_id]); | ||
|
||
await db.query(/* sql */ ` | ||
INSERT INTO "user_decks" ("user_id", "deck_id") | ||
VALUES (999, $1);`, // This deck does not belong to our test user. | ||
[decks[1].rows[0].deck_id]); | ||
|
||
cards[0] = await db.query(/* sql */` | ||
INSERT INTO "cards" ("front", "back", "deck_id") | ||
VALUES ($1, $2, $3), ($4, $5, $6) | ||
RETURNING card_id;`, | ||
['front', 'back', decks[0].rows[0].deck_id, 'front2', 'back2', decks[0].rows[0].deck_id]); | ||
}); | ||
|
||
afterAll(async () => { | ||
await db.end(); | ||
}); | ||
|
||
describe('deleting cards from a deck', () => { | ||
it('should allow you to delete a card from a deck that belongs to you', async () => { | ||
// send a DELETE request to /app/deck/:deck_id/:card_id to delete a card from this deck. | ||
const res = await supertest(loader).delete(`/app/deck/${decks[0].rows[0].deck_id}/${cards[0].rows[0].card_id}`).set('Cookie', [`session=${token}`]); | ||
expect(res.status).toBe(204); | ||
|
||
// check that the card was deleted from the database. | ||
const card = await db.query(/* sql */ ` | ||
SELECT * FROM cards WHERE card_id = $1;`, | ||
[cards[0].rows[0].card_id]); | ||
expect(card.rows[0]).toBe(undefined); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import express from 'express'; | ||
import db from '../../../db'; | ||
|
||
const del = express.Router(); | ||
|
||
del.delete('/:deck_id/:card_id', async (req, res) => { | ||
if (!req.params.deck_id.match(/^[0-9]+$/) || !req.params.card_id.match(/^[0-9]+$/)) { | ||
res.status(400).send({ error: 'invalidId' }); | ||
return; | ||
} | ||
const deck = await db.query(/* sql */ ` | ||
SELECT "deck_id" FROM "user_decks" | ||
WHERE "deck_id" = $1 AND "user_id" = $2; | ||
`, [req.params.deck_id, req.user!.id]); | ||
if (!deck.rows[0]) { | ||
res.status(404).send({ error: 'deckNotFound' }); | ||
return; | ||
} | ||
const card = await db.query(/* sql */ ` | ||
SELECT "card_id" FROM "cards" | ||
WHERE "card_id" = $1 AND "deck_id" = $2; | ||
`, [req.params.card_id, req.params.deck_id]); | ||
if (!card.rows[0]) { | ||
res.status(404).send({ error: 'cardNotFound' }); | ||
return; | ||
} | ||
await db.query(/* sql */ ` | ||
DELETE FROM "cards" | ||
WHERE "card_id" = $1; | ||
`, [req.params.card_id]); | ||
res.status(204).send(); | ||
}); | ||
|
||
export default del; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters