mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-04-05 01:19:47 +01:00
251 lines
8.6 KiB
TypeScript
251 lines
8.6 KiB
TypeScript
import { AuthType } from "../AuthType";
|
|
import { resetConfigContext, updateConfigContext } from "../ConfigContext";
|
|
import { DatabaseAccount } from "../Contracts/DataModels";
|
|
import { Collection } from "../Contracts/ViewModels";
|
|
import DocumentId from "../Explorer/Tree/DocumentId";
|
|
import { updateUserContext } from "../UserContext";
|
|
import { deleteDocument, getEndpoint, queryDocuments, readDocument, updateDocument } from "./MongoProxyClient";
|
|
jest.mock("../ResourceProvider/ResourceProviderClient.ts");
|
|
|
|
const databaseId = "testDB";
|
|
|
|
const fetchMock = () => {
|
|
return Promise.resolve({
|
|
ok: true,
|
|
text: () => "{}",
|
|
json: () => "{}",
|
|
headers: new Map(),
|
|
});
|
|
};
|
|
|
|
const partitionKeyProperty = "pk";
|
|
|
|
const collection = {
|
|
id: () => "testCollection",
|
|
rid: "testCollectionrid",
|
|
partitionKeyProperty,
|
|
partitionKey: {
|
|
paths: ["/pk"],
|
|
kind: "Hash",
|
|
version: 1,
|
|
},
|
|
} as Collection;
|
|
|
|
const documentId = ({
|
|
partitionKeyHeader: () => "[]",
|
|
self: "db/testDB/db/testCollection/docs/testId",
|
|
partitionKeyProperty,
|
|
partitionKey: {
|
|
paths: ["/pk"],
|
|
kind: "Hash",
|
|
version: 1,
|
|
},
|
|
} as unknown) as DocumentId;
|
|
|
|
const databaseAccount = {
|
|
id: "foo",
|
|
name: "foo",
|
|
location: "foo",
|
|
type: "foo",
|
|
kind: "foo",
|
|
properties: {
|
|
documentEndpoint: "bar",
|
|
gremlinEndpoint: "foo",
|
|
tableEndpoint: "foo",
|
|
cassandraEndpoint: "foo",
|
|
},
|
|
} as DatabaseAccount;
|
|
|
|
describe("MongoProxyClient", () => {
|
|
describe("queryDocuments", () => {
|
|
beforeEach(() => {
|
|
resetConfigContext();
|
|
updateUserContext({
|
|
databaseAccount,
|
|
});
|
|
updateConfigContext({
|
|
BACKEND_ENDPOINT: "https://main.documentdb.ext.azure.com",
|
|
});
|
|
window.fetch = jest.fn().mockImplementation(fetchMock);
|
|
});
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it("builds the correct URL", () => {
|
|
queryDocuments(databaseId, collection, true, "{}");
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://main.documentdb.ext.azure.com/api/mongo/explorer/resourcelist?db=testDB&coll=testCollection&resourceUrl=bardbs%2FtestDB%2Fcolls%2FtestCollection%2Fdocs%2F&rid=testCollectionrid&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
|
|
it("builds the correct proxy URL in development", () => {
|
|
updateConfigContext({ MONGO_BACKEND_ENDPOINT: "https://localhost:1234" });
|
|
queryDocuments(databaseId, collection, true, "{}");
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://localhost:1234/api/mongo/explorer/resourcelist?db=testDB&coll=testCollection&resourceUrl=bardbs%2FtestDB%2Fcolls%2FtestCollection%2Fdocs%2F&rid=testCollectionrid&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
});
|
|
describe("readDocument", () => {
|
|
beforeEach(() => {
|
|
resetConfigContext();
|
|
updateUserContext({
|
|
databaseAccount,
|
|
});
|
|
updateConfigContext({
|
|
BACKEND_ENDPOINT: "https://main.documentdb.ext.azure.com",
|
|
});
|
|
window.fetch = jest.fn().mockImplementation(fetchMock);
|
|
});
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it("builds the correct URL", () => {
|
|
readDocument(databaseId, collection, documentId);
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://main.documentdb.ext.azure.com/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
|
|
it("builds the correct proxy URL in development", () => {
|
|
updateConfigContext({ MONGO_BACKEND_ENDPOINT: "https://localhost:1234" });
|
|
readDocument(databaseId, collection, documentId);
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://localhost:1234/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
});
|
|
describe("createDocument", () => {
|
|
beforeEach(() => {
|
|
resetConfigContext();
|
|
updateUserContext({
|
|
databaseAccount,
|
|
});
|
|
updateConfigContext({
|
|
BACKEND_ENDPOINT: "https://main.documentdb.ext.azure.com",
|
|
});
|
|
window.fetch = jest.fn().mockImplementation(fetchMock);
|
|
});
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it("builds the correct URL", () => {
|
|
readDocument(databaseId, collection, documentId);
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://main.documentdb.ext.azure.com/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
|
|
it("builds the correct proxy URL in development", () => {
|
|
updateConfigContext({ MONGO_BACKEND_ENDPOINT: "https://localhost:1234" });
|
|
readDocument(databaseId, collection, documentId);
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://localhost:1234/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
});
|
|
describe("updateDocument", () => {
|
|
beforeEach(() => {
|
|
resetConfigContext();
|
|
updateUserContext({
|
|
databaseAccount,
|
|
});
|
|
updateConfigContext({
|
|
BACKEND_ENDPOINT: "https://main.documentdb.ext.azure.com",
|
|
});
|
|
window.fetch = jest.fn().mockImplementation(fetchMock);
|
|
});
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it("builds the correct URL", () => {
|
|
updateDocument(databaseId, collection, documentId, "{}");
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://main.documentdb.ext.azure.com/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2Fdocs%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
|
|
it("builds the correct proxy URL in development", () => {
|
|
updateConfigContext({ MONGO_BACKEND_ENDPOINT: "https://localhost:1234" });
|
|
updateDocument(databaseId, collection, documentId, "{}");
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://localhost:1234/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2Fdocs%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
});
|
|
describe("deleteDocument", () => {
|
|
beforeEach(() => {
|
|
resetConfigContext();
|
|
updateUserContext({
|
|
databaseAccount,
|
|
});
|
|
updateConfigContext({
|
|
BACKEND_ENDPOINT: "https://main.documentdb.ext.azure.com",
|
|
});
|
|
window.fetch = jest.fn().mockImplementation(fetchMock);
|
|
});
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it("builds the correct URL", () => {
|
|
deleteDocument(databaseId, collection, documentId);
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://main.documentdb.ext.azure.com/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2Fdocs%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
|
|
it("builds the correct proxy URL in development", () => {
|
|
updateConfigContext({ MONGO_BACKEND_ENDPOINT: "https://localhost:1234" });
|
|
deleteDocument(databaseId, collection, documentId);
|
|
expect(window.fetch).toHaveBeenCalledWith(
|
|
"https://localhost:1234/api/mongo/explorer?db=testDB&coll=testCollection&resourceUrl=bardb%2FtestDB%2Fdb%2FtestCollection%2Fdocs%2FtestId&rid=testId&rtype=docs&sid=&rg=&dba=foo&pk=pk",
|
|
expect.any(Object)
|
|
);
|
|
});
|
|
});
|
|
describe("getEndpoint", () => {
|
|
beforeEach(() => {
|
|
resetConfigContext();
|
|
updateUserContext({
|
|
databaseAccount,
|
|
});
|
|
updateConfigContext({
|
|
BACKEND_ENDPOINT: "https://main.documentdb.ext.azure.com",
|
|
});
|
|
});
|
|
|
|
it("returns a production endpoint", () => {
|
|
const endpoint = getEndpoint();
|
|
expect(endpoint).toEqual("https://main.documentdb.ext.azure.com/api/mongo/explorer");
|
|
});
|
|
|
|
it("returns a development endpoint", () => {
|
|
updateConfigContext({ MONGO_BACKEND_ENDPOINT: "https://localhost:1234" });
|
|
const endpoint = getEndpoint();
|
|
expect(endpoint).toEqual("https://localhost:1234/api/mongo/explorer");
|
|
});
|
|
|
|
it("returns a guest endpoint", () => {
|
|
updateUserContext({
|
|
authType: AuthType.EncryptedToken,
|
|
});
|
|
const endpoint = getEndpoint();
|
|
expect(endpoint).toEqual("https://main.documentdb.ext.azure.com/api/guest/mongo/explorer");
|
|
});
|
|
});
|
|
});
|