forked from OpenNeo/impress
Okay, we handle the new pages correctly! Still some weird bugs when you send requests near each other? Probably wise to migrate to Apollo's new way of doing this
419 lines
11 KiB
JavaScript
419 lines
11 KiB
JavaScript
const gql = require("graphql-tag");
|
|
const { query, getDbCalls } = require("./setup.js");
|
|
|
|
describe("ItemSearch", () => {
|
|
it("loads Neopian Times items", async () => {
|
|
const res = await query({
|
|
query: gql`
|
|
query {
|
|
itemSearch(query: "Neopian Times") {
|
|
query
|
|
items {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
expect(res).toHaveNoErrors();
|
|
expect(res.data).toMatchSnapshot();
|
|
expect(getDbCalls()).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
"SELECT items.*, t.name FROM items
|
|
INNER JOIN item_translations t ON t.item_id = items.id
|
|
WHERE t.name LIKE ? AND t.name LIKE ? AND t.locale=\\"en\\"
|
|
ORDER BY t.name
|
|
LIMIT 30",
|
|
Array [
|
|
"%Neopian%",
|
|
"%Times%",
|
|
],
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it("searches for each word separately", async () => {
|
|
const res = await query({
|
|
query: gql`
|
|
query {
|
|
itemSearch(query: "Tarla Workshop") {
|
|
query
|
|
items {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
expect(res).toHaveNoErrors();
|
|
expect(res.data).toMatchInlineSnapshot(`
|
|
Object {
|
|
"itemSearch": Object {
|
|
"items": Array [
|
|
Object {
|
|
"id": "50377",
|
|
"name": "Tarlas Underground Workshop Background",
|
|
},
|
|
],
|
|
"query": "Tarla Workshop",
|
|
},
|
|
}
|
|
`);
|
|
expect(getDbCalls()).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
"SELECT items.*, t.name FROM items
|
|
INNER JOIN item_translations t ON t.item_id = items.id
|
|
WHERE t.name LIKE ? AND t.name LIKE ? AND t.locale=\\"en\\"
|
|
ORDER BY t.name
|
|
LIMIT 30",
|
|
Array [
|
|
"%Tarla%",
|
|
"%Workshop%",
|
|
],
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it("loads Neopian Times items that fit the Starry Zafara", async () => {
|
|
const res = await query({
|
|
query: gql`
|
|
query {
|
|
itemSearchToFit(
|
|
query: "Neopian Times"
|
|
speciesId: "54"
|
|
colorId: "75"
|
|
) {
|
|
query
|
|
items {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
expect(res).toHaveNoErrors();
|
|
expect(res.data).toMatchSnapshot();
|
|
expect(getDbCalls()).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
"SELECT * FROM pet_types WHERE (species_id = ? AND color_id = ?)",
|
|
Array [
|
|
"54",
|
|
"75",
|
|
],
|
|
],
|
|
Array [
|
|
"SELECT DISTINCT items.*, t.name FROM items
|
|
INNER JOIN item_translations t ON t.item_id = items.id
|
|
INNER JOIN parents_swf_assets rel
|
|
ON rel.parent_type = \\"Item\\" AND rel.parent_id = items.id
|
|
INNER JOIN swf_assets ON rel.swf_asset_id = swf_assets.id
|
|
WHERE t.name LIKE ? AND t.name LIKE ? AND t.locale=\\"en\\" AND
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
1
|
|
ORDER BY t.name
|
|
LIMIT ? OFFSET ?",
|
|
Array [
|
|
"%Neopian%",
|
|
"%Times%",
|
|
"180",
|
|
30,
|
|
0,
|
|
],
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it("loads Neopian Times items that fit the Starry Zafara as a Background", async () => {
|
|
const res = await query({
|
|
query: gql`
|
|
query {
|
|
itemSearchToFit(
|
|
query: "Neopian Times"
|
|
speciesId: "54"
|
|
colorId: "75"
|
|
zoneIds: ["3"]
|
|
) {
|
|
query
|
|
items {
|
|
id
|
|
name
|
|
}
|
|
zones {
|
|
id
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
expect(res).toHaveNoErrors();
|
|
expect(res.data).toMatchInlineSnapshot(`
|
|
Object {
|
|
"itemSearchToFit": Object {
|
|
"items": Array [
|
|
Object {
|
|
"id": "40431",
|
|
"name": "Neopian Times Background",
|
|
},
|
|
],
|
|
"query": "Neopian Times",
|
|
"zones": Array [
|
|
Object {
|
|
"id": "3",
|
|
},
|
|
],
|
|
},
|
|
}
|
|
`);
|
|
expect(getDbCalls()).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
"SELECT * FROM pet_types WHERE (species_id = ? AND color_id = ?)",
|
|
Array [
|
|
"54",
|
|
"75",
|
|
],
|
|
],
|
|
Array [
|
|
"SELECT DISTINCT items.*, t.name FROM items
|
|
INNER JOIN item_translations t ON t.item_id = items.id
|
|
INNER JOIN parents_swf_assets rel
|
|
ON rel.parent_type = \\"Item\\" AND rel.parent_id = items.id
|
|
INNER JOIN swf_assets ON rel.swf_asset_id = swf_assets.id
|
|
WHERE t.name LIKE ? AND t.name LIKE ? AND t.locale=\\"en\\" AND
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
swf_assets.zone_id IN (?)
|
|
ORDER BY t.name
|
|
LIMIT ? OFFSET ?",
|
|
Array [
|
|
"%Neopian%",
|
|
"%Times%",
|
|
"180",
|
|
"3",
|
|
30,
|
|
0,
|
|
],
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it("searches for each word separately (fit mode)", async () => {
|
|
const res = await query({
|
|
query: gql`
|
|
query {
|
|
itemSearchToFit(
|
|
query: "Tarla Workshop"
|
|
speciesId: "54"
|
|
colorId: "75"
|
|
) {
|
|
query
|
|
items {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
expect(res).toHaveNoErrors();
|
|
expect(res.data).toMatchInlineSnapshot(`
|
|
Object {
|
|
"itemSearchToFit": Object {
|
|
"items": Array [
|
|
Object {
|
|
"id": "50377",
|
|
"name": "Tarlas Underground Workshop Background",
|
|
},
|
|
],
|
|
"query": "Tarla Workshop",
|
|
},
|
|
}
|
|
`);
|
|
expect(getDbCalls()).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
"SELECT * FROM pet_types WHERE (species_id = ? AND color_id = ?)",
|
|
Array [
|
|
"54",
|
|
"75",
|
|
],
|
|
],
|
|
Array [
|
|
"SELECT DISTINCT items.*, t.name FROM items
|
|
INNER JOIN item_translations t ON t.item_id = items.id
|
|
INNER JOIN parents_swf_assets rel
|
|
ON rel.parent_type = \\"Item\\" AND rel.parent_id = items.id
|
|
INNER JOIN swf_assets ON rel.swf_asset_id = swf_assets.id
|
|
WHERE t.name LIKE ? AND t.name LIKE ? AND t.locale=\\"en\\" AND
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
1
|
|
ORDER BY t.name
|
|
LIMIT ? OFFSET ?",
|
|
Array [
|
|
"%Tarla%",
|
|
"%Workshop%",
|
|
"180",
|
|
30,
|
|
0,
|
|
],
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it("loads the first 10 hats that fit the Starry Zafara", async () => {
|
|
const res = await query({
|
|
query: gql`
|
|
query {
|
|
itemSearchToFit(
|
|
query: "hat"
|
|
speciesId: "54"
|
|
colorId: "75"
|
|
offset: 0
|
|
limit: 10
|
|
) {
|
|
query
|
|
items {
|
|
id
|
|
name
|
|
appearanceOn(speciesId: "54", colorId: "75") {
|
|
layers {
|
|
id
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
expect(res).toHaveNoErrors();
|
|
expect(res.data).toMatchSnapshot();
|
|
expect(getDbCalls()).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
"SELECT * FROM pet_types WHERE (species_id = ? AND color_id = ?)",
|
|
Array [
|
|
"54",
|
|
"75",
|
|
],
|
|
],
|
|
Array [
|
|
"SELECT DISTINCT items.*, t.name FROM items
|
|
INNER JOIN item_translations t ON t.item_id = items.id
|
|
INNER JOIN parents_swf_assets rel
|
|
ON rel.parent_type = \\"Item\\" AND rel.parent_id = items.id
|
|
INNER JOIN swf_assets ON rel.swf_asset_id = swf_assets.id
|
|
WHERE t.name LIKE ? AND t.locale=\\"en\\" AND
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
1
|
|
ORDER BY t.name
|
|
LIMIT ? OFFSET ?",
|
|
Array [
|
|
"%hat%",
|
|
"180",
|
|
10,
|
|
0,
|
|
],
|
|
],
|
|
Array [
|
|
"SELECT sa.*, rel.parent_id FROM swf_assets sa
|
|
INNER JOIN parents_swf_assets rel ON
|
|
rel.parent_type = \\"Item\\" AND
|
|
rel.swf_asset_id = sa.id
|
|
WHERE (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0)) OR (rel.parent_id = ? AND (sa.body_id = ? OR sa.body_id = 0))",
|
|
Array [
|
|
"74967",
|
|
"180",
|
|
"49026",
|
|
"180",
|
|
"67242",
|
|
"180",
|
|
"64177",
|
|
"180",
|
|
"69995",
|
|
"180",
|
|
"62375",
|
|
"180",
|
|
"56654",
|
|
"180",
|
|
"62322",
|
|
"180",
|
|
"58733",
|
|
"180",
|
|
"80401",
|
|
"180",
|
|
],
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
|
|
it("loads the next 10 hats that fit the Starry Zafara", async () => {
|
|
const res = await query({
|
|
query: gql`
|
|
query {
|
|
itemSearchToFit(
|
|
query: "hat"
|
|
speciesId: "54"
|
|
colorId: "75"
|
|
offset: 10
|
|
limit: 10
|
|
) {
|
|
query
|
|
items {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
expect(res).toHaveNoErrors();
|
|
expect(res.data).toMatchSnapshot();
|
|
expect(getDbCalls()).toMatchInlineSnapshot(`
|
|
Array [
|
|
Array [
|
|
"SELECT * FROM pet_types WHERE (species_id = ? AND color_id = ?)",
|
|
Array [
|
|
"54",
|
|
"75",
|
|
],
|
|
],
|
|
Array [
|
|
"SELECT DISTINCT items.*, t.name FROM items
|
|
INNER JOIN item_translations t ON t.item_id = items.id
|
|
INNER JOIN parents_swf_assets rel
|
|
ON rel.parent_type = \\"Item\\" AND rel.parent_id = items.id
|
|
INNER JOIN swf_assets ON rel.swf_asset_id = swf_assets.id
|
|
WHERE t.name LIKE ? AND t.locale=\\"en\\" AND
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
1
|
|
ORDER BY t.name
|
|
LIMIT ? OFFSET ?",
|
|
Array [
|
|
"%hat%",
|
|
"180",
|
|
10,
|
|
10,
|
|
],
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
});
|