test: filtering on components and associations

This commit is contained in:
Convly 2025-01-24 11:27:25 +01:00
parent 82afe56cec
commit ee9df65e67
2 changed files with 60 additions and 13 deletions

View File

@ -51,6 +51,13 @@ const labelModel = {
collectionName: '',
};
const COLORS = {
tomato: { name: 'tomato', red: 255, green: 99, blue: 71 },
red: { name: 'red', red: 255, green: 0, blue: 0 },
green: { name: 'green', red: 0, green: 255, blue: 0 },
blue: { name: 'blue', red: 0, green: 0, blue: 255 },
};
describe('Test Graphql Components API End to End', () => {
beforeAll(async () => {
await builder.addComponent(rgbColorComponent).addContentTypes([labelModel]).build();
@ -76,11 +83,12 @@ describe('Test Graphql Components API End to End', () => {
const data = {
labels: [],
};
const labelsPayload = [
{
name: 'label 3, repeatable and non-repeatable',
color: { name: 'tomato', red: 255, green: 99, blue: 71 },
colors: [{ name: 'red', red: 255, green: 0, blue: 0 }],
color: COLORS.tomato,
colors: [COLORS.red, COLORS.green, COLORS.blue],
},
];
@ -175,16 +183,8 @@ describe('Test Graphql Components API End to End', () => {
{
labels_connection {
data {
id
attributes {
name
color {
name
red
green
blue
}
colors(filters: { red: { eq: 255 } }) {
colors(filters: { red: { eq: ${COLORS.red.red} } }) {
name
red
green
@ -200,10 +200,10 @@ describe('Test Graphql Components API End to End', () => {
const { body } = res;
expect(res.statusCode).toBe(200);
expect(body).toMatchObject({
expect(body).toStrictEqual({
data: {
labels_connection: {
data: expect.arrayContaining(data.labels),
data: [{ attributes: { colors: [COLORS.red] } }],
},
},
});

View File

@ -533,6 +533,53 @@ describe('Test Graphql Relations API End to End', () => {
});
});
test('Relation filtering', async () => {
const res = await graphqlQuery({
query: /* GraphQL */ `
{
articles_connection {
data {
documentId
attributes {
name
labels_connection(filters: { name: { endsWith: "Color" } }) {
data {
documentId
attributes {
name
color {
name
red
green
blue
}
}
}
}
}
}
}
}
`,
});
const { body } = res;
expect(res.statusCode).toBe(200);
expect(body.data?.articles_connection?.data).toBeInstanceOf(Array);
body.data.articles_connection.data.forEach((article) => {
const { data: labels } = article.attributes.labels_connection;
expect(labels).toBeInstanceOf(Array);
for (const label of labels) {
expect(label.attributes).toMatchObject(
expect.objectContaining({ name: expect.stringMatching(/.*Color$/) })
);
}
});
});
test('Update Article relations removes correctly a relation', async () => {
const article = data.articles[0];
const labels = [data.labels[0]];