From e2d93fa02716093df6d4d6029af9cc324c06f06b Mon Sep 17 00:00:00 2001 From: martmull Date: Mon, 15 Jan 2024 12:04:56 +0100 Subject: [PATCH] Revert "Rename file" This reverts commit 2e72e05793ced4553eec8d9f890d31beae594c85. --- .../src/creates/create_record.ts | 49 +++++++++++++ .../{crud_record.ts => create_record_2.ts} | 0 .../src/creates/delete_record.ts | 56 +++++++++++++++ .../src/creates/update_record.ts | 56 +++++++++++++++ packages/twenty-zapier/src/index.ts | 8 ++- .../src/test/creates/create_record.test.ts | 70 +++++++++++++++++++ ...record.test.ts => create_record_2.test.ts} | 2 +- .../src/test/creates/delete_record.test.ts | 49 +++++++++++++ .../src/test/creates/update_record.test.ts | 50 +++++++++++++ 9 files changed, 338 insertions(+), 2 deletions(-) create mode 100644 packages/twenty-zapier/src/creates/create_record.ts rename packages/twenty-zapier/src/creates/{crud_record.ts => create_record_2.ts} (100%) create mode 100644 packages/twenty-zapier/src/creates/delete_record.ts create mode 100644 packages/twenty-zapier/src/creates/update_record.ts create mode 100644 packages/twenty-zapier/src/test/creates/create_record.test.ts rename packages/twenty-zapier/src/test/creates/{crud_record.test.ts => create_record_2.test.ts} (98%) create mode 100644 packages/twenty-zapier/src/test/creates/delete_record.test.ts create mode 100644 packages/twenty-zapier/src/test/creates/update_record.test.ts diff --git a/packages/twenty-zapier/src/creates/create_record.ts b/packages/twenty-zapier/src/creates/create_record.ts new file mode 100644 index 00000000000..01d6333aa6b --- /dev/null +++ b/packages/twenty-zapier/src/creates/create_record.ts @@ -0,0 +1,49 @@ +import { Bundle, ZObject } from 'zapier-platform-core'; + +import { findObjectNamesSingularKey } from '../triggers/find_object_names_singular'; +import { capitalize } from '../utils/capitalize'; +import { recordInputFields } from '../utils/creates/creates.utils'; +import handleQueryParams from '../utils/handleQueryParams'; +import requestDb from '../utils/requestDb'; + +const perform = async (z: ZObject, bundle: Bundle) => { + const data = bundle.inputData; + const nameSingular = data.nameSingular; + delete data.nameSingular; + const query = ` + mutation create${capitalize(nameSingular)} { + create${capitalize(nameSingular)}( + data:{${handleQueryParams(data)}} + ) + {id} + }`; + return await requestDb(z, bundle, query); +}; + +export const createRecordKey = 'create_record'; + +export default { + display: { + description: 'Create a Record in Twenty.', + hidden: false, + label: 'Create Record', + }, + key: createRecordKey, + noun: 'Record', + operation: { + inputFields: [ + { + key: 'nameSingular', + required: true, + label: 'Record Name', + dynamic: `${findObjectNamesSingularKey}.nameSingular`, + altersDynamicFields: true, + }, + recordInputFields, + ], + sample: { + id: '179ed459-79cf-41d9-ab85-96397fa8e936', + }, + perform, + }, +}; diff --git a/packages/twenty-zapier/src/creates/crud_record.ts b/packages/twenty-zapier/src/creates/create_record_2.ts similarity index 100% rename from packages/twenty-zapier/src/creates/crud_record.ts rename to packages/twenty-zapier/src/creates/create_record_2.ts diff --git a/packages/twenty-zapier/src/creates/delete_record.ts b/packages/twenty-zapier/src/creates/delete_record.ts new file mode 100644 index 00000000000..274d1296009 --- /dev/null +++ b/packages/twenty-zapier/src/creates/delete_record.ts @@ -0,0 +1,56 @@ +import { Bundle, ZObject } from 'zapier-platform-core'; + +import { findObjectNamesPluralKey } from '../triggers/find_object_names_plural'; +import { listRecordIdsKey } from '../triggers/list_record_ids'; +import { capitalize } from '../utils/capitalize'; +import requestDb from '../utils/requestDb'; + +export const deleteRecordKey = 'delete_record'; + +const perform = async (z: ZObject, bundle: Bundle) => { + const data = bundle.inputData; + const nameSingular = data.nameSingular; + const id = data.id; + delete data.nameSingular; + delete data.id; + const query = ` + mutation delete${capitalize(nameSingular)} { + delete${capitalize(nameSingular)}( + id: "${id}" + ) + {id} + }`; + return await requestDb(z, bundle, query); +}; + +export default { + display: { + description: 'Delete a Record in Twenty.', + hidden: false, + label: 'Delete Record', + }, + key: deleteRecordKey, + noun: 'Record', + operation: { + inputFields: [ + { + key: 'namePlural', + label: 'Record Name', + dynamic: `${findObjectNamesPluralKey}.namePlural`, + required: true, + altersDynamicFields: true, + }, + { + key: 'id', + label: 'Id', + type: 'string', + dynamic: `${listRecordIdsKey}.id`, + required: true, + }, + ], + sample: { + id: '179ed459-79cf-41d9-ab85-96397fa8e936', + }, + perform, + }, +}; diff --git a/packages/twenty-zapier/src/creates/update_record.ts b/packages/twenty-zapier/src/creates/update_record.ts new file mode 100644 index 00000000000..7e80aa5cfd8 --- /dev/null +++ b/packages/twenty-zapier/src/creates/update_record.ts @@ -0,0 +1,56 @@ +import { Bundle, ZObject } from 'zapier-platform-core'; + +import { findObjectNamesSingularKey } from '../triggers/find_object_names_singular'; +import { capitalize } from '../utils/capitalize'; +import { recordInputFields } from '../utils/creates/creates.utils'; +import handleQueryParams from '../utils/handleQueryParams'; +import requestDb from '../utils/requestDb'; + +export const updateRecordKey = 'update_record'; + +const perform = async (z: ZObject, bundle: Bundle) => { + const data = bundle.inputData; + const nameSingular = data.nameSingular; + const id = data.id; + delete data.nameSingular; + delete data.id; + const query = ` + mutation update${capitalize(nameSingular)} { + update${capitalize(nameSingular)}( + data:{${handleQueryParams(data)}}, + id: "${id}" + ) + {id} + }`; + return await requestDb(z, bundle, query); +}; + +const updateRecordInputFields = async (z: ZObject, bundle: Bundle) => { + return recordInputFields(z, bundle, true); +}; + +export default { + display: { + description: 'Update a Record in Twenty.', + hidden: false, + label: 'Update Record', + }, + key: updateRecordKey, + noun: 'Record', + operation: { + inputFields: [ + { + key: 'nameSingular', + required: true, + label: 'Record Name', + dynamic: `${findObjectNamesSingularKey}.nameSingular`, + altersDynamicFields: true, + }, + updateRecordInputFields, + ], + sample: { + id: '179ed459-79cf-41d9-ab85-96397fa8e936', + }, + perform, + }, +}; diff --git a/packages/twenty-zapier/src/index.ts b/packages/twenty-zapier/src/index.ts index 35c777ca7a2..6f222841314 100644 --- a/packages/twenty-zapier/src/index.ts +++ b/packages/twenty-zapier/src/index.ts @@ -4,7 +4,10 @@ import 'dotenv/config'; const { version } = require('../package.json'); -import crudRecord, { crudRecordKey } from './creates/crud_record'; +import createRecord, { createRecordKey } from './creates/create_record'; +import crudRecord, { crudRecordKey } from './creates/create_record_2'; +import deleteRecord, { deleteRecordKey } from './creates/delete_record'; +import updateRecord, { updateRecordKey } from './creates/update_record'; import findObjectNamesPlural, { findObjectNamesPluralKey, } from './triggers/find_object_names_plural'; @@ -24,6 +27,9 @@ export default { [triggerRecordKey]: triggerRecord, }, creates: { + [createRecordKey]: createRecord, + [updateRecordKey]: updateRecord, + [deleteRecordKey]: deleteRecord, [crudRecordKey]: crudRecord, }, }; diff --git a/packages/twenty-zapier/src/test/creates/create_record.test.ts b/packages/twenty-zapier/src/test/creates/create_record.test.ts new file mode 100644 index 00000000000..1a922281c90 --- /dev/null +++ b/packages/twenty-zapier/src/test/creates/create_record.test.ts @@ -0,0 +1,70 @@ +import { Bundle, createAppTester, tools, ZObject } from 'zapier-platform-core'; + +import { createRecordKey } from '../../creates/create_record'; +import App from '../../index'; +import getBundle from '../../utils/getBundle'; +import requestDb from '../../utils/requestDb'; +const appTester = createAppTester(App); +tools.env.inject(); + +describe('creates.create_company', () => { + test('should run to create a Company Record', async () => { + const bundle = getBundle({ + nameSingular: 'Company', + name: 'Company Name', + address: 'Company Address', + domainName: 'Company Domain Name', + linkedinLink: { url: '/linkedin_url', label: 'Test linkedinUrl' }, + xLink: { url: '/x_url', label: 'Test xUrl' }, + annualRecurringRevenue: { + amountMicros: 100000000000, + currencyCode: 'USD', + }, + idealCustomerProfile: true, + employees: 25, + }); + const result = await appTester( + App.creates[createRecordKey].operation.perform, + bundle, + ); + expect(result).toBeDefined(); + expect(result.data?.createCompany?.id).toBeDefined(); + const checkDbResult = await appTester( + (z: ZObject, bundle: Bundle) => + requestDb( + z, + bundle, + `query findCompany {company(filter: {id: {eq: "${result.data.createCompany.id}"}}){id annualRecurringRevenue{amountMicros currencyCode}}}`, + ), + bundle, + ); + expect( + checkDbResult.data.company.annualRecurringRevenue.amountMicros, + ).toEqual(100000000000); + }); + test('should run to create a Person Record', async () => { + const bundle = getBundle({ + nameSingular: 'Person', + name: { firstName: 'John', lastName: 'Doe' }, + email: 'johndoe@gmail.com', + phone: '+33610203040', + city: 'Paris', + }); + const result = await appTester( + App.creates[createRecordKey].operation.perform, + bundle, + ); + expect(result).toBeDefined(); + expect(result.data?.createPerson?.id).toBeDefined(); + const checkDbResult = await appTester( + (z: ZObject, bundle: Bundle) => + requestDb( + z, + bundle, + `query findPerson {person(filter: {id: {eq: "${result.data.createPerson.id}"}}){phone}}`, + ), + bundle, + ); + expect(checkDbResult.data.person.phone).toEqual('+33610203040'); + }); +}); diff --git a/packages/twenty-zapier/src/test/creates/crud_record.test.ts b/packages/twenty-zapier/src/test/creates/create_record_2.test.ts similarity index 98% rename from packages/twenty-zapier/src/test/creates/crud_record.test.ts rename to packages/twenty-zapier/src/test/creates/create_record_2.test.ts index f1c177233fc..841bde68ad2 100644 --- a/packages/twenty-zapier/src/test/creates/crud_record.test.ts +++ b/packages/twenty-zapier/src/test/creates/create_record_2.test.ts @@ -1,6 +1,6 @@ import { Bundle, createAppTester, tools, ZObject } from 'zapier-platform-core'; -import { crudRecordKey } from '../../creates/crud_record'; +import { crudRecordKey } from '../../creates/create_record_2'; import App from '../../index'; import getBundle from '../../utils/getBundle'; import requestDb from '../../utils/requestDb'; diff --git a/packages/twenty-zapier/src/test/creates/delete_record.test.ts b/packages/twenty-zapier/src/test/creates/delete_record.test.ts new file mode 100644 index 00000000000..902e7643e5d --- /dev/null +++ b/packages/twenty-zapier/src/test/creates/delete_record.test.ts @@ -0,0 +1,49 @@ +import { Bundle, createAppTester, tools, ZObject } from 'zapier-platform-core'; + +import { createRecordKey } from '../../creates/create_record'; +import { deleteRecordKey } from '../../creates/delete_record'; +import App from '../../index'; +import getBundle from '../../utils/getBundle'; +import requestDb from '../../utils/requestDb'; +const appTester = createAppTester(App); + +tools.env.inject(); +describe('creates.delete_company', () => { + test('should run to delete a Company record', async () => { + const createBundle = getBundle({ + nameSingular: 'Company', + name: 'Delete Company Name', + employees: 25, + }); + + const createResult = await appTester( + App.creates[createRecordKey].operation.perform, + createBundle, + ); + + const companyId = createResult.data?.createCompany?.id; + + const deleteBundle = getBundle({ + nameSingular: 'Company', + id: companyId, + }); + + const deleteResult = await appTester( + App.creates[deleteRecordKey].operation.perform, + deleteBundle, + ); + + expect(deleteResult).toBeDefined(); + expect(deleteResult.data?.deleteCompany?.id).toBeDefined(); + const checkDbResult = await appTester( + (z: ZObject, bundle: Bundle) => + requestDb( + z, + bundle, + `query findCompanies {companies(filter: {id: {eq: "${companyId}"}}){edges{node{id}}}}`, + ), + deleteBundle, + ); + expect(checkDbResult.data.companies.edges.length).toEqual(0); + }); +}); diff --git a/packages/twenty-zapier/src/test/creates/update_record.test.ts b/packages/twenty-zapier/src/test/creates/update_record.test.ts new file mode 100644 index 00000000000..fafab1b06bb --- /dev/null +++ b/packages/twenty-zapier/src/test/creates/update_record.test.ts @@ -0,0 +1,50 @@ +import { Bundle, createAppTester, tools, ZObject } from 'zapier-platform-core'; + +import { createRecordKey } from '../../creates/create_record'; +import { updateRecordKey } from '../../creates/update_record'; +import App from '../../index'; +import getBundle from '../../utils/getBundle'; +import requestDb from '../../utils/requestDb'; +const appTester = createAppTester(App); + +tools.env.inject(); +describe('creates.update_company', () => { + test('should run to update a Company record', async () => { + const createBundle = getBundle({ + nameSingular: 'Company', + name: 'Company Name', + employees: 25, + }); + + const createResult = await appTester( + App.creates[createRecordKey].operation.perform, + createBundle, + ); + + const companyId = createResult.data?.createCompany?.id; + + const updateBundle = getBundle({ + nameSingular: 'Company', + id: companyId, + name: 'Updated Company Name', + }); + + const updateResult = await appTester( + App.creates[updateRecordKey].operation.perform, + updateBundle, + ); + + expect(updateResult).toBeDefined(); + expect(updateResult.data?.updateCompany?.id).toBeDefined(); + const checkDbResult = await appTester( + (z: ZObject, bundle: Bundle) => + requestDb( + z, + bundle, + `query findCompany {company(filter: {id: {eq: "${companyId}"}}){id name}}`, + ), + updateBundle, + ); + expect(checkDbResult.data.company.name).toEqual('Updated Company Name'); + }); +});