@@ -60,3 +60,46 @@ it("transpiles node cells", () => {
6060 expect ( transpile ( "process.stdout.write(`Node $\\{process.version}`);" , "node" ) ) . toMatchSnapshot ( ) ;
6161 expect ( transpile ( "process.stdout.write(`Node \\$\\{process.version}`);" , "node" ) ) . toMatchSnapshot ( ) ;
6262} ) ;
63+
64+ it ( "transpiles DatabaseClient" , ( ) => {
65+ expect ( transpile ( 'const client = new DatabaseClient("name", {type: "duckdb"});' , "js" ) ) . toMatchSnapshot ( ) ;
66+ } ) ;
67+
68+ it ( "rewrites DatabaseClient calls with type option" , ( ) => {
69+ const databases = new Map ( [ [ "duckdb-base" , { type : "duckdb" } ] , [ "postgres-base" , { type : "postgres" } ] , [ "mydb-base" , { type : "sqlite" } ] ] ) ;
70+ expect ( transpile ( 'DatabaseClient("duckdb-base")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
71+ expect ( transpile ( 'const client = DatabaseClient("postgres-base");' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
72+ expect ( transpile ( 'const x = DatabaseClient("mydb-base");' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
73+ } ) ;
74+
75+ it ( "does not rewrite DatabaseClient with existing options" , ( ) => {
76+ const databases = new Map ( [ [ "duckdb-base" , { type : "duckdb" } ] ] ) ;
77+ expect ( transpile ( 'DatabaseClient("duckdb-base", {id: 1})' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
78+ expect ( transpile ( 'DatabaseClient("duckdb-base", {type: "postgres"})' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
79+ } ) ;
80+
81+ it ( "throws error for unknown database name" , ( ) => {
82+ const databases = new Map ( [ [ "duckdb-base" , { type : "duckdb" } ] ] ) ;
83+ expect ( ( ) => transpile ( 'DatabaseClient("unknown")' , "js" , { databases} ) ) . toThrow ( "database not found: unknown" ) ;
84+ } ) ;
85+
86+ it ( "throws error for non-string-literal database name" , ( ) => {
87+ const databases = new Map ( [ [ "duckdb-base" , { type : "duckdb" } ] ] ) ;
88+ expect ( ( ) => transpile ( "DatabaseClient(dbName)" , "js" , { databases} ) ) . toThrow ( "DatabaseClient name must be a string literal" ) ;
89+ expect ( ( ) => transpile ( "DatabaseClient(`template-${x}`)" , "js" , { databases} ) ) . toThrow ( "DatabaseClient name must be a string literal" ) ;
90+ } ) ;
91+
92+ it ( "rewrites DatabaseClient with default database names" , ( ) => {
93+ const databases = new Map ( ) ;
94+ expect ( transpile ( 'DatabaseClient("postgres")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
95+ expect ( transpile ( 'DatabaseClient("duckdb")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
96+ expect ( transpile ( 'DatabaseClient("sqlite")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
97+ } ) ;
98+
99+ it ( "rewrites DatabaseClient with file extension detection" , ( ) => {
100+ const databases = new Map ( ) ;
101+ expect ( transpile ( 'DatabaseClient("data.duckdb")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
102+ expect ( transpile ( 'DatabaseClient("mydata.db")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
103+ expect ( transpile ( 'DatabaseClient("path/to/file.duckdb")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
104+ expect ( transpile ( 'DatabaseClient("path/to/file.db")' , "js" , { databases} ) ) . toMatchSnapshot ( ) ;
105+ } ) ;
0 commit comments