diff --git a/.eslintignore b/.eslintignore index f4064b9e5..15d8762b6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -71,7 +71,6 @@ src/Explorer/DataSamples/ContainerSampleGenerator.test.ts src/Explorer/DataSamples/ContainerSampleGenerator.ts src/Explorer/DataSamples/DataSamplesUtil.test.ts src/Explorer/DataSamples/DataSamplesUtil.ts -src/Explorer/Explorer.tsx src/Explorer/Graph/GraphExplorerComponent/ArraysByKeyCache.test.ts src/Explorer/Graph/GraphExplorerComponent/ArraysByKeyCache.ts src/Explorer/Graph/GraphExplorerComponent/D3ForceGraph.test.ts @@ -83,11 +82,6 @@ src/Explorer/Graph/GraphExplorerComponent/GremlinClient.test.ts src/Explorer/Graph/GraphExplorerComponent/GremlinClient.ts src/Explorer/Graph/GraphExplorerComponent/GremlinSimpleClient.test.ts src/Explorer/Graph/GraphExplorerComponent/GremlinSimpleClient.ts -# src/Explorer/Graph/GraphStyleComponent/GraphStyle.test.ts -# src/Explorer/Graph/GraphStyleComponent/GraphStyleComponent.ts - -src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.test.ts -src/Explorer/Menus/CommandBar/CommandBarComponentButtonFactory.ts src/Explorer/Menus/ContextMenu.ts src/Explorer/MostRecentActivity/MostRecentActivity.ts src/Explorer/Notebook/NotebookClientV2.ts @@ -141,7 +135,6 @@ src/Explorer/Tabs/TabsBase.ts src/Explorer/Tabs/TriggerTab.ts src/Explorer/Tabs/UserDefinedFunctionTab.ts src/Explorer/Tree/AccessibleVerticalList.ts -src/Explorer/Tree/Collection.test.ts src/Explorer/Tree/Collection.ts src/Explorer/Tree/ConflictId.ts src/Explorer/Tree/DocumentId.ts @@ -150,65 +143,32 @@ src/Explorer/Tree/ResourceTokenCollection.ts src/Explorer/Tree/StoredProcedure.ts src/Explorer/Tree/TreeComponents.ts src/Explorer/Tree/Trigger.ts -src/Explorer/Tree/UserDefinedFunction.ts src/Explorer/WaitsForTemplateViewModel.ts src/GitHub/GitHubClient.test.ts src/GitHub/GitHubClient.ts src/GitHub/GitHubConnector.ts -src/GitHub/GitHubContentProvider.test.ts -src/GitHub/GitHubContentProvider.ts src/GitHub/GitHubOAuthService.ts src/Index.ts src/Juno/JunoClient.test.ts src/Juno/JunoClient.ts src/Platform/Hosted/Authorization.ts -src/Platform/Hosted/Helpers/ConnectionStringParser.test.ts src/ReactDevTools.ts src/Shared/Constants.ts src/Shared/DefaultExperienceUtility.test.ts src/Shared/DefaultExperienceUtility.ts -src/Shared/ExplorerSettings.ts -src/Shared/PriceEstimateCalculator.ts -src/Shared/StorageUtility.test.ts -src/Shared/StorageUtility.ts src/Shared/appInsights.ts src/SparkClusterManager/ArcadiaResourceManager.ts src/SparkClusterManager/SparkClusterManager.ts src/Terminal/JupyterLabAppFactory.ts src/Terminal/NotebookAppContracts.d.ts -src/Terminal/index.ts -src/TokenProviders/PortalTokenProvider.ts -src/TokenProviders/TokenProviderFactory.ts -src/Utils/PricingUtils.test.ts -src/Utils/QueryUtils.test.ts src/applyExplorerBindings.ts src/global.d.ts src/setupTests.ts -src/Explorer/Controls/AccessibleElement/AccessibleElement.tsx -src/Explorer/Controls/Accordion/AccordionComponent.tsx -src/Explorer/Controls/AccountSwitch/AccountSwitchComponent.test.tsx -src/Explorer/Controls/AccountSwitch/AccountSwitchComponent.tsx -src/Explorer/Controls/AccountSwitch/AccountSwitchComponentAdapter.tsx -src/Explorer/Controls/Arcadia/ArcadiaMenuPicker.tsx -src/Explorer/Controls/CollapsiblePanel/CollapsiblePanel.tsx -src/Explorer/Controls/CommandButton/CommandButtonComponent.tsx -src/Explorer/Controls/DialogReactComponent/DialogComponent.tsx -src/Explorer/Controls/DialogReactComponent/DialogComponentAdapter.tsx -src/Explorer/Controls/Directory/DefaultDirectoryDropdownComponent.test.tsx -src/Explorer/Controls/Directory/DefaultDirectoryDropdownComponent.tsx -src/Explorer/Controls/Directory/DirectoryComponentAdapter.tsx -src/Explorer/Controls/Directory/DirectoryListComponent.test.tsx -src/Explorer/Controls/Directory/DirectoryListComponent.tsx -src/Explorer/Controls/Editor/EditorReact.tsx src/Explorer/Controls/InputTypeahead/InputTypeaheadComponent.tsx src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx src/Explorer/Controls/Notebook/NotebookTerminalComponent.tsx -src/Explorer/Controls/NotebookViewer/NotebookMetadataComponent.tsx -src/NotebookViewer/NotebookViewer.tsx src/Explorer/Controls/NotebookViewer/NotebookViewerComponent.tsx src/Explorer/Controls/TreeComponent/TreeComponent.tsx -src/Explorer/Graph/GraphExplorerComponent/EditorNodePropertiesComponent.test.tsx -src/Explorer/Graph/GraphExplorerComponent/EditorNodePropertiesComponent.tsx src/Explorer/Graph/GraphExplorerComponent/GraphExplorer.test.tsx src/Explorer/Graph/GraphExplorerComponent/GraphExplorer.tsx src/Explorer/Graph/GraphExplorerComponent/GraphVizComponent.tsx @@ -216,43 +176,19 @@ src/Explorer/Graph/GraphExplorerComponent/LeftPaneComponent.tsx src/Explorer/Graph/GraphExplorerComponent/MiddlePaneComponent.tsx src/Explorer/Graph/GraphExplorerComponent/NodePropertiesComponent.test.tsx src/Explorer/Graph/GraphExplorerComponent/NodePropertiesComponent.tsx -src/Explorer/Graph/GraphExplorerComponent/QueryContainerComponent.tsx -src/Explorer/Graph/GraphExplorerComponent/ReadOnlyNeighborsComponent.tsx src/Explorer/Graph/GraphExplorerComponent/ReadOnlyNodePropertiesComponent.test.tsx src/Explorer/Graph/GraphExplorerComponent/ReadOnlyNodePropertiesComponent.tsx src/Explorer/Menus/CommandBar/CommandBarUtil.tsx -src/Explorer/Menus/NotificationConsole/NotificationConsoleComponent.test.tsx -src/Explorer/Notebook/NotebookComponent/NotebookComponent.tsx src/Explorer/Notebook/NotebookComponent/NotebookComponentAdapter.tsx src/Explorer/Notebook/NotebookComponent/NotebookComponentBootstrapper.tsx src/Explorer/Notebook/NotebookComponent/VirtualCommandBarComponent.tsx -src/Explorer/Notebook/NotebookComponent/contents/file/index.tsx -src/Explorer/Notebook/NotebookComponent/contents/file/text-file.tsx src/Explorer/Notebook/NotebookComponent/contents/index.tsx -src/Explorer/Notebook/NotebookRenderer/AzureTheme.tsx src/Explorer/Notebook/NotebookRenderer/NotebookReadOnlyRenderer.tsx src/Explorer/Notebook/NotebookRenderer/NotebookRenderer.tsx -src/Explorer/Notebook/NotebookRenderer/Prompt.tsx -src/Explorer/Notebook/NotebookRenderer/PromptContent.tsx -src/Explorer/Notebook/NotebookRenderer/StatusBar.test.tsx -src/Explorer/Notebook/NotebookRenderer/StatusBar.tsx -src/Explorer/Notebook/NotebookRenderer/Toolbar.tsx -src/Explorer/Notebook/NotebookRenderer/decorators/CellCreator.tsx -src/Explorer/Notebook/NotebookRenderer/decorators/CellLabeler.tsx -src/Explorer/Notebook/NotebookRenderer/decorators/HoverableCell.tsx src/Explorer/Notebook/NotebookRenderer/decorators/draggable/index.tsx src/Explorer/Notebook/NotebookRenderer/decorators/hijack-scroll/index.tsx src/Explorer/Notebook/NotebookRenderer/decorators/kbd-shortcuts/index.tsx src/Explorer/Notebook/temp/inputs/connected-editors/codemirror.tsx -src/Explorer/Notebook/temp/inputs/editor.tsx -src/Explorer/Notebook/temp/markdown-cell.tsx -src/Explorer/Notebook/temp/source.tsx -src/Explorer/Notebook/temp/syntax-highlighter/index.tsx -src/Explorer/SplashScreen/SplashScreen.tsx -src/Explorer/Tabs/GalleryTab.tsx -src/Explorer/Tabs/NotebookViewerTab.tsx -src/Explorer/Tabs/TerminalTab.tsx src/Explorer/Tree/ResourceTreeAdapter.tsx -src/Explorer/Tree/ResourceTreeAdapterForResourceToken.tsx __mocks__/monaco-editor.ts src/Explorer/Tree/ResourceTreeAdapterForResourceToken.test.tsx \ No newline at end of file diff --git a/configs/mpac.json b/configs/mpac.json index d8e5604d2..7c270c6d5 100644 --- a/configs/mpac.json +++ b/configs/mpac.json @@ -1,4 +1,3 @@ { - "JUNO_ENDPOINT": "https://tools-staging.cosmos.azure.com", - "enableSchemaAnalyzer": true + "JUNO_ENDPOINT": "https://tools-staging.cosmos.azure.com" } \ No newline at end of file diff --git a/src/Common/Constants.ts b/src/Common/Constants.ts index 57b65c43e..fc97d559d 100644 --- a/src/Common/Constants.ts +++ b/src/Common/Constants.ts @@ -94,7 +94,7 @@ export class Flights { public static readonly MongoIndexEditor = "mongoindexeditor"; public static readonly MongoIndexing = "mongoindexing"; public static readonly AutoscaleTest = "autoscaletest"; - public static readonly SchemaAnalyzer = "schemaanalyzer"; + public static readonly PartitionKeyTest = "partitionkeytest"; } export class AfecFeatures { diff --git a/src/Common/HeadersUtility.test.ts b/src/Common/HeadersUtility.test.ts index 5f46c420f..5432227fa 100644 --- a/src/Common/HeadersUtility.test.ts +++ b/src/Common/HeadersUtility.test.ts @@ -1,6 +1,6 @@ -import * as HeadersUtility from "./HeadersUtility"; -import { ExplorerSettings } from "../Shared/ExplorerSettings"; +import * as ExplorerSettings from "../Shared/ExplorerSettings"; import { LocalStorageUtility, StorageKey } from "../Shared/StorageUtility"; +import * as HeadersUtility from "./HeadersUtility"; describe("Headers Utility", () => { describe("shouldEnableCrossPartitionKeyForResourceWithPartitionKey()", () => { diff --git a/src/ConfigContext.ts b/src/ConfigContext.ts index e83a4e9ec..289e650cb 100644 --- a/src/ConfigContext.ts +++ b/src/ConfigContext.ts @@ -27,7 +27,6 @@ export interface ConfigContext { hostedExplorerURL: string; armAPIVersion?: string; allowedJunoOrigins: string[]; - enableSchemaAnalyzer: boolean; msalRedirectURI?: string; } @@ -63,7 +62,6 @@ let configContext: Readonly = { "https://tools-staging.cosmos.azure.com", "https://localhost", ], - enableSchemaAnalyzer: false, }; export function resetConfigContext(): void { diff --git a/src/Contracts/DataModels.ts b/src/Contracts/DataModels.ts index e71c63cd9..efd5ffb78 100644 --- a/src/Contracts/DataModels.ts +++ b/src/Contracts/DataModels.ts @@ -9,6 +9,7 @@ export interface DatabaseAccount { export interface DatabaseAccountExtendedProperties { documentEndpoint?: string; + disableLocalAuth?: boolean; tableEndpoint?: string; gremlinEndpoint?: string; cassandraEndpoint?: string; diff --git a/src/Explorer/ContextMenuButtonFactory.tsx b/src/Explorer/ContextMenuButtonFactory.tsx index ece39b07d..70d02e5aa 100644 --- a/src/Explorer/ContextMenuButtonFactory.tsx +++ b/src/Explorer/ContextMenuButtonFactory.tsx @@ -109,7 +109,7 @@ export const createCollectionContextMenuButton = ( iconSrc: AddUdfIcon, onClick: () => { const selectedCollection: ViewModels.Collection = useSelectedNode.getState().findSelectedCollection(); - selectedCollection && selectedCollection.onNewUserDefinedFunctionClick(selectedCollection, undefined); + selectedCollection && selectedCollection.onNewUserDefinedFunctionClick(selectedCollection); }, label: "New UDF", }); diff --git a/src/Explorer/Controls/Accordion/AccordionComponent.tsx b/src/Explorer/Controls/Accordion/AccordionComponent.tsx index 06563c4a3..f2b5c1b45 100644 --- a/src/Explorer/Controls/Accordion/AccordionComponent.tsx +++ b/src/Explorer/Controls/Accordion/AccordionComponent.tsx @@ -8,7 +8,9 @@ import TriangleDownIcon from "../../../../images/Triangle-down.svg"; import TriangleRightIcon from "../../../../images/Triangle-right.svg"; import * as Constants from "../../../Common/Constants"; -export interface AccordionComponentProps {} +export interface AccordionComponentProps { + children: React.ReactNode; +} export class AccordionComponent extends React.Component { public render(): JSX.Element { @@ -78,7 +80,7 @@ export class AccordionItemComponent extends React.Component): void => { + private onHeaderClick = (): void => { this.setState({ isExpanded: !this.state.isExpanded }); }; diff --git a/src/Explorer/Controls/CommandButton/CommandButtonComponent.tsx b/src/Explorer/Controls/CommandButton/CommandButtonComponent.tsx index f4694cdbc..2c0f6f283 100644 --- a/src/Explorer/Controls/CommandButton/CommandButtonComponent.tsx +++ b/src/Explorer/Controls/CommandButton/CommandButtonComponent.tsx @@ -121,8 +121,7 @@ export class CommandButtonComponent extends React.Component { + queryEditorModel.onDidChangeContent(() => { const queryEditorModel = this.editor.getModel(); this.props.onContentChanged(queryEditorModel.getValue()); }); diff --git a/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx b/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx index 29e1a2900..d6b28775d 100644 --- a/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx +++ b/src/Explorer/Controls/GitHub/GitHubReposComponent.tsx @@ -56,7 +56,7 @@ export class GitHubReposComponent extends React.Component -
{content}
+
{content}
{!this.props.showAuthorizeAccess && ( <>
diff --git a/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx b/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx index 627041b38..e991fe05c 100644 --- a/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx +++ b/src/Explorer/Controls/Notebook/NotebookTerminalComponent.test.tsx @@ -1,154 +1,90 @@ +import { shallow } from "enzyme"; +import React from "react"; import * as DataModels from "../../../Contracts/DataModels"; -import { NotebookTerminalComponent } from "./NotebookTerminalComponent"; +import { NotebookTerminalComponent, NotebookTerminalComponentProps } from "./NotebookTerminalComponent"; -const createTestDatabaseAccount = (): DataModels.DatabaseAccount => { - return { - id: "testId", - kind: "testKind", - location: "testLocation", - name: "testName", - properties: { - cassandraEndpoint: null, - documentEndpoint: "https://testDocumentEndpoint.azure.com/", - gremlinEndpoint: null, - tableEndpoint: null, - }, - type: "testType", - }; +const testAccount: DataModels.DatabaseAccount = { + id: "id", + kind: "kind", + location: "location", + name: "name", + properties: { + documentEndpoint: "https://testDocumentEndpoint.azure.com/", + }, + type: "type", }; -const createTestMongo32DatabaseAccount = (): DataModels.DatabaseAccount => { - return { - id: "testId", - kind: "testKind", - location: "testLocation", - name: "testName", - properties: { - cassandraEndpoint: null, - documentEndpoint: "https://testDocumentEndpoint.azure.com/", - gremlinEndpoint: null, - tableEndpoint: null, - }, - type: "testType", - }; +const testMongo32Account: DataModels.DatabaseAccount = { + ...testAccount, }; -const createTestMongo36DatabaseAccount = (): DataModels.DatabaseAccount => { - return { - id: "testId", - kind: "testKind", - location: "testLocation", - name: "testName", - properties: { - cassandraEndpoint: null, - documentEndpoint: "https://testDocumentEndpoint.azure.com/", - gremlinEndpoint: null, - tableEndpoint: null, - mongoEndpoint: "https://testMongoEndpoint.azure.com/", - }, - type: "testType", - }; +const testMongo36Account: DataModels.DatabaseAccount = { + ...testAccount, + properties: { + mongoEndpoint: "https://testMongoEndpoint.azure.com/", + }, }; -const createTestCassandraDatabaseAccount = (): DataModels.DatabaseAccount => { - return { - id: "testId", - kind: "testKind", - location: "testLocation", - name: "testName", - properties: { - cassandraEndpoint: "https://testCassandraEndpoint.azure.com/", - documentEndpoint: null, - gremlinEndpoint: null, - tableEndpoint: null, - }, - type: "testType", - }; +const testCassandraAccount: DataModels.DatabaseAccount = { + ...testAccount, + properties: { + cassandraEndpoint: "https://testCassandraEndpoint.azure.com/", + }, }; -const createTerminal = (): NotebookTerminalComponent => { - return new NotebookTerminalComponent({ - notebookServerInfo: { - authToken: "testAuthToken", - notebookServerEndpoint: "https://testNotebookServerEndpoint.azure.com/", - }, - databaseAccount: createTestDatabaseAccount(), - }); +const testNotebookServerInfo: DataModels.NotebookWorkspaceConnectionInfo = { + authToken: "authToken", + notebookServerEndpoint: "https://testNotebookServerEndpoint.azure.com", }; -const createMongo32Terminal = (): NotebookTerminalComponent => { - return new NotebookTerminalComponent({ - notebookServerInfo: { - authToken: "testAuthToken", - notebookServerEndpoint: "https://testNotebookServerEndpoint.azure.com/mongo", - }, - databaseAccount: createTestMongo32DatabaseAccount(), - }); +const testMongoNotebookServerInfo: DataModels.NotebookWorkspaceConnectionInfo = { + authToken: "authToken", + notebookServerEndpoint: "https://testNotebookServerEndpoint.azure.com/mongo", }; -const createMongo36Terminal = (): NotebookTerminalComponent => { - return new NotebookTerminalComponent({ - notebookServerInfo: { - authToken: "testAuthToken", - notebookServerEndpoint: "https://testNotebookServerEndpoint.azure.com/mongo", - }, - databaseAccount: createTestMongo36DatabaseAccount(), - }); -}; - -const createCassandraTerminal = (): NotebookTerminalComponent => { - return new NotebookTerminalComponent({ - notebookServerInfo: { - authToken: "testAuthToken", - notebookServerEndpoint: "https://testNotebookServerEndpoint.azure.com/cassandra", - }, - databaseAccount: createTestCassandraDatabaseAccount(), - }); +const testCassandraNotebookServerInfo: DataModels.NotebookWorkspaceConnectionInfo = { + authToken: "authToken", + notebookServerEndpoint: "https://testNotebookServerEndpoint.azure.com/cassandra", }; describe("NotebookTerminalComponent", () => { - it("getTerminalParams: Test for terminal", () => { - const terminal: NotebookTerminalComponent = createTerminal(); - const params: Map = terminal.getTerminalParams(); + it("renders terminal", () => { + const props: NotebookTerminalComponentProps = { + databaseAccount: testAccount, + notebookServerInfo: testNotebookServerInfo, + }; - expect(params).toEqual( - new Map([["terminal", "true"]]) - ); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); }); - it("getTerminalParams: Test for Mongo 3.2 terminal", () => { - const terminal: NotebookTerminalComponent = createMongo32Terminal(); - const params: Map = terminal.getTerminalParams(); + it("renders mongo 3.2 shell", () => { + const props: NotebookTerminalComponentProps = { + databaseAccount: testMongo32Account, + notebookServerInfo: testMongoNotebookServerInfo, + }; - expect(params).toEqual( - new Map([ - ["terminal", "true"], - ["terminalEndpoint", new URL(terminal.props.databaseAccount.properties.documentEndpoint).host], - ]) - ); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); }); - it("getTerminalParams: Test for Mongo 3.6 terminal", () => { - const terminal: NotebookTerminalComponent = createMongo36Terminal(); - const params: Map = terminal.getTerminalParams(); + it("renders mongo 3.6 shell", () => { + const props: NotebookTerminalComponentProps = { + databaseAccount: testMongo36Account, + notebookServerInfo: testMongoNotebookServerInfo, + }; - expect(params).toEqual( - new Map([ - ["terminal", "true"], - ["terminalEndpoint", new URL(terminal.props.databaseAccount.properties.mongoEndpoint).host], - ]) - ); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); }); - it("getTerminalParams: Test for Cassandra terminal", () => { - const terminal: NotebookTerminalComponent = createCassandraTerminal(); - const params: Map = terminal.getTerminalParams(); + it("renders cassandra shell", () => { + const props: NotebookTerminalComponentProps = { + databaseAccount: testCassandraAccount, + notebookServerInfo: testCassandraNotebookServerInfo, + }; - expect(params).toEqual( - new Map([ - ["terminal", "true"], - ["terminalEndpoint", new URL(terminal.props.databaseAccount.properties.cassandraEndpoint).host], - ]) - ); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); }); }); diff --git a/src/Explorer/Controls/Notebook/NotebookTerminalComponent.tsx b/src/Explorer/Controls/Notebook/NotebookTerminalComponent.tsx index a7b51e896..637f24192 100644 --- a/src/Explorer/Controls/Notebook/NotebookTerminalComponent.tsx +++ b/src/Explorer/Controls/Notebook/NotebookTerminalComponent.tsx @@ -2,12 +2,12 @@ * Wrapper around Notebook server terminal */ +import postRobot from "post-robot"; import * as React from "react"; import * as DataModels from "../../../Contracts/DataModels"; -import * as StringUtils from "../../../Utils/StringUtils"; +import { TerminalProps } from "../../../Terminal/TerminalProps"; import { userContext } from "../../../UserContext"; -import { TerminalQueryParams } from "../../../Common/Constants"; -import { handleError } from "../../../Common/ErrorHandlingUtils"; +import * as StringUtils from "../../../Utils/StringUtils"; export interface NotebookTerminalComponentProps { notebookServerInfo: DataModels.NotebookWorkspaceConnectionInfo; @@ -15,79 +15,69 @@ export interface NotebookTerminalComponentProps { } export class NotebookTerminalComponent extends React.Component { + private terminalWindow: Window; + constructor(props: NotebookTerminalComponentProps) { super(props); } + componentDidMount(): void { + this.sendPropsToTerminalFrame(); + } + public render(): JSX.Element { return (