fix(medusa): Implement listAndCount for UserService and update list endpoint (#6190)

This commit is contained in:
Kasper Fabricius Kristensen
2024-01-24 10:41:35 +01:00
committed by GitHub
parent eb498c500e
commit d68089b2aa
13 changed files with 633 additions and 198 deletions

View File

@@ -1,90 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`/admin/users GET /admin/users lists users 1`] = `
Array [
Object {
"api_token": "test_token",
"created_at": Any<String>,
"deleted_at": null,
"email": "admin@medusa.js",
"first_name": null,
"id": "admin_user",
"last_name": null,
"metadata": null,
"role": "admin",
"updated_at": Any<String>,
},
Object {
"api_token": null,
"created_at": Any<String>,
"deleted_at": null,
"email": "member@test.com",
"first_name": "member",
"id": "member-user",
"last_name": "user",
"metadata": null,
"role": "member",
"updated_at": Any<String>,
},
]
`;
exports[`/admin/users GET /admin/users returns user by id 1`] = `
Object {
"api_token": "test_token",
"created_at": Any<String>,
"deleted_at": null,
"email": "admin@medusa.js",
"first_name": null,
"id": "admin_user",
"last_name": null,
"metadata": null,
"role": "admin",
"updated_at": Any<String>,
}
`;
exports[`/admin/users POST /admin/users creates a user 1`] = `
Object {
"api_token": null,
"created_at": Any<String>,
"deleted_at": null,
"email": "test@test123.com",
"first_name": null,
"id": StringMatching /\\^usr_\\*/,
"last_name": null,
"metadata": null,
"role": "member",
"updated_at": Any<String>,
}
`;
exports[`/admin/users POST /admin/users updates a user 1`] = `
Object {
"api_token": null,
"created_at": Any<String>,
"deleted_at": null,
"email": "member@test.com",
"first_name": "karl",
"id": "member-user",
"last_name": "user",
"metadata": null,
"password_hash": null,
"role": "member",
"updated_at": Any<String>,
}
`;
exports[`[MEDUSA_FF_ANALYTICS] /admin/analytics-config DELETE /admin/users Deletes a user and their analytics config 1`] = `
Array [
Object {
"anonymize": false,
"created_at": Any<Date>,
"deleted_at": Any<Date>,
"id": Any<String>,
"opt_out": false,
"updated_at": Any<Date>,
"user_id": "member-user",
},
]
`;

View File

@@ -54,14 +54,16 @@ describe("/admin/users", () => {
const response = await api.get("/admin/users/admin_user", adminReqConfig)
expect(response.status).toEqual(200)
expect(response.data.user).toMatchSnapshot({
id: "admin_user",
email: "admin@medusa.js",
api_token: "test_token",
role: "admin",
created_at: expect.any(String),
updated_at: expect.any(String),
})
expect(response.data.user).toEqual(
expect.objectContaining({
id: "admin_user",
email: "admin@medusa.js",
api_token: "test_token",
role: "admin",
created_at: expect.any(String),
updated_at: expect.any(String),
})
)
})
it("lists users", async () => {
@@ -75,25 +77,72 @@ describe("/admin/users", () => {
expect(response.status).toEqual(200)
expect(response.data.users).toMatchSnapshot([
{
id: "admin_user",
email: "admin@medusa.js",
api_token: "test_token",
role: "admin",
created_at: expect.any(String),
updated_at: expect.any(String),
},
{
id: "member-user",
role: "member",
email: "member@test.com",
first_name: "member",
last_name: "user",
created_at: expect.any(String),
updated_at: expect.any(String),
},
])
expect(response.data.users).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "admin_user",
email: "admin@medusa.js",
api_token: "test_token",
role: "admin",
created_at: expect.any(String),
updated_at: expect.any(String),
}),
expect.objectContaining({
id: "member-user",
role: "member",
email: "member@test.com",
first_name: "member",
last_name: "user",
created_at: expect.any(String),
updated_at: expect.any(String),
}),
])
)
})
it("lists users that match the free text search", async () => {
const api = useApi()
const response = await api.get("/admin/users?q=member", adminReqConfig)
expect(response.status).toEqual(200)
expect(response.data.users.length).toEqual(1)
expect(response.data.users).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "member-user",
role: "member",
email: "member@test.com",
first_name: "member",
last_name: "user",
created_at: expect.any(String),
updated_at: expect.any(String),
}),
])
)
})
it("orders users by created_at", async () => {
const api = useApi()
const response = await api.get(
"/admin/users?order=created_at",
adminReqConfig
)
expect(response.status).toEqual(200)
expect(response.data.users.length).toBeGreaterThan(0)
for (let i = 0; i < response.data.users.length - 1; i++) {
const user1 = response.data.users[i]
const user2 = response.data.users[i + 1]
const date1 = new Date(user1.created_at)
const date2 = new Date(user2.created_at)
expect(date1.getTime()).toBeLessThanOrEqual(date2.getTime())
}
})
})
@@ -138,13 +187,15 @@ describe("/admin/users", () => {
.catch((err) => console.log(err))
expect(response.status).toEqual(200)
expect(response.data.user).toMatchSnapshot({
id: expect.stringMatching(/^usr_*/),
created_at: expect.any(String),
updated_at: expect.any(String),
role: "member",
email: "test@test123.com",
})
expect(response.data.user).toEqual(
expect.objectContaining({
id: expect.stringMatching(/^usr_*/),
created_at: expect.any(String),
updated_at: expect.any(String),
role: "member",
email: "test@test123.com",
})
)
})
it("updates a user", async () => {
@@ -159,15 +210,17 @@ describe("/admin/users", () => {
.catch((err) => console.log(err.response.data.message))
expect(updateResponse.status).toEqual(200)
expect(updateResponse.data.user).toMatchSnapshot({
id: "member-user",
created_at: expect.any(String),
updated_at: expect.any(String),
role: "member",
email: "member@test.com",
first_name: "karl",
last_name: "user",
})
expect(updateResponse.data.user).toEqual(
expect.objectContaining({
id: "member-user",
created_at: expect.any(String),
updated_at: expect.any(String),
role: "member",
email: "member@test.com",
first_name: "karl",
last_name: "user",
})
)
})
describe("Password reset", () => {
@@ -417,17 +470,19 @@ describe("[MEDUSA_FF_ANALYTICS] /admin/analytics-config", () => {
`SELECT * FROM public.analytics_config WHERE user_id = '${userId}'`
)
expect(configs).toMatchSnapshot([
{
created_at: expect.any(Date),
updated_at: expect.any(Date),
deleted_at: expect.any(Date),
id: expect.any(String),
user_id: userId,
opt_out: false,
anonymize: false,
},
])
expect(configs).toEqual(
expect.arrayContaining([
expect.objectContaining({
created_at: expect.any(Date),
updated_at: expect.any(Date),
deleted_at: expect.any(Date),
id: expect.any(String),
user_id: userId,
opt_out: false,
anonymize: false,
}),
])
)
})
})
})