wip
This commit is contained in:
parent
d54f87af03
commit
2553432ec9
|
@ -31,7 +31,7 @@ import { cache, configs, context, HTTPError } from "@budibase/backend-core"
|
||||||
import { dataFilters, utils } from "@budibase/shared-core"
|
import { dataFilters, utils } from "@budibase/shared-core"
|
||||||
import { GOOGLE_SHEETS_PRIMARY_KEY } from "../constants"
|
import { GOOGLE_SHEETS_PRIMARY_KEY } from "../constants"
|
||||||
|
|
||||||
interface GoogleSheetsConfig {
|
export interface GoogleSheetsConfig {
|
||||||
spreadsheetId: string
|
spreadsheetId: string
|
||||||
auth: OAuthClientConfig
|
auth: OAuthClientConfig
|
||||||
continueSetupId?: string
|
continueSetupId?: string
|
||||||
|
@ -157,7 +157,7 @@ const SCHEMA: Integration = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
class GoogleSheetsIntegration implements DatasourcePlus {
|
export class GoogleSheetsIntegration implements DatasourcePlus {
|
||||||
private readonly config: GoogleSheetsConfig
|
private readonly config: GoogleSheetsConfig
|
||||||
private readonly spreadsheetId: string
|
private readonly spreadsheetId: string
|
||||||
private client: GoogleSpreadsheet = undefined!
|
private client: GoogleSpreadsheet = undefined!
|
||||||
|
|
|
@ -2,49 +2,48 @@ import { setEnv as setCoreEnv } from "@budibase/backend-core"
|
||||||
import type { GoogleSpreadsheetWorksheet } from "google-spreadsheet"
|
import type { GoogleSpreadsheetWorksheet } from "google-spreadsheet"
|
||||||
import nock from "nock"
|
import nock from "nock"
|
||||||
|
|
||||||
jest.mock("google-auth-library")
|
|
||||||
const { OAuth2Client } = require("google-auth-library")
|
|
||||||
|
|
||||||
const setCredentialsMock = jest.fn()
|
|
||||||
const getAccessTokenMock = jest.fn()
|
|
||||||
|
|
||||||
OAuth2Client.mockImplementation(() => {
|
|
||||||
return {
|
|
||||||
setCredentials: setCredentialsMock,
|
|
||||||
getAccessToken: getAccessTokenMock,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
jest.mock("google-spreadsheet")
|
|
||||||
const { GoogleSpreadsheet } = require("google-spreadsheet")
|
|
||||||
|
|
||||||
const sheetsByTitle: { [title: string]: GoogleSpreadsheetWorksheet } = {}
|
|
||||||
const sheetsByIndex: GoogleSpreadsheetWorksheet[] = []
|
|
||||||
const mockGoogleIntegration = {
|
|
||||||
useOAuth2Client: jest.fn(),
|
|
||||||
loadInfo: jest.fn(),
|
|
||||||
sheetsByTitle,
|
|
||||||
sheetsByIndex,
|
|
||||||
}
|
|
||||||
|
|
||||||
GoogleSpreadsheet.mockImplementation(() => mockGoogleIntegration)
|
|
||||||
|
|
||||||
import { structures } from "@budibase/backend-core/tests"
|
import { structures } from "@budibase/backend-core/tests"
|
||||||
import TestConfiguration from "../../tests/utilities/TestConfiguration"
|
import TestConfiguration from "../../tests/utilities/TestConfiguration"
|
||||||
import GoogleSheetsIntegration from "../googlesheets"
|
import { GoogleSheetsConfig, GoogleSheetsIntegration } from "../googlesheets"
|
||||||
import { FieldType, Table, TableSchema, TableSourceType } from "@budibase/types"
|
import {
|
||||||
|
Datasource,
|
||||||
|
FieldType,
|
||||||
|
SourceName,
|
||||||
|
Table,
|
||||||
|
TableSchema,
|
||||||
|
TableSourceType,
|
||||||
|
} from "@budibase/types"
|
||||||
import { generateDatasourceID } from "../../db/utils"
|
import { generateDatasourceID } from "../../db/utils"
|
||||||
|
|
||||||
describe("Google Sheets Integration", () => {
|
describe("Google Sheets Integration", () => {
|
||||||
let integration: any,
|
const config = new TestConfiguration()
|
||||||
config = new TestConfiguration()
|
|
||||||
let cleanupEnv: () => void
|
|
||||||
|
|
||||||
beforeAll(() => {
|
let integration: GoogleSheetsIntegration
|
||||||
|
let cleanupEnv: () => void
|
||||||
|
let table: Table
|
||||||
|
let datasource: Datasource
|
||||||
|
|
||||||
|
const datasourceConfig: GoogleSheetsConfig = {
|
||||||
|
spreadsheetId: "randomId",
|
||||||
|
auth: {
|
||||||
|
appId: "appId",
|
||||||
|
accessToken: "accessToken",
|
||||||
|
refreshToken: "refreshToken",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
cleanupEnv = setCoreEnv({
|
cleanupEnv = setCoreEnv({
|
||||||
GOOGLE_CLIENT_ID: "test",
|
GOOGLE_CLIENT_ID: "test",
|
||||||
GOOGLE_CLIENT_SECRET: "test",
|
GOOGLE_CLIENT_SECRET: "test",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
datasource = await config.api.datasource.create({
|
||||||
|
name: "Test Datasource",
|
||||||
|
type: "datasource",
|
||||||
|
source: SourceName.GOOGLE_SHEETS,
|
||||||
|
config: datasourceConfig,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
|
@ -53,17 +52,32 @@ describe("Google Sheets Integration", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
integration = new GoogleSheetsIntegration.integration({
|
|
||||||
spreadsheetId: "randomId",
|
|
||||||
auth: {
|
|
||||||
appId: "appId",
|
|
||||||
accessToken: "accessToken",
|
|
||||||
refreshToken: "refreshToken",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
await config.init()
|
await config.init()
|
||||||
|
|
||||||
jest.clearAllMocks()
|
integration = new GoogleSheetsIntegration(datasourceConfig)
|
||||||
|
|
||||||
|
table = await config.api.table.save({
|
||||||
|
name: "Test Table",
|
||||||
|
type: "table",
|
||||||
|
sourceId: generateDatasourceID(),
|
||||||
|
sourceType: TableSourceType.EXTERNAL,
|
||||||
|
schema: {
|
||||||
|
name: {
|
||||||
|
name: "name",
|
||||||
|
type: FieldType.STRING,
|
||||||
|
constraints: {
|
||||||
|
type: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
name: "description",
|
||||||
|
type: FieldType.STRING,
|
||||||
|
constraints: {
|
||||||
|
type: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
nock.cleanAll()
|
nock.cleanAll()
|
||||||
nock("https://www.googleapis.com/").post("/oauth2/v4/token").reply(200, {
|
nock("https://www.googleapis.com/").post("/oauth2/v4/token").reply(200, {
|
||||||
|
|
Loading…
Reference in New Issue