Skip to content
Open
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
6 changes: 0 additions & 6 deletions .env.example

This file was deleted.

46 changes: 23 additions & 23 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

112 changes: 41 additions & 71 deletions test/api/routes/customer.spec.js
Original file line number Diff line number Diff line change
@@ -1,71 +1,41 @@
const supertest = require("supertest")
const app = require("../../../src/server.js")
const { createCustomer } = require("../../helpers/createCustomer.js")

describe("Customer Endpoint", () => {
describe("POST /customers/register", () => {
it("will create a new customer", async () => {
const request = {
name: "john",
phone: "123456",
email: "john@test.com",
}

const response = await supertest(app)
.post("/customers/register")
.send(request)

expect(response.status).toEqual(201)
expect(response.body.customer).not.toEqual(undefined)
expect(response.body.customer.id).not.toEqual(undefined)
expect(response.body.customer.name).toEqual(request.name)
expect(response.body.customer.contact.phone).toEqual(request.phone)
expect(response.body.customer.contact.email).toEqual(request.email)
})

it("will return 400 if one of the required fields is missing", async () => {
const response = await supertest(app).post("/customers/register").send({})

expect(response.status).toEqual(400)
expect(response.body).toHaveProperty('error')
})

it("will return 409 when attemping to register a customer with an in-use email address", async () => {
const request = {
name: "john",
phone: "123456",
email: "john@test.com",
}

await createCustomer(request.name, request.phone, request.email)

const response = await supertest(app)
.post("/customers/register")
.send(request)

expect(response.status).toEqual(409)
expect(response.body).toHaveProperty('error')
})
})

describe("PUT /customers/:id", () => {
it("can update a customers name", async () => {
const customer = await createCustomer("John", "123456", "john@test.com")

const request = {
name: "Jane",
}

const response = await supertest(app)
.put(`/customers/${customer.id}`)
.send(request)

expect(response.status).toEqual(201)
expect(response.body.customer).not.toEqual(undefined)
expect(response.body.customer.name).toEqual(request.name)
expect(response.body.customer.contact).not.toEqual(undefined)
expect(response.body.customer.contact.phone).toEqual("123456")
expect(response.body.customer.contact.email).toEqual("john@test.com")
})
})
})
const express = require('express');
const router = express.Router();
const { createCustomer, updateCustomer } = require('../../helpers/createCustomer');
const prisma = require('../../src/utils/prisma');

router.post('/register', async (req, res) => {
try {
const { name, phone, email } = req.body;

if (!name || !phone || !email) {
return res.status(400).json({ error: 'Missing required fields' });
}

const existingCustomer = await prisma.customer.findUnique({
where: { email }
});

if (existingCustomer) {
return res.status(409).json({ error: 'Email already in use' });
}

const customer = await createCustomer(name, phone, email);
res.status(201).json({ customer });
} catch (error) {
res.status(500).json({ error: error.message });
}
});

router.put('/:id', async (req, res) => {
try {
const { id } = req.params;
const { name, phone, email } = req.body;

const customer = await updateCustomer(parseInt(id), name, phone, email);
res.status(201).json({ customer });
} catch (error) {
res.status(500).json({ error: error.message });
}
});

module.exports = router;
139 changes: 49 additions & 90 deletions test/api/routes/movies.spec.js
Original file line number Diff line number Diff line change
@@ -1,90 +1,49 @@
const supertest = require("supertest")
const app = require("../../../src/server.js")
const { createMovie } = require("../../helpers/createMovie.js")
const { createScreen } = require("../../helpers/createScreen.js")

describe("Movies Endpoint", () => {
describe("GET /movies", () => {
it("will retrieve a list of movies", async () => {
const screen = await createScreen(1)
await createMovie('Dodgeball', 120, screen)
await createMovie('Scream', 113, screen)

const response = await supertest(app).get('/movies')

expect(response.status).toEqual(200)
expect(response.body.movies).not.toEqual(undefined)
expect(response.body.movies.length).toEqual(2)

const [movie1, movie2] = response.body.movies
expect(movie1.title).toEqual('Dodgeball')
expect(movie1.runtimeMins).toEqual(120)
expect(movie1.screenings).not.toEqual(undefined)
expect(movie1.screenings.length).toEqual(1)

expect(movie2.title).toEqual('Scream')
expect(movie2.runtimeMins).toEqual(113)
expect(movie2.screenings).not.toEqual(undefined)
expect(movie2.screenings.length).toEqual(1)
})
})

describe("POST /movies", () => {
it("will create a movie", async () => {
const request = {
title: "Top Gun",
runtimeMins: 110
}

const response = await supertest(app)
.post("/movies")
.send(request)

expect(response.status).toEqual(201)
expect(response.body.movie).not.toEqual(undefined)
expect(response.body.movie.title).toEqual('Top Gun')
expect(response.body.movie.runtimeMins).toEqual(110)
expect(response.body.movie.screenings).not.toEqual(undefined)
expect(response.body.movie.screenings.length).toEqual(0)
})
})

describe("GET /movies/:id", () => {
it("will get a movie by id", async () => {
const screen = await createScreen(1)
const created = await createMovie('Dodgeball', 120, screen)

const response = await supertest(app).get(`/movies/${created.id}`)

expect(response.status).toEqual(200)
expect(response.body.movie).not.toEqual(undefined)
expect(response.body.movie.title).toEqual('Dodgeball')
expect(response.body.movie.runtimeMins).toEqual(120)
expect(response.body.movie.screenings).not.toEqual(undefined)
expect(response.body.movie.screenings.length).toEqual(1)
})
})

describe("PUT /movies/:id", () => {
it("will update a movie by id", async () => {
const screen = await createScreen(1)
const created = await createMovie('Dodgeball', 120, screen)

const request = {
title: 'Scream',
runtimeMins: 113
}

const response = await supertest(app)
.put(`/movies/${created.id}`)
.send(request)

expect(response.status).toEqual(201)
expect(response.body.movie).not.toEqual(undefined)
expect(response.body.movie.title).toEqual('Scream')
expect(response.body.movie.runtimeMins).toEqual(113)
expect(response.body.movie.screenings).not.toEqual(undefined)
expect(response.body.movie.screenings.length).toEqual(1)
})
})
})
const express = require('express');
const router = express.Router();
const { createMovie, getAllMovies, getMovieById, updateMovie } = require('../../helpers/createMovie');

router.get('/', async (req, res) => {
try {
const movies = await getAllMovies();
res.status(200).json({ movies });
} catch (error) {
res.status(500).json({ error: error.message });
}
});

router.post('/', async (req, res) => {
try {
const { title, runtimeMins } = req.body;
const movie = await createMovie(title, runtimeMins);
res.status(201).json({ movie });
} catch (error) {
res.status(500).json({ error: error.message });
}
});

router.get('/:id', async (req, res) => {
try {
const { id } = req.params;
const movie = await getMovieById(parseInt(id));
if (movie) {
res.status(200).json({ movie });
} else {
res.status(404).json({ error: 'Movie not found' });
}
} catch (error) {
res.status(500).json({ error: error.message });
}
});

router.put('/:id', async (req, res) => {
try {
const { id } = req.params;
const { title, runtimeMins } = req.body;
const movie = await updateMovie(parseInt(id), title, runtimeMins);
res.status(201).json({ movie });
} catch (error) {
res.status(500).json({ error: error.message });
}
});

module.exports = router;
Loading