diff --git a/frontend/src/metabase-lib/lib/Mode.js b/frontend/src/metabase-lib/lib/Mode.js
index badcebc266dd59029bed44591b3b243d8c93a7d4..c91589e9f17cbe70834f58facf4414d26305d596 100644
--- a/frontend/src/metabase-lib/lib/Mode.js
+++ b/frontend/src/metabase-lib/lib/Mode.js
@@ -1,7 +1,7 @@
 import _ from "underscore";
 
 import Question from "metabase-lib/lib/Question";
-import { getMode } from "metabase/qb/lib/modes";
+import { getMode } from "metabase/modes/lib/modes";
 
 import type {
   ClickAction,
diff --git a/frontend/src/metabase-lib/lib/Question.js b/frontend/src/metabase-lib/lib/Question.js
index ea06fe511f2dbd439bb9af2824ac3157693dc9e3..a685c9d6871dfb32f3146835d4bab57e472e2a00 100644
--- a/frontend/src/metabase-lib/lib/Question.js
+++ b/frontend/src/metabase-lib/lib/Question.js
@@ -24,7 +24,7 @@ import {
   distribution,
   toUnderlyingRecords,
   drillUnderlyingRecords,
-} from "metabase/qb/lib/actions";
+} from "metabase/modes/lib/actions";
 
 import _ from "underscore";
 import { chain, assoc } from "icepick";
diff --git a/frontend/src/metabase/qb/.eslintrc b/frontend/src/metabase/modes/.eslintrc
similarity index 100%
rename from frontend/src/metabase/qb/.eslintrc
rename to frontend/src/metabase/modes/.eslintrc
diff --git a/frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx b/frontend/src/metabase/modes/components/TimeseriesFilterWidget.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/TimeseriesFilterWidget.jsx
rename to frontend/src/metabase/modes/components/TimeseriesFilterWidget.jsx
diff --git a/frontend/src/metabase/qb/components/TimeseriesGroupingWidget.jsx b/frontend/src/metabase/modes/components/TimeseriesGroupingWidget.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/TimeseriesGroupingWidget.jsx
rename to frontend/src/metabase/modes/components/TimeseriesGroupingWidget.jsx
diff --git a/frontend/src/metabase/qb/components/__support__/fixtures.js b/frontend/src/metabase/modes/components/__support__/fixtures.js
similarity index 100%
rename from frontend/src/metabase/qb/components/__support__/fixtures.js
rename to frontend/src/metabase/modes/components/__support__/fixtures.js
diff --git a/frontend/src/metabase/qb/components/actions/CommonMetricsAction.jsx b/frontend/src/metabase/modes/components/actions/CommonMetricsAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/CommonMetricsAction.jsx
rename to frontend/src/metabase/modes/components/actions/CommonMetricsAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/CompareWithTable.jsx b/frontend/src/metabase/modes/components/actions/CompareWithTable.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/CompareWithTable.jsx
rename to frontend/src/metabase/modes/components/actions/CompareWithTable.jsx
diff --git a/frontend/src/metabase/qb/components/actions/CompoundQueryAction.jsx b/frontend/src/metabase/modes/components/actions/CompoundQueryAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/CompoundQueryAction.jsx
rename to frontend/src/metabase/modes/components/actions/CompoundQueryAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/CountByTimeAction.jsx b/frontend/src/metabase/modes/components/actions/CountByTimeAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/CountByTimeAction.jsx
rename to frontend/src/metabase/modes/components/actions/CountByTimeAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/PivotByAction.jsx b/frontend/src/metabase/modes/components/actions/PivotByAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/PivotByAction.jsx
rename to frontend/src/metabase/modes/components/actions/PivotByAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/PivotByCategoryAction.jsx b/frontend/src/metabase/modes/components/actions/PivotByCategoryAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/PivotByCategoryAction.jsx
rename to frontend/src/metabase/modes/components/actions/PivotByCategoryAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/PivotByLocationAction.jsx b/frontend/src/metabase/modes/components/actions/PivotByLocationAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/PivotByLocationAction.jsx
rename to frontend/src/metabase/modes/components/actions/PivotByLocationAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/PivotByTimeAction.jsx b/frontend/src/metabase/modes/components/actions/PivotByTimeAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/PivotByTimeAction.jsx
rename to frontend/src/metabase/modes/components/actions/PivotByTimeAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.jsx b/frontend/src/metabase/modes/components/actions/SummarizeBySegmentMetricAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/SummarizeBySegmentMetricAction.jsx
rename to frontend/src/metabase/modes/components/actions/SummarizeBySegmentMetricAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/UnderlyingDataAction.jsx b/frontend/src/metabase/modes/components/actions/UnderlyingDataAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/UnderlyingDataAction.jsx
rename to frontend/src/metabase/modes/components/actions/UnderlyingDataAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/UnderlyingRecordsAction.jsx b/frontend/src/metabase/modes/components/actions/UnderlyingRecordsAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/UnderlyingRecordsAction.jsx
rename to frontend/src/metabase/modes/components/actions/UnderlyingRecordsAction.jsx
diff --git a/frontend/src/metabase/qb/components/actions/XRayCard.jsx b/frontend/src/metabase/modes/components/actions/XRayCard.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/XRayCard.jsx
rename to frontend/src/metabase/modes/components/actions/XRayCard.jsx
diff --git a/frontend/src/metabase/qb/components/actions/index.js b/frontend/src/metabase/modes/components/actions/index.js
similarity index 100%
rename from frontend/src/metabase/qb/components/actions/index.js
rename to frontend/src/metabase/modes/components/actions/index.js
diff --git a/frontend/src/metabase/qb/components/drill/AutomaticDashboardDrill.jsx b/frontend/src/metabase/modes/components/drill/AutomaticDashboardDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/AutomaticDashboardDrill.jsx
rename to frontend/src/metabase/modes/components/drill/AutomaticDashboardDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/CompareToRestDrill.js b/frontend/src/metabase/modes/components/drill/CompareToRestDrill.js
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/CompareToRestDrill.js
rename to frontend/src/metabase/modes/components/drill/CompareToRestDrill.js
diff --git a/frontend/src/metabase/qb/components/drill/DistributionDrill.jsx b/frontend/src/metabase/modes/components/drill/DistributionDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/DistributionDrill.jsx
rename to frontend/src/metabase/modes/components/drill/DistributionDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/FormatAction.jsx b/frontend/src/metabase/modes/components/drill/FormatAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/FormatAction.jsx
rename to frontend/src/metabase/modes/components/drill/FormatAction.jsx
diff --git a/frontend/src/metabase/qb/components/drill/ObjectDetailDrill.jsx b/frontend/src/metabase/modes/components/drill/ObjectDetailDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/ObjectDetailDrill.jsx
rename to frontend/src/metabase/modes/components/drill/ObjectDetailDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/PivotByCategoryDrill.jsx b/frontend/src/metabase/modes/components/drill/PivotByCategoryDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/PivotByCategoryDrill.jsx
rename to frontend/src/metabase/modes/components/drill/PivotByCategoryDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/PivotByLocationDrill.jsx b/frontend/src/metabase/modes/components/drill/PivotByLocationDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/PivotByLocationDrill.jsx
rename to frontend/src/metabase/modes/components/drill/PivotByLocationDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/PivotByTimeDrill.jsx b/frontend/src/metabase/modes/components/drill/PivotByTimeDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/PivotByTimeDrill.jsx
rename to frontend/src/metabase/modes/components/drill/PivotByTimeDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/QuickFilterDrill.jsx b/frontend/src/metabase/modes/components/drill/QuickFilterDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/QuickFilterDrill.jsx
rename to frontend/src/metabase/modes/components/drill/QuickFilterDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/SortAction.jsx b/frontend/src/metabase/modes/components/drill/SortAction.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/SortAction.jsx
rename to frontend/src/metabase/modes/components/drill/SortAction.jsx
diff --git a/frontend/src/metabase/qb/components/drill/SummarizeColumnByTimeDrill.js b/frontend/src/metabase/modes/components/drill/SummarizeColumnByTimeDrill.js
similarity index 95%
rename from frontend/src/metabase/qb/components/drill/SummarizeColumnByTimeDrill.js
rename to frontend/src/metabase/modes/components/drill/SummarizeColumnByTimeDrill.js
index 27c46dd62fdd19af2c33c388f92c51ac3d56b21e..a4b67b6aee67ace2656a4d97ce8979c171833ef0 100644
--- a/frontend/src/metabase/qb/components/drill/SummarizeColumnByTimeDrill.js
+++ b/frontend/src/metabase/modes/components/drill/SummarizeColumnByTimeDrill.js
@@ -3,7 +3,7 @@
 import React from "react";
 import { t } from "c-3po";
 import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
-import { getFieldRefFromColumn } from "metabase/qb/lib/actions";
+import { getFieldRefFromColumn } from "metabase/modes/lib/actions";
 import {
   isDate,
   getAggregator,
diff --git a/frontend/src/metabase/qb/components/drill/SummarizeColumnDrill.js b/frontend/src/metabase/modes/components/drill/SummarizeColumnDrill.js
similarity index 95%
rename from frontend/src/metabase/qb/components/drill/SummarizeColumnDrill.js
rename to frontend/src/metabase/modes/components/drill/SummarizeColumnDrill.js
index 50d12fb2b68d168c6a5c86dd894271d283167bd0..6be83d62b1c2f3adba082f41fbd895e87efdf2b4 100644
--- a/frontend/src/metabase/qb/components/drill/SummarizeColumnDrill.js
+++ b/frontend/src/metabase/modes/components/drill/SummarizeColumnDrill.js
@@ -1,6 +1,6 @@
 /* @flow */
 
-import { getFieldRefFromColumn } from "metabase/qb/lib/actions";
+import { getFieldRefFromColumn } from "metabase/modes/lib/actions";
 import {
   getAggregator,
   isCompatibleAggregatorForField,
diff --git a/frontend/src/metabase/qb/components/drill/UnderlyingRecordsDrill.jsx b/frontend/src/metabase/modes/components/drill/UnderlyingRecordsDrill.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/UnderlyingRecordsDrill.jsx
rename to frontend/src/metabase/modes/components/drill/UnderlyingRecordsDrill.jsx
diff --git a/frontend/src/metabase/qb/components/drill/ZoomDrill.jsx b/frontend/src/metabase/modes/components/drill/ZoomDrill.jsx
similarity index 89%
rename from frontend/src/metabase/qb/components/drill/ZoomDrill.jsx
rename to frontend/src/metabase/modes/components/drill/ZoomDrill.jsx
index 4ecd90a06c85b03b913350ecb63def9d29fbd33e..d4b0e18d6b014060a48583e6bd97fdf9dba50cda 100644
--- a/frontend/src/metabase/qb/components/drill/ZoomDrill.jsx
+++ b/frontend/src/metabase/modes/components/drill/ZoomDrill.jsx
@@ -1,6 +1,6 @@
 /* @flow */
 
-import { drillDownForDimensions } from "metabase/qb/lib/actions";
+import { drillDownForDimensions } from "metabase/modes/lib/actions";
 
 import type {
   ClickAction,
diff --git a/frontend/src/metabase/qb/components/drill/index.js b/frontend/src/metabase/modes/components/drill/index.js
similarity index 100%
rename from frontend/src/metabase/qb/components/drill/index.js
rename to frontend/src/metabase/modes/components/drill/index.js
diff --git a/frontend/src/metabase/qb/components/modes/DefaultMode.jsx b/frontend/src/metabase/modes/components/modes/DefaultMode.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/modes/DefaultMode.jsx
rename to frontend/src/metabase/modes/components/modes/DefaultMode.jsx
diff --git a/frontend/src/metabase/qb/components/modes/GeoMode.jsx b/frontend/src/metabase/modes/components/modes/GeoMode.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/modes/GeoMode.jsx
rename to frontend/src/metabase/modes/components/modes/GeoMode.jsx
diff --git a/frontend/src/metabase/qb/components/modes/MetricMode.jsx b/frontend/src/metabase/modes/components/modes/MetricMode.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/modes/MetricMode.jsx
rename to frontend/src/metabase/modes/components/modes/MetricMode.jsx
diff --git a/frontend/src/metabase/qb/components/modes/NativeMode.jsx b/frontend/src/metabase/modes/components/modes/NativeMode.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/modes/NativeMode.jsx
rename to frontend/src/metabase/modes/components/modes/NativeMode.jsx
diff --git a/frontend/src/metabase/qb/components/modes/ObjectMode.jsx b/frontend/src/metabase/modes/components/modes/ObjectMode.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/modes/ObjectMode.jsx
rename to frontend/src/metabase/modes/components/modes/ObjectMode.jsx
diff --git a/frontend/src/metabase/qb/components/modes/PivotMode.jsx b/frontend/src/metabase/modes/components/modes/PivotMode.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/modes/PivotMode.jsx
rename to frontend/src/metabase/modes/components/modes/PivotMode.jsx
diff --git a/frontend/src/metabase/qb/components/modes/SegmentMode.jsx b/frontend/src/metabase/modes/components/modes/SegmentMode.jsx
similarity index 100%
rename from frontend/src/metabase/qb/components/modes/SegmentMode.jsx
rename to frontend/src/metabase/modes/components/modes/SegmentMode.jsx
diff --git a/frontend/src/metabase/qb/components/modes/TimeseriesMode.jsx b/frontend/src/metabase/modes/components/modes/TimeseriesMode.jsx
similarity index 85%
rename from frontend/src/metabase/qb/components/modes/TimeseriesMode.jsx
rename to frontend/src/metabase/modes/components/modes/TimeseriesMode.jsx
index 8501d54927a6333b1636ecd76a56859bb1607948..0fe1b0394754cd2e9d24823dbd0ccd685ab762d6 100644
--- a/frontend/src/metabase/qb/components/modes/TimeseriesMode.jsx
+++ b/frontend/src/metabase/modes/components/modes/TimeseriesMode.jsx
@@ -3,8 +3,8 @@
 import React from "react";
 
 // import TimeseriesGroupingWidget
-//     from "metabase/qb/components/TimeseriesGroupingWidget";
-import TimeseriesFilterWidget from "metabase/qb/components/TimeseriesFilterWidget";
+//     from "metabase/modes/components/TimeseriesGroupingWidget";
+import TimeseriesFilterWidget from "metabase/modes/components/TimeseriesFilterWidget";
 
 import { DEFAULT_ACTIONS } from "../actions";
 import { DEFAULT_DRILLS } from "../drill";
@@ -21,7 +21,7 @@ import type {
   DatasetQuery,
 } from "metabase/meta/types/Card";
 import type { TableMetadata } from "metabase/meta/types/Metadata";
-import TimeseriesGroupingWidget from "metabase/qb/components/TimeseriesGroupingWidget";
+import TimeseriesGroupingWidget from "metabase/modes/components/TimeseriesGroupingWidget";
 
 type Props = {
   lastRunCard: CardObject,
diff --git a/frontend/src/metabase/qb/lib/actions.js b/frontend/src/metabase/modes/lib/actions.js
similarity index 100%
rename from frontend/src/metabase/qb/lib/actions.js
rename to frontend/src/metabase/modes/lib/actions.js
diff --git a/frontend/src/metabase/qb/lib/drilldown.js b/frontend/src/metabase/modes/lib/drilldown.js
similarity index 100%
rename from frontend/src/metabase/qb/lib/drilldown.js
rename to frontend/src/metabase/modes/lib/drilldown.js
diff --git a/frontend/src/metabase/qb/lib/modes.js b/frontend/src/metabase/modes/lib/modes.js
similarity index 100%
rename from frontend/src/metabase/qb/lib/modes.js
rename to frontend/src/metabase/modes/lib/modes.js
diff --git a/frontend/src/metabase/query_builder/selectors.js b/frontend/src/metabase/query_builder/selectors.js
index 686a4cf675c7e39889d31c6bdd998ed3cd1e8aa7..5ceb82866682369a04e6990709a140bc57ba5815 100644
--- a/frontend/src/metabase/query_builder/selectors.js
+++ b/frontend/src/metabase/query_builder/selectors.js
@@ -101,7 +101,7 @@ export const getDatabaseFields = createSelector(
   (databaseId, databaseFields) => databaseFields[databaseId],
 );
 
-import { getMode as getMode_ } from "metabase/qb/lib/modes";
+import { getMode as getMode_ } from "metabase/modes/lib/modes";
 import { getAlerts } from "metabase/alert/selectors";
 import {
   extractRemappings,
diff --git a/frontend/src/metabase/visualizations/components/LeafletMap.jsx b/frontend/src/metabase/visualizations/components/LeafletMap.jsx
index fbf0e019631754da36d8c0b46a6465ecf15b894d..87c5363e6432f8b43d4f564b07fb0ddfc82b0bbd 100644
--- a/frontend/src/metabase/visualizations/components/LeafletMap.jsx
+++ b/frontend/src/metabase/visualizations/components/LeafletMap.jsx
@@ -11,7 +11,7 @@ import "leaflet-draw";
 
 import _ from "underscore";
 
-import { updateLatLonFilter } from "metabase/qb/lib/actions";
+import { updateLatLonFilter } from "metabase/modes/lib/actions";
 
 export default class LeafletMap extends Component {
   componentDidMount() {
diff --git a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
index 8524453f8603bdcf3add084ad353449aa2d6765c..78702d30463f65a9ffc13a2f91e94808787c31b7 100644
--- a/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
+++ b/frontend/src/metabase/visualizations/lib/LineAreaBarRenderer.js
@@ -61,7 +61,7 @@ import { isStructured } from "metabase/meta/Card";
 import {
   updateDateTimeFilter,
   updateNumericFilter,
-} from "metabase/qb/lib/actions";
+} from "metabase/modes/lib/actions";
 
 import { lineAddons } from "./graph/addons";
 import { initBrush } from "./graph/brush";
diff --git a/frontend/test/metabase-lib/Action.unit.spec.js b/frontend/test/metabase-lib/lib/Action.unit.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/Action.unit.spec.js
rename to frontend/test/metabase-lib/lib/Action.unit.spec.js
diff --git a/frontend/test/metabase-lib/Dimension.unit.spec.js b/frontend/test/metabase-lib/lib/Dimension.unit.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/Dimension.unit.spec.js
rename to frontend/test/metabase-lib/lib/Dimension.unit.spec.js
diff --git a/frontend/test/metabase-lib/Mode.unit.spec.js b/frontend/test/metabase-lib/lib/Mode.unit.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/Mode.unit.spec.js
rename to frontend/test/metabase-lib/lib/Mode.unit.spec.js
diff --git a/frontend/test/metabase-lib/Question.e2e.spec.js b/frontend/test/metabase-lib/lib/Question.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/Question.e2e.spec.js
rename to frontend/test/metabase-lib/lib/Question.e2e.spec.js
diff --git a/frontend/test/metabase-lib/Question.unit.spec.js b/frontend/test/metabase-lib/lib/Question.unit.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/Question.unit.spec.js
rename to frontend/test/metabase-lib/lib/Question.unit.spec.js
diff --git a/frontend/test/metabase-lib/metadata/Table.unit.spec.js b/frontend/test/metabase-lib/lib/metadata/Table.unit.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/metadata/Table.unit.spec.js
rename to frontend/test/metabase-lib/lib/metadata/Table.unit.spec.js
diff --git a/frontend/test/metabase-lib/queries/NativeQuery.unit.spec.js b/frontend/test/metabase-lib/lib/queries/NativeQuery.unit.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/queries/NativeQuery.unit.spec.js
rename to frontend/test/metabase-lib/lib/queries/NativeQuery.unit.spec.js
diff --git a/frontend/test/metabase-lib/queries/StructuredQuery.unit.spec.js b/frontend/test/metabase-lib/lib/queries/StructuredQuery.unit.spec.js
similarity index 100%
rename from frontend/test/metabase-lib/queries/StructuredQuery.unit.spec.js
rename to frontend/test/metabase-lib/lib/queries/StructuredQuery.unit.spec.js
diff --git a/frontend/test/metabase/dashboards/dashboards.e2e.spec.js b/frontend/test/metabase/dashboards/dashboards.e2e.spec.js
deleted file mode 100644
index 93d6c7d32395b477186b3c967c937cb1ef967635..0000000000000000000000000000000000000000
--- a/frontend/test/metabase/dashboards/dashboards.e2e.spec.js
+++ /dev/null
@@ -1,155 +0,0 @@
-import {
-  createTestStore,
-  useSharedAdminLogin,
-} from "__support__/e2e_tests";
-import { click, clickButton, setInputValue } from "__support__/enzyme_utils";
-
-import { mount } from "enzyme";
-
-import Dashboards from "metabase/entities/dashboards";
-
-import CreateDashboardModal from "metabase/components/CreateDashboardModal";
-import { FETCH_DASHBOARD } from "metabase/dashboard/dashboard";
-import { DashboardApi } from "metabase/services";
-import SearchHeader from "metabase/components/SearchHeader";
-import EmptyState from "metabase/components/EmptyState";
-import Dashboard from "metabase/dashboard/components/Dashboard";
-import ArchivedItem from "metabase/components/ArchivedItem";
-
-/*
- * disable these tests for now since they break with the new way we're doing
- * dashboard listing. the same functionality tested here should be re-tested
- * with a new set of tests that works for the new layout in collection landings
- */
-const DashboardListItem =
-  "HACK: placeholder to appease linter. this component was removed";
-xdescribe("dashboards list", () => {
-  beforeAll(async () => {
-    useSharedAdminLogin();
-  });
-
-  afterAll(async () => {
-    const dashboardIds = (await DashboardApi.list())
-      .filter(dash => !dash.archived)
-      .map(dash => dash.id);
-
-    await Promise.all(
-      dashboardIds.map(id => DashboardApi.update({ id, archived: true })),
-    );
-  });
-
-  it("should let you create a dashboard when there are no existing dashboards", async () => {
-    const store = await createTestStore();
-    store.pushPath("/dashboards");
-    const app = mount(store.getAppContainer());
-
-    await store.waitForActions([Dashboards.actionTypes.FETCH_LIST]);
-
-    // // Create a new dashboard in the empty state (EmptyState react component)
-    click(app.find(".Button.Button--primary"));
-    // click(app.find(".Icon.Icon-add"))
-
-    const modal = app.find(CreateDashboardModal);
-
-    setInputValue(
-      modal.find('input[name="name"]'),
-      "Customer Feedback Analysis",
-    );
-    setInputValue(
-      modal.find('input[name="description"]'),
-      "For seeing the usual response times, feedback topics, our response rate, how often customers are directed to our knowledge base instead of providing a customized response",
-    );
-    clickButton(modal.find(".Button--primary"));
-
-    // should navigate to dashboard page
-    await store.waitForActions(FETCH_DASHBOARD);
-    expect(app.find(Dashboard).length).toBe(1);
-  });
-
-  it("should let you create a dashboard when there are existing dashboards", async () => {
-    // Return to the dashboard list and check that we see an expected list item
-    const store = await createTestStore();
-    store.pushPath("/dashboards");
-    const app = mount(store.getAppContainer());
-
-    await store.waitForActions([Dashboards.actionTypes.FETCH_LIST]);
-    expect(app.find(DashboardListItem).length).toBe(1);
-
-    // Create another one
-    click(app.find(".Icon.Icon-add"));
-    const modal2 = app.find(CreateDashboardModal);
-    setInputValue(
-      modal2.find('input[name="name"]'),
-      "Some Excessively Long Dashboard Title Just For Fun",
-    );
-    setInputValue(modal2.find('input[name="description"]'), "");
-    clickButton(modal2.find(".Button--primary"));
-
-    await store.waitForActions(FETCH_DASHBOARD);
-  });
-
-  xit("should let you search form both title and description", async () => {
-    const store = await createTestStore();
-    store.pushPath("/dashboards");
-    const app = mount(store.getAppContainer());
-    await store.waitForActions([Dashboards.actionTypes.FETCH_LIST]);
-
-    setInputValue(
-      app.find(SearchHeader).find("input"),
-      "this should produce no results",
-    );
-    expect(app.find(EmptyState).length).toBe(1);
-
-    // Should search from both title and description
-    setInputValue(app.find(SearchHeader).find("input"), "usual response times");
-    expect(app.find(DashboardListItem).text()).toMatch(
-      /Customer Feedback Analysis/,
-    );
-  });
-
-  xit("should let you favorite and unfavorite dashboards", async () => {
-    const store = await createTestStore();
-    store.pushPath("/dashboards");
-    const app = mount(store.getAppContainer());
-    await store.waitForActions([Dashboards.actionTypes.FETCH_LIST]);
-
-    click(
-      app
-        .find(DashboardListItem)
-        .first()
-        .find(".Icon-staroutline"),
-    );
-    await store.waitForActions([Dashboards.actionTypes.UPDATE]);
-
-    click(app.find(".TestPopover").find('h4[children="Favorites"]'));
-
-    click(
-      app
-        .find(DashboardListItem)
-        .first()
-        .find(".Icon-star")
-        .first(),
-    );
-    await store.waitForActions([Dashboards.actionTypes.UPDATE]);
-    expect(app.find(EmptyState).length).toBe(1);
-  });
-
-  xit("should let you archive and unarchive dashboards", async () => {
-    const store = await createTestStore();
-    store.pushPath("/dashboards");
-    const app = mount(store.getAppContainer());
-    await store.waitForActions([Dashboards.actionTypes.FETCH_LIST]);
-
-    click(
-      app
-        .find(DashboardListItem)
-        .first()
-        .find(".Icon-archive"),
-    );
-    await store.waitForActions([Dashboards.actionTypes.UPDATE_ACTION]);
-
-    click(app.find(".Icon-viewArchive"));
-    //await store.waitForActions([FETCH_ARCHIVE]);
-    expect(app.find(ArchivedItem).length).toBeGreaterThan(0);
-  });
-});
diff --git a/frontend/test/metabase/modes/TimeseriesFilterWidget.unit.spec.jsx b/frontend/test/metabase/modes/TimeseriesFilterWidget.unit.spec.jsx
index ac1ee1f7de29657664bf7c53e6f297a91cd3d01a..e500733986b92b8ebe3ee088b3b874280d6661ec 100644
--- a/frontend/test/metabase/modes/TimeseriesFilterWidget.unit.spec.jsx
+++ b/frontend/test/metabase/modes/TimeseriesFilterWidget.unit.spec.jsx
@@ -1,6 +1,6 @@
 /* eslint-disable flowtype/require-valid-file-annotation */
 import React from "react";
-import TimeseriesFilterWidget from "metabase/qb/components/TimeseriesFilterWidget";
+import TimeseriesFilterWidget from "metabase/modes/components/TimeseriesFilterWidget";
 import { mount } from "enzyme";
 
 import Question from "metabase-lib/lib/Question";
diff --git a/frontend/test/metabase/modes/TimeseriesMode.unit.spec.js b/frontend/test/metabase/modes/TimeseriesMode.unit.spec.js
index 16247cca68a4955086c2170394545abf168328e1..8bf01e52ffd3e085684ff19df283278c041b36c7 100644
--- a/frontend/test/metabase/modes/TimeseriesMode.unit.spec.js
+++ b/frontend/test/metabase/modes/TimeseriesMode.unit.spec.js
@@ -2,9 +2,9 @@
 import "metabase-lib/lib/Question";
 
 import React from "react";
-import { TimeseriesModeFooter } from "metabase/qb/components/modes/TimeseriesMode";
-import TimeseriesGroupingWidget from "metabase/qb/components/TimeseriesGroupingWidget";
-import TimeseriesFilterWidget from "metabase/qb/components/TimeseriesFilterWidget";
+import { TimeseriesModeFooter } from "metabase/modes/components/modes/TimeseriesMode";
+import TimeseriesGroupingWidget from "metabase/modes/components/TimeseriesGroupingWidget";
+import TimeseriesFilterWidget from "metabase/modes/components/TimeseriesFilterWidget";
 import { shallow } from "enzyme";
 
 describe("TimeSeriesModeFooter", () => {
diff --git a/frontend/test/metabase/modes/actions/CommonMetricsAction.e2e.spec.js b/frontend/test/metabase/modes/components/actions/CommonMetricsAction.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/actions/CommonMetricsAction.e2e.spec.js
rename to frontend/test/metabase/modes/components/actions/CommonMetricsAction.e2e.spec.js
diff --git a/frontend/test/metabase/modes/actions/CommonMetricsAction.unit.spec.js b/frontend/test/metabase/modes/components/actions/CommonMetricsAction.unit.spec.js
similarity index 94%
rename from frontend/test/metabase/modes/actions/CommonMetricsAction.unit.spec.js
rename to frontend/test/metabase/modes/components/actions/CommonMetricsAction.unit.spec.js
index 74a65d5e47ae29d3a1e85b45d276545c12c6336a..6bc35126fa0cbea8c79fd4870eb9b3eb7360ad86 100644
--- a/frontend/test/metabase/modes/actions/CommonMetricsAction.unit.spec.js
+++ b/frontend/test/metabase/modes/components/actions/CommonMetricsAction.unit.spec.js
@@ -6,7 +6,7 @@ import {
   MAIN_METRIC_ID,
 } from "__support__/sample_dataset_fixture";
 
-import CommonMetricsAction from "metabase/qb/components/actions/CommonMetricsAction";
+import CommonMetricsAction from "metabase/modes/components/actions/CommonMetricsAction";
 
 import { assocIn } from "icepick";
 
diff --git a/frontend/test/metabase/modes/actions/CompoundQueryAction.unit.spec.js b/frontend/test/metabase/modes/components/actions/CompoundQueryAction.unit.spec.js
similarity index 93%
rename from frontend/test/metabase/modes/actions/CompoundQueryAction.unit.spec.js
rename to frontend/test/metabase/modes/components/actions/CompoundQueryAction.unit.spec.js
index 6cf6a4f87579289dbc085a6c5598e97fdaaf9596..ce4b9165e030fc97da2eae9b7f5d035f6693b975 100644
--- a/frontend/test/metabase/modes/actions/CompoundQueryAction.unit.spec.js
+++ b/frontend/test/metabase/modes/components/actions/CompoundQueryAction.unit.spec.js
@@ -1,6 +1,6 @@
 /* eslint-disable flowtype/require-valid-file-annotation */
 
-import CompoundQueryAction from "metabase/qb/components/actions/CompoundQueryAction";
+import CompoundQueryAction from "metabase/modes/components/actions/CompoundQueryAction";
 
 import Question from "metabase-lib/lib/Question";
 
diff --git a/frontend/test/metabase/modes/actions/CountByTimeAction.e2e.spec.js b/frontend/test/metabase/modes/components/actions/CountByTimeAction.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/actions/CountByTimeAction.e2e.spec.js
rename to frontend/test/metabase/modes/components/actions/CountByTimeAction.e2e.spec.js
diff --git a/frontend/test/metabase/modes/actions/CountByTimeAction.unit.spec.js b/frontend/test/metabase/modes/components/actions/CountByTimeAction.unit.spec.js
similarity index 91%
rename from frontend/test/metabase/modes/actions/CountByTimeAction.unit.spec.js
rename to frontend/test/metabase/modes/components/actions/CountByTimeAction.unit.spec.js
index 57bdb5fdea51274ab437ec555430335ee7773631..160ecebabc37e4a89da32aba66d51245f9462912 100644
--- a/frontend/test/metabase/modes/actions/CountByTimeAction.unit.spec.js
+++ b/frontend/test/metabase/modes/components/actions/CountByTimeAction.unit.spec.js
@@ -7,7 +7,7 @@ import {
   ORDERS_CREATED_DATE_FIELD_ID,
 } from "__support__/sample_dataset_fixture";
 
-import CountByTimeAction from "metabase/qb/components/actions/CountByTimeAction";
+import CountByTimeAction from "metabase/modes/components/actions/CountByTimeAction";
 
 describe("CountByTimeAction", () => {
   it("should not be valid if the table has no metrics", () => {
diff --git a/frontend/test/metabase/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js b/frontend/test/metabase/modes/components/actions/SummarizeBySegmentMetricAction.unit.spec.js
similarity index 95%
rename from frontend/test/metabase/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js
rename to frontend/test/metabase/modes/components/actions/SummarizeBySegmentMetricAction.unit.spec.js
index f6ac66dad84693641ba5311d5e53108fb9c1b1d0..59c746c1ddc9eeddd91fd3742fd06f37e1ecbc1e 100644
--- a/frontend/test/metabase/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js
+++ b/frontend/test/metabase/modes/components/actions/SummarizeBySegmentMetricAction.unit.spec.js
@@ -7,7 +7,7 @@ import {
 } from "__support__/sample_dataset_fixture";
 import { click } from "__support__/enzyme_utils";
 import Question from "metabase-lib/lib/Question";
-import SummarizeBySegmentMetricAction from "metabase/qb/components/actions/SummarizeBySegmentMetricAction";
+import SummarizeBySegmentMetricAction from "metabase/modes/components/actions/SummarizeBySegmentMetricAction";
 import { mount } from "enzyme";
 
 const question = Question.create({
diff --git a/frontend/test/metabase/modes/drills/ObjectDetailDrill.unit.spec.js b/frontend/test/metabase/modes/components/drill/ObjectDetailDrill.unit.spec.js
similarity index 93%
rename from frontend/test/metabase/modes/drills/ObjectDetailDrill.unit.spec.js
rename to frontend/test/metabase/modes/components/drill/ObjectDetailDrill.unit.spec.js
index 7b6ec2def5549d457d64380a7b784ce089aaa5ad..bacddfa55c6355da3237f638a73ba3cae20192a5 100644
--- a/frontend/test/metabase/modes/drills/ObjectDetailDrill.unit.spec.js
+++ b/frontend/test/metabase/modes/components/drill/ObjectDetailDrill.unit.spec.js
@@ -1,6 +1,6 @@
 /* eslint-disable flowtype/require-valid-file-annotation */
 
-import ObjectDetailDrill from "metabase/qb/components/drill/ObjectDetailDrill";
+import ObjectDetailDrill from "metabase/modes/components/drill/ObjectDetailDrill";
 
 import {
   question,
diff --git a/frontend/test/metabase/modes/drills/PivotByCategoryDrill.e2e.spec.js b/frontend/test/metabase/modes/components/drill/PivotByCategoryDrill.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/drills/PivotByCategoryDrill.e2e.spec.js
rename to frontend/test/metabase/modes/components/drill/PivotByCategoryDrill.e2e.spec.js
diff --git a/frontend/test/metabase/modes/drills/QuickFilterDrill.e2e.spec.js b/frontend/test/metabase/modes/components/drill/QuickFilterDrill.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/drills/QuickFilterDrill.e2e.spec.js
rename to frontend/test/metabase/modes/components/drill/QuickFilterDrill.e2e.spec.js
diff --git a/frontend/test/metabase/modes/drills/SortAction.e2e.spec.js b/frontend/test/metabase/modes/components/drill/SortAction.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/drills/SortAction.e2e.spec.js
rename to frontend/test/metabase/modes/components/drill/SortAction.e2e.spec.js
diff --git a/frontend/test/metabase/modes/drills/SummarizeColumnByTimeDrill.e2e.spec.js b/frontend/test/metabase/modes/components/drill/SummarizeColumnByTimeDrill.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/drills/SummarizeColumnByTimeDrill.e2e.spec.js
rename to frontend/test/metabase/modes/components/drill/SummarizeColumnByTimeDrill.e2e.spec.js
diff --git a/frontend/test/metabase/modes/drills/SummarizeColumnByTimeDrill.unit.spec.js b/frontend/test/metabase/modes/components/drill/SummarizeColumnByTimeDrill.unit.spec.js
similarity index 92%
rename from frontend/test/metabase/modes/drills/SummarizeColumnByTimeDrill.unit.spec.js
rename to frontend/test/metabase/modes/components/drill/SummarizeColumnByTimeDrill.unit.spec.js
index b4ab82fd5090ce8bf5c8ce64c8df90fc1518f056..cbb750d414c270d198ca7a758831c4a613403117 100644
--- a/frontend/test/metabase/modes/drills/SummarizeColumnByTimeDrill.unit.spec.js
+++ b/frontend/test/metabase/modes/components/drill/SummarizeColumnByTimeDrill.unit.spec.js
@@ -9,7 +9,7 @@ import {
   ORDERS_CREATED_DATE_FIELD_ID,
 } from "__support__/sample_dataset_fixture";
 
-import SummarizeColumnByTimeDrill from "metabase/qb/components/drill/SummarizeColumnByTimeDrill";
+import SummarizeColumnByTimeDrill from "metabase/modes/components/drill/SummarizeColumnByTimeDrill";
 
 describe("SummarizeColumnByTimeDrill", () => {
   it("should not be valid for top level actions", () => {
diff --git a/frontend/test/metabase/modes/drills/SummarizeColumnDrill.e2e.spec.js b/frontend/test/metabase/modes/components/drill/SummarizeColumnDrill.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/drills/SummarizeColumnDrill.e2e.spec.js
rename to frontend/test/metabase/modes/components/drill/SummarizeColumnDrill.e2e.spec.js
diff --git a/frontend/test/metabase/modes/drills/SummarizeColumnDrill.unit.spec.js b/frontend/test/metabase/modes/components/drill/SummarizeColumnDrill.unit.spec.js
similarity index 90%
rename from frontend/test/metabase/modes/drills/SummarizeColumnDrill.unit.spec.js
rename to frontend/test/metabase/modes/components/drill/SummarizeColumnDrill.unit.spec.js
index 149690d2c848377702edf0c784548546a08cfee4..9e036afe786bded06a68e8a5ea16f8e524c4e173 100644
--- a/frontend/test/metabase/modes/drills/SummarizeColumnDrill.unit.spec.js
+++ b/frontend/test/metabase/modes/components/drill/SummarizeColumnDrill.unit.spec.js
@@ -1,6 +1,6 @@
 /* eslint-disable */
 
-import SummarizeColumnDrill from "metabase/qb/components/drill/SummarizeColumnDrill";
+import SummarizeColumnDrill from "metabase/modes/components/drill/SummarizeColumnDrill";
 
 import {
   question,
diff --git a/frontend/test/metabase/modes/drills/TimeseriesPivotDrill.e2e.spec.js b/frontend/test/metabase/modes/components/drill/TimeseriesPivotDrill.e2e.spec.js
similarity index 100%
rename from frontend/test/metabase/modes/drills/TimeseriesPivotDrill.e2e.spec.js
rename to frontend/test/metabase/modes/components/drill/TimeseriesPivotDrill.e2e.spec.js
diff --git a/frontend/test/metabase/modes/drills/UnderlyingRecordsDrill.unit.spec.js b/frontend/test/metabase/modes/components/drill/UnderlyingRecordsDrill.unit.spec.js
similarity index 96%
rename from frontend/test/metabase/modes/drills/UnderlyingRecordsDrill.unit.spec.js
rename to frontend/test/metabase/modes/components/drill/UnderlyingRecordsDrill.unit.spec.js
index 942ed60ec25c013ae9184562c2c05291594a3d56..039dfead11e2b70ea58b3084369d639c8439870f 100644
--- a/frontend/test/metabase/modes/drills/UnderlyingRecordsDrill.unit.spec.js
+++ b/frontend/test/metabase/modes/components/drill/UnderlyingRecordsDrill.unit.spec.js
@@ -11,7 +11,7 @@ import {
 import { assocIn, chain } from "icepick";
 import moment from "moment";
 
-import UnderlyingRecordsDrill from "metabase/qb/components/drill/UnderlyingRecordsDrill";
+import UnderlyingRecordsDrill from "metabase/modes/components/drill/UnderlyingRecordsDrill";
 
 function getActionPropsForTimeseriesClick(unit, value) {
   return {
diff --git a/frontend/test/metabase/modes/drills/ZoomDrill.unit.spec.js b/frontend/test/metabase/modes/components/drill/ZoomDrill.unit.spec.js
similarity index 96%
rename from frontend/test/metabase/modes/drills/ZoomDrill.unit.spec.js
rename to frontend/test/metabase/modes/components/drill/ZoomDrill.unit.spec.js
index 7c61097d287fcd60ea33c7d38e1fa60f4cb44fdf..46156d5c1dda8b587275b3a104446fb3475dab26 100644
--- a/frontend/test/metabase/modes/drills/ZoomDrill.unit.spec.js
+++ b/frontend/test/metabase/modes/components/drill/ZoomDrill.unit.spec.js
@@ -10,7 +10,7 @@ import {
 
 import { chain } from "icepick";
 
-import ZoomDrill from "metabase/qb/components/drill/ZoomDrill";
+import ZoomDrill from "metabase/modes/components/drill/ZoomDrill";
 
 describe("ZoomDrill", () => {
   it("should not be valid for top level actions", () => {
diff --git a/frontend/test/metabase/modes/lib/actions.unit.spec.js b/frontend/test/metabase/modes/lib/actions.unit.spec.js
index cbf0c0f81d5e2b05df4b7e7bd6c89d5cc59587ac..26c7d1862def894cb6df4808373589e2af6bc27a 100644
--- a/frontend/test/metabase/modes/lib/actions.unit.spec.js
+++ b/frontend/test/metabase/modes/lib/actions.unit.spec.js
@@ -1,6 +1,6 @@
 /* eslint-disable flowtype/require-valid-file-annotation */
 
-import { drillFilter } from "metabase/qb/lib/actions";
+import { drillFilter } from "metabase/modes/lib/actions";
 
 describe("actions", () => {
   describe("drillFilter", () => {
diff --git a/frontend/test/metabase/modes/lib/drilldown.unit.spec.js b/frontend/test/metabase/modes/lib/drilldown.unit.spec.js
index 8d308360c41ae865eed86291bc63e829380eedfa..ec514f5b32ff9ba40726e79b8e4a25c536209250 100644
--- a/frontend/test/metabase/modes/lib/drilldown.unit.spec.js
+++ b/frontend/test/metabase/modes/lib/drilldown.unit.spec.js
@@ -9,7 +9,7 @@ import {
   PEOPLE_STATE_FIELD_ID,
 } from "__support__/sample_dataset_fixture";
 
-import { drillDownForDimensions } from "metabase/qb/lib/drilldown";
+import { drillDownForDimensions } from "metabase/modes/lib/drilldown";
 
 const col = (fieldId, extra = {}) => ({
   ...metadata.fields[fieldId],