2020-04-25 23:03:58 -07:00
|
|
|
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
|
2020-09-01 17:35:41 -07:00
|
|
|
WHERE t.name LIKE ? AND t.name LIKE ? AND t.locale=\\"en\\"
|
2020-04-25 23:03:58 -07:00
|
|
|
ORDER BY t.name
|
|
|
|
|
LIMIT 30",
|
|
|
|
|
Array [
|
2020-09-01 17:35:41 -07:00
|
|
|
"%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%",
|
2020-04-25 23:03:58 -07:00
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
]
|
|
|
|
|
`);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
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
|
2020-09-01 17:35:41 -07:00
|
|
|
WHERE t.name LIKE ? AND t.name LIKE ? AND t.locale=\\"en\\" AND
|
2020-09-01 20:06:54 -07:00
|
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
|
|
|
1
|
2020-09-01 17:35:41 -07:00
|
|
|
ORDER BY t.name
|
|
|
|
|
LIMIT ? OFFSET ?",
|
|
|
|
|
Array [
|
|
|
|
|
"%Neopian%",
|
|
|
|
|
"%Times%",
|
|
|
|
|
"180",
|
|
|
|
|
30,
|
|
|
|
|
0,
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
]
|
|
|
|
|
`);
|
|
|
|
|
});
|
|
|
|
|
|
2020-09-01 20:06:54 -07:00
|
|
|
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
|
|
|
|
|
}
|
2020-09-01 20:30:18 -07:00
|
|
|
zones {
|
|
|
|
|
id
|
|
|
|
|
}
|
2020-09-01 20:06:54 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(res).toHaveNoErrors();
|
|
|
|
|
expect(res.data).toMatchInlineSnapshot(`
|
|
|
|
|
Object {
|
|
|
|
|
"itemSearchToFit": Object {
|
|
|
|
|
"items": Array [
|
|
|
|
|
Object {
|
|
|
|
|
"id": "40431",
|
|
|
|
|
"name": "Neopian Times Background",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
"query": "Neopian Times",
|
2020-09-01 20:30:18 -07:00
|
|
|
"zones": Array [
|
|
|
|
|
Object {
|
|
|
|
|
"id": "3",
|
|
|
|
|
},
|
|
|
|
|
],
|
2020-09-01 20:06:54 -07:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
`);
|
|
|
|
|
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,
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
]
|
|
|
|
|
`);
|
|
|
|
|
});
|
|
|
|
|
|
2020-09-01 17:35:41 -07:00
|
|
|
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
|
2020-09-01 20:06:54 -07:00
|
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
|
|
|
1
|
2020-04-25 23:03:58 -07:00
|
|
|
ORDER BY t.name
|
|
|
|
|
LIMIT ? OFFSET ?",
|
|
|
|
|
Array [
|
2020-09-01 17:35:41 -07:00
|
|
|
"%Tarla%",
|
|
|
|
|
"%Workshop%",
|
2020-04-25 23:03:58 -07:00
|
|
|
"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
|
2020-08-17 01:41:38 -07:00
|
|
|
appearanceOn(speciesId: "54", colorId: "75") {
|
|
|
|
|
layers {
|
|
|
|
|
id
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-04-25 23:03:58 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
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
|
2020-09-01 20:06:54 -07:00
|
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
|
|
|
1
|
2020-04-25 23:03:58 -07:00
|
|
|
ORDER BY t.name
|
|
|
|
|
LIMIT ? OFFSET ?",
|
|
|
|
|
Array [
|
|
|
|
|
"%hat%",
|
|
|
|
|
"180",
|
|
|
|
|
10,
|
|
|
|
|
0,
|
|
|
|
|
],
|
|
|
|
|
],
|
2020-08-17 01:41:38 -07:00
|
|
|
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",
|
|
|
|
|
],
|
|
|
|
|
],
|
2020-04-25 23:03:58 -07:00
|
|
|
]
|
|
|
|
|
`);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
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
|
2020-09-01 20:06:54 -07:00
|
|
|
(swf_assets.body_id = ? OR swf_assets.body_id = 0) AND
|
|
|
|
|
1
|
2020-04-25 23:03:58 -07:00
|
|
|
ORDER BY t.name
|
|
|
|
|
LIMIT ? OFFSET ?",
|
|
|
|
|
Array [
|
|
|
|
|
"%hat%",
|
|
|
|
|
"180",
|
|
|
|
|
10,
|
|
|
|
|
10,
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
]
|
|
|
|
|
`);
|
|
|
|
|
});
|
|
|
|
|
});
|