UNPKG

sql-code-generator

Version:

Generate code from your SQL schema and queries for type safety and development speed.

107 lines 5.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const domain_1 = require("../../../domain"); const extractResourceTypeAndNameFromDDL_1 = require("./extractResourceTypeAndNameFromDDL"); describe('extractResourceTypeAndNameFromDDL', () => { it('should throw a standard error if can not find a resource type and name in the query', () => { const ddl = 'CRETE POCEDURE'; // malformed try { (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); } catch (error) { expect(error.message).toEqual('resource creation type and name could not be found in ddl'); } }); it('should be able to find a table resource', () => { const ddl = 'create table super_cool_table ( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('super_cool_table'); expect(type).toEqual(domain_1.ResourceType.TABLE); }); it('should be able to find a TABLE resource', () => { const ddl = 'CREATE TABLE super_cool_table ( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('super_cool_table'); expect(type).toEqual(domain_1.ResourceType.TABLE); }); it('should be able to find a procedure resource', () => { const ddl = 'create procedure upsert_super_cool_thing ( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('upsert_super_cool_thing'); expect(type).toEqual(domain_1.ResourceType.PROCEDURE); }); it('should be able to find a PROCEDURE resource', () => { const ddl = 'CREATE PROCEDURE upsert_super_cool_thing ( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('upsert_super_cool_thing'); expect(type).toEqual(domain_1.ResourceType.PROCEDURE); }); it('should be able to find a function resource', () => { const ddl = 'create function find_super_cool_stuff ( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('find_super_cool_stuff'); expect(type).toEqual(domain_1.ResourceType.FUNCTION); }); it('should be able to find a FUNCTION resource', () => { const ddl = 'CREATE FUNCTION find_super_cool_stuff ( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('find_super_cool_stuff'); expect(type).toEqual(domain_1.ResourceType.FUNCTION); }); it('should be able to find a view resource', () => { const ddl = 'create view find_super_cool_stuff as ...'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('find_super_cool_stuff'); expect(type).toEqual(domain_1.ResourceType.VIEW); }); it('should be able to find a VIEW resource', () => { const ddl = 'CREATE VIEW find_super_cool_stuff AS SELECT ...'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('find_super_cool_stuff'); expect(type).toEqual(domain_1.ResourceType.VIEW); }); it('should be able to find a resource name even if encased in backticks', () => { const ddl = 'CREATE TABLE `super_cool_table` ( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('super_cool_table'); expect(type).toEqual(domain_1.ResourceType.TABLE); }); it('should be able to find the resource name even if there is no whitespace between name and definition start', () => { const ddl = 'CREATE TABLE super_cool_table( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('super_cool_table'); expect(type).toEqual(domain_1.ResourceType.TABLE); }); it('should be able to find a resource name when DEFINER is defined', () => { const ddl = 'CREATE DEFINER=`root`@`%` PROCEDURE `upsert_super_cool_thing`( ... )'; const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('upsert_super_cool_thing'); expect(type).toEqual(domain_1.ResourceType.PROCEDURE); }); describe('real world examples where error had previously occurred', () => { it('should be able to get resource name from this view definition', () => { const ddl = ` CREATE VIEW \`view_suggestion_current\` AS SELECT s.id, s.uuid, s.suggestion_source, s.external_id, s.suggested_idea_id, s.resultant_curated_idea_id, v.status, v.result, s.created_at, v.effective_at, v.created_at as updated_at FROM suggestion s JOIN suggestion_cvp cvp ON s.id = cvp.suggestion_id JOIN suggestion_version v ON v.id = cvp.suggestion_version_id; `.trim(); const { name, type } = (0, extractResourceTypeAndNameFromDDL_1.extractResourceTypeAndNameFromDDL)({ ddl }); expect(name).toEqual('view_suggestion_current'); expect(type).toEqual(domain_1.ResourceType.VIEW); }); }); }); //# sourceMappingURL=extractResourceTypeAndNameFromDDL.test.js.map