mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
packages
This commit is contained in:
16
packages/appwrite/test/appwriteClient.ts
Normal file
16
packages/appwrite/test/appwriteClient.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { Client as Appwrite, Account } from "appwrite";
|
||||
|
||||
const APPWRITE_URL = "https://cloud.appwrite.io/v1";
|
||||
const APPWRITE_PROJECT = "6697687d002cbd31ba6b";
|
||||
|
||||
const client = new Appwrite();
|
||||
|
||||
client.setEndpoint(APPWRITE_URL).setProject(APPWRITE_PROJECT);
|
||||
const account = new Account(client);
|
||||
|
||||
client.headers = {
|
||||
...client.headers,
|
||||
"Accept-Encoding": "identity",
|
||||
};
|
||||
|
||||
export { client, account };
|
||||
119
packages/appwrite/test/create/index.mock.ts
Normal file
119
packages/appwrite/test/create/index.mock.ts
Normal file
@@ -0,0 +1,119 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.post("/v1/databases/default/collections/blog_posts/documents", {
|
||||
documentId: "unique()",
|
||||
data: { title: "Lorem Ipsum" },
|
||||
permissions: ['read("any")', 'write("any")'],
|
||||
})
|
||||
.reply(
|
||||
201,
|
||||
{
|
||||
title: "Lorem Ipsum",
|
||||
$id: "669e6a4e201863f43c2e",
|
||||
$permissions: ['read("any")', 'update("any")', 'delete("any")'],
|
||||
$createdAt: "2024-07-22T14:18:54.134+00:00",
|
||||
$updatedAt: "2024-07-22T14:18:54.134+00:00",
|
||||
$tenant: "169888",
|
||||
status: "published",
|
||||
content: null,
|
||||
images: null,
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"333",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 14:18:54 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.08755087852478",
|
||||
"X-Ratelimit-Limit",
|
||||
"120",
|
||||
"X-Ratelimit-Remaining",
|
||||
"119",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721657940",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.post("/v1/databases/default/collections/blog_posts/documents", {
|
||||
documentId: "lorem_ipsum",
|
||||
data: { title: "Lorem Ipsum" },
|
||||
permissions: ['read("any")', 'write("any")'],
|
||||
})
|
||||
.reply(
|
||||
201,
|
||||
{
|
||||
title: "Lorem Ipsum",
|
||||
$id: "lorem_ipsum",
|
||||
$permissions: ['read("any")', 'update("any")', 'delete("any")'],
|
||||
$createdAt: "2024-07-22T14:18:54.584+00:00",
|
||||
$updatedAt: "2024-07-22T14:18:54.584+00:00",
|
||||
$tenant: "169888",
|
||||
status: "published",
|
||||
content: null,
|
||||
images: null,
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"324",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 14:18:54 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.059834003448486",
|
||||
"X-Ratelimit-Limit",
|
||||
"120",
|
||||
"X-Ratelimit-Remaining",
|
||||
"118",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721657940",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
38
packages/appwrite/test/create/index.spec.ts
Normal file
38
packages/appwrite/test/create/index.spec.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("create", () => {
|
||||
it("correct response with meta", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).create({
|
||||
resource: "blog_posts",
|
||||
variables: {
|
||||
title: "Lorem Ipsum",
|
||||
},
|
||||
meta: {
|
||||
documentId: "unique()",
|
||||
},
|
||||
});
|
||||
|
||||
expect(data.title).toEqual("Lorem Ipsum");
|
||||
expect(data.id).toBeTruthy();
|
||||
});
|
||||
it("should respect meta.documentId", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).create({
|
||||
resource: "blog_posts",
|
||||
variables: {
|
||||
title: "Lorem Ipsum",
|
||||
},
|
||||
meta: {
|
||||
documentId: "lorem_ipsum",
|
||||
},
|
||||
});
|
||||
|
||||
expect(data.title).toEqual("Lorem Ipsum");
|
||||
expect(data.id).toEqual("lorem_ipsum");
|
||||
});
|
||||
});
|
||||
119
packages/appwrite/test/createMany/index.mock.ts
Normal file
119
packages/appwrite/test/createMany/index.mock.ts
Normal file
@@ -0,0 +1,119 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.post("/v1/databases/default/collections/blog_posts/documents", {
|
||||
documentId: "unique()",
|
||||
data: { title: "Lorem Ipsum 1" },
|
||||
permissions: ['read("any")', 'write("any")'],
|
||||
})
|
||||
.reply(
|
||||
201,
|
||||
{
|
||||
title: "Lorem Ipsum 1",
|
||||
$id: "669e6aedd28ee989d36a",
|
||||
$permissions: ['read("any")', 'update("any")', 'delete("any")'],
|
||||
$createdAt: "2024-07-22T14:21:33.864+00:00",
|
||||
$updatedAt: "2024-07-22T14:21:33.864+00:00",
|
||||
$tenant: "169888",
|
||||
status: "published",
|
||||
content: null,
|
||||
images: null,
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"335",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 14:21:33 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.066951036453247",
|
||||
"X-Ratelimit-Limit",
|
||||
"120",
|
||||
"X-Ratelimit-Remaining",
|
||||
"119",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721658120",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.post("/v1/databases/default/collections/blog_posts/documents", {
|
||||
documentId: "unique()",
|
||||
data: { title: "Lorem Ipsum 2" },
|
||||
permissions: ['read("any")', 'write("any")'],
|
||||
})
|
||||
.reply(
|
||||
201,
|
||||
{
|
||||
title: "Lorem Ipsum 2",
|
||||
$id: "669e6aede00a831a58c3",
|
||||
$permissions: ['read("any")', 'update("any")', 'delete("any")'],
|
||||
$createdAt: "2024-07-22T14:21:33.918+00:00",
|
||||
$updatedAt: "2024-07-22T14:21:33.918+00:00",
|
||||
$tenant: "169888",
|
||||
status: "published",
|
||||
content: null,
|
||||
images: null,
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"335",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 14:21:33 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.063269853591919",
|
||||
"X-Ratelimit-Limit",
|
||||
"120",
|
||||
"X-Ratelimit-Remaining",
|
||||
"118",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721658120",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
29
packages/appwrite/test/createMany/index.spec.ts
Normal file
29
packages/appwrite/test/createMany/index.spec.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("createMany", () => {
|
||||
it("correct response", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).createMany!({
|
||||
resource: "blog_posts",
|
||||
variables: [
|
||||
{
|
||||
title: "Lorem Ipsum 1",
|
||||
},
|
||||
{
|
||||
title: "Lorem Ipsum 2",
|
||||
},
|
||||
],
|
||||
meta: {
|
||||
documentId: "unique()",
|
||||
},
|
||||
});
|
||||
|
||||
expect(data[0].title).toEqual("Lorem Ipsum 1");
|
||||
expect(data[0].id).toBeTruthy();
|
||||
expect(data[1].title).toEqual("Lorem Ipsum 2");
|
||||
expect(data[1].id).toBeTruthy();
|
||||
});
|
||||
});
|
||||
21
packages/appwrite/test/custom/index.spec.ts
Normal file
21
packages/appwrite/test/custom/index.spec.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
|
||||
describe("custom", () => {
|
||||
it("throws error when called", async () => {
|
||||
expect.assertions(2);
|
||||
|
||||
try {
|
||||
await dataProvider(client).custom?.({
|
||||
url: "test",
|
||||
method: "get",
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err).toBeInstanceOf(Error);
|
||||
expect(err).toHaveProperty(
|
||||
"message",
|
||||
"'custom' method is not implemented on refine-appwrite data provider.",
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
81
packages/appwrite/test/deleteMany/index.mock.ts
Normal file
81
packages/appwrite/test/deleteMany/index.mock.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.delete(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f100329300407a",
|
||||
{},
|
||||
)
|
||||
.reply(204, "", [
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Type",
|
||||
"text/html",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:49:17 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.17089891433716",
|
||||
"X-Ratelimit-Limit",
|
||||
"60",
|
||||
"X-Ratelimit-Remaining",
|
||||
"59",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721656200",
|
||||
"Connection",
|
||||
"close",
|
||||
]);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.delete(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f1002d284f333d",
|
||||
{},
|
||||
)
|
||||
.reply(204, "", [
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Type",
|
||||
"text/html",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:49:17 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.13990688323975",
|
||||
"X-Ratelimit-Limit",
|
||||
"60",
|
||||
"X-Ratelimit-Remaining",
|
||||
"58",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721656200",
|
||||
"Connection",
|
||||
"close",
|
||||
]);
|
||||
17
packages/appwrite/test/deleteMany/index.spec.ts
Normal file
17
packages/appwrite/test/deleteMany/index.spec.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { dataProvider } from "../../src";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("deleteMany", () => {
|
||||
it("correct response", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).deleteMany!({
|
||||
resource: "blog_posts",
|
||||
ids: ["669e49f100329300407a", "669e49f1002d284f333d"],
|
||||
});
|
||||
|
||||
expect(data[0].id).toEqual("669e49f100329300407a");
|
||||
expect(data[1].id).toEqual("669e49f1002d284f333d");
|
||||
});
|
||||
});
|
||||
41
packages/appwrite/test/deleteOne/index.mock.ts
Normal file
41
packages/appwrite/test/deleteOne/index.mock.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.delete(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f2000da6a5f6a6",
|
||||
{},
|
||||
)
|
||||
.reply(204, "", [
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Type",
|
||||
"text/html",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:48:27 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.090221881866455",
|
||||
"X-Ratelimit-Limit",
|
||||
"60",
|
||||
"X-Ratelimit-Remaining",
|
||||
"59",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721656140",
|
||||
"Connection",
|
||||
"close",
|
||||
]);
|
||||
16
packages/appwrite/test/deleteOne/index.spec.ts
Normal file
16
packages/appwrite/test/deleteOne/index.spec.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("deleteOne", () => {
|
||||
it("correct response with meta", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).deleteOne({
|
||||
resource: "blog_posts",
|
||||
id: "669e49f2000da6a5f6a6",
|
||||
});
|
||||
|
||||
expect(data.id).toEqual("669e49f2000da6a5f6a6");
|
||||
});
|
||||
});
|
||||
18
packages/appwrite/test/getApiUrl/index.spec.ts
Normal file
18
packages/appwrite/test/getApiUrl/index.spec.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
|
||||
describe("getApiUrl", () => {
|
||||
it("throws error when called", async () => {
|
||||
expect.assertions(2);
|
||||
|
||||
try {
|
||||
await dataProvider(client).getApiUrl();
|
||||
} catch (err) {
|
||||
expect(err).toBeInstanceOf(Error);
|
||||
expect(err).toHaveProperty(
|
||||
"message",
|
||||
"'getApiUrl' method is not implemented on refine-appwrite data provider.",
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
984
packages/appwrite/test/getList/index.mock.ts
Normal file
984
packages/appwrite/test/getList/index.mock.ts
Normal file
@@ -0,0 +1,984 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.get("/v1/databases/default/collections/blog_posts/documents")
|
||||
.query({
|
||||
"queries%5B0%5D":
|
||||
"%7B%22method%22%3A%22offset%22%2C%22values%22%3A%5B0%5D%7D",
|
||||
"queries%5B1%5D":
|
||||
"%7B%22method%22%3A%22limit%22%2C%22values%22%3A%5B10%5D%7D",
|
||||
})
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
total: 100,
|
||||
documents: [
|
||||
{
|
||||
title: "Deserunt Aut Atque",
|
||||
content:
|
||||
"In dolorem consequatur. Quia tempore ad. Doloremque ut consectetur. Voluptatem quod cupiditate voluptas natus repellendus excepturi. Consequuntur et doloremque nesciunt aliquam cumque eum vel consequuntur repudiandae. Dolorem quod nobis quia assumenda voluptatibus perspiciatis et rerum. Occaecati dolor sit. A eius autem dicta voluptas quam quisquam dolores provident. Architecto nostrum accusantium fugiat. Repellat suscipit quos et.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e49e5000fa125c6b6",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:37.287+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:37.287+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Automotive & Industrial",
|
||||
$id: "automotive-and-industrial",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:37.230+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:37.230+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Quidem Nihil Pariatur",
|
||||
content:
|
||||
"Quidem aut in dolores ad tempora ducimus omnis tenetur sapiente. Ad facilis quas dolores et veniam. Eos doloribus minima illum sunt libero dicta illum esse. Corporis temporibus vel maiores corrupti iusto accusantium beatae minus laborum. Reprehenderit et voluptatum culpa incidunt rerum dolor. Natus ea eaque minus recusandae quasi accusantium. Numquam in rem dolore commodi voluptas occaecati iste ipsam. Dolor voluptatem consectetur ut nulla consequatur nihil corporis aut incidunt. Aut tempore officia debitis ea consequatur qui aut perspiciatis. Voluptas totam quod nobis sit sit reiciendis modi recusandae.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49e500173fd35177",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:37.879+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:37.879+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Toys & Games",
|
||||
$id: "toys-and-games",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:36.691+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:36.691+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Ratione Est Ipsa",
|
||||
content:
|
||||
"In nostrum recusandae quam ut animi enim distinctio ut. Ex qui in illo atque. Voluptatem suscipit animi harum sunt sit. Quo voluptatem soluta. Illum ipsa et rem dignissimos odit sed aut. Debitis earum sunt dolores sit. Dolore corrupti earum repellendus non possimus ullam voluptatem fuga. Ut sit recusandae quidem laboriosam aut est ea. Repudiandae et nobis. Est officiis perspiciatis aspernatur minima qui qui voluptate soluta.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e49e60000655a9d94",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:38.200+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:38.200+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Music & Instruments",
|
||||
$id: "music-and-instruments",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.957+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.957+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Qui Sed Voluptatem",
|
||||
content:
|
||||
"Voluptatibus ut molestias molestiae laudantium in quia odio praesentium. Tempora dolores velit blanditiis sed facilis quae. Iure voluptas sit provident accusantium autem. Enim commodi velit facere tempora. Dolor distinctio aut. Ipsa modi provident fugiat modi ut ab voluptate accusamus. Fuga quia doloremque veniam tempore ut. Qui accusamus aut et. Officia officia fuga aut doloremque voluptas nulla. Magni maxime minus maxime.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49e6001214bcfbcf",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:38.318+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:38.318+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Health & Fitness",
|
||||
$id: "health-and-fitness",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:36.074+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:36.074+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Est Sint Qui",
|
||||
content:
|
||||
"Quod repudiandae atque dolores. Cupiditate qui temporibus quia distinctio architecto provident dolorem explicabo et. Excepturi vel nihil cupiditate sit placeat aspernatur aperiam. Cumque ab incidunt autem suscipit delectus nostrum voluptatibus velit ratione. Quam fugit consequatur aut adipisci id et esse ea natus. Tempora doloremque esse in aliquam eveniet libero sed animi blanditiis. Soluta est laborum tempora a hic labore error. Est occaecati velit voluptas ea eos quas qui corporis voluptatem. Aliquid est non temporibus ex. Ut facere et quasi minus iusto consequatur.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49e60018a7e172cf",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:38.459+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:38.459+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Automotive & Industrial",
|
||||
$id: "automotive-and-industrial",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:37.230+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:37.230+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Dolores Laboriosam Pariatur",
|
||||
content:
|
||||
"Ea ea harum dicta. Ut sed voluptatem esse deserunt nostrum. Laboriosam ratione et aut eos pariatur sint. Minus dolorem porro molestias iure est excepturi illo. Consequuntur non atque error ab ut ea minima et expedita. Et ratione rerum earum esse. Et velit cupiditate facere molestias accusantium et qui. Omnis aliquid quia. Est vel eaque quas dolores quaerat nobis quae nulla et. Aut qui architecto.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e49e60021f5d646e4",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:38.573+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:38.573+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Books & Magazines",
|
||||
$id: "books-and-magazines",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.879+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.879+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Officia Sit Officia",
|
||||
content:
|
||||
"Veniam ducimus aliquid sunt eum porro eius beatae a quos. Nisi eveniet sunt. Rerum repellendus rerum est ipsa incidunt quo nihil enim. Voluptatem cumque quo natus nesciunt. Neque aspernatur laboriosam expedita ut. Vitae incidunt facere in eum sint fugit vero est. Est iste aut nostrum qui. Enim iste ut aut tempora hic sed. Omnis dolores et et doloremque. Impedit doloremque voluptatem qui et voluptas illo quam cumque suscipit.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e49e60027c99f28fe",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:38.691+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:38.691+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Office & Supplies",
|
||||
$id: "office-and-supplies",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Expedita Aliquid Et",
|
||||
content:
|
||||
"Quis rerum et cum. Totam error consequatur. Dolor sint sed unde possimus nobis. Eaque quam libero recusandae ut id fugiat quo dolorum non. Vitae architecto doloremque ullam eveniet architecto voluptatem aut asperiores dolorum. Distinctio molestias nihil totam voluptatum. In repudiandae illum nihil. Magni ut voluptatem suscipit totam perspiciatis sint id quia. Deleniti nulla necessitatibus. Modi earum tempore aut cumque.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49e6003165a195d8",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:38.881+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:38.881+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Laptops & Desktops",
|
||||
$id: "laptops-and-desktops",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.387+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.387+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Consequuntur Molestias Voluptatem",
|
||||
content:
|
||||
"Perspiciatis id possimus. Et sit mollitia deleniti ratione odit est voluptatum natus. Reprehenderit facere culpa ullam in dolorem saepe autem. Aliquam sint dolorum soluta eum dolorum autem nesciunt aperiam. Provident possimus at corporis fugit veritatis at sint. Non porro velit vel eum mollitia totam molestias aliquam sapiente. Eos expedita laborum ullam quasi maxime expedita in excepturi. Non eum sunt est qui est quas eum. Modi voluptas mollitia explicabo autem cupiditate architecto et et autem. Incidunt rerum placeat dolor.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49e6003b3f48abe0",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:38.989+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:38.989+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Beauty & Personal Care",
|
||||
$id: "beauty-and-personal-care",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:37.123+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:37.123+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Laudantium Sint Magni",
|
||||
content:
|
||||
"Repellendus libero provident. Omnis libero soluta. Sed et quas sed ab ducimus delectus beatae. Eum quos maxime dolores in reprehenderit et rerum temporibus et. Rem numquam iste sit. Velit eaque repellat enim maiores incidunt iusto. Autem id laboriosam quo. Quasi nam aut. Minus quo quia incidunt iure et laudantium. Cupiditate dignissimos perferendis.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49e70004410fc802",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:39.131+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:39.131+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Clothing & Accessories",
|
||||
$id: "clothing-and-accessories",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:36.135+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:36.135+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
],
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"10052",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:40:32 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.37289714813232",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.get("/v1/databases/default/collections/blog_posts/documents")
|
||||
.query({
|
||||
"queries%5B0%5D":
|
||||
"%7B%22method%22%3A%22offset%22%2C%22values%22%3A%5B0%5D%7D",
|
||||
"queries%5B1%5D":
|
||||
"%7B%22method%22%3A%22limit%22%2C%22values%22%3A%5B10%5D%7D",
|
||||
"queries%5B2%5D":
|
||||
"%7B%22method%22%3A%22orderAsc%22%2C%22attribute%22%3A%22title%22%7D",
|
||||
})
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
total: 100,
|
||||
documents: [
|
||||
{
|
||||
title: "Aliquid Beatae Sunt",
|
||||
content:
|
||||
"Fugiat quis nobis ut nesciunt est. Amet non numquam magni illo quae recusandae. Numquam esse accusantium. Minima facilis est. Harum eaque voluptas et exercitationem sit incidunt non. Voluptas alias atque nulla blanditiis et ipsa optio et hic. Perferendis voluptatem repellat aspernatur reprehenderit impedit illo sed. Saepe autem vero sit eum culpa molestiae aperiam illo. Inventore provident earum qui repellendus nesciunt odit ea aspernatur. Modi ut ut sed saepe rem necessitatibus.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e49ea002a8e6aa70c",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:42.746+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:42.746+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Office & Supplies",
|
||||
$id: "office-and-supplies",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Aliquid Et Veritatis",
|
||||
content:
|
||||
"Consequuntur delectus similique nostrum illum commodi dolorem voluptates sequi qui. Et ut omnis quasi qui. Ut ut earum sit possimus odit. Distinctio blanditiis autem placeat laudantium quo deserunt dicta natus recusandae. Ex officiis ratione qui sunt quis sint voluptatem ad commodi. Minus neque sint adipisci dolorem. Autem iure consequatur sed quis. Alias voluptatibus perferendis sunt temporibus. Quis optio similique est officia. Veritatis laudantium architecto officia mollitia delectus.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49eb00061b1efdba",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:43.168+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:43.168+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Books & Magazines",
|
||||
$id: "books-and-magazines",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.879+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.879+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Amet Ipsam Voluptas",
|
||||
content:
|
||||
"Velit repellendus praesentium commodi. Rerum non voluptate. Dolores aut aspernatur temporibus earum asperiores et quaerat sunt. Excepturi provident sint corporis fuga sunt est. Voluptatum velit suscipit quis. Sed atque et. Exercitationem dolorum laboriosam optio doloremque autem illum debitis voluptas. Atque est reiciendis similique dolorem sint. Sed et esse. Quam pariatur est est.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e49e90034c0030aaa",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:41.887+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:41.887+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Sports",
|
||||
$id: "sports",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:37.174+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:37.174+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Architecto Velit Assumenda",
|
||||
content:
|
||||
"Facilis natus dicta. Pariatur architecto non. Nisi vero ea cupiditate. Dicta cum veritatis soluta. Voluptas eos officiis dignissimos. Rerum nulla nemo. Corrupti eos eaque. Maxime aut vel excepturi aut quo. Hic eum excepturi laborum cum voluptates et voluptatem ipsa. Molestiae nobis est.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49ec002d869383bf",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:44.778+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:44.778+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Travel & Outdoor",
|
||||
$id: "travel-and-outdoor",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:36.207+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:36.207+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Asperiores Qui Placeat",
|
||||
content:
|
||||
"Nulla consequatur ipsam consequatur consequatur dignissimos vel quae adipisci. Exercitationem laborum natus velit. Iusto sequi in rem eos aut officiis dicta. Vel voluptate asperiores deserunt et aut itaque molestias et. Consequatur omnis eos unde occaecati voluptatem sint repudiandae. Cumque quisquam enim tenetur. Et delectus qui et libero exercitationem. Aspernatur enim ipsum est. Dolore labore odit ipsum magni est. Porro provident dolore et cum facere.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49f100095c697fe3",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:49.276+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:49.276+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Audio & Video",
|
||||
$id: "audio-and-video",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.579+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.579+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Asperiores Repellat Voluptatibus",
|
||||
content:
|
||||
"In eos qui sed velit dolore beatae officia nisi aut. Ad aperiam voluptatem sit corrupti soluta ducimus modi. Maxime consequatur delectus debitis. Sed itaque ut quam voluptatem nisi molestias maxime porro. Ipsa et magnam possimus iusto est sapiente omnis consectetur. Et hic ab qui cupiditate vel eum quis reprehenderit quia. Omnis qui sunt quae aut est deserunt occaecati. Aperiam nam omnis exercitationem reprehenderit sit quas. Minus quidem officia commodi et iure dolores consectetur molestiae qui. Inventore quia error.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e49f10025b19f6fa0",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:49.666+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:49.666+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Travel & Outdoor",
|
||||
$id: "travel-and-outdoor",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:36.207+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:36.207+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "At Et Consequatur",
|
||||
content:
|
||||
"Debitis quos non magni quas ea sapiente. Ducimus nemo deleniti. Asperiores enim natus est dolor itaque aut totam molestiae. Dignissimos provident aut aliquid. Voluptas neque amet odio pariatur exercitationem sint consequatur eum odio. Impedit omnis impedit. Possimus velit dolor cupiditate error dolor aliquid ipsa. Explicabo veniam illum commodi ut. Aut et eius et autem atque debitis velit. Placeat maxime doloribus omnis quia sequi voluptates magni.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49f10003504b94d8",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:49.098+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:49.098+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Office & Supplies",
|
||||
$id: "office-and-supplies",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "At Quasi Adipisci",
|
||||
content:
|
||||
"Excepturi vel eos eum autem officia ut beatae atque iure. Et consequatur doloribus reprehenderit qui illum ea dolorum minima nihil. Harum velit eum occaecati nisi. Eaque porro libero. Ad et recusandae. Fugiat quo praesentium quaerat voluptate officiis omnis. A facilis sed dolor fuga libero labore distinctio mollitia assumenda. Autem nesciunt animi alias fugit autem quae. Provident et labore ut illo molestias et in. Vero iste facilis unde ea ea qui.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49ec0033f1a3ef3b",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:44.868+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:44.868+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Laptops & Desktops",
|
||||
$id: "laptops-and-desktops",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.387+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.387+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Aut Cum Beatae",
|
||||
content:
|
||||
"Rerum recusandae in reiciendis sed officia at voluptates quaerat. Voluptas odio in magnam laudantium veniam inventore est quam eos. Laboriosam laborum impedit temporibus deleniti consequuntur. Debitis architecto deserunt maiores perferendis voluptatibus facilis sunt. Nemo omnis architecto ea ab illum nobis voluptatem et porro. Quos est occaecati quidem consectetur. Vitae ut optio ut praesentium. Porro qui voluptas. Delectus repellendus eligendi. Quisquam quia necessitatibus delectus id sapiente explicabo quisquam blanditiis.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49f2003b4ed88818",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:51.069+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:51.069+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Gaming",
|
||||
$id: "gaming",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.687+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.687+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Autem Non Nihil",
|
||||
content:
|
||||
"Numquam dolorem eos. Esse et molestiae eligendi qui eveniet. Perferendis ea nisi odit facere dolorem iste. Eveniet cumque sequi odio dolor. Facere doloremque qui. Illum ut vitae iusto ut aut sed dicta dolorem exercitationem. Odio facilis consequatur autem ut laboriosam saepe cum ipsam blanditiis. Temporibus asperiores architecto. Eius qui aut odit blanditiis consectetur. Eum molestias laboriosam.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49f1001482f72774",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:49.399+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:49.399+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Music & Instruments",
|
||||
$id: "music-and-instruments",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.957+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.957+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
],
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"9809",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:40:33 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.15060997009277",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.get("/v1/databases/default/collections/blog_posts/documents")
|
||||
.query({
|
||||
"queries%5B0%5D":
|
||||
"%7B%22method%22%3A%22equal%22%2C%22attribute%22%3A%22%24id%22%2C%22values%22%3A%5B%22669e9e56001c66a18865%22%5D%7D",
|
||||
"queries%5B1%5D":
|
||||
"%7B%22method%22%3A%22offset%22%2C%22values%22%3A%5B0%5D%7D",
|
||||
"queries%5B2%5D":
|
||||
"%7B%22method%22%3A%22limit%22%2C%22values%22%3A%5B10%5D%7D",
|
||||
})
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
total: 1,
|
||||
documents: [
|
||||
{
|
||||
title: "Debitis Quo Fuga",
|
||||
content:
|
||||
"Aut accusamus repellat libero. Ipsum facere sit illum magni et repudiandae at veritatis. Nobis est nemo eum excepturi voluptatem quo cumque vel cupiditate. Incidunt nobis tempora dolorem sed dolorem in. Debitis voluptatem adipisci quo ullam velit velit eaque magnam alias. Aut quis rerum quasi voluptatem repellendus. Maiores quod vel. Eos optio voluptatum. Dicta nulla provident fugiat quia nisi aliquam aliquam hic maxime. Ex sequi sit veniam beatae voluptas exercitationem maiores.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e9e56001c66a18865",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:54.553+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:54.553+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Music & Instruments",
|
||||
$id: "music-and-instruments",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.447+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.447+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"access-control-allow-credentials": "true",
|
||||
"access-control-allow-headers":
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE",
|
||||
"access-control-allow-origin": "https://localhost",
|
||||
"access-control-expose-headers": "X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"content-length": "1048",
|
||||
"content-type": "application/json; charset=UTF-8",
|
||||
date: "Mon, 22 Jul 2024 18:59:24 GMT",
|
||||
server: "Appwrite",
|
||||
"strict-transport-security": "max-age=10886400",
|
||||
"x-content-type-options": "nosniff",
|
||||
"x-debug-fallback": "true",
|
||||
"x-debug-speed": "0.031460046768188",
|
||||
},
|
||||
);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.get("/v1/databases/default/collections/blog_posts/documents")
|
||||
.query({
|
||||
"queries%5B0%5D":
|
||||
"%7B%22method%22%3A%22offset%22%2C%22values%22%3A%5B0%5D%7D",
|
||||
"queries%5B1%5D":
|
||||
"%7B%22method%22%3A%22limit%22%2C%22values%22%3A%5B10%5D%7D",
|
||||
"queries%5B2%5D":
|
||||
"%7B%22method%22%3A%22orderAsc%22%2C%22attribute%22%3A%22%24id%22%7D",
|
||||
"queries%5B3%5D":
|
||||
"%7B%22method%22%3A%22orderAsc%22%2C%22attribute%22%3A%22title%22%7D",
|
||||
})
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
total: 100,
|
||||
documents: [
|
||||
{
|
||||
title: "Deserunt Aut Atque",
|
||||
content:
|
||||
"In dolorem consequatur. Quia tempore ad. Doloremque ut consectetur. Voluptatem quod cupiditate voluptas natus repellendus excepturi. Consequuntur et doloremque nesciunt aliquam cumque eum vel consequuntur repudiandae. Dolorem quod nobis quia assumenda voluptatibus perspiciatis et rerum. Occaecati dolor sit. A eius autem dicta voluptas quam quisquam dolores provident. Architecto nostrum accusantium fugiat. Repellat suscipit quos et.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e9e470013d3b23a0b",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.359+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.359+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Automotive & Industrial",
|
||||
$id: "automotive-and-industrial",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.297+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.297+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Quidem Nihil Pariatur",
|
||||
content:
|
||||
"Quidem aut in dolores ad tempora ducimus omnis tenetur sapiente. Ad facilis quas dolores et veniam. Eos doloribus minima illum sunt libero dicta illum esse. Corporis temporibus vel maiores corrupti iusto accusantium beatae minus laborum. Reprehenderit et voluptatum culpa incidunt rerum dolor. Natus ea eaque minus recusandae quasi accusantium. Numquam in rem dolore commodi voluptas occaecati iste ipsam. Dolor voluptatem consectetur ut nulla consequatur nihil corporis aut incidunt. Aut tempore officia debitis ea consequatur qui aut perspiciatis. Voluptas totam quod nobis sit sit reiciendis modi recusandae.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e9e47001a4702e027",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.472+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.472+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Toys & Games",
|
||||
$id: "toys-and-games",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.867+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.867+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Ratione Est Ipsa",
|
||||
content:
|
||||
"In nostrum recusandae quam ut animi enim distinctio ut. Ex qui in illo atque. Voluptatem suscipit animi harum sunt sit. Quo voluptatem soluta. Illum ipsa et rem dignissimos odit sed aut. Debitis earum sunt dolores sit. Dolore corrupti earum repellendus non possimus ullam voluptatem fuga. Ut sit recusandae quidem laboriosam aut est ea. Repudiandae et nobis. Est officiis perspiciatis aspernatur minima qui qui voluptate soluta.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e9e470021d5dfecfa",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.587+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.587+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Music & Instruments",
|
||||
$id: "music-and-instruments",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.447+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.447+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Qui Sed Voluptatem",
|
||||
content:
|
||||
"Voluptatibus ut molestias molestiae laudantium in quia odio praesentium. Tempora dolores velit blanditiis sed facilis quae. Iure voluptas sit provident accusantium autem. Enim commodi velit facere tempora. Dolor distinctio aut. Ipsa modi provident fugiat modi ut ab voluptate accusamus. Fuga quia doloremque veniam tempore ut. Qui accusamus aut et. Officia officia fuga aut doloremque voluptas nulla. Magni maxime minus maxime.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e9e470028ad403d3e",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.732+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.732+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Health & Fitness",
|
||||
$id: "health-and-fitness",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.546+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.546+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Est Sint Qui",
|
||||
content:
|
||||
"Quod repudiandae atque dolores. Cupiditate qui temporibus quia distinctio architecto provident dolorem explicabo et. Excepturi vel nihil cupiditate sit placeat aspernatur aperiam. Cumque ab incidunt autem suscipit delectus nostrum voluptatibus velit ratione. Quam fugit consequatur aut adipisci id et esse ea natus. Tempora doloremque esse in aliquam eveniet libero sed animi blanditiis. Soluta est laborum tempora a hic labore error. Est occaecati velit voluptas ea eos quas qui corporis voluptatem. Aliquid est non temporibus ex. Ut facere et quasi minus iusto consequatur.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e9e47003169a1c958",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.851+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.851+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Automotive & Industrial",
|
||||
$id: "automotive-and-industrial",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.297+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.297+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Dolores Laboriosam Pariatur",
|
||||
content:
|
||||
"Ea ea harum dicta. Ut sed voluptatem esse deserunt nostrum. Laboriosam ratione et aut eos pariatur sint. Minus dolorem porro molestias iure est excepturi illo. Consequuntur non atque error ab ut ea minima et expedita. Et ratione rerum earum esse. Et velit cupiditate facere molestias accusantium et qui. Omnis aliquid quia. Est vel eaque quas dolores quaerat nobis quae nulla et. Aut qui architecto.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e9e47003a16fd7308",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:39.988+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:39.988+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Books & Magazines",
|
||||
$id: "books-and-magazines",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.361+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.361+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Officia Sit Officia",
|
||||
content:
|
||||
"Veniam ducimus aliquid sunt eum porro eius beatae a quos. Nisi eveniet sunt. Rerum repellendus rerum est ipsa incidunt quo nihil enim. Voluptatem cumque quo natus nesciunt. Neque aspernatur laboriosam expedita ut. Vitae incidunt facere in eum sint fugit vero est. Est iste aut nostrum qui. Enim iste ut aut tempora hic sed. Omnis dolores et et doloremque. Impedit doloremque voluptatem qui et voluptas illo quam cumque suscipit.",
|
||||
status: "published",
|
||||
images: null,
|
||||
$id: "669e9e480001a3a34c65",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:40.102+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:40.102+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Office & Supplies",
|
||||
$id: "office-and-supplies",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.247+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.247+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Expedita Aliquid Et",
|
||||
content:
|
||||
"Quis rerum et cum. Totam error consequatur. Dolor sint sed unde possimus nobis. Eaque quam libero recusandae ut id fugiat quo dolorum non. Vitae architecto doloremque ullam eveniet architecto voluptatem aut asperiores dolorum. Distinctio molestias nihil totam voluptatum. In repudiandae illum nihil. Magni ut voluptatem suscipit totam perspiciatis sint id quia. Deleniti nulla necessitatibus. Modi earum tempore aut cumque.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e9e48000b643db81b",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:40.219+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:40.219+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Laptops & Desktops",
|
||||
$id: "laptops-and-desktops",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:37.469+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:37.469+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Consequuntur Molestias Voluptatem",
|
||||
content:
|
||||
"Perspiciatis id possimus. Et sit mollitia deleniti ratione odit est voluptatum natus. Reprehenderit facere culpa ullam in dolorem saepe autem. Aliquam sint dolorum soluta eum dolorum autem nesciunt aperiam. Provident possimus at corporis fugit veritatis at sint. Non porro velit vel eum mollitia totam molestias aliquam sapiente. Eos expedita laborum ullam quasi maxime expedita in excepturi. Non eum sunt est qui est quas eum. Modi voluptas mollitia explicabo autem cupiditate architecto et et autem. Incidunt rerum placeat dolor.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e9e480013928e6c76",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:40.347+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:40.347+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Beauty & Personal Care",
|
||||
$id: "beauty-and-personal-care",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.945+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.945+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
{
|
||||
title: "Laudantium Sint Magni",
|
||||
content:
|
||||
"Repellendus libero provident. Omnis libero soluta. Sed et quas sed ab ducimus delectus beatae. Eum quos maxime dolores in reprehenderit et rerum temporibus et. Rem numquam iste sit. Velit eaque repellat enim maiores incidunt iusto. Autem id laboriosam quo. Quasi nam aut. Minus quo quia incidunt iure et laudantium. Cupiditate dignissimos perferendis.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e9e48001a7f22a212",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:40.581+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:40.581+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Clothing & Accessories",
|
||||
$id: "clothing-and-accessories",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T18:00:38.669+00:00",
|
||||
$updatedAt: "2024-07-22T18:00:38.669+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"access-control-allow-credentials": "true",
|
||||
"access-control-allow-headers":
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE",
|
||||
"access-control-allow-origin": "https://localhost",
|
||||
"access-control-expose-headers": "X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"content-length": "10052",
|
||||
"content-type": "application/json; charset=UTF-8",
|
||||
date: "Mon, 22 Jul 2024 19:02:37 GMT",
|
||||
server: "Appwrite",
|
||||
"strict-transport-security": "max-age=10886400",
|
||||
"x-content-type-options": "nosniff",
|
||||
"x-debug-fallback": "true",
|
||||
"x-debug-speed": "0.12492394447327",
|
||||
},
|
||||
);
|
||||
|
||||
// nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
// .get("/v1/databases/default/collections/blog_posts/documents")
|
||||
// .query({
|
||||
// "queries%5B0%5D":
|
||||
// "equal%28%22%24id%22%2C%20%5B%22669e49e6001214bcfbcf%22%5D%29",
|
||||
// "queries%5B1%5D": "offset%280%29",
|
||||
// "queries%5B2%5D": "limit%2810%29",
|
||||
// })
|
||||
// .reply(
|
||||
// 200,
|
||||
// {
|
||||
// total: 1,
|
||||
// documents: [
|
||||
// {
|
||||
// title: "Qui Sed Voluptatem",
|
||||
// content:
|
||||
// "Voluptatibus ut molestias molestiae laudantium in quia odio praesentium. Tempora dolores velit blanditiis sed facilis quae. Iure voluptas sit provident accusantium autem. Enim commodi velit facere tempora. Dolor distinctio aut. Ipsa modi provident fugiat modi ut ab voluptate accusamus. Fuga quia doloremque veniam tempore ut. Qui accusamus aut et. Officia officia fuga aut doloremque voluptas nulla. Magni maxime minus maxime.",
|
||||
// status: "draft",
|
||||
// images: null,
|
||||
// $id: "669e49e6001214bcfbcf",
|
||||
// $tenant: "169888",
|
||||
// $createdAt: "2024-07-22T12:00:38.318+00:00",
|
||||
// $updatedAt: "2024-07-22T12:00:38.318+00:00",
|
||||
// $permissions: [],
|
||||
// category: {
|
||||
// title: "Health & Fitness",
|
||||
// $id: "health-and-fitness",
|
||||
// $tenant: "169888",
|
||||
// $createdAt: "2024-07-22T12:00:36.074+00:00",
|
||||
// $updatedAt: "2024-07-22T12:00:36.074+00:00",
|
||||
// $permissions: [],
|
||||
// $databaseId: "default",
|
||||
// $collectionId: "categories",
|
||||
// },
|
||||
// $databaseId: "default",
|
||||
// $collectionId: "blog_posts",
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// [
|
||||
// "Access-Control-Allow-Credentials",
|
||||
// "true",
|
||||
// "Access-Control-Allow-Headers",
|
||||
// "Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
// "Access-Control-Allow-Methods",
|
||||
// "GET, POST, PUT, PATCH, DELETE",
|
||||
// "Access-Control-Allow-Origin",
|
||||
// "https://localhost",
|
||||
// "Access-Control-Expose-Headers",
|
||||
// "X-Appwrite-Session, X-Fallback-Cookies",
|
||||
// "Content-Length",
|
||||
// "983",
|
||||
// "Content-Type",
|
||||
// "application/json; charset=UTF-8",
|
||||
// "Date",
|
||||
// "Mon, 22 Jul 2024 13:46:56 GMT",
|
||||
// "Server",
|
||||
// "Appwrite",
|
||||
// "Strict-Transport-Security",
|
||||
// "max-age=10886400",
|
||||
// "X-Content-Type-Options",
|
||||
// "nosniff",
|
||||
// "X-Debug-Fallback",
|
||||
// "true",
|
||||
// "X-Debug-Speed",
|
||||
// "0.032845973968506",
|
||||
// "Connection",
|
||||
// "close",
|
||||
// ],
|
||||
// );
|
||||
106
packages/appwrite/test/getList/index.spec.ts
Normal file
106
packages/appwrite/test/getList/index.spec.ts
Normal file
@@ -0,0 +1,106 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("getList", () => {
|
||||
it("correct response", async () => {
|
||||
const { data, total } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).getList({
|
||||
resource: "blog_posts",
|
||||
});
|
||||
|
||||
expect(data[0].id).toBe("669e49e5000fa125c6b6");
|
||||
expect(data[0].title).toBe("Deserunt Aut Atque");
|
||||
expect(total).toBe(100);
|
||||
});
|
||||
|
||||
it("correct sorting response", async () => {
|
||||
const { data, total } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).getList({
|
||||
resource: "blog_posts",
|
||||
sorters: [
|
||||
{
|
||||
field: "title",
|
||||
order: "asc",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
expect(data[0].id).toBe("669e49ea002a8e6aa70c");
|
||||
expect(data[0].title).toBe("Aliquid Beatae Sunt");
|
||||
|
||||
expect(data[1].id).toBe("669e49eb00061b1efdba");
|
||||
expect(data[1].title).toBe("Aliquid Et Veritatis");
|
||||
|
||||
expect(total).toBe(100);
|
||||
});
|
||||
|
||||
it("correct multiple sorting response", async () => {
|
||||
const { data, total } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).getList({
|
||||
resource: "blog_posts",
|
||||
sorters: [
|
||||
{
|
||||
field: "id",
|
||||
order: "asc",
|
||||
},
|
||||
{
|
||||
field: "title",
|
||||
order: "asc",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
expect(data[0].id).toBe("669e9e470013d3b23a0b");
|
||||
expect(data[0].title).toBe("Deserunt Aut Atque");
|
||||
|
||||
expect(data[1].id).toBe("669e9e47001a4702e027");
|
||||
expect(data[1].title).toBe("Quidem Nihil Pariatur");
|
||||
|
||||
expect(total).toBe(100);
|
||||
});
|
||||
|
||||
it("correct filter response", async () => {
|
||||
const { data, total } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).getList({
|
||||
resource: "blog_posts",
|
||||
filters: [
|
||||
{
|
||||
field: "id",
|
||||
operator: "eq",
|
||||
value: "669e9e56001c66a18865",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
expect(data[0].id).toBe("669e9e56001c66a18865");
|
||||
expect(data[0].title).toBe("Debitis Quo Fuga");
|
||||
expect(total).toBe(1);
|
||||
});
|
||||
|
||||
it("throws when given an unsupported operator", async () => {
|
||||
expect.assertions(2);
|
||||
|
||||
try {
|
||||
await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).getList({
|
||||
resource: "blog_posts",
|
||||
filters: [
|
||||
{
|
||||
field: "id",
|
||||
operator: "in",
|
||||
value: "632456c5998583bcb6d3",
|
||||
},
|
||||
],
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err).toBeInstanceOf(Error);
|
||||
expect(err).toHaveProperty("message", "Operator in is not supported");
|
||||
}
|
||||
});
|
||||
});
|
||||
125
packages/appwrite/test/getMany/index.mock.ts
Normal file
125
packages/appwrite/test/getMany/index.mock.ts
Normal file
@@ -0,0 +1,125 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.get(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f200345e903051",
|
||||
)
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
title: "Quia Hic Nisi",
|
||||
content:
|
||||
"Qui aut non ab autem. Nemo molestias sit accusantium et enim quis rem. Omnis ab illum voluptatem incidunt doloremque at qui. Tempore quas aut ipsam quo id sed aut. Corrupti quisquam sit deserunt est. Quasi dolorem sit doloremque omnis vero id quod magnam. Aperiam earum modi porro minima possimus illo nihil occaecati ut. Non qui tenetur nemo porro qui odio accusamus assumenda. Quos sequi ea similique. Sit molestias debitis aperiam optio exercitationem officia.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49f200345e903051",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:50.870+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:50.870+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Music & Instruments",
|
||||
$id: "music-and-instruments",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.957+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.957+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"994",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:37:54 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.020611047744751",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.get(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f2003b4ed88818",
|
||||
)
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
title: "Aut Cum Beatae",
|
||||
content:
|
||||
"Rerum recusandae in reiciendis sed officia at voluptates quaerat. Voluptas odio in magnam laudantium veniam inventore est quam eos. Laboriosam laborum impedit temporibus deleniti consequuntur. Debitis architecto deserunt maiores perferendis voluptatibus facilis sunt. Nemo omnis architecto ea ab illum nobis voluptatem et porro. Quos est occaecati quidem consectetur. Vitae ut optio ut praesentium. Porro qui voluptas. Delectus repellendus eligendi. Quisquam quia necessitatibus delectus id sapiente explicabo quisquam blanditiis.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49f2003b4ed88818",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:51.069+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:51.069+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Gaming",
|
||||
$id: "gaming",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.687+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.687+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"1037",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:37:54 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.026072025299072",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
20
packages/appwrite/test/getMany/index.spec.ts
Normal file
20
packages/appwrite/test/getMany/index.spec.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("getMany", () => {
|
||||
it("correct response", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).getMany!({
|
||||
resource: "blog_posts",
|
||||
ids: ["669e49f2003b4ed88818", "669e49f200345e903051"],
|
||||
});
|
||||
|
||||
expect(data[0].id).toEqual("669e49f2003b4ed88818");
|
||||
expect(data[0].title).toEqual("Aut Cum Beatae");
|
||||
|
||||
expect(data[1].id).toEqual("669e49f200345e903051");
|
||||
expect(data[1].title).toEqual("Quia Hic Nisi");
|
||||
});
|
||||
});
|
||||
63
packages/appwrite/test/getOne/index.mock.ts
Normal file
63
packages/appwrite/test/getOne/index.mock.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.get(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f2003b4ed88818",
|
||||
)
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
title: "Aut Cum Beatae",
|
||||
content:
|
||||
"Rerum recusandae in reiciendis sed officia at voluptates quaerat. Voluptas odio in magnam laudantium veniam inventore est quam eos. Laboriosam laborum impedit temporibus deleniti consequuntur. Debitis architecto deserunt maiores perferendis voluptatibus facilis sunt. Nemo omnis architecto ea ab illum nobis voluptatem et porro. Quos est occaecati quidem consectetur. Vitae ut optio ut praesentium. Porro qui voluptas. Delectus repellendus eligendi. Quisquam quia necessitatibus delectus id sapiente explicabo quisquam blanditiis.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49f2003b4ed88818",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:51.069+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:51.069+00:00",
|
||||
$permissions: [],
|
||||
category: {
|
||||
title: "Gaming",
|
||||
$id: "gaming",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.687+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.687+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"1037",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:36:30 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.048836946487427",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
16
packages/appwrite/test/getOne/index.spec.ts
Normal file
16
packages/appwrite/test/getOne/index.spec.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("useOne", () => {
|
||||
it("correct response with meta", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).getOne({
|
||||
resource: "blog_posts",
|
||||
id: "669e49f2003b4ed88818",
|
||||
});
|
||||
|
||||
expect(data.id).toEqual("669e49f2003b4ed88818");
|
||||
});
|
||||
});
|
||||
9
packages/appwrite/test/jest.setup.ts
Normal file
9
packages/appwrite/test/jest.setup.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import nock from "nock";
|
||||
|
||||
// it's actually sending request to the server and print "mock" to console for you to copy and paste.
|
||||
// nock.recorder.rec();
|
||||
|
||||
afterAll(async () => {
|
||||
nock.cleanAll();
|
||||
nock.restore();
|
||||
});
|
||||
108
packages/appwrite/test/liveProvider/index.spec.ts
Normal file
108
packages/appwrite/test/liveProvider/index.spec.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
import type { Client as Appwrite } from "appwrite";
|
||||
import { liveProvider } from "../../src";
|
||||
|
||||
const mockClient: Appwrite = {
|
||||
subscribe: jest.fn(() => jest.fn()),
|
||||
} as unknown as Appwrite;
|
||||
|
||||
const testDate = new Date().getTime();
|
||||
|
||||
describe("liveProvider", () => {
|
||||
it("calls appwriteClient.subscribe with correct channel", () => {
|
||||
const provider = liveProvider(mockClient);
|
||||
const dummyCallback = () => undefined;
|
||||
|
||||
provider?.subscribe({
|
||||
channel: "resources/blog_posts",
|
||||
types: ["*"],
|
||||
callback: dummyCallback,
|
||||
});
|
||||
|
||||
expect(mockClient.subscribe).toHaveBeenCalledWith(
|
||||
"databases.default.collections.blog_posts.documents",
|
||||
expect.any(Function),
|
||||
);
|
||||
});
|
||||
|
||||
it("calls appwriteClient.subscribe with correct channel when specific ids given", () => {
|
||||
const provider = liveProvider(mockClient);
|
||||
const dummyCallback = () => undefined;
|
||||
|
||||
provider?.subscribe({
|
||||
channel: "resources/blog_posts",
|
||||
types: ["*"],
|
||||
callback: dummyCallback,
|
||||
params: {
|
||||
ids: ["a", "b"],
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockClient.subscribe).toHaveBeenCalledWith(
|
||||
[
|
||||
"databases.default.collections.blog_posts.documents.a",
|
||||
"databases.default.collections.blog_posts.documents.b",
|
||||
],
|
||||
expect.any(Function),
|
||||
);
|
||||
});
|
||||
|
||||
it("calls appwriteClient.subscribe with correct channel when specific ids given", () => {
|
||||
jest.useFakeTimers();
|
||||
|
||||
const mockClientWithEvent: Appwrite = {
|
||||
subscribe: jest.fn((channel, cb) => {
|
||||
setImmediate(() => {
|
||||
cb({
|
||||
events: ["database.documents.create"],
|
||||
timestamp: testDate / 1000,
|
||||
payload: "test",
|
||||
});
|
||||
});
|
||||
}),
|
||||
} as unknown as Appwrite;
|
||||
|
||||
const provider = liveProvider(mockClientWithEvent);
|
||||
const dummyCallback = jest.fn();
|
||||
|
||||
provider?.subscribe({
|
||||
channel: "resources/blog_posts",
|
||||
types: ["*"],
|
||||
callback: dummyCallback,
|
||||
params: {
|
||||
ids: ["a", "b"],
|
||||
},
|
||||
});
|
||||
|
||||
jest.runAllTimers();
|
||||
|
||||
expect(dummyCallback).toHaveBeenCalledWith({
|
||||
type: "created",
|
||||
channel: "resources/blog_posts",
|
||||
date: new Date(testDate),
|
||||
payload: "test",
|
||||
});
|
||||
|
||||
jest.clearAllTimers();
|
||||
jest.useRealTimers();
|
||||
});
|
||||
|
||||
it("runs given function to unsubscribe", () => {
|
||||
const provider = liveProvider(mockClient);
|
||||
const dummyCallback = jest.fn();
|
||||
|
||||
const unsubscribeFunction = jest.fn();
|
||||
|
||||
provider?.subscribe({
|
||||
channel: "resources/blog_posts",
|
||||
types: ["*"],
|
||||
callback: dummyCallback,
|
||||
params: {
|
||||
ids: ["a", "b"],
|
||||
},
|
||||
});
|
||||
|
||||
provider?.unsubscribe(unsubscribeFunction);
|
||||
|
||||
expect(unsubscribeFunction).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
73
packages/appwrite/test/update/index.mock.ts
Normal file
73
packages/appwrite/test/update/index.mock.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.patch(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f3001cb7c76d6b",
|
||||
{
|
||||
data: { title: "Updated" },
|
||||
permissions: ['read("any")', 'write("any")'],
|
||||
},
|
||||
)
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
title: "Updated",
|
||||
content:
|
||||
"Sint ut eveniet distinctio. Quas necessitatibus sint unde explicabo voluptatem culpa voluptas. Similique natus enim iste aspernatur. Voluptate eaque cupiditate non et enim mollitia ut ut. Maxime sed eaque aliquid soluta occaecati aperiam sint repudiandae. Modi nobis ut iste. Iure repellendus ut quod laboriosam error non quidem doloremque esse. Officia nulla dolores earum minus reprehenderit. Ducimus ut eum quos explicabo rerum. Officiis voluptatem iste recusandae.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49f3001cb7c76d6b",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:51.542+00:00",
|
||||
$updatedAt: "2024-07-22T13:32:09.747+00:00",
|
||||
$permissions: ['read("any")', 'update("any")', 'delete("any")'],
|
||||
category: {
|
||||
title: "Office & Supplies",
|
||||
$id: "office-and-supplies",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"1040",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 13:32:09 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.10128998756409",
|
||||
"X-Ratelimit-Limit",
|
||||
"120",
|
||||
"X-Ratelimit-Remaining",
|
||||
"119",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721655180",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
20
packages/appwrite/test/update/index.spec.ts
Normal file
20
packages/appwrite/test/update/index.spec.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("update", () => {
|
||||
it("correct response", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).update({
|
||||
resource: "blog_posts",
|
||||
id: "669e49f3001cb7c76d6b",
|
||||
variables: {
|
||||
title: "Updated",
|
||||
},
|
||||
});
|
||||
|
||||
expect(data.id).toEqual("669e49f3001cb7c76d6b");
|
||||
expect(data.title).toEqual("Updated");
|
||||
});
|
||||
});
|
||||
145
packages/appwrite/test/updateMany/index.mock.ts
Normal file
145
packages/appwrite/test/updateMany/index.mock.ts
Normal file
@@ -0,0 +1,145 @@
|
||||
import nock from "nock";
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.patch(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f3001cb7c76d6b",
|
||||
{
|
||||
data: { title: "Lorem Ipsum" },
|
||||
permissions: ['read("any")', 'write("any")'],
|
||||
},
|
||||
)
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
title: "Lorem Ipsum",
|
||||
content:
|
||||
"Sint ut eveniet distinctio. Quas necessitatibus sint unde explicabo voluptatem culpa voluptas. Similique natus enim iste aspernatur. Voluptate eaque cupiditate non et enim mollitia ut ut. Maxime sed eaque aliquid soluta occaecati aperiam sint repudiandae. Modi nobis ut iste. Iure repellendus ut quod laboriosam error non quidem doloremque esse. Officia nulla dolores earum minus reprehenderit. Ducimus ut eum quos explicabo rerum. Officiis voluptatem iste recusandae.",
|
||||
status: "draft",
|
||||
images: null,
|
||||
$id: "669e49f3001cb7c76d6b",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:51.542+00:00",
|
||||
$updatedAt: "2024-07-22T12:23:44.724+00:00",
|
||||
$permissions: ['read("any")', 'update("any")', 'delete("any")'],
|
||||
category: {
|
||||
title: "Office & Supplies",
|
||||
$id: "office-and-supplies",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:35.832+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"1044",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 12:24:02 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.13980388641357",
|
||||
"X-Ratelimit-Limit",
|
||||
"120",
|
||||
"X-Ratelimit-Remaining",
|
||||
"119",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721651100",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
|
||||
nock("https://cloud.appwrite.io:443", { encodedQueryParams: true })
|
||||
.patch(
|
||||
"/v1/databases/default/collections/blog_posts/documents/669e49f30008c2067f82",
|
||||
{
|
||||
data: { title: "Lorem Ipsum" },
|
||||
permissions: ['read("any")', 'write("any")'],
|
||||
},
|
||||
)
|
||||
.reply(
|
||||
200,
|
||||
{
|
||||
title: "Lorem Ipsum",
|
||||
content:
|
||||
"Rem expedita nam rerum nam laboriosam tenetur. Expedita sequi aut. Laboriosam delectus tempora dolorum corporis eligendi. Porro quo sed vitae voluptas fugit iure eum. Reprehenderit dolore suscipit cumque quibusdam. Et sint laudantium sequi odit. Illo error magnam vitae consequuntur iusto magni rerum. Eum cumque quo corporis. Eos reiciendis quod esse sint magnam sapiente iste architecto sit. Ipsam perspiciatis accusamus eligendi mollitia consequatur tempora necessitatibus error.",
|
||||
status: "rejected",
|
||||
images: null,
|
||||
$id: "669e49f30008c2067f82",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:51.172+00:00",
|
||||
$updatedAt: "2024-07-22T12:23:44.655+00:00",
|
||||
$permissions: ['read("any")', 'update("any")', 'delete("any")'],
|
||||
category: {
|
||||
title: "Clothing & Accessories",
|
||||
$id: "clothing-and-accessories",
|
||||
$tenant: "169888",
|
||||
$createdAt: "2024-07-22T12:00:36.135+00:00",
|
||||
$updatedAt: "2024-07-22T12:00:36.135+00:00",
|
||||
$permissions: [],
|
||||
$databaseId: "default",
|
||||
$collectionId: "categories",
|
||||
},
|
||||
$databaseId: "default",
|
||||
$collectionId: "blog_posts",
|
||||
},
|
||||
[
|
||||
"Access-Control-Allow-Credentials",
|
||||
"true",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent",
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://localhost",
|
||||
"Access-Control-Expose-Headers",
|
||||
"X-Appwrite-Session, X-Fallback-Cookies",
|
||||
"Content-Length",
|
||||
"1071",
|
||||
"Content-Type",
|
||||
"application/json; charset=UTF-8",
|
||||
"Date",
|
||||
"Mon, 22 Jul 2024 12:24:02 GMT",
|
||||
"Server",
|
||||
"Appwrite",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=10886400",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Debug-Fallback",
|
||||
"true",
|
||||
"X-Debug-Speed",
|
||||
"0.25932908058167",
|
||||
"X-Ratelimit-Limit",
|
||||
"120",
|
||||
"X-Ratelimit-Remaining",
|
||||
"119",
|
||||
"X-Ratelimit-Reset",
|
||||
"1721651100",
|
||||
"Connection",
|
||||
"close",
|
||||
],
|
||||
);
|
||||
23
packages/appwrite/test/updateMany/index.spec.ts
Normal file
23
packages/appwrite/test/updateMany/index.spec.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { dataProvider } from "../../src/index";
|
||||
import { client } from "../appwriteClient";
|
||||
import "./index.mock";
|
||||
|
||||
describe("updateMany", () => {
|
||||
it("correct response with meta", async () => {
|
||||
const { data } = await dataProvider(client, {
|
||||
databaseId: "default",
|
||||
}).updateMany!({
|
||||
resource: "blog_posts",
|
||||
ids: ["669e49f3001cb7c76d6b", "669e49f30008c2067f82"],
|
||||
variables: {
|
||||
title: "Lorem Ipsum",
|
||||
},
|
||||
});
|
||||
|
||||
expect(data[0].id).toEqual("669e49f3001cb7c76d6b");
|
||||
expect(data[0].title).toEqual("Lorem Ipsum");
|
||||
|
||||
expect(data[1].id).toEqual("669e49f30008c2067f82");
|
||||
expect(data[1].title).toEqual("Lorem Ipsum");
|
||||
});
|
||||
});
|
||||
217
packages/appwrite/test/utils/generateFilter.spec.ts
Normal file
217
packages/appwrite/test/utils/generateFilter.spec.ts
Normal file
@@ -0,0 +1,217 @@
|
||||
import { Query } from "appwrite";
|
||||
import { generateFilter } from "../../src/utils";
|
||||
import type { CrudFilter } from "@refinedev/core";
|
||||
|
||||
describe("generateFilter", () => {
|
||||
it("should generate filter based on the specified operator", () => {
|
||||
const testCases: { filter: CrudFilter; expected: any }[] = [
|
||||
{
|
||||
filter: { operator: "eq", field: "name", value: "John" },
|
||||
expected: Query.equal("name", "John"),
|
||||
},
|
||||
{
|
||||
filter: { operator: "ne", field: "name", value: "John" },
|
||||
expected: Query.notEqual("name", "John"),
|
||||
},
|
||||
{
|
||||
filter: { operator: "gt", field: "age", value: 25 },
|
||||
expected: Query.greaterThan("age", 25),
|
||||
},
|
||||
{
|
||||
filter: { operator: "gte", field: "age", value: 25 },
|
||||
expected: Query.greaterThanEqual("age", 25),
|
||||
},
|
||||
{
|
||||
filter: { operator: "lt", field: "age", value: 25 },
|
||||
expected: Query.lessThan("age", 25),
|
||||
},
|
||||
{
|
||||
filter: { operator: "lte", field: "age", value: 25 },
|
||||
expected: Query.lessThanEqual("age", 25),
|
||||
},
|
||||
{
|
||||
filter: { operator: "contains", field: "name", value: "John" },
|
||||
expected: Query.search("name", "%John%"),
|
||||
},
|
||||
{
|
||||
filter: { operator: "between", field: "age", value: [0, 64] },
|
||||
expected: Query.between("age", 0, 64),
|
||||
},
|
||||
{
|
||||
filter: { operator: "null", field: "name", value: undefined },
|
||||
expected: Query.isNull("name"),
|
||||
},
|
||||
{
|
||||
filter: { operator: "nnull", field: "name", value: undefined },
|
||||
expected: Query.isNotNull("name"),
|
||||
},
|
||||
{
|
||||
filter: { operator: "startswith", field: "name", value: "John" },
|
||||
expected: Query.startsWith("name", "John"),
|
||||
},
|
||||
{
|
||||
filter: { operator: "endswith", field: "name", value: "John" },
|
||||
expected: Query.endsWith("name", "John"),
|
||||
},
|
||||
];
|
||||
|
||||
testCases.forEach(({ filter, expected }) => {
|
||||
const result = generateFilter(filter);
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
it("should correctly handle 'or' and 'and' operators with only one element", () => {
|
||||
const testCases: { filter: CrudFilter; expected: any }[] = [
|
||||
{
|
||||
filter: {
|
||||
operator: "or",
|
||||
value: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
],
|
||||
},
|
||||
expected: Query.equal("name", "John"),
|
||||
},
|
||||
{
|
||||
filter: {
|
||||
operator: "and",
|
||||
value: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
],
|
||||
},
|
||||
expected: Query.equal("name", "John"),
|
||||
},
|
||||
];
|
||||
|
||||
testCases.forEach(({ filter, expected }) => {
|
||||
const result = generateFilter(filter);
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
it("should correctly handle nested 'or' and 'and' operators", () => {
|
||||
const testCases: { filter: CrudFilter; expected: any }[] = [
|
||||
{
|
||||
filter: {
|
||||
operator: "or",
|
||||
value: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
{
|
||||
operator: "or",
|
||||
value: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "Tom",
|
||||
},
|
||||
{
|
||||
operator: "lt",
|
||||
field: "age",
|
||||
value: 30,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
expected: Query.or([
|
||||
Query.equal("name", "John"),
|
||||
Query.or([Query.equal("name", "Tom"), Query.lessThan("age", 30)]),
|
||||
]),
|
||||
},
|
||||
{
|
||||
filter: {
|
||||
operator: "and",
|
||||
value: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
{
|
||||
operator: "and",
|
||||
value: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "Tom",
|
||||
},
|
||||
{
|
||||
operator: "lt",
|
||||
field: "age",
|
||||
value: 30,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
expected: Query.and([
|
||||
Query.equal("name", "John"),
|
||||
Query.and([Query.equal("name", "Tom"), Query.lessThan("age", 30)]),
|
||||
]),
|
||||
},
|
||||
];
|
||||
|
||||
testCases.forEach(({ filter, expected }) => {
|
||||
const result = generateFilter(filter);
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
it("should throw an error when value array has only one element for 'between' operator", () => {
|
||||
const filter = {
|
||||
operator: "between",
|
||||
field: "age",
|
||||
value: [0],
|
||||
} as CrudFilter;
|
||||
|
||||
expect(() => generateFilter(filter)).toThrowError(
|
||||
'Value array must contain exactly two elements for "between" operator',
|
||||
);
|
||||
});
|
||||
|
||||
it("should replace 'id' field with '$id'", () => {
|
||||
const filter = {
|
||||
operator: "eq",
|
||||
field: "id",
|
||||
value: "123",
|
||||
} as CrudFilter;
|
||||
const expected = Query.equal("$id", "123");
|
||||
|
||||
const result = generateFilter(filter);
|
||||
|
||||
expect(result).toEqual(expected);
|
||||
});
|
||||
|
||||
it("should throw an error for unsupported operator", () => {
|
||||
const filter = {
|
||||
operator: "unsupported",
|
||||
field: "name",
|
||||
value: "John",
|
||||
};
|
||||
expect(() => generateFilter(filter as any)).toThrowError(
|
||||
`Operator ${filter.operator} is not supported`,
|
||||
);
|
||||
});
|
||||
|
||||
it("should throw an error when max deep is reached", () => {
|
||||
const filter = {
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
} as CrudFilter;
|
||||
|
||||
expect(() => generateFilter(filter, 0)).toThrowError("Max deep reached");
|
||||
});
|
||||
});
|
||||
25
packages/appwrite/test/utils/gerRefineEvent.spec.ts
Normal file
25
packages/appwrite/test/utils/gerRefineEvent.spec.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { getRefineEvent } from "../../src/utils";
|
||||
|
||||
describe("getRefineEvent", () => {
|
||||
it("should return 'created' when the event includes '.create'", () => {
|
||||
const event = "user.create";
|
||||
const expected = "created";
|
||||
expect(getRefineEvent(event)).toBe(expected);
|
||||
});
|
||||
|
||||
it("should return 'undefined' when the event includes '.update'", () => {
|
||||
const event = "user.update";
|
||||
expect(getRefineEvent(event)).toBeUndefined();
|
||||
});
|
||||
|
||||
it("should return 'deleted' when the event includes '.delete'", () => {
|
||||
const event = "user.delete";
|
||||
const expected = "deleted";
|
||||
expect(getRefineEvent(event)).toBe(expected);
|
||||
});
|
||||
|
||||
it("should return 'undefined' when the event does not match any pattern", () => {
|
||||
const event = "user.unknown";
|
||||
expect(getRefineEvent(event)).toBeUndefined();
|
||||
});
|
||||
});
|
||||
109
packages/appwrite/test/utils/getAppwriteFilters.spec.ts
Normal file
109
packages/appwrite/test/utils/getAppwriteFilters.spec.ts
Normal file
@@ -0,0 +1,109 @@
|
||||
import type { CrudFilter } from "@refinedev/core";
|
||||
import { generateFilter, getAppwriteFilters } from "../../src/utils";
|
||||
|
||||
jest.mock("../../src/utils/generateFilter", () => ({
|
||||
generateFilter: jest.fn(),
|
||||
}));
|
||||
|
||||
describe("getAppwriteFilters", () => {
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
it("should generate Appwrite filters based on the input filters", () => {
|
||||
const filters: CrudFilter[] = [
|
||||
{ operator: "eq", field: "name", value: "John" },
|
||||
{ operator: "lt", field: "age", value: 30 },
|
||||
];
|
||||
|
||||
getAppwriteFilters(filters);
|
||||
|
||||
expect(generateFilter).toHaveBeenCalledTimes(2);
|
||||
expect(generateFilter).toHaveBeenNthCalledWith(1, {
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
});
|
||||
expect(generateFilter).toHaveBeenNthCalledWith(2, {
|
||||
operator: "lt",
|
||||
field: "age",
|
||||
value: 30,
|
||||
});
|
||||
});
|
||||
|
||||
it('should generate Appwrite filters for "or" and "and" operators', () => {
|
||||
const filters = [
|
||||
{
|
||||
operator: "or",
|
||||
filters: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
{
|
||||
operator: "lt",
|
||||
field: "age",
|
||||
value: 30,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
operator: "and",
|
||||
filters: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
{
|
||||
operator: "lt",
|
||||
field: "age",
|
||||
value: 30,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
getAppwriteFilters(filters as any);
|
||||
|
||||
expect(generateFilter).toHaveBeenCalledTimes(2);
|
||||
expect(generateFilter).toHaveBeenNthCalledWith(1, {
|
||||
operator: "or",
|
||||
filters: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
{
|
||||
operator: "lt",
|
||||
field: "age",
|
||||
value: 30,
|
||||
},
|
||||
],
|
||||
});
|
||||
expect(generateFilter).toHaveBeenNthCalledWith(2, {
|
||||
operator: "and",
|
||||
filters: [
|
||||
{
|
||||
operator: "eq",
|
||||
field: "name",
|
||||
value: "John",
|
||||
},
|
||||
{
|
||||
operator: "lt",
|
||||
field: "age",
|
||||
value: 30,
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it("should return an empty array when no filters are provided", () => {
|
||||
const result = getAppwriteFilters(undefined);
|
||||
|
||||
expect(result).toEqual([]);
|
||||
expect(generateFilter).toHaveBeenCalledTimes(0);
|
||||
});
|
||||
});
|
||||
38
packages/appwrite/test/utils/getAppwritePagination.spec.ts
Normal file
38
packages/appwrite/test/utils/getAppwritePagination.spec.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { getAppwritePagination } from "../../src/utils";
|
||||
|
||||
import { Query } from "appwrite";
|
||||
|
||||
describe("getAppwritePagination", () => {
|
||||
it("should generate Appwrite pagination parameters based on the current page and page size", () => {
|
||||
const current = 2;
|
||||
const pageSize = 10;
|
||||
|
||||
const result = getAppwritePagination(current, pageSize);
|
||||
|
||||
expect(result).toEqual([
|
||||
Query.offset((current - 1) * pageSize),
|
||||
Query.limit(pageSize),
|
||||
]);
|
||||
});
|
||||
|
||||
it("should generate correct Appwrite pagination parameters for the first page", () => {
|
||||
const current = 1;
|
||||
const pageSize = 10;
|
||||
|
||||
const result = getAppwritePagination(current, pageSize);
|
||||
|
||||
expect(result).toEqual([Query.offset(0), Query.limit(pageSize)]);
|
||||
});
|
||||
|
||||
it("should generate correct Appwrite pagination parameters for a custom page size", () => {
|
||||
const current = 3;
|
||||
const pageSize = 5;
|
||||
|
||||
const result = getAppwritePagination(current, pageSize);
|
||||
|
||||
expect(result).toEqual([
|
||||
Query.offset((current - 1) * pageSize),
|
||||
Query.limit(pageSize),
|
||||
]);
|
||||
});
|
||||
});
|
||||
30
packages/appwrite/test/utils/getAppwriteSorting.spec.ts
Normal file
30
packages/appwrite/test/utils/getAppwriteSorting.spec.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import type { CrudSorting } from "@refinedev/core";
|
||||
import { getAppwriteSorting } from "../../src/utils";
|
||||
import { Query } from "appwrite";
|
||||
|
||||
describe("getAppwriteSorting", () => {
|
||||
it("should generate Appwrite sorting parameters based on the provided sorters", () => {
|
||||
const sorters: CrudSorting = [
|
||||
{ field: "name", order: "asc" },
|
||||
{ field: "age", order: "desc" },
|
||||
];
|
||||
|
||||
const result = getAppwriteSorting(sorters);
|
||||
|
||||
expect(result).toEqual([Query.orderAsc("name"), Query.orderDesc("age")]);
|
||||
});
|
||||
|
||||
it('should generate correct Appwrite sorting parameters for the "id" field', () => {
|
||||
const sorters: CrudSorting = [{ field: "id", order: "asc" }];
|
||||
|
||||
const result = getAppwriteSorting(sorters);
|
||||
|
||||
expect(result).toEqual([Query.orderAsc("$id")]);
|
||||
});
|
||||
|
||||
it("should return an empty array when no sorters are provided", () => {
|
||||
const result = getAppwriteSorting(undefined);
|
||||
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
});
|
||||
55
packages/appwrite/test/utils/replaceIdWithAppwriteId.spec.ts
Normal file
55
packages/appwrite/test/utils/replaceIdWithAppwriteId.spec.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import type { CrudFilter } from "@refinedev/core";
|
||||
import { replaceIdWithAppwriteId } from "../../src/utils/replaceIdWithAppwriteId";
|
||||
|
||||
describe("replaceIdWithAppwriteId", () => {
|
||||
it("should replace the id with appwrite id", () => {
|
||||
const result = replaceIdWithAppwriteId({
|
||||
field: "id",
|
||||
operator: "eq",
|
||||
value: "John Doe",
|
||||
} satisfies CrudFilter);
|
||||
expect(result).toStrictEqual({
|
||||
field: "$id",
|
||||
operator: "eq",
|
||||
value: "John Doe",
|
||||
});
|
||||
});
|
||||
|
||||
it("should only replace the first layer of id with appwrite id", () => {
|
||||
const result = replaceIdWithAppwriteId({
|
||||
field: "id",
|
||||
operator: "eq",
|
||||
value: [
|
||||
{
|
||||
field: "id",
|
||||
operator: "eq",
|
||||
value: "John Doe",
|
||||
},
|
||||
],
|
||||
} satisfies CrudFilter);
|
||||
expect(result).toStrictEqual({
|
||||
field: "$id",
|
||||
operator: "eq",
|
||||
value: [
|
||||
{
|
||||
field: "id",
|
||||
operator: "eq",
|
||||
value: "John Doe",
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it("should not replace the other field value with appwrite id", () => {
|
||||
const result = replaceIdWithAppwriteId({
|
||||
field: "name",
|
||||
operator: "eq",
|
||||
value: "John Doe",
|
||||
} satisfies CrudFilter);
|
||||
expect(result).toStrictEqual({
|
||||
field: "name",
|
||||
operator: "eq",
|
||||
value: "John Doe",
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user