import * as ko from "knockout"; import { DatabaseAccount } from "../../Contracts/DataModels"; import * as ViewModels from "../../Contracts/ViewModels"; import { updateUserContext } from "../../UserContext"; import Explorer from "../Explorer"; import DocumentId from "../Tree/DocumentId"; import DocumentsTab from "./DocumentsTab"; describe("Documents tab", () => { describe("buildQuery", () => { it("should generate the right select query for SQL API", () => { const documentsTab = new DocumentsTab({ partitionKey: null, documentIds: ko.observableArray(), tabKind: ViewModels.CollectionTabKind.Documents, title: "", tabPath: "", hashLocation: "", }); expect(documentsTab.buildQuery("")).toContain("select"); }); }); describe("showPartitionKey", () => { const explorer = new Explorer(); const mongoExplorer = new Explorer(); updateUserContext({ databaseAccount: { properties: { capabilities: [{ name: "EnableGremlin" }], }, } as DatabaseAccount, }); const collectionWithoutPartitionKey = ({ id: ko.observable("foo"), database: { id: ko.observable("foo"), }, container: explorer, }); const collectionWithSystemPartitionKey = ({ id: ko.observable("foo"), database: { id: ko.observable("foo"), }, partitionKey: { paths: ["/foo"], kind: "Hash", version: 2, systemKey: true, }, container: explorer, }); const collectionWithNonSystemPartitionKey = ({ id: ko.observable("foo"), database: { id: ko.observable("foo"), }, partitionKey: { paths: ["/foo"], kind: "Hash", version: 2, systemKey: false, }, container: explorer, }); const mongoCollectionWithSystemPartitionKey = ({ id: ko.observable("foo"), database: { id: ko.observable("foo"), }, partitionKey: { paths: ["/foo"], kind: "Hash", version: 2, systemKey: true, }, container: mongoExplorer, }); it("should be false for null or undefined collection", () => { const documentsTab = new DocumentsTab({ partitionKey: null, documentIds: ko.observableArray(), tabKind: ViewModels.CollectionTabKind.Documents, title: "", tabPath: "", hashLocation: "", }); expect(documentsTab.showPartitionKey).toBe(false); }); it("should be false for null or undefined partitionKey", () => { const documentsTab = new DocumentsTab({ collection: collectionWithoutPartitionKey, partitionKey: null, documentIds: ko.observableArray(), tabKind: ViewModels.CollectionTabKind.Documents, title: "", tabPath: "", hashLocation: "", }); expect(documentsTab.showPartitionKey).toBe(false); }); it("should be true for non-Mongo accounts with system partitionKey", () => { const documentsTab = new DocumentsTab({ collection: collectionWithSystemPartitionKey, partitionKey: null, documentIds: ko.observableArray(), tabKind: ViewModels.CollectionTabKind.Documents, title: "", tabPath: "", hashLocation: "", }); expect(documentsTab.showPartitionKey).toBe(true); }); it("should be false for Mongo accounts with system partitionKey", () => { updateUserContext({ apiType: "Mongo", }); const documentsTab = new DocumentsTab({ collection: mongoCollectionWithSystemPartitionKey, partitionKey: null, documentIds: ko.observableArray(), tabKind: ViewModels.CollectionTabKind.Documents, title: "", tabPath: "", hashLocation: "", }); expect(documentsTab.showPartitionKey).toBe(false); }); it("should be true for non-system partitionKey", () => { const documentsTab = new DocumentsTab({ collection: collectionWithNonSystemPartitionKey, partitionKey: null, documentIds: ko.observableArray(), tabKind: ViewModels.CollectionTabKind.Documents, title: "", tabPath: "", hashLocation: "", }); expect(documentsTab.showPartitionKey).toBe(true); }); }); });