feat(cart): Cart + Address services (#6055)
Duplicate of #6008, but I messed up my git history big time :'( **What** - CartService and CartRepository + tests - AddressService and AddressRepository + tests - CartModuleService skeleton. Full implementation + tests will be added in a separate PR
This commit is contained in:
1 parent
b6ac768698
commit
ce81cade88
20 files changed
+847
-33
No files matched your search
@@ -0,0 +1,127 @@
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
import { AddressRepository } from "../../../../src/repositories"
|
||||
import { AddressService } from "../../../../src/services"
|
||||
import { MikroOrmWrapper } from "../../../utils"
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
describe("Address Service", () => {
|
||||
let service: AddressService
|
||||
let testManager: SqlEntityManager
|
||||
let repositoryManager: SqlEntityManager
|
||||
|
||||
beforeEach(async () => {
|
||||
await MikroOrmWrapper.setupDatabase()
|
||||
repositoryManager = await MikroOrmWrapper.forkManager()
|
||||
testManager = await MikroOrmWrapper.forkManager()
|
||||
|
||||
const addressRepository = new AddressRepository({
|
||||
manager: repositoryManager,
|
||||
})
|
||||
|
||||
service = new AddressService({
|
||||
addressRepository: addressRepository,
|
||||
})
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await MikroOrmWrapper.clearDatabase()
|
||||
})
|
||||
|
||||
describe("create", () => {
|
||||
it("should create an address successfully", async () => {
|
||||
const [createdAddress] = await service.create([
|
||||
{
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 1",
|
||||
city: "Test city",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
},
|
||||
])
|
||||
|
||||
const [address] = await service.list({ id: [createdAddress.id] })
|
||||
|
||||
expect(address).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdAddress.id,
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 1",
|
||||
city: "Test city",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("update", () => {
|
||||
it("should throw an error if address does not exist", async () => {
|
||||
const error = await service
|
||||
.update([
|
||||
{
|
||||
id: "none-existing",
|
||||
},
|
||||
])
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.message).toContain(
|
||||
"Address with id \"none-existing\" not found"
|
||||
)
|
||||
})
|
||||
|
||||
it("should update an address successfully", async () => {
|
||||
const [createdAddress] = await service.create([
|
||||
{
|
||||
first_name: "Jane",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 1",
|
||||
city: "Test city",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
},
|
||||
])
|
||||
|
||||
await service.update([
|
||||
{
|
||||
id: createdAddress.id,
|
||||
address_1: "Test street 2",
|
||||
city: "Test city 2",
|
||||
},
|
||||
])
|
||||
|
||||
const [address] = await service.list({ id: [createdAddress.id] })
|
||||
|
||||
expect(address).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdAddress.id,
|
||||
first_name: "Jane",
|
||||
last_name: "Doe",
|
||||
address_1: "Test street 2",
|
||||
city: "Test city 2",
|
||||
country_code: "US",
|
||||
postal_code: "12345",
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("delete", () => {
|
||||
it("should delete a cart successfully", async () => {
|
||||
const [createdAddress] = await service.create([
|
||||
{
|
||||
first_name: "Jane",
|
||||
last_name: "Doe",
|
||||
},
|
||||
])
|
||||
|
||||
await service.delete([createdAddress.id])
|
||||
|
||||
const carts = await service.list({ id: [createdAddress.id] })
|
||||
|
||||
expect(carts.length).toEqual(0)
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,124 @@
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
import { CartRepository } from "../../../../src/repositories"
|
||||
import { CartService } from "../../../../src/services"
|
||||
import { createCarts } from "../../../__fixtures__/cart"
|
||||
import { MikroOrmWrapper } from "../../../utils"
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
describe("Cart Service", () => {
|
||||
let service: CartService
|
||||
let testManager: SqlEntityManager
|
||||
let repositoryManager: SqlEntityManager
|
||||
|
||||
beforeEach(async () => {
|
||||
await MikroOrmWrapper.setupDatabase()
|
||||
repositoryManager = await MikroOrmWrapper.forkManager()
|
||||
testManager = await MikroOrmWrapper.forkManager()
|
||||
|
||||
const cartRepository = new CartRepository({
|
||||
manager: repositoryManager,
|
||||
})
|
||||
|
||||
service = new CartService({
|
||||
cartRepository: cartRepository,
|
||||
})
|
||||
|
||||
await createCarts(testManager)
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await MikroOrmWrapper.clearDatabase()
|
||||
})
|
||||
|
||||
describe("create", () => {
|
||||
it("should throw an error when required params are not passed", async () => {
|
||||
const error = await service
|
||||
.create([
|
||||
{
|
||||
email: "test@email.com",
|
||||
} as any,
|
||||
])
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.message).toContain(
|
||||
"Value for Cart.currency_code is required, 'undefined' found"
|
||||
)
|
||||
})
|
||||
|
||||
it("should create a cart successfully", async () => {
|
||||
const [createdCart] = await service.create([
|
||||
{
|
||||
currency_code: "eur",
|
||||
},
|
||||
])
|
||||
|
||||
const [cart] = await service.list({ id: [createdCart.id] })
|
||||
|
||||
expect(cart).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdCart.id,
|
||||
currency_code: "eur",
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("update", () => {
|
||||
it("should throw an error if cart does not exist", async () => {
|
||||
const error = await service
|
||||
.update([
|
||||
{
|
||||
id: "none-existing",
|
||||
},
|
||||
])
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.message).toContain(
|
||||
"Cart with id \"none-existing\" not found"
|
||||
)
|
||||
})
|
||||
|
||||
it("should update a cart successfully", async () => {
|
||||
const [createdCart] = await service.create([
|
||||
{
|
||||
currency_code: "eur",
|
||||
},
|
||||
])
|
||||
|
||||
const [updatedCart] = await service.update([
|
||||
|
||||
{
|
||||
id: createdCart.id,
|
||||
email: "test@email.com",
|
||||
},
|
||||
])
|
||||
|
||||
const [cart] = await service.list({ id: [createdCart.id] })
|
||||
|
||||
expect(cart).toEqual(
|
||||
expect.objectContaining({
|
||||
id: createdCart.id,
|
||||
currency_code: "eur",
|
||||
email: updatedCart.email,
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("delete", () => {
|
||||
it("should delete a cart successfully", async () => {
|
||||
const [createdCart] = await service.create([
|
||||
{
|
||||
currency_code: "eur",
|
||||
},
|
||||
])
|
||||
|
||||
await service.delete([createdCart.id])
|
||||
|
||||
const carts = await service.list({ id: [createdCart.id] })
|
||||
|
||||
expect(carts.length).toEqual(0)
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user