Implement and test create
This commit is contained in:
parent
81e847daeb
commit
899c8a14fb
|
@ -70,6 +70,7 @@ export enum DocumentType {
|
||||||
USER_FLAG = "flag",
|
USER_FLAG = "flag",
|
||||||
AUTOMATION_METADATA = "meta_au",
|
AUTOMATION_METADATA = "meta_au",
|
||||||
AUDIT_LOG = "al",
|
AUDIT_LOG = "al",
|
||||||
|
VIEW = "vi",
|
||||||
}
|
}
|
||||||
|
|
||||||
export const StaticDatabases = {
|
export const StaticDatabases = {
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
import sdk from "../../../sdk"
|
import sdk from "../../../sdk"
|
||||||
import { Ctx } from "@budibase/types"
|
import { Ctx, ViewV2 } from "@budibase/types"
|
||||||
|
|
||||||
export async function fetch(ctx: Ctx) {
|
export async function fetch(ctx: Ctx) {
|
||||||
ctx.body = await sdk.views.get()
|
ctx.body = await sdk.views.get(ctx.params.viewId)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function save(ctx: Ctx<ViewV2>) {
|
||||||
|
const view = ctx.request.body
|
||||||
|
ctx.body = await sdk.views.save(view)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
import * as setup from "./utilities"
|
||||||
|
import { FieldType, Table, ViewV2 } from "@budibase/types"
|
||||||
|
import { generator } from "@budibase/backend-core/tests"
|
||||||
|
import sdk from "../../../sdk"
|
||||||
|
import { context } from "@budibase/backend-core"
|
||||||
|
|
||||||
|
function priceTable(): Table {
|
||||||
|
return {
|
||||||
|
name: "table",
|
||||||
|
type: "table",
|
||||||
|
schema: {
|
||||||
|
Price: {
|
||||||
|
type: FieldType.NUMBER,
|
||||||
|
name: "Price",
|
||||||
|
constraints: {},
|
||||||
|
},
|
||||||
|
Category: {
|
||||||
|
type: FieldType.STRING,
|
||||||
|
name: "Category",
|
||||||
|
constraints: {
|
||||||
|
type: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("/views/v2", () => {
|
||||||
|
const request = setup.getRequest()
|
||||||
|
const config = setup.getConfig()
|
||||||
|
let table: Table
|
||||||
|
|
||||||
|
afterAll(setup.afterAll)
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
await config.init()
|
||||||
|
})
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
table = await config.createTable(priceTable())
|
||||||
|
})
|
||||||
|
|
||||||
|
const saveView = async (view: ViewV2) => {
|
||||||
|
return request
|
||||||
|
.post(`/api/views/v2`)
|
||||||
|
.send(view)
|
||||||
|
.set(config.defaultHeaders())
|
||||||
|
.expect("Content-Type", /json/)
|
||||||
|
.expect(200)
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("create", () => {
|
||||||
|
it("persist the view when the view is successfully created", async () => {
|
||||||
|
const view = {
|
||||||
|
name: generator.guid(),
|
||||||
|
tableId: table._id!,
|
||||||
|
}
|
||||||
|
const res = await saveView(view)
|
||||||
|
expect(res.status).toBe(200)
|
||||||
|
expect(res.body._id).toBeDefined()
|
||||||
|
|
||||||
|
await context.doInAppContext(config.appId, async () => {
|
||||||
|
const persisted = await sdk.views.get(res.body._id)
|
||||||
|
expect(persisted).toEqual({
|
||||||
|
_id: res.body._id,
|
||||||
|
_rev: res.body._rev,
|
||||||
|
...view,
|
||||||
|
createdAt: expect.any(String),
|
||||||
|
updatedAt: expect.any(String),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
|
@ -13,6 +13,11 @@ router
|
||||||
authorized(permissions.BUILDER),
|
authorized(permissions.BUILDER),
|
||||||
viewController.v2.fetch
|
viewController.v2.fetch
|
||||||
)
|
)
|
||||||
|
.post(
|
||||||
|
"/api/views/v2",
|
||||||
|
authorized(permissions.BUILDER),
|
||||||
|
viewController.v2.save
|
||||||
|
)
|
||||||
|
|
||||||
router
|
router
|
||||||
.get(
|
.get(
|
||||||
|
|
|
@ -271,3 +271,11 @@ export function getMultiIDParams(ids: string[]) {
|
||||||
include_docs: true,
|
include_docs: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a new view ID.
|
||||||
|
* @returns {string} The new view ID which the view doc can be stored under.
|
||||||
|
*/
|
||||||
|
export function generateViewID(): string {
|
||||||
|
return `${DocumentType.VIEW}${SEPARATOR}${newid()}`
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
import { context } from "@budibase/backend-core"
|
||||||
|
import { ViewV2 } from "@budibase/types"
|
||||||
|
import { generateViewID } from "../../../db/utils"
|
||||||
|
|
||||||
|
export async function get(viewId: string) {
|
||||||
|
const db = context.getAppDB()
|
||||||
|
const result = await db.get(viewId)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function save(view: ViewV2) {
|
||||||
|
const db = context.getAppDB()
|
||||||
|
|
||||||
|
const response = await db.put(
|
||||||
|
{
|
||||||
|
_id: generateViewID(),
|
||||||
|
...view,
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
_id: response.id,
|
||||||
|
_rev: response.rev,
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,7 +7,7 @@ import { default as queries } from "./app/queries"
|
||||||
import { default as rows } from "./app/rows"
|
import { default as rows } from "./app/rows"
|
||||||
import { default as users } from "./users"
|
import { default as users } from "./users"
|
||||||
import { default as plugins } from "./plugins"
|
import { default as plugins } from "./plugins"
|
||||||
import * as views from "./views"
|
import * as views from "./app/views"
|
||||||
|
|
||||||
const sdk = {
|
const sdk = {
|
||||||
backups,
|
backups,
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
export async function get() {
|
|
||||||
return []
|
|
||||||
}
|
|
|
@ -10,6 +10,11 @@ export interface View {
|
||||||
meta?: Record<string, any>
|
meta?: Record<string, any>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ViewV2 {
|
||||||
|
name: string
|
||||||
|
tableId: string
|
||||||
|
}
|
||||||
|
|
||||||
export type ViewSchema = ViewCountOrSumSchema | ViewStatisticsSchema
|
export type ViewSchema = ViewCountOrSumSchema | ViewStatisticsSchema
|
||||||
|
|
||||||
export interface ViewCountOrSumSchema {
|
export interface ViewCountOrSumSchema {
|
||||||
|
|
Loading…
Reference in New Issue