Most PR comments.

This commit is contained in:
mike12345567 2025-02-06 17:24:04 +00:00
parent 399cf0ef6c
commit e8c79bc720
5 changed files with 46 additions and 78 deletions

View File

@ -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")
} }

View File

@ -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(), ...basicScreen(),
routing: { routing: {
roleId: role2._id!, roleId: role2._id!,
route: "/bar", route: "/bar",
homeScreen: false, 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)
}) })

View File

@ -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",

View File

@ -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}"`)
} }

View File

@ -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)
} }
} }
} }