diff --git a/.changeset/itchy-pandas-report.md b/.changeset/itchy-pandas-report.md new file mode 100644 index 0000000..a5d56a3 --- /dev/null +++ b/.changeset/itchy-pandas-report.md @@ -0,0 +1,8 @@ +--- +"@drupal-kit/simple-oauth-auth-code": patch +"@drupal-kit/simple-oauth": patch +"@drupal-kit/user-api": patch +"@drupal-kit/jsonapi": patch +--- + +Fix inter-dependency resolution diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 479fbc2..3ec785d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,43 +1,28 @@ name: Lint & Test on: - push: + push: pull_request: types: [opened, synchronize, reopened] -concurrency: ${{ github.workflow }}-${{ github.ref }} +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: lint-and-test: name: Lint & Test - runs-on: ubuntu-latest - defaults: - run: - shell: nix develop --command bash {0} + runs-on: blacksmith-2vcpu-ubuntu-2404-arm steps: - name: Checkout Repo uses: actions/checkout@v4 - - name: Install nix - uses: nixbuild/nix-quick-install-action@v26 + - uses: pnpm/action-setup@v4 - - name: Get pnpm store directory - id: pnpm-cache - run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v4 - name: Setup pnpm cache + - uses: actions/setup-node@v4 with: - path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Set token config - run: | - echo "//npm.wunderwerk.dev/:_authToken=${NPM_TOKEN}" >> .npmrc - env: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + node-version: "22" + cache: "pnpm" - name: Install dependencies run: pnpm install diff --git a/packages/jsonapi/tests/DrupalkitJsonApiError.test.ts b/packages/jsonapi/tests/DrupalkitJsonApiError.test.ts index 484fdc3..74f9b09 100644 --- a/packages/jsonapi/tests/DrupalkitJsonApiError.test.ts +++ b/packages/jsonapi/tests/DrupalkitJsonApiError.test.ts @@ -2,7 +2,7 @@ import test from "ava"; import { DrupalkitError, UNKNOWN_ERROR_PREFIX } from "@drupal-kit/core"; import { DrupalkitJsonApiError } from "../src/index.js"; -import JsonApiErrorResponse from "./fixtures/jsonapi_multiple_errors.json" with { type: "json" }; +import JsonApiErrorResponse from "./fixtures/jsonapi_multiple_errors.js"; const request = { method: "GET", diff --git a/packages/jsonapi/tests/fixtures/jsonapi_article_collection.ts b/packages/jsonapi/tests/fixtures/jsonapi_article_collection.ts new file mode 100644 index 0000000..d23b0a4 --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_article_collection.ts @@ -0,0 +1,898 @@ +const JsonApiArticleCollection = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + data: [ + { + type: "node--article", + id: "58e198f6-41af-48b0-b889-596adcb9622e", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e?resourceVersion=id%3A3", + }, + }, + attributes: { + drupal_internal__nid: 3, + drupal_internal__vid: 3, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Milchfreie und köstliche Milchschokolade", + created: "2023-01-27T09:38:39+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: "/articles/milchfreie-und-koestliche-milchschokolade", + pid: 4, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Der Kalender ist voll von Ausreden für Schokoladenliebhaber, von religiösen Festen bis zu Geburtstagen - und sogar dem Weltschokoladentag am 7. Juli. Aber auch Veganer oder Menschen, die sich milchfrei ernähren, müssen nicht leer ausgehen, denn es gibt viele köstliche vegane Schokoladensorten im Angebot.

Milchfreie Milchschokolade wird weitgehend auf die gleiche Weise hergestellt wie normale Schokolade, bis zu dem Punkt, an dem die Milch hinzugefügt wird. Die Kakaobohnen werden ein paar Stunden lang geröstet, bis sie einen reichen Geschmack entwickeln. Die äußeren Schalen werden entfernt, und die inneren Nibs werden gemahlen, um eine Paste zu erhalten, die mit Kakaobutter gemischt werden kann, um den gewünschten Prozentsatz an Schokolade herzustellen. Aromen, Zucker und Milch werden in unterschiedlichen Mengen hinzugefügt, um die gewünschte Schokoladenart zu erhalten. Die Schokolade ist zu diesem Zeitpunkt körnig und muss püriert werden, bis sie glatt ist - das kann Tage dauern! Schließlich wird sie durch Erhitzen und Abkühlen temperiert, bis sie verzehrfertig ist.

Wie also bekommen vegane Chocolatiers den cremigen Milchgeschmack und die Textur in ihre Produkte?

", + format: "ckeditor", + processed: + "

Der Kalender ist voll von Ausreden für Schokoladenliebhaber, von religiösen Festen bis zu Geburtstagen - und sogar dem Weltschokoladentag am 7. Juli. Aber auch Veganer oder Menschen, die sich milchfrei ernähren, müssen nicht leer ausgehen, denn es gibt viele köstliche vegane Schokoladensorten im Angebot.

Milchfreie Milchschokolade wird weitgehend auf die gleiche Weise hergestellt wie normale Schokolade, bis zu dem Punkt, an dem die Milch hinzugefügt wird. Die Kakaobohnen werden ein paar Stunden lang geröstet, bis sie einen reichen Geschmack entwickeln. Die äußeren Schalen werden entfernt, und die inneren Nibs werden gemahlen, um eine Paste zu erhalten, die mit Kakaobutter gemischt werden kann, um den gewünschten Prozentsatz an Schokolade herzustellen. Aromen, Zucker und Milch werden in unterschiedlichen Mengen hinzugefügt, um die gewünschte Schokoladenart zu erhalten. Die Schokolade ist zu diesem Zeitpunkt körnig und muss püriert werden, bis sie glatt ist - das kann Tage dauern! Schließlich wird sie durch Erhitzen und Abkühlen temperiert, bis sie verzehrfertig ist.

Wie also bekommen vegane Chocolatiers den cremigen Milchgeschmack und die Textur in ihre Produkte?

", + summary: + "Der Kalender ist voll von Ausreden für Schokoladenliebhaber, von religiösen Festen bis zu Geburtstagen - und sogar dem Weltschokoladentag am 7. Juli. Aber auch Veganer oder Menschen, die sich milchfrei ernähren, müssen nicht leer ausgehen, denn es gibt viele köstliche vegane Schokoladensorten im Angebot.", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/node_type?resourceVersion=id%3A3", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/revision_uid?resourceVersion=id%3A3", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/revision_uid?resourceVersion=id%3A3", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/uid?resourceVersion=id%3A3", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/uid?resourceVersion=id%3A3", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "6530afc8-5635-45b7-a3d9-920d7e10c39e", + meta: { + drupal_internal__target_id: 8, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/field_media?resourceVersion=id%3A3", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/field_media?resourceVersion=id%3A3", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/dairy-free-and-delicious-milk-chocolate", + }, + ], + }, + }, + { + type: "node--article", + id: "331b2b21-41f9-46bf-a043-4856441ec83f", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f?resourceVersion=id%3A4", + }, + }, + attributes: { + drupal_internal__nid: 4, + drupal_internal__vid: 4, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Das richtige Angebot für den Einkauf im Supermarkt", + created: "2023-01-27T10:01:50+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: + "/articles/das-richtige-angebot-fuer-den-einkauf-im-supermarkt", + pid: 5, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Das wird Sie vielleicht nicht überraschen - aber Ihr Supermarkt ist ein heißes Pflaster für ein Marketing-Chaos, das darauf abzielt, den Gewinn zu steigern und die Verbraucher dazu zu bringen, mehr auszugeben, als sie beabsichtigen. Bei den Tricks, die alle Supermärkte anwenden, handelt es sich manchmal um sinnvolle Maßnahmen, die jeder Einzelhändler ergreifen sollte, um seinen Umsatz zu steigern - aber einige sind vielleicht subtiler und weniger offensichtlich, als Sie vielleicht denken.

Da Artikel und Dokumentarfilme, die das Bewusstsein der Verbraucher schärfen, dieses Thema häufig aufgreifen, ist es wahrscheinlich, dass es den Einzelhändlern immer schwerer fällt, mit den offensichtlichsten Tricks durchzukommen. Wir werden immer versiertere Verbraucher, und es gibt wahrscheinlich nicht viel, was uns entgeht. Aber hier sind ein paar Tricks des Einzelhandels, die Sie beachten sollten, wenn Sie im Supermarkt Ihre wöchentlichen Vorräte aufstocken.

", + format: "ckeditor", + processed: + "

Das wird Sie vielleicht nicht überraschen - aber Ihr Supermarkt ist ein heißes Pflaster für ein Marketing-Chaos, das darauf abzielt, den Gewinn zu steigern und die Verbraucher dazu zu bringen, mehr auszugeben, als sie beabsichtigen. Bei den Tricks, die alle Supermärkte anwenden, handelt es sich manchmal um sinnvolle Maßnahmen, die jeder Einzelhändler ergreifen sollte, um seinen Umsatz zu steigern - aber einige sind vielleicht subtiler und weniger offensichtlich, als Sie vielleicht denken.

Da Artikel und Dokumentarfilme, die das Bewusstsein der Verbraucher schärfen, dieses Thema häufig aufgreifen, ist es wahrscheinlich, dass es den Einzelhändlern immer schwerer fällt, mit den offensichtlichsten Tricks durchzukommen. Wir werden immer versiertere Verbraucher, und es gibt wahrscheinlich nicht viel, was uns entgeht. Aber hier sind ein paar Tricks des Einzelhandels, die Sie beachten sollten, wenn Sie im Supermarkt Ihre wöchentlichen Vorräte aufstocken.

", + summary: + "Das wird Sie vielleicht nicht überraschen - aber Ihr Supermarkt ist ein heißes Pflaster für ein Marketing-Chaos, das darauf abzielt, den Gewinn zu steigern und die Verbraucher dazu zu bringen, mehr auszugeben, als sie beabsichtigen.", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f/relationships/node_type?resourceVersion=id%3A4", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f/revision_uid?resourceVersion=id%3A4", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f/relationships/revision_uid?resourceVersion=id%3A4", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f/uid?resourceVersion=id%3A4", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f/relationships/uid?resourceVersion=id%3A4", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "b45b811e-f377-413e-bc76-7c59f14e6b4a", + meta: { + drupal_internal__target_id: 2, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f/field_media?resourceVersion=id%3A4", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/331b2b21-41f9-46bf-a043-4856441ec83f/relationships/field_media?resourceVersion=id%3A4", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/real-deal-supermarket-savvy-shopping", + }, + ], + }, + }, + { + type: "node--article", + id: "c0250ce7-7b5b-4b41-8557-647c858b29a2", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2?resourceVersion=id%3A5", + }, + }, + attributes: { + drupal_internal__nid: 5, + drupal_internal__vid: 5, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Probieren Sie es aus und bauen Sie Ihre eigenen Kräuter an!", + created: "2023-01-30T08:11:24+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: + "/articles/probieren-sie-es-aus-und-bauen-sie-ihre-eigenen-kraeuter", + pid: 6, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Es gibt nichts Besseres, als einen eigenen Vorrat an frischen Kräutern zu haben, die man beim Kochen sofort verwenden kann. Egal, ob Sie einen großen Garten oder eine kleine Fensterbank in der Küche haben, es gibt immer genug Platz für etwas Selbstgezogenes.

Außenbereich

Minze

Minze ist eine großartige Pflanze, denn sie ist winterhart und kann in fast jedem Boden wachsen. Minze kann wild wachsen, also halten Sie sie in einem Topf, sonst könnte sie sich ausbreiten und Ihren ganzen Garten erobern.

Salbei

Wie die Minze ist auch der Salbei eine sehr wüchsige Pflanze, die sich in Ihrem Garten ausbreitet, wenn Sie es zulassen. Die hocharomatische Salbeipflanze kann in einem Topf oder einem Blumenbeet in gut durchlässigem Boden gepflanzt werden. Die beste Art, das Kraut aufzubewahren, ist, die Blätter an der Sonne zu trocknen und in einem kühlen, dunklen Schrank in einem verschlossenen Behälter aufzubewahren.

Rosmarin

Rosmarinpflanzen wachsen zu schönen Sträuchern heran. Rosmarin lässt sich leicht aus Stecklingen ziehen, aber er verträgt keinen Frost. Stellen Sie daher Töpfe oder gepflanzte Sträucher in der Nähe des Hauses auf, um sie vor der Kälte zu schützen. Er wächst gut in Töpfen, da er trockene Böden mag, kann aber auch gut in der Erde überleben. Wenn Sie den Rosmarin beschneiden, um ihn in eine bessere Form zu bringen, bewahren Sie die Zweige auf und hängen Sie sie kopfüber auf, um das Aroma zu bewahren und sie für Lebensmittel zu verwenden.

", + format: "ckeditor", + processed: + "

Es gibt nichts Besseres, als einen eigenen Vorrat an frischen Kräutern zu haben, die man beim Kochen sofort verwenden kann. Egal, ob Sie einen großen Garten oder eine kleine Fensterbank in der Küche haben, es gibt immer genug Platz für etwas Selbstgezogenes.

Außenbereich

Minze

Minze ist eine großartige Pflanze, denn sie ist winterhart und kann in fast jedem Boden wachsen. Minze kann wild wachsen, also halten Sie sie in einem Topf, sonst könnte sie sich ausbreiten und Ihren ganzen Garten erobern.

Salbei

Wie die Minze ist auch der Salbei eine sehr wüchsige Pflanze, die sich in Ihrem Garten ausbreitet, wenn Sie es zulassen. Die hocharomatische Salbeipflanze kann in einem Topf oder einem Blumenbeet in gut durchlässigem Boden gepflanzt werden. Die beste Art, das Kraut aufzubewahren, ist, die Blätter an der Sonne zu trocknen und in einem kühlen, dunklen Schrank in einem verschlossenen Behälter aufzubewahren.

Rosmarin

Rosmarinpflanzen wachsen zu schönen Sträuchern heran. Rosmarin lässt sich leicht aus Stecklingen ziehen, aber er verträgt keinen Frost. Stellen Sie daher Töpfe oder gepflanzte Sträucher in der Nähe des Hauses auf, um sie vor der Kälte zu schützen. Er wächst gut in Töpfen, da er trockene Böden mag, kann aber auch gut in der Erde überleben. Wenn Sie den Rosmarin beschneiden, um ihn in eine bessere Form zu bringen, bewahren Sie die Zweige auf und hängen Sie sie kopfüber auf, um das Aroma zu bewahren und sie für Lebensmittel zu verwenden.

", + summary: + "Es gibt nichts Besseres, als einen eigenen Vorrat an frischen Kräutern zu haben, die man beim Kochen sofort verwenden kann. Egal, ob Sie einen großen Garten oder eine kleine Fensterbank in der Küche haben, es gibt immer genug Platz für etwas Selbstgezogenes.", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2/relationships/node_type?resourceVersion=id%3A5", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2/revision_uid?resourceVersion=id%3A5", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2/relationships/revision_uid?resourceVersion=id%3A5", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2/uid?resourceVersion=id%3A5", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2/relationships/uid?resourceVersion=id%3A5", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "e8871454-98b9-4421-988b-b63b7e749566", + meta: { + drupal_internal__target_id: 7, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2/field_media?resourceVersion=id%3A5", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/c0250ce7-7b5b-4b41-8557-647c858b29a2/relationships/field_media?resourceVersion=id%3A5", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/give-it-go-and-grow-your-own-herbs", + }, + ], + }, + }, + { + type: "node--article", + id: "708bbe72-76d1-4e20-919c-e2785e0d7e93", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93?resourceVersion=id%3A6", + }, + }, + attributes: { + drupal_internal__nid: 6, + drupal_internal__vid: 6, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Ein Applaus für Karotten", + created: "2023-01-30T08:19:20+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: "/articles/ein-applaus-fuer-karotten", + pid: 7, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + '

Ein Hoch auf die bescheidene Karotte! Dieses süße und gesunde "Alltagsgemüse" hat es in sich. Großartiger Geschmack, fantastische Farbe, und wenn man den alten Geschichten Glauben schenkt, kann sie sogar helfen, im Dunkeln besser zu sehen.

Wer kocht nicht gern mit diesem vielseitigen Wurzelgemüse? Wir braten sie, kochen sie, mischen sie in Suppen und reiben sie in Salate. Die bescheidene Karotte ist eines unserer Lieblingsgemüse und wird schon seit Tausenden von Jahren angebaut. Damals gab es aber eher lila, rote, gelbe oder weiße Karotten und nicht die orangefarbenen, die wir heute so gut kennen.

Was ist also passiert? Seit wann ist Orange die bevorzugte Farbe?

Es waren die Niederländer im 17. Jahrhundert, die die orangefarbene Sorte kultivierten und populär machten, wahrscheinlich wegen ihrer leuchtenden Farbe und ihres höheren Gehalts an Beta-Carotin. Es wird auch vermutet, dass sie als Hommage an Wilhelm von Oranien angebaut wurde, der den Kampf um die Unabhängigkeit der Niederlande anführte.

Aus welchem Grund auch immer, die orangefarbene Sorte hat sich durchgesetzt, aber halten Sie auf Bauernmärkten und in Lebensmittelgeschäften Ausschau nach den "Heritage"-Sorten, deren Mischung aus Violett, Gelb, Orange und Weiß sich besonders gut zum Kochen eignet und als Beilage absolut großartig aussieht.

', + format: "ckeditor", + processed: + '

Ein Hoch auf die bescheidene Karotte! Dieses süße und gesunde "Alltagsgemüse" hat es in sich. Großartiger Geschmack, fantastische Farbe, und wenn man den alten Geschichten Glauben schenkt, kann sie sogar helfen, im Dunkeln besser zu sehen.

Wer kocht nicht gern mit diesem vielseitigen Wurzelgemüse? Wir braten sie, kochen sie, mischen sie in Suppen und reiben sie in Salate. Die bescheidene Karotte ist eines unserer Lieblingsgemüse und wird schon seit Tausenden von Jahren angebaut. Damals gab es aber eher lila, rote, gelbe oder weiße Karotten und nicht die orangefarbenen, die wir heute so gut kennen.

Was ist also passiert? Seit wann ist Orange die bevorzugte Farbe?

Es waren die Niederländer im 17. Jahrhundert, die die orangefarbene Sorte kultivierten und populär machten, wahrscheinlich wegen ihrer leuchtenden Farbe und ihres höheren Gehalts an Beta-Carotin. Es wird auch vermutet, dass sie als Hommage an Wilhelm von Oranien angebaut wurde, der den Kampf um die Unabhängigkeit der Niederlande anführte.

Aus welchem Grund auch immer, die orangefarbene Sorte hat sich durchgesetzt, aber halten Sie auf Bauernmärkten und in Lebensmittelgeschäften Ausschau nach den "Heritage"-Sorten, deren Mischung aus Violett, Gelb, Orange und Weiß sich besonders gut zum Kochen eignet und als Beilage absolut großartig aussieht.

', + summary: + 'Ein Hoch auf die bescheidene Karotte! Dieses süße und gesunde "Alltagsgemüse" hat es in sich. Großartiger Geschmack, fantastische Farbe, und wenn man den alten Geschichten Glauben schenkt, kann sie sogar helfen, im Dunkeln besser zu sehen.', + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93/relationships/node_type?resourceVersion=id%3A6", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93/revision_uid?resourceVersion=id%3A6", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93/relationships/revision_uid?resourceVersion=id%3A6", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93/uid?resourceVersion=id%3A6", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93/relationships/uid?resourceVersion=id%3A6", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "5560b9b2-b088-44e8-9213-18864ee7c8ae", + meta: { + drupal_internal__target_id: 5, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93/field_media?resourceVersion=id%3A6", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/708bbe72-76d1-4e20-919c-e2785e0d7e93/relationships/field_media?resourceVersion=id%3A6", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/lets-hear-it-carrots", + }, + ], + }, + }, + { + type: "node--article", + id: "bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3?resourceVersion=id%3A7", + }, + }, + attributes: { + drupal_internal__nid: 7, + drupal_internal__vid: 7, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Verleihen Sie Ihren Haferflocken das ultimative Makeover", + created: "2023-01-30T08:26:39+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: + "/articles/verleihen-sie-ihren-haferflocken-das-ultimative-makeover", + pid: 8, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Sie sind vegan, glutenfrei, fettarm, ballaststoffreich und können sogar den Cholesterinspiegel senken - aber Haferflocken sind doch langweilig, oder? Bevor Sie die langweiligen Haferflocken in die Tonne kloppen, sollten Sie sich von unseren Topping-Ideen inspirieren lassen, die Ihre Haferflocken in nur wenigen Minuten von fade zu kreativ und köstlich machen.

Ob Haferflocken, Haferbrei, heiße Müsli oder einfach nur Haferflocken - Haferflocken sind auf der ganzen Welt beliebt, aber in letzter Zeit bekommt der einfache Hafer ein neues Gesicht. Vorbei sind die Zeiten der faden Frühstücksschalen mit dickem Brei, denn Haferflocken werden jetzt als köstliche Mahlzeit serviert, die zu jeder Tageszeit passt. Trendige Haferflockenriegel, die man sich selbst zusammenstellen kann, tauchen immer häufiger auf und bieten das ultimative Haferflockenerlebnis. Die Gäste können wählen, ob die Haferflocken mit Milch oder Wasser zubereitet werden sollen, und dann nach Belieben süße, herzhafte oder sogar pikante Beläge hinzufügen.

Klingt toll, nicht wahr? Bevor Sie also die Tür des Schranks mit dem unscheinbaren Glas Haferflocken schließen, sollten Sie einige dieser leckeren Garnier-Ideen ausprobieren, um Ihre eigenen Haferflocken neu zu gestalten.

", + format: "ckeditor", + processed: + "

Sie sind vegan, glutenfrei, fettarm, ballaststoffreich und können sogar den Cholesterinspiegel senken - aber Haferflocken sind doch langweilig, oder? Bevor Sie die langweiligen Haferflocken in die Tonne kloppen, sollten Sie sich von unseren Topping-Ideen inspirieren lassen, die Ihre Haferflocken in nur wenigen Minuten von fade zu kreativ und köstlich machen.

Ob Haferflocken, Haferbrei, heiße Müsli oder einfach nur Haferflocken - Haferflocken sind auf der ganzen Welt beliebt, aber in letzter Zeit bekommt der einfache Hafer ein neues Gesicht. Vorbei sind die Zeiten der faden Frühstücksschalen mit dickem Brei, denn Haferflocken werden jetzt als köstliche Mahlzeit serviert, die zu jeder Tageszeit passt. Trendige Haferflockenriegel, die man sich selbst zusammenstellen kann, tauchen immer häufiger auf und bieten das ultimative Haferflockenerlebnis. Die Gäste können wählen, ob die Haferflocken mit Milch oder Wasser zubereitet werden sollen, und dann nach Belieben süße, herzhafte oder sogar pikante Beläge hinzufügen.

Klingt toll, nicht wahr? Bevor Sie also die Tür des Schranks mit dem unscheinbaren Glas Haferflocken schließen, sollten Sie einige dieser leckeren Garnier-Ideen ausprobieren, um Ihre eigenen Haferflocken neu zu gestalten.

", + summary: + "Sie sind vegan, glutenfrei, fettarm, ballaststoffreich und können sogar den Cholesterinspiegel senken - aber Haferflocken sind doch langweilig, oder? ", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3/relationships/node_type?resourceVersion=id%3A7", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3/revision_uid?resourceVersion=id%3A7", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3/relationships/revision_uid?resourceVersion=id%3A7", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3/uid?resourceVersion=id%3A7", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3/relationships/uid?resourceVersion=id%3A7", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "f1af4452-15a1-46ec-9b7e-871212a0ee4c", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3/field_media?resourceVersion=id%3A7", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/bc3ae841-d9fe-4f95-b1cd-bb5ac2ace4d3/relationships/field_media?resourceVersion=id%3A7", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/give-your-oatmeal-ultimate-makeover", + }, + ], + }, + }, + { + type: "node--article", + id: "7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad?resourceVersion=id%3A8", + }, + }, + attributes: { + drupal_internal__nid: 8, + drupal_internal__vid: 8, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Überspringen Sie die Spirituosen mit köstlichen Mocktails", + created: "2023-01-30T08:24:15+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: + "/articles/ueberspringen-sie-die-spirituosen-mit-koestlichen-mocktails", + pid: 9, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Feiern Sie eine Cocktailparty? Warum dann nicht etwas ebenso Besonderes für diejenigen auftischen, die keinen Alkohol trinken, aber trotzdem mitfeiern wollen? Denn was wäre eine Cocktailparty ohne die tollen Gläser mit gemischten Früchten, die bunten Farben und natürlich die kleinen Schirmchen? Tragen Sie Ihren Teil zum Umweltschutz bei, indem Sie auf Plastikstrohhalme verzichten und sich stattdessen ein paar tolle Alternativen aus Glas, Metall oder sogar Bambus besorgen. Vergessen Sie nicht die klassischen Cocktailgläser und die coolen Becher, die diese Rezepte erst so richtig zum Leben erwecken.

Also, schnappen Sie sich den Cocktailmixer, lassen Sie die Spirituosen weg und schütteln Sie diese köstlich erfrischenden Mocktails, die weder Ihnen noch Ihren Gästen an Geschmack oder Stil mangeln werden.

Mango-Köstlich

Dieser köstliche Drink hat einen raffinierten Geschmack, der ideal für Erwachsene ist, und die Farbe passt perfekt zu einem spätsommerlichen BBQ.

Anleitung

Schütteln Sie ein paar Gurkenscheiben und etwas Honig in einem Cocktailshaker gut durch. Einen Schuss Mangopüree und den Saft einer Limette hinzufügen. Etwas Eis hinzufügen und kräftig schütteln. Durch ein Sieb in ein schickes Glas gießen und mit Ginger Beer auffüllen. Ein paar Limettenscheiben, und schon kann es losgehen.

", + format: "ckeditor", + processed: + "

Feiern Sie eine Cocktailparty? Warum dann nicht etwas ebenso Besonderes für diejenigen auftischen, die keinen Alkohol trinken, aber trotzdem mitfeiern wollen? Denn was wäre eine Cocktailparty ohne die tollen Gläser mit gemischten Früchten, die bunten Farben und natürlich die kleinen Schirmchen? Tragen Sie Ihren Teil zum Umweltschutz bei, indem Sie auf Plastikstrohhalme verzichten und sich stattdessen ein paar tolle Alternativen aus Glas, Metall oder sogar Bambus besorgen. Vergessen Sie nicht die klassischen Cocktailgläser und die coolen Becher, die diese Rezepte erst so richtig zum Leben erwecken.

Also, schnappen Sie sich den Cocktailmixer, lassen Sie die Spirituosen weg und schütteln Sie diese köstlich erfrischenden Mocktails, die weder Ihnen noch Ihren Gästen an Geschmack oder Stil mangeln werden.

Mango-Köstlich

Dieser köstliche Drink hat einen raffinierten Geschmack, der ideal für Erwachsene ist, und die Farbe passt perfekt zu einem spätsommerlichen BBQ.

Anleitung

Schütteln Sie ein paar Gurkenscheiben und etwas Honig in einem Cocktailshaker gut durch. Einen Schuss Mangopüree und den Saft einer Limette hinzufügen. Etwas Eis hinzufügen und kräftig schütteln. Durch ein Sieb in ein schickes Glas gießen und mit Ginger Beer auffüllen. Ein paar Limettenscheiben, und schon kann es losgehen.

", + summary: + "Feiern Sie eine Cocktailparty? Warum dann nicht etwas ebenso Besonderes für diejenigen auftischen, die keinen Alkohol trinken, aber trotzdem mitfeiern wollen? ", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad/relationships/node_type?resourceVersion=id%3A8", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad/revision_uid?resourceVersion=id%3A8", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad/relationships/revision_uid?resourceVersion=id%3A8", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad/uid?resourceVersion=id%3A8", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad/relationships/uid?resourceVersion=id%3A8", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "de14673c-55ac-41ff-823d-3047e9ce2e72", + meta: { + drupal_internal__target_id: 3, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad/field_media?resourceVersion=id%3A8", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/7ba6c26b-b6b6-4fdf-8566-c9dc1d2133ad/relationships/field_media?resourceVersion=id%3A8", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/skip-spirits-delicious-mocktails", + }, + ], + }, + }, + { + type: "node--article", + id: "5e462a38-de37-4769-add2-998db91fd839", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839?resourceVersion=id%3A9", + }, + }, + attributes: { + drupal_internal__nid: 9, + drupal_internal__vid: 9, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Der Umami-Führer für unsere Lieblingspilze", + created: "2023-01-30T08:17:34+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: "/articles/der-umami-fuehrer-fuer-unsere-lieblingspilze", + pid: 10, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Wir sind der Meinung, dass Pilze eine der besten Zutaten sind, mit denen man kochen kann. Es gibt viele essbare Sorten, jede mit ihrer eigenen, unverwechselbaren Form, Größe und Geschmack. Und wer würde bei so kuriosen Namen wie Pfifferling, Zigeunerpilz, Füllhorn oder Waldhenne nicht gerne mehr über das Kochen mit dem mächtigen Pilz erfahren?

Eines der besten Dinge an Pilzen ist ihre Vielseitigkeit. Sie können gebraten, geröstet, gegrillt, gedünstet oder sogar in der Mikrowelle gegart werden. Und sie können als Hauptzutat für ein Gericht serviert oder einfach als Teil der Mischung hinzugefügt werden. Das macht Pilze zu einer idealen Wahl für die Zubereitung absolut köstlicher vegetarischer Gerichte.

Werfen wir also einen Blick auf einige unserer Lieblingspilzsorten. Vielleicht haben Sie noch nie mit ihnen gekocht, aber das sollte Sie nicht abschrecken. Mit ihren köstlichen, unverwechselbaren Aromen können Sie Suppen, Vorspeisen und Soßen ganz einfach verwandeln und erstaunliche Nudel- oder Pfannengerichte kreieren.

Probieren Sie die lieblichen Shiitake. Sie werden in der asiatischen Küche verwendet und können getrocknet und rehydriert gekauft werden, um einen kräftigen, tiefen Geschmack zu erhalten. Oder Sie kaufen ihn frisch und fügen ihn zu Suppen und Pfannengerichten hinzu. Dieser Pilz hat nicht nur einen intensiven Geschmack, sondern sieht auch schön aus. Das tiefe Braun und die glatten Formen geben Ihrem Gericht eine besondere Textur. In getrockneter Form und rehydriert sind sie die perfekte Ergänzung für eine tiefe und würzige Brühe für ein Risotto.

Der prächtige sonnige Pfifferling mit seinem gelben Fruchtfleisch hat einen fruchtigen Geschmack - aber es ist erwähnenswert, dass es viele Nachahmer gibt, und man sollte darauf achten, dass man die richtigen isst. Diese sehen in einem Omelett oder einer asiatischen Suppe großartig aus, um die Gelbtöne zu ergänzen.

Die braune Morchel bietet einen fleischigen und unverwechselbaren Geschmack, und Sie werden wahrscheinlich lieben, wie außergewöhnlich sie in einer Mahlzeit aussieht. Die Morchel ist ein beliebter Pilz im Frühjahr, wenn ihr Angebot besonders groß ist.

Eine Delikatesse ist der Enoki mit seinen winzigen weißen Köpfen, die in Büscheln wachsen. Sie können sogar roh in Salaten verzehrt werden. Schließlich können Sie den beliebten Austernpilz wählen. Sie heißen so, weil sie nicht wie ein Pilz aussehen, sondern den Innereien einer Auster ähneln, und ihr süßer Geschmack ist köstlich.

", + format: "ckeditor", + processed: + "

Wir sind der Meinung, dass Pilze eine der besten Zutaten sind, mit denen man kochen kann. Es gibt viele essbare Sorten, jede mit ihrer eigenen, unverwechselbaren Form, Größe und Geschmack. Und wer würde bei so kuriosen Namen wie Pfifferling, Zigeunerpilz, Füllhorn oder Waldhenne nicht gerne mehr über das Kochen mit dem mächtigen Pilz erfahren?

Eines der besten Dinge an Pilzen ist ihre Vielseitigkeit. Sie können gebraten, geröstet, gegrillt, gedünstet oder sogar in der Mikrowelle gegart werden. Und sie können als Hauptzutat für ein Gericht serviert oder einfach als Teil der Mischung hinzugefügt werden. Das macht Pilze zu einer idealen Wahl für die Zubereitung absolut köstlicher vegetarischer Gerichte.

Werfen wir also einen Blick auf einige unserer Lieblingspilzsorten. Vielleicht haben Sie noch nie mit ihnen gekocht, aber das sollte Sie nicht abschrecken. Mit ihren köstlichen, unverwechselbaren Aromen können Sie Suppen, Vorspeisen und Soßen ganz einfach verwandeln und erstaunliche Nudel- oder Pfannengerichte kreieren.

Probieren Sie die lieblichen Shiitake. Sie werden in der asiatischen Küche verwendet und können getrocknet und rehydriert gekauft werden, um einen kräftigen, tiefen Geschmack zu erhalten. Oder Sie kaufen ihn frisch und fügen ihn zu Suppen und Pfannengerichten hinzu. Dieser Pilz hat nicht nur einen intensiven Geschmack, sondern sieht auch schön aus. Das tiefe Braun und die glatten Formen geben Ihrem Gericht eine besondere Textur. In getrockneter Form und rehydriert sind sie die perfekte Ergänzung für eine tiefe und würzige Brühe für ein Risotto.

Der prächtige sonnige Pfifferling mit seinem gelben Fruchtfleisch hat einen fruchtigen Geschmack - aber es ist erwähnenswert, dass es viele Nachahmer gibt, und man sollte darauf achten, dass man die richtigen isst. Diese sehen in einem Omelett oder einer asiatischen Suppe großartig aus, um die Gelbtöne zu ergänzen.

Die braune Morchel bietet einen fleischigen und unverwechselbaren Geschmack, und Sie werden wahrscheinlich lieben, wie außergewöhnlich sie in einer Mahlzeit aussieht. Die Morchel ist ein beliebter Pilz im Frühjahr, wenn ihr Angebot besonders groß ist.

Eine Delikatesse ist der Enoki mit seinen winzigen weißen Köpfen, die in Büscheln wachsen. Sie können sogar roh in Salaten verzehrt werden. Schließlich können Sie den beliebten Austernpilz wählen. Sie heißen so, weil sie nicht wie ein Pilz aussehen, sondern den Innereien einer Auster ähneln, und ihr süßer Geschmack ist köstlich.

", + summary: + "Wir sind der Meinung, dass Pilze eine der besten Zutaten sind, mit denen man kochen kann. Es gibt viele essbare Sorten, jede mit ihrer eigenen, unverwechselbaren Form, Größe und Geschmack. ", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839/relationships/node_type?resourceVersion=id%3A9", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839/revision_uid?resourceVersion=id%3A9", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839/relationships/revision_uid?resourceVersion=id%3A9", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839/uid?resourceVersion=id%3A9", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839/relationships/uid?resourceVersion=id%3A9", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "8f8895dc-d6e4-469f-8a89-f6729cdfed0f", + meta: { + drupal_internal__target_id: 4, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839/field_media?resourceVersion=id%3A9", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/5e462a38-de37-4769-add2-998db91fd839/relationships/field_media?resourceVersion=id%3A9", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/umami-guide-our-favorite-mushrooms", + }, + ], + }, + }, + { + type: "node--article", + id: "79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30?resourceVersion=id%3A10", + }, + }, + attributes: { + drupal_internal__nid: 10, + drupal_internal__vid: 10, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Missgeschicke beim Backen - unsere Tipps zur Fehlerbehebung", + created: "2023-01-30T08:21:41+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: + "/articles/missgeschicke-beim-backen-unsere-tipps-zur-fehlerbehebung", + pid: 11, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Sie halten sich an das Rezept, wiegen alle Zutaten ab, verwenden die richtige Ofentemperatur und nehmen sich Zeit - und trotzdem wird Ihr Gebäck am Ende matschig, geht nicht auf oder schmeckt einfach nur furchtbar. Wir haben eine Liste mit den frustrierendsten Backproblemen und den Techniken, die Sie anwenden können, um sie zu vermeiden, zusammengestellt.

Ihr Kuchen ist nicht aufgegangen

Öffnen Sie auf keinen Fall die Ofentür mitten in der Backzeit. Die Hitze zischt heraus und zerstört die chemische Reaktion, die in Ihrem Kuchen stattfindet. Ihr Backtriebmittel braucht die Hitze, um aktiviert zu werden, und Sie könnten es abtöten.

Ihr Kuchen ist zäh und hart

Wenn Ihr heller Biskuit die Konsistenz eines Reservereifens hat, haben Sie Ihren Teig möglicherweise zu stark gemischt. Behalten Sie die Leichtigkeit Ihres Kuchenteigs bei, indem Sie die Zutaten vorsichtig und behutsam unterheben, aber nur so weit, bis sie gerade vermischt sind. Wenn Sie zu viel unterheben, tritt das Gluten im Mehl aus und Sie backen eher Brot als Kuchen.

", + format: "ckeditor", + processed: + "

Sie halten sich an das Rezept, wiegen alle Zutaten ab, verwenden die richtige Ofentemperatur und nehmen sich Zeit - und trotzdem wird Ihr Gebäck am Ende matschig, geht nicht auf oder schmeckt einfach nur furchtbar. Wir haben eine Liste mit den frustrierendsten Backproblemen und den Techniken, die Sie anwenden können, um sie zu vermeiden, zusammengestellt.

Ihr Kuchen ist nicht aufgegangen

Öffnen Sie auf keinen Fall die Ofentür mitten in der Backzeit. Die Hitze zischt heraus und zerstört die chemische Reaktion, die in Ihrem Kuchen stattfindet. Ihr Backtriebmittel braucht die Hitze, um aktiviert zu werden, und Sie könnten es abtöten.

Ihr Kuchen ist zäh und hart

Wenn Ihr heller Biskuit die Konsistenz eines Reservereifens hat, haben Sie Ihren Teig möglicherweise zu stark gemischt. Behalten Sie die Leichtigkeit Ihres Kuchenteigs bei, indem Sie die Zutaten vorsichtig und behutsam unterheben, aber nur so weit, bis sie gerade vermischt sind. Wenn Sie zu viel unterheben, tritt das Gluten im Mehl aus und Sie backen eher Brot als Kuchen.

", + summary: + "Man hält sich an das Rezept, wiegt alle Zutaten ab, wählt die richtige Ofentemperatur und nimmt sich Zeit, und trotzdem wird das Backwerk am Ende matschig, geht nicht auf oder schmeckt einfach nur furchtbar.", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30/relationships/node_type?resourceVersion=id%3A10", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30/revision_uid?resourceVersion=id%3A10", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30/relationships/revision_uid?resourceVersion=id%3A10", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30/uid?resourceVersion=id%3A10", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30/relationships/uid?resourceVersion=id%3A10", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "e1a3b027-8983-44a7-bbea-403898ba0260", + meta: { + drupal_internal__target_id: 6, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30/field_media?resourceVersion=id%3A10", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/79cb4f78-4ae0-4db1-b4e7-5fa9758b9a30/relationships/field_media?resourceVersion=id%3A10", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/baking-mishaps-our-troubleshooting-tips", + }, + ], + }, + }, + ], + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article", + }, + }, +} as const; + +export default JsonApiArticleCollection; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_article_detail.ts b/packages/jsonapi/tests/fixtures/jsonapi_article_detail.ts new file mode 100644 index 0000000..ed96586 --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_article_detail.ts @@ -0,0 +1,128 @@ +const JsonApiArticleDetail = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + data: { + type: "node--article", + id: "5f5f5f5f-5f5f-5f5f-5f5f-5f5f5f5f5f5f", + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/5f5f5f5f-5f5f-5f5f-5f5f-5f5f5f5f5f5f", + }, + }, + attributes: { + drupal_internal__nid: 3, + drupal_internal__vid: 3, + langcode: "de", + revision_timestamp: "2023-02-23T11:10:08+00:00", + revision_log: null, + status: true, + title: "Milchfreie und köstliche Milchschokolade", + created: "2023-01-27T09:38:39+00:00", + changed: "2023-02-23T11:10:08+00:00", + promote: true, + sticky: false, + default_langcode: true, + revision_translation_affected: true, + path: { + alias: "/articles/milchfreie-und-koestliche-milchschokolade", + pid: 4, + langcode: "de", + }, + content_translation_source: "und", + content_translation_outdated: false, + body: { + value: + "

Der Kalender ist voll von Ausreden für Schokoladenliebhaber, von religiösen Festen bis zu Geburtstagen - und sogar dem Weltschokoladentag am 7. Juli. Aber auch Veganer oder Menschen, die sich milchfrei ernähren, müssen nicht leer ausgehen, denn es gibt viele köstliche vegane Schokoladensorten im Angebot.

Milchfreie Milchschokolade wird weitgehend auf die gleiche Weise hergestellt wie normale Schokolade, bis zu dem Punkt, an dem die Milch hinzugefügt wird. Die Kakaobohnen werden ein paar Stunden lang geröstet, bis sie einen reichen Geschmack entwickeln. Die äußeren Schalen werden entfernt, und die inneren Nibs werden gemahlen, um eine Paste zu erhalten, die mit Kakaobutter gemischt werden kann, um den gewünschten Prozentsatz an Schokolade herzustellen. Aromen, Zucker und Milch werden in unterschiedlichen Mengen hinzugefügt, um die gewünschte Schokoladenart zu erhalten. Die Schokolade ist zu diesem Zeitpunkt körnig und muss püriert werden, bis sie glatt ist - das kann Tage dauern! Schließlich wird sie durch Erhitzen und Abkühlen temperiert, bis sie verzehrfertig ist.

Wie also bekommen vegane Chocolatiers den cremigen Milchgeschmack und die Textur in ihre Produkte?

", + format: "ckeditor", + processed: + "

Der Kalender ist voll von Ausreden für Schokoladenliebhaber, von religiösen Festen bis zu Geburtstagen - und sogar dem Weltschokoladentag am 7. Juli. Aber auch Veganer oder Menschen, die sich milchfrei ernähren, müssen nicht leer ausgehen, denn es gibt viele köstliche vegane Schokoladensorten im Angebot.

Milchfreie Milchschokolade wird weitgehend auf die gleiche Weise hergestellt wie normale Schokolade, bis zu dem Punkt, an dem die Milch hinzugefügt wird. Die Kakaobohnen werden ein paar Stunden lang geröstet, bis sie einen reichen Geschmack entwickeln. Die äußeren Schalen werden entfernt, und die inneren Nibs werden gemahlen, um eine Paste zu erhalten, die mit Kakaobutter gemischt werden kann, um den gewünschten Prozentsatz an Schokolade herzustellen. Aromen, Zucker und Milch werden in unterschiedlichen Mengen hinzugefügt, um die gewünschte Schokoladenart zu erhalten. Die Schokolade ist zu diesem Zeitpunkt körnig und muss püriert werden, bis sie glatt ist - das kann Tage dauern! Schließlich wird sie durch Erhitzen und Abkühlen temperiert, bis sie verzehrfertig ist.

Wie also bekommen vegane Chocolatiers den cremigen Milchgeschmack und die Textur in ihre Produkte?

", + summary: + "Der Kalender ist voll von Ausreden für Schokoladenliebhaber, von religiösen Festen bis zu Geburtstagen - und sogar dem Weltschokoladentag am 7. Juli. Aber auch Veganer oder Menschen, die sich milchfrei ernähren, müssen nicht leer ausgehen, denn es gibt viele köstliche vegane Schokoladensorten im Angebot.", + }, + }, + relationships: { + node_type: { + data: null, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/node_type?resourceVersion=id%3A3", + }, + }, + }, + revision_uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/revision_uid?resourceVersion=id%3A3", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/revision_uid?resourceVersion=id%3A3", + }, + }, + }, + uid: { + data: { + type: "user--user", + id: "f0d79a17-a6b1-4c34-ba1b-ae298826f68a", + meta: { + drupal_internal__target_id: 1, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/uid?resourceVersion=id%3A3", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/uid?resourceVersion=id%3A3", + }, + }, + }, + field_media: { + data: { + type: "media--image", + id: "6530afc8-5635-45b7-a3d9-920d7e10c39e", + meta: { + drupal_internal__target_id: 8, + }, + }, + links: { + related: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/field_media?resourceVersion=id%3A3", + }, + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e/relationships/field_media?resourceVersion=id%3A3", + }, + }, + }, + }, + meta: { + localeInfo: [ + { + langcode: "en", + path: "/articles/dairy-free-and-delicious-milk-chocolate", + }, + ], + }, + }, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/article/58e198f6-41af-48b0-b889-596adcb9622e?resourceVersion=id%3A3", + }, + }, +} as const; + +export default JsonApiArticleDetail; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_file_upload.ts b/packages/jsonapi/tests/fixtures/jsonapi_file_upload.ts new file mode 100644 index 0000000..35e2ded --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_file_upload.ts @@ -0,0 +1,42 @@ +const JsonApiFileUpload = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + data: { + type: "file--file", + id: "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + links: { + self: { + href: "https://my-drupal.com/jsonapi/file/file/a1b2c3d4-e5f6-7890-abcd-ef1234567890", + }, + }, + attributes: { + drupal_internal__fid: 123, + langcode: "en", + filename: "test-image.jpg", + uri: { + value: "public://2024-01/test-image.jpg", + url: "/sites/default/files/2024-01/test-image.jpg", + }, + filemime: "image/jpeg", + filesize: 12345, + status: true, + created: "2024-01-15T10:30:00+00:00", + changed: "2024-01-15T10:30:00+00:00", + }, + }, + links: { + self: { + href: "https://my-drupal.com/jsonapi/node/with-file/5f5f5f5f-5f5f-5f5f-5f5f-5f5f5f5f5f5f/field_image", + }, + }, +} as const; + +export default JsonApiFileUpload; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_include_error.ts b/packages/jsonapi/tests/fixtures/jsonapi_include_error.ts new file mode 100644 index 0000000..41a3296 --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_include_error.ts @@ -0,0 +1,30 @@ +const JsonApiIncludeError = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + errors: [ + { + title: "Bad Request", + status: "400", + detail: + "`wrong-field` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media.", + links: { + via: { + href: "https://my-drupal.com/jsonapi/node/article/5f5f5f5f-5f5f-5f5f-5f5f-5f5f5f5f5f5f", + }, + info: { + href: "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1", + }, + }, + }, + ], +} as const; + +export default JsonApiIncludeError; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_index.ts b/packages/jsonapi/tests/fixtures/jsonapi_index.ts new file mode 100644 index 0000000..333d3e1 --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_index.ts @@ -0,0 +1,35 @@ +const JsonApiIndex = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + data: [], + links: { + "file--file": { + href: "https://my-drupal.com/jsonapi/file/file", + }, + "media--image": { + href: "https://my-drupal.com/jsonapi/media/image", + }, + "node--article": { + href: "https://my-drupal.com/jsonapi/node/article", + }, + "node--page": { + href: "https://my-drupal.com/jsonapi/node/page", + }, + self: { + href: "https://my-drupal.com/jsonapi", + }, + "user--user": { + href: "https://my-drupal.com/jsonapi/user/user", + }, + }, +} as const; + +export default JsonApiIndex; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_index_error.ts b/packages/jsonapi/tests/fixtures/jsonapi_index_error.ts new file mode 100644 index 0000000..1684181 --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_index_error.ts @@ -0,0 +1,20 @@ +const JsonApiIndexError = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + errros: [ + { + title: "Error", + status: "500", + }, + ], +} as const; + +export default JsonApiIndexError; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_menu_items.ts b/packages/jsonapi/tests/fixtures/jsonapi_menu_items.ts new file mode 100644 index 0000000..08e57bc --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_menu_items.ts @@ -0,0 +1,46 @@ +const JsonApiMenuItems = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + data: [ + { + type: "menu_link_content--menu_link_content", + id: "menu_link_content:1c6d3476-61b1-4b7e-a580-6fa63bdac5d1", + attributes: { + description: null, + enabled: true, + expanded: false, + menu_name: "my_menu", + meta: { + entity_id: "2", + }, + options: [], + parent: "", + provider: "menu_link_content", + route: { + name: "entity.node.canonical", + parameters: { + node: "14", + }, + }, + title: "Test-Page", + url: "/test-page", + weight: 0, + }, + }, + ], + links: { + self: { + href: "https://my-drupal.com/jsonapi/menu_items/my_menu", + }, + }, +} as const; + +export default JsonApiMenuItems; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_menu_items_error.ts b/packages/jsonapi/tests/fixtures/jsonapi_menu_items_error.ts new file mode 100644 index 0000000..20958fa --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_menu_items_error.ts @@ -0,0 +1,30 @@ +const JsonApiMenuItemsError = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + errors: [ + { + title: "Not Found", + status: "404", + detail: + 'The "menu" parameter was not converted for the path "/jsonapi/menu_items/{menu}" (route name: "jsonapi_menu_items.menu")', + links: { + via: { + href: "https://my-drupal.com/jsonapi/menu_items/non_existant", + }, + info: { + href: "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5", + }, + }, + }, + ], +} as const; + +export default JsonApiMenuItemsError; diff --git a/packages/jsonapi/tests/fixtures/jsonapi_multiple_errors.ts b/packages/jsonapi/tests/fixtures/jsonapi_multiple_errors.ts new file mode 100644 index 0000000..4716a1a --- /dev/null +++ b/packages/jsonapi/tests/fixtures/jsonapi_multiple_errors.ts @@ -0,0 +1,46 @@ +const JsonApiErrorResponse = { + jsonapi: { + version: "1.0", + meta: { + links: { + self: { + href: "http://jsonapi.org/format/1.0/", + }, + }, + }, + }, + errors: [ + { + title: "Bad Request", + status: "400", + detail: + "`wrong-field` is not a valid relationship field name. Possible values: node_type, revision_uid, uid, menu_link, field_media.", + links: { + via: { + href: "https://my-drupal.com/jsonapi/node/article/5f5f5f5f-5f5f-5f5f-5f5f-5f5f5f5f5f5f", + }, + info: { + href: "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1", + }, + }, + }, + { + title: "Unprocessable Entity", + status: "422", + detail: "field_firstname: Dieser Wert sollte nicht leer sein.", + source: { + pointer: "/data/attributes/field_firstname", + }, + }, + { + title: "Unprocessable Entity", + status: "422", + detail: "field_lastname: Dieser Wert sollte nicht leer sein.", + source: { + pointer: "/data/attributes/field_lastname", + }, + }, + ], +} as const; + +export default JsonApiErrorResponse; diff --git a/packages/jsonapi/tests/menu.test.ts b/packages/jsonapi/tests/menu.test.ts index 1737d69..95f2c0c 100644 --- a/packages/jsonapi/tests/menu.test.ts +++ b/packages/jsonapi/tests/menu.test.ts @@ -4,8 +4,8 @@ import { setupServer } from "msw/node"; import { Drupalkit } from "@drupal-kit/core"; import { DrupalkitJsonApi, DrupalkitJsonApiError } from "../src/index.js"; -import JsonApiMenuItemsError from "./fixtures/jsonapi_menu_items_error.json" with { type: "json" }; -import JsonApiMenuItems from "./fixtures/jsonapi_menu_items.json" with { type: "json" }; +import JsonApiMenuItemsError from "./fixtures/jsonapi_menu_items_error.js"; +import JsonApiMenuItems from "./fixtures/jsonapi_menu_items.js"; const BASE_URL = "https://my-drupal.com"; diff --git a/packages/jsonapi/tests/resources.test.ts b/packages/jsonapi/tests/resources.test.ts index 0816135..c2e4912 100644 --- a/packages/jsonapi/tests/resources.test.ts +++ b/packages/jsonapi/tests/resources.test.ts @@ -5,12 +5,12 @@ import { setupServer } from "msw/node"; import { Drupalkit } from "@drupal-kit/core"; import { DrupalkitJsonApi, DrupalkitJsonApiError } from "../src/index.js"; -import JsonApiArticleCollection from "./fixtures/jsonapi_article_collection.json" with { type: "json" }; -import JsonApiArticleDetail from "./fixtures/jsonapi_article_detail.json" with { type: "json" }; -import JsonApiFileUpload from "./fixtures/jsonapi_file_upload.json" with { type: "json" }; -import JsonApiIncludeError from "./fixtures/jsonapi_include_error.json" with { type: "json" }; -import JsonApiIndexError from "./fixtures/jsonapi_index_error.json" with { type: "json" }; -import JsonApiIndex from "./fixtures/jsonapi_index.json" with { type: "json" }; +import JsonApiArticleCollection from "./fixtures/jsonapi_article_collection.js"; +import JsonApiArticleDetail from "./fixtures/jsonapi_article_detail.js"; +import JsonApiFileUpload from "./fixtures/jsonapi_file_upload.js"; +import JsonApiIncludeError from "./fixtures/jsonapi_include_error.js"; +import JsonApiIndexError from "./fixtures/jsonapi_index_error.js"; +import JsonApiIndex from "./fixtures/jsonapi_index.js"; import "./types.js"; diff --git a/packages/jsonapi/tests/snapshots/DrupalkitJsonApiError.test.ts.snap b/packages/jsonapi/tests/snapshots/DrupalkitJsonApiError.test.ts.snap index 127ea88..37a94f7 100644 Binary files a/packages/jsonapi/tests/snapshots/DrupalkitJsonApiError.test.ts.snap and b/packages/jsonapi/tests/snapshots/DrupalkitJsonApiError.test.ts.snap differ diff --git a/packages/jsonapi/tests/snapshots/menu.test.ts.snap b/packages/jsonapi/tests/snapshots/menu.test.ts.snap index aefed0a..51a6c89 100644 Binary files a/packages/jsonapi/tests/snapshots/menu.test.ts.snap and b/packages/jsonapi/tests/snapshots/menu.test.ts.snap differ diff --git a/packages/jsonapi/tests/snapshots/resources.test.ts.snap b/packages/jsonapi/tests/snapshots/resources.test.ts.snap index 872f6fa..dae1adc 100644 Binary files a/packages/jsonapi/tests/snapshots/resources.test.ts.snap and b/packages/jsonapi/tests/snapshots/resources.test.ts.snap differ diff --git a/packages/simple-oauth-auth-code/tests/DrupalkitSimpleOauthAuthCode.test.ts b/packages/simple-oauth-auth-code/tests/DrupalkitSimpleOauthAuthCode.test.ts index abe7e65..961af42 100644 --- a/packages/simple-oauth-auth-code/tests/DrupalkitSimpleOauthAuthCode.test.ts +++ b/packages/simple-oauth-auth-code/tests/DrupalkitSimpleOauthAuthCode.test.ts @@ -4,7 +4,7 @@ import { setupServer } from "msw/node"; import { Drupalkit, DrupalkitOptions } from "@drupal-kit/core"; import { DrupalkitSimpleOauthAuthCode } from "../src/index.js"; -import AuthCodeResponse from "./fixtures/auth_code_response.json" with { type: "json" }; +import AuthCodeResponse from "./fixtures/auth_code_response.js"; const BASE_URL = "https://my-drupal.com"; diff --git a/packages/simple-oauth-auth-code/tests/fixtures/auth_code_response.ts b/packages/simple-oauth-auth-code/tests/fixtures/auth_code_response.ts new file mode 100644 index 0000000..1039d25 --- /dev/null +++ b/packages/simple-oauth-auth-code/tests/fixtures/auth_code_response.ts @@ -0,0 +1,5 @@ +const AuthCodeResponse = { + code: "def502004ab5bdf2b7f027b6e81aaa4f6fcc689500c6c572b740a585f1625a713f18f239a7c485897e23ea58f1f5f181a8ac728b71bacc32cd79ba9ef2a4c21bc82eefe0a1f777b5b77ebbe8bd450d4b8858430afe085cfc5c43052aadf180219dce466cebcd8fb6313cad1e02bdec206ce47e1e9e986413c781f020e6ddc924858371ae3598a285a830d67491398e12d043709f67e26c5fa1a01f56892bd2658fb068e169c3100421085fcaa0215740eb7cbbdb0fdb4cbf82e016a365711973476486bb4eec471b16ea0bbffadd9f95df88230e9851d69a20f26c862468b3f2ee23f03c88e63611157d10c844ad6c2caba1b6336da30ac08f2c870fef2218bd3935a344a78ffd99da0bd7115a55d3cfbce96e6b0ff6368639364d6d6f522abe9cc4e956728e116c1326c435d717e860916180e1798517c3aa", +} as const; + +export default AuthCodeResponse; diff --git a/packages/simple-oauth/tests/DrupalkitSimpleOauth.test.ts b/packages/simple-oauth/tests/DrupalkitSimpleOauth.test.ts index 46791f6..b4bbe81 100644 --- a/packages/simple-oauth/tests/DrupalkitSimpleOauth.test.ts +++ b/packages/simple-oauth/tests/DrupalkitSimpleOauth.test.ts @@ -7,9 +7,9 @@ import { DrupalkitSimpleOauth, DrupalkitSimpleOauthError, } from "../src/index.js"; -import ErrorResponse from "./fixtures/error_response.json" with { type: "json" }; -import TokenResponse from "./fixtures/token_response.json" with { type: "json" }; -import UserInfoResponse from "./fixtures/userinfo_response.json" with { type: "json" }; +import ErrorResponse from "./fixtures/error_response.js"; +import TokenResponse from "./fixtures/token_response.js"; +import UserInfoResponse from "./fixtures/userinfo_response.js"; const BASE_URL = "https://my-drupal.com"; diff --git a/packages/simple-oauth/tests/fixtures/error_response.ts b/packages/simple-oauth/tests/fixtures/error_response.ts new file mode 100644 index 0000000..bbebc2b --- /dev/null +++ b/packages/simple-oauth/tests/fixtures/error_response.ts @@ -0,0 +1,10 @@ +const ErrorResponse = { + error: "invalid_request", + error_description: + "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.", + hint: "Authorization code has been revoked", + message: + "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.", +} as const; + +export default ErrorResponse; diff --git a/packages/simple-oauth/tests/fixtures/token_response.ts b/packages/simple-oauth/tests/fixtures/token_response.ts new file mode 100644 index 0000000..7d74600 --- /dev/null +++ b/packages/simple-oauth/tests/fixtures/token_response.ts @@ -0,0 +1,10 @@ +const TokenResponse = { + token_type: "Bearer", + expires_in: 300, + access_token: + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjZlN2ZiNmJiODNlNzZkOWIxOGU2MjAxZmZhYmY3YWFlZTE2OTZiOTMxZGFjOGQ0YTI4ODY0ZjJlZTI1ODA1MGYyZDAwZDE5NDYwNDAxMjY2In0.eyJhdWQiOiJtdm5wb2dJWU9zSngyQWw4YUdaemtIeTYzU3JJYVVvLU16d0pBSzhWU0lNIiwianRpIjoiNmU3ZmI2YmI4M2U3NmQ5YjE4ZTYyMDFmZmFiZjdhYWVlMTY5NmI5MzFkYWM4ZDRhMjg4NjRmMmVlMjU4MDUwZjJkMDBkMTk0NjA0MDEyNjYiLCJpYXQiOjE2Nzg4NjYzODksIm5iZiI6MTY3ODg2NjM4OSwiZXhwIjoxNjc4ODY2Njg5Ljk2MjIzMzEsInNjb3BlIjpbImFsbG93X2FsbCJdLCJzdWIiOiI0NSJ9.A6Ur4pciXtNSEl8mWEjW1DUll-zR4wSXjnS4FMnDHIV_mWclAQxgHuUexSYWnDASCpKC9TohqtSa2aPB_ymP2JhSaz9FTtYklFR2CmYz01HgZ83GGisNhvbdCx67CaWfluVS1fT-PFmut6fAUhbDWcQ7pt3sAZR4Rc6-iCWWe-lx5fnrli5S_egzuqJGj-NkoDg9s3yU6yvsPT8dObN-5Bl2qfU9VA21PYuWo89e-rm56mLexiuGUtPZHOa1hXGQ3WPEu3qlThtxaFgPyN4mFA0ql7JLV4Md2DrMcU8U598epro41KH9K6OvxOKbGFkQupXE-lODN0f3E4O_6Mr0Xk7YNtAna117fQEuoeAusJb024aZ-pxKNN2xjFUbesa6XvCNnkNKgDCaXWL4RWngD7lftYncsH6JoocqRgMmdzZGlf1A4fZtqaFs_DdC_JjjX2eyZZqVLv-wuJ04iGm3BXblUfBjaVx96tlhF30rfih9Cyu3psCzzoE7JLbqeAL6Vn6hQdZmZOyV_36-pOWEdZopy5tY2pZAmUAuUJFG40VEAGzh3dCuSVmni16f0OgQDS_ZpV0xCwEIc_UpkemY33EPVGU8zWWtztELVY6mAzEsR8xZwmtL8x4HadkU4wKoemos1KwwDM26tLR_x6K3H38aMl-M1PuCp2xkQg1gF_s", + refresh_token: + "def50200ca9707211ac5eee68c5acf9a84f169e0655580b3cfbadf479465d3cb26923cafdc827f459429b6445168c81903df56d2005df9212b63b712158a4b3e59db82c894bc9c88571e44dc8366b9951c5e11799b6b18fbb1eca8774986a6a161a8c4bebd6c604958bd123a3daef60adc2dd9e7acbf1c6003a5d1357a7c325da9b5123a8db4b1eed60abe7697019833359029d824599c799d5cd44ff4a21b3dc1f63b1ab96b958b77d91c2fde6c856762c47228cade0a2847c6c52abdd40ba960e1a53be4e5096489e73ecf143050c33c8ed63bd49d73ac56bf323fa970e77ba85faadf5896311cef5e2f3496f2a9851b48041d3b66227438f347e41726ac914467fd4f671b949f30c597a251e31b54811ab134f937f0df60c4b99819eb621fb3d110f07005354ea459e64b05d4642fa784d002b900047f63d8f55ca7cbbd4b1398e0ca1a6f2b76a1ec43a21072c4c3ba46846e7ae643682a7d8f4fa601de9febc854dd7f799323fccd4c4e94b5351022a6acbcb91462063707df028f9af39936ffe3a2a6127f5ce39b31260ff11c21fb43a8cd91fe4dff75", +} as const; + +export default TokenResponse; diff --git a/packages/simple-oauth/tests/fixtures/userinfo_response.ts b/packages/simple-oauth/tests/fixtures/userinfo_response.ts new file mode 100644 index 0000000..dab5874 --- /dev/null +++ b/packages/simple-oauth/tests/fixtures/userinfo_response.ts @@ -0,0 +1,13 @@ +const UserInfoResponse = { + sub: "45", + name: "Marcelo.Ziemann61", + preferred_username: "Marcelo.Ziemann61", + email: "Patience_Larkin75@example.org", + email_verified: true, + locale: "de", + zoneinfo: null, + updated_at: "1678809645", + profile: "https://my-drupal.com/users/marceloziemann61", +} as const; + +export default UserInfoResponse; diff --git a/packages/user-api/tests/DrupalkitUserApi.test.ts b/packages/user-api/tests/DrupalkitUserApi.test.ts index 4762743..8175b85 100644 --- a/packages/user-api/tests/DrupalkitUserApi.test.ts +++ b/packages/user-api/tests/DrupalkitUserApi.test.ts @@ -4,7 +4,7 @@ import { setupServer } from "msw/node"; import { Drupalkit, DrupalkitOptions } from "@drupal-kit/core"; import { DrupalkitUserApi } from "../src/index.js"; -import UserResponse from "./fixtures/user_response.json" assert { type: "json" }; +import UserResponse from "./fixtures/user_response.js"; const BASE_URL = "https://my-drupal.com"; diff --git a/packages/user-api/tests/fixtures/user_response.ts b/packages/user-api/tests/fixtures/user_response.ts new file mode 100644 index 0000000..7fa03f7 --- /dev/null +++ b/packages/user-api/tests/fixtures/user_response.ts @@ -0,0 +1,77 @@ +const UserResponse = { + uid: [ + { + value: 47, + }, + ], + uuid: [ + { + value: "e04a5e5a-96a6-4427-a037-d925e929b802", + }, + ], + langcode: [ + { + value: "de", + }, + ], + name: [ + { + value: "Chaim54", + }, + ], + created: [ + { + value: "2023-03-16T08:28:17+00:00", + format: "Y-m-d\\TH:i:sP", + }, + ], + changed: [ + { + value: "2023-03-16T08:28:17+00:00", + format: "Y-m-d\\TH:i:sP", + }, + ], + default_langcode: [ + { + value: true, + }, + ], + path: [ + { + alias: null, + pid: null, + langcode: "de", + }, + ], + content_translation_source: [ + { + value: "und", + }, + ], + content_translation_outdated: [ + { + value: false, + }, + ], + content_translation_uid: [ + { + target_id: 0, + target_type: "user", + target_uuid: "5f93bd07-c1a4-4c92-a41c-c4bec9694c05", + url: "/user/0", + }, + ], + content_translation_status: [ + { + value: true, + }, + ], + content_translation_created: [ + { + value: "2023-03-16T08:28:17+00:00", + format: "Y-m-d\\TH:i:sP", + }, + ], +} as const; + +export default UserResponse;