impress-2020/src/server/query-tests/User.test.js

395 lines
9 KiB
JavaScript
Raw Normal View History

2020-09-02 16:09:11 -07:00
const gql = require("graphql-tag");
2020-09-02 23:00:16 -07:00
const { query, getDbCalls, logInAsTestUser } = require("./setup.js");
2020-09-02 16:09:11 -07:00
describe("User", () => {
it("looks up a user", async () => {
// TODO: I'm not sure why this is taking extra time, maybe the db conn?
2020-09-04 05:57:21 -07:00
jest.setTimeout(20000);
2020-09-02 16:09:11 -07:00
const res = await query({
query: gql`
query {
user(id: "6") {
id
username
}
}
`,
});
expect(res).toHaveNoErrors();
expect(res.data).toMatchInlineSnapshot(`
Object {
"user": Object {
"id": "6",
"username": "matchu",
},
}
`);
expect(getDbCalls()).toMatchInlineSnapshot(`
Array [
Array [
"SELECT * FROM users WHERE id IN (?)",
Array [
"6",
],
],
]
`);
});
it("returns null when user not found", async () => {
const res = await query({
query: gql`
query {
user(id: "<invalid-user-id>") {
id
username
}
}
`,
});
expect(res).toHaveNoErrors();
2020-09-02 23:00:16 -07:00
expect(res.data).toEqual({ user: null });
2020-09-02 16:09:11 -07:00
expect(getDbCalls()).toMatchInlineSnapshot(`
Array [
Array [
"SELECT * FROM users WHERE id IN (?)",
Array [
"<invalid-user-id>",
],
],
]
`);
});
2020-09-02 23:00:16 -07:00
it("gets current user, if logged in", async () => {
await logInAsTestUser();
const res = await query({
query: gql`
query {
currentUser {
id
username
}
}
`,
});
expect(res).toHaveNoErrors();
expect(res.data).toMatchInlineSnapshot(`
Object {
"currentUser": Object {
"id": "44743",
"username": "dti-test",
},
}
`);
expect(getDbCalls()).toMatchInlineSnapshot(`
Array [
Array [
"SELECT * FROM users WHERE id IN (?)",
Array [
"44743",
],
],
]
`);
});
it("gets no user, if logged out", async () => {
const res = await query({
query: gql`
query {
currentUser {
id
username
}
}
`,
});
expect(res).toHaveNoErrors();
expect(res.data).toEqual({ currentUser: null });
expect(getDbCalls()).toMatchInlineSnapshot(`Array []`);
});
2020-09-04 05:57:21 -07:00
it("gets private items they own for current user", async () => {
await logInAsTestUser();
const res = await query({
query: gql`
query {
user(id: "44743") {
id
username
itemsTheyOwn {
id
name
}
}
}
`,
});
expect(res).toHaveNoErrors();
expect(res.data).toMatchInlineSnapshot(`
Object {
"user": Object {
"id": "44743",
"itemsTheyOwn": Array [
Object {
"id": "74967",
"name": "17th Birthday Party Hat",
},
Object {
"id": "49026",
"name": "Abominable Snowman Hat",
},
Object {
"id": "39948",
"name": "Altador Cup Background - Lost Desert",
},
Object {
"id": "39955",
"name": "Altador Cup Background - Virtupets",
},
2020-09-04 05:57:21 -07:00
Object {
"id": "40319",
"name": "Blue Jelly Tiara",
},
],
"username": "dti-test",
},
}
`);
expect(getDbCalls()).toMatchInlineSnapshot(`
Array [
Array [
"SELECT * FROM users WHERE id IN (?)",
Array [
"44743",
],
],
Array [
"SELECT closet_hangers.*, item_translations.name as item_name FROM closet_hangers
INNER JOIN items ON items.id = closet_hangers.item_id
INNER JOIN item_translations ON
item_translations.item_id = items.id AND locale = \\"en\\"
2020-09-11 21:34:28 -07:00
WHERE user_id IN (?)
2020-09-04 05:57:21 -07:00
ORDER BY item_name",
Array [
"44743",
],
],
Array [
"SELECT * FROM closet_lists
WHERE user_id IN (?)
ORDER BY name",
Array [
"44743",
],
],
2020-09-04 05:57:21 -07:00
]
`);
});
it("hides private items they own from other users", async () => {
const res = await query({
query: gql`
query {
user(id: "44743") {
id
username
itemsTheyOwn {
id
name
}
}
}
`,
});
expect(res).toHaveNoErrors();
expect(res.data).toMatchInlineSnapshot(`
Object {
"user": Object {
"id": "44743",
"itemsTheyOwn": Array [
Object {
"id": "39955",
"name": "Altador Cup Background - Virtupets",
},
],
2020-09-04 05:57:21 -07:00
"username": "dti-test",
},
}
`);
expect(getDbCalls()).toMatchInlineSnapshot(`
Array [
Array [
"SELECT * FROM users WHERE id IN (?)",
Array [
"44743",
],
],
Array [
"SELECT closet_hangers.*, item_translations.name as item_name FROM closet_hangers
INNER JOIN items ON items.id = closet_hangers.item_id
INNER JOIN item_translations ON
item_translations.item_id = items.id AND locale = \\"en\\"
2020-09-11 21:34:28 -07:00
WHERE user_id IN (?)
ORDER BY item_name",
Array [
"44743",
],
],
Array [
"SELECT * FROM closet_lists
WHERE user_id IN (?)
ORDER BY name",
Array [
"44743",
],
],
]
`);
});
it("gets private items they want for current user", async () => {
await logInAsTestUser();
const res = await query({
query: gql`
query {
user(id: "44743") {
id
username
itemsTheyWant {
id
name
}
}
}
`,
});
expect(res).toHaveNoErrors();
expect(res.data).toMatchInlineSnapshot(`
Object {
"user": Object {
"id": "44743",
"itemsTheyWant": Array [
Object {
"id": "39945",
"name": "Altador Cup Background - Haunted Woods",
},
Object {
"id": "39956",
"name": "Altador Cup Background - Kreludor",
},
Object {
"id": "39947",
"name": "Altador Cup Background - Shenkuu",
},
],
"username": "dti-test",
},
}
`);
expect(getDbCalls()).toMatchInlineSnapshot(`
Array [
Array [
"SELECT * FROM users WHERE id IN (?)",
Array [
"44743",
],
],
Array [
"SELECT closet_hangers.*, item_translations.name as item_name FROM closet_hangers
INNER JOIN items ON items.id = closet_hangers.item_id
INNER JOIN item_translations ON
item_translations.item_id = items.id AND locale = \\"en\\"
WHERE user_id IN (?)
ORDER BY item_name",
Array [
"44743",
],
],
Array [
"SELECT * FROM closet_lists
WHERE user_id IN (?)
ORDER BY name",
Array [
"44743",
],
],
]
`);
});
it("hides private items they want from other users", async () => {
const res = await query({
query: gql`
query {
user(id: "44743") {
id
username
itemsTheyWant {
id
name
}
}
}
`,
});
expect(res).toHaveNoErrors();
expect(res.data).toMatchInlineSnapshot(`
Object {
"user": Object {
"id": "44743",
"itemsTheyWant": Array [
Object {
"id": "39947",
"name": "Altador Cup Background - Shenkuu",
},
],
"username": "dti-test",
},
}
`);
expect(getDbCalls()).toMatchInlineSnapshot(`
Array [
Array [
"SELECT * FROM users WHERE id IN (?)",
Array [
"44743",
],
],
Array [
"SELECT closet_hangers.*, item_translations.name as item_name FROM closet_hangers
INNER JOIN items ON items.id = closet_hangers.item_id
INNER JOIN item_translations ON
item_translations.item_id = items.id AND locale = \\"en\\"
WHERE user_id IN (?)
ORDER BY item_name",
Array [
"44743",
],
],
Array [
"SELECT * FROM closet_lists
WHERE user_id IN (?)
ORDER BY name",
Array [
"44743",
],
],
2020-09-04 05:57:21 -07:00
]
`);
});
2020-09-02 16:09:11 -07:00
});