Most PR comments.
This commit is contained in:
parent
399cf0ef6c
commit
e8c79bc720
|
@ -10,6 +10,7 @@
|
||||||
viewsV2,
|
viewsV2,
|
||||||
} from "@/stores/builder"
|
} from "@/stores/builder"
|
||||||
import ConfirmDialog from "@/components/common/ConfirmDialog.svelte"
|
import ConfirmDialog from "@/components/common/ConfirmDialog.svelte"
|
||||||
|
import { helpers } from "@budibase/shared-core"
|
||||||
import { SourceType } from "@budibase/types"
|
import { SourceType } from "@budibase/types"
|
||||||
import { goto, params } from "@roxi/routify"
|
import { goto, params } from "@roxi/routify"
|
||||||
import { DB_TYPE_EXTERNAL } from "@/constants/backend"
|
import { DB_TYPE_EXTERNAL } from "@/constants/backend"
|
||||||
|
@ -85,7 +86,7 @@
|
||||||
|
|
||||||
async function deleteView(view: ViewV2 | View) {
|
async function deleteView(view: ViewV2 | View) {
|
||||||
try {
|
try {
|
||||||
if ("version" in view && view.version === 2) {
|
if ("version" in view && helpers.views.isCalculationView(view)) {
|
||||||
await viewsV2.delete(view as ViewV2)
|
await viewsV2.delete(view as ViewV2)
|
||||||
} else {
|
} else {
|
||||||
await views.delete(view as View)
|
await views.delete(view as View)
|
||||||
|
@ -99,10 +100,10 @@
|
||||||
|
|
||||||
async function deleteDatasource(datasource: Datasource) {
|
async function deleteDatasource(datasource: Datasource) {
|
||||||
try {
|
try {
|
||||||
const isSelected =
|
|
||||||
get(datasources).selectedDatasourceId === datasource._id
|
|
||||||
await datasources.delete(datasource)
|
await datasources.delete(datasource)
|
||||||
notifications.success("Datasource deleted")
|
notifications.success("Datasource deleted")
|
||||||
|
const isSelected =
|
||||||
|
get(datasources).selectedDatasourceId === datasource._id
|
||||||
if (isSelected) {
|
if (isSelected) {
|
||||||
$goto("./datasource")
|
$goto("./datasource")
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ describe("/screens", () => {
|
||||||
|
|
||||||
describe("fetch", () => {
|
describe("fetch", () => {
|
||||||
it("should be able to create a layout", async () => {
|
it("should be able to create a layout", async () => {
|
||||||
const screens = await config.api.screen.list({ status: 200 })
|
const screens = await config.api.screen.list()
|
||||||
expect(screens.length).toEqual(1)
|
expect(screens.length).toEqual(1)
|
||||||
expect(screens.some(s => s._id === screen._id)).toEqual(true)
|
expect(screens.some(s => s._id === screen._id)).toEqual(true)
|
||||||
})
|
})
|
||||||
|
@ -67,28 +67,22 @@ describe("/screens", () => {
|
||||||
inherits: [role1._id!, role2._id!],
|
inherits: [role1._id!, role2._id!],
|
||||||
permissionId: BuiltinPermissionID.WRITE,
|
permissionId: BuiltinPermissionID.WRITE,
|
||||||
})
|
})
|
||||||
screen1 = await config.api.screen.save(
|
screen1 = await config.api.screen.save({
|
||||||
{
|
...basicScreen(),
|
||||||
...basicScreen(),
|
routing: {
|
||||||
routing: {
|
roleId: role1._id!,
|
||||||
roleId: role1._id!,
|
route: "/foo",
|
||||||
route: "/foo",
|
homeScreen: false,
|
||||||
homeScreen: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{ status: 200 }
|
})
|
||||||
)
|
screen2 = await config.api.screen.save({
|
||||||
screen2 = await config.api.screen.save(
|
...basicScreen(),
|
||||||
{
|
routing: {
|
||||||
...basicScreen(),
|
roleId: role2._id!,
|
||||||
routing: {
|
route: "/bar",
|
||||||
roleId: role2._id!,
|
homeScreen: false,
|
||||||
route: "/bar",
|
|
||||||
homeScreen: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{ status: 200 }
|
})
|
||||||
)
|
|
||||||
// get into prod app
|
// get into prod app
|
||||||
await config.publish()
|
await config.publish()
|
||||||
})
|
})
|
||||||
|
@ -96,10 +90,7 @@ describe("/screens", () => {
|
||||||
async function checkScreens(roleId: string, screenIds: string[]) {
|
async function checkScreens(roleId: string, screenIds: string[]) {
|
||||||
await config.loginAsRole(roleId, async () => {
|
await config.loginAsRole(roleId, async () => {
|
||||||
const res = await config.api.application.getDefinition(
|
const res = await config.api.application.getDefinition(
|
||||||
config.prodAppId!,
|
config.prodAppId!
|
||||||
{
|
|
||||||
status: 200,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
expect(res.screens.length).toEqual(screenIds.length)
|
expect(res.screens.length).toEqual(screenIds.length)
|
||||||
expect(res.screens.map(s => s._id).sort()).toEqual(screenIds.sort())
|
expect(res.screens.map(s => s._id).sort()).toEqual(screenIds.sort())
|
||||||
|
@ -129,10 +120,7 @@ describe("/screens", () => {
|
||||||
},
|
},
|
||||||
async () => {
|
async () => {
|
||||||
const res = await config.api.application.getDefinition(
|
const res = await config.api.application.getDefinition(
|
||||||
config.prodAppId!,
|
config.prodAppId!
|
||||||
{
|
|
||||||
status: 200,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
const screenIds = [screen._id!, screen1._id!]
|
const screenIds = [screen._id!, screen1._id!]
|
||||||
expect(res.screens.length).toEqual(screenIds.length)
|
expect(res.screens.length).toEqual(screenIds.length)
|
||||||
|
@ -149,9 +137,7 @@ describe("/screens", () => {
|
||||||
|
|
||||||
it("should be able to create a screen", async () => {
|
it("should be able to create a screen", async () => {
|
||||||
const screen = basicScreen()
|
const screen = basicScreen()
|
||||||
const responseScreen = await config.api.screen.save(screen, {
|
const responseScreen = await config.api.screen.save(screen)
|
||||||
status: 200,
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(responseScreen._rev).toBeDefined()
|
expect(responseScreen._rev).toBeDefined()
|
||||||
expect(responseScreen.name).toEqual(screen.name)
|
expect(responseScreen.name).toEqual(screen.name)
|
||||||
|
@ -160,13 +146,13 @@ describe("/screens", () => {
|
||||||
|
|
||||||
it("should be able to update a screen", async () => {
|
it("should be able to update a screen", async () => {
|
||||||
const screen = basicScreen()
|
const screen = basicScreen()
|
||||||
let responseScreen = await config.api.screen.save(screen, { status: 200 })
|
let responseScreen = await config.api.screen.save(screen)
|
||||||
screen._id = responseScreen._id
|
screen._id = responseScreen._id
|
||||||
screen._rev = responseScreen._rev
|
screen._rev = responseScreen._rev
|
||||||
screen.name = "edit"
|
screen.name = "edit"
|
||||||
jest.clearAllMocks()
|
jest.clearAllMocks()
|
||||||
|
|
||||||
responseScreen = await config.api.screen.save(screen, { status: 200 })
|
responseScreen = await config.api.screen.save(screen)
|
||||||
|
|
||||||
expect(responseScreen._rev).toBeDefined()
|
expect(responseScreen._rev).toBeDefined()
|
||||||
expect(responseScreen.name).toEqual(screen.name)
|
expect(responseScreen.name).toEqual(screen.name)
|
||||||
|
@ -186,8 +172,7 @@ describe("/screens", () => {
|
||||||
it("should be able to delete the screen", async () => {
|
it("should be able to delete the screen", async () => {
|
||||||
const response = await config.api.screen.destroy(
|
const response = await config.api.screen.destroy(
|
||||||
screen._id!,
|
screen._id!,
|
||||||
screen._rev!,
|
screen._rev!
|
||||||
{ status: 200 }
|
|
||||||
)
|
)
|
||||||
expect(response.message).toBeDefined()
|
expect(response.message).toBeDefined()
|
||||||
expect(events.screen.deleted).toHaveBeenCalledTimes(1)
|
expect(events.screen.deleted).toHaveBeenCalledTimes(1)
|
||||||
|
@ -205,9 +190,7 @@ describe("/screens", () => {
|
||||||
describe("usage", () => {
|
describe("usage", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await config.init()
|
await config.init()
|
||||||
await config.api.screen.save(basicScreen(), {
|
await config.api.screen.save(basicScreen())
|
||||||
status: 200,
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
function confirmScreen(usage: UsageOfScreensResponse, screen: Screen) {
|
function confirmScreen(usage: UsageOfScreensResponse, screen: Screen) {
|
||||||
|
@ -217,57 +200,41 @@ describe("/screens", () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
it("should find table usage", async () => {
|
it("should find table usage", async () => {
|
||||||
const table = await config.api.table.save(basicTable(), { status: 200 })
|
const table = await config.api.table.save(basicTable())
|
||||||
const screen = await config.api.screen.save(
|
const screen = await config.api.screen.save(
|
||||||
tableScreen("BudibaseDB", table),
|
tableScreen("BudibaseDB", table)
|
||||||
{ status: 200 }
|
|
||||||
)
|
)
|
||||||
const usage = await config.api.screen.usage(table._id!, { status: 200 })
|
const usage = await config.api.screen.usage(table._id!)
|
||||||
expect(usage.sourceType).toEqual(SourceType.TABLE)
|
expect(usage.sourceType).toEqual(SourceType.TABLE)
|
||||||
confirmScreen(usage, screen)
|
confirmScreen(usage, screen)
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should find view usage", async () => {
|
it("should find view usage", async () => {
|
||||||
const table = await config.api.table.save(basicTable(), { status: 200 })
|
const table = await config.api.table.save(basicTable())
|
||||||
const view = await config.api.viewV2.create(
|
const view = await config.api.viewV2.create(
|
||||||
viewV2.createRequest(table._id!),
|
viewV2.createRequest(table._id!),
|
||||||
{ status: 201 }
|
{ status: 201 }
|
||||||
)
|
)
|
||||||
const screen = await config.api.screen.save(
|
const screen = await config.api.screen.save(
|
||||||
viewScreen("BudibaseDB", view),
|
viewScreen("BudibaseDB", view)
|
||||||
{
|
|
||||||
status: 200,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
const usage = await config.api.screen.usage(view.id, { status: 200 })
|
const usage = await config.api.screen.usage(view.id)
|
||||||
expect(usage.sourceType).toEqual(SourceType.VIEW)
|
expect(usage.sourceType).toEqual(SourceType.VIEW)
|
||||||
confirmScreen(usage, screen)
|
confirmScreen(usage, screen)
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should find datasource/query usage", async () => {
|
it("should find datasource/query usage", async () => {
|
||||||
const datasource = await config.api.datasource.create(
|
const datasource = await config.api.datasource.create(
|
||||||
basicDatasource().datasource,
|
basicDatasource().datasource
|
||||||
{
|
|
||||||
status: 200,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
const query = await config.api.query.save(basicQuery(datasource._id!), {
|
const query = await config.api.query.save(basicQuery(datasource._id!))
|
||||||
status: 200,
|
|
||||||
})
|
|
||||||
const screen = await config.api.screen.save(
|
const screen = await config.api.screen.save(
|
||||||
queryScreen(datasource._id!, query),
|
queryScreen(datasource._id!, query)
|
||||||
{
|
|
||||||
status: 200,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
const dsUsage = await config.api.screen.usage(datasource._id!, {
|
const dsUsage = await config.api.screen.usage(datasource._id!)
|
||||||
status: 200,
|
|
||||||
})
|
|
||||||
expect(dsUsage.sourceType).toEqual(SourceType.DATASOURCE)
|
expect(dsUsage.sourceType).toEqual(SourceType.DATASOURCE)
|
||||||
confirmScreen(dsUsage, screen)
|
confirmScreen(dsUsage, screen)
|
||||||
const queryUsage = await config.api.screen.usage(query._id!, {
|
const queryUsage = await config.api.screen.usage(query._id!)
|
||||||
status: 200,
|
|
||||||
})
|
|
||||||
expect(queryUsage.sourceType).toEqual(SourceType.QUERY)
|
expect(queryUsage.sourceType).toEqual(SourceType.QUERY)
|
||||||
confirmScreen(queryUsage, screen)
|
confirmScreen(queryUsage, screen)
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { roles } from "@budibase/backend-core"
|
import { roles } from "@budibase/backend-core"
|
||||||
import { BASE_LAYOUT_PROP_IDS } from "./layouts"
|
import { BASE_LAYOUT_PROP_IDS } from "./layouts"
|
||||||
import { Screen, Table, Query, ViewV2 } from "@budibase/types"
|
import { Screen, Table, Query, ViewV2, Component } from "@budibase/types"
|
||||||
|
|
||||||
export function createHomeScreen(
|
export function createHomeScreen(
|
||||||
config: {
|
config: {
|
||||||
|
@ -54,7 +54,7 @@ export function createHomeScreen(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function heading(text: string) {
|
function heading(text: string): Component {
|
||||||
return {
|
return {
|
||||||
_id: "c1bff24cd821e41d18c894ac77a80ef99",
|
_id: "c1bff24cd821e41d18c894ac77a80ef99",
|
||||||
_component: "@budibase/standard-components/heading",
|
_component: "@budibase/standard-components/heading",
|
||||||
|
|
|
@ -11,5 +11,5 @@ export function getSourceType(sourceId: string): SourceType {
|
||||||
} else if (docIds.isQueryId(sourceId)) {
|
} else if (docIds.isQueryId(sourceId)) {
|
||||||
return SourceType.QUERY
|
return SourceType.QUERY
|
||||||
}
|
}
|
||||||
throw new Error("Unknown source type - cannot find document type")
|
throw new Error(`Unknown source type for source "${sourceId}"`)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,17 +3,17 @@ import { Screen } from "@budibase/types"
|
||||||
export function findInSettings(screen: Screen, toFind: string) {
|
export function findInSettings(screen: Screen, toFind: string) {
|
||||||
const foundIn: { setting: string; value: string }[] = []
|
const foundIn: { setting: string; value: string }[] = []
|
||||||
function recurse(props: Record<string, any>, parentKey = "") {
|
function recurse(props: Record<string, any>, parentKey = "") {
|
||||||
for (let key of Object.keys(props)) {
|
for (const [key, value] of Object.entries(props)) {
|
||||||
if (!props[key]) {
|
if (!value) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if (typeof props[key] === "string" && props[key].includes(toFind)) {
|
if (typeof value === "string" && value.includes(toFind)) {
|
||||||
foundIn.push({
|
foundIn.push({
|
||||||
setting: parentKey ? `${parentKey}.${key}` : key,
|
setting: parentKey ? `${parentKey}.${key}` : key,
|
||||||
value: props[key],
|
value: value,
|
||||||
})
|
})
|
||||||
} else if (typeof props[key] === "object") {
|
} else if (typeof value === "object") {
|
||||||
recurse(props[key], key)
|
recurse(value, key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue