Skip to content

Commit d90d357

Browse files
committed
add weblite tests
1 parent 3c73865 commit d90d357

File tree

3 files changed

+62
-19
lines changed

3 files changed

+62
-19
lines changed

src/packages/test/client.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('SQLiteCloudClient test suite', () => {
1919

2020
it('should be able to query the database', async () => {
2121
const { data, error } = await client.sql`SELECT * FROM ${DEFAULT_TABLE_NAME}`;
22-
22+
console.log(data, error)
2323
expect(data).toBeDefined()
2424
expect(error).toBeNull()
2525
})

src/packages/test/weblite.test.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { CHINOOK_DATABASE_URL } from "../../../test/shared";
2+
import { WebliteClient } from "../weblite/WebliteClient";
3+
4+
const client = new WebliteClient(CHINOOK_DATABASE_URL)
5+
6+
describe('WebliteClient test suite', () => {
7+
const DATABASE_NAME = `${Date.now()}.sqlite`
8+
9+
it('should be able to create a client', () => {
10+
expect(client).toBeDefined()
11+
expect(client).toBeInstanceOf(WebliteClient)
12+
})
13+
14+
it('should be able to create a database', async () => {
15+
const { data, error } = await client.createDatabase(DATABASE_NAME)
16+
expect(data).toBeDefined()
17+
expect(error).toBeNull()
18+
})
19+
20+
it('should be able to list databases', async () => {
21+
const { data, error } = await client.listDatabases()
22+
expect(data).toBeDefined()
23+
expect(data.length).toBeGreaterThan(0)
24+
expect(error).toBeNull()
25+
})
26+
27+
it('should be able to download and upload a database', async () => {
28+
const { data, error } = await client.downloadDatabase(DATABASE_NAME)
29+
expect(data).toBeDefined()
30+
expect(error).toBeNull()
31+
expect(data).toBeInstanceOf(ArrayBuffer)
32+
const response = await client.uploadDatabase(DATABASE_NAME + '_upload', Buffer.from(data as ArrayBuffer))
33+
expect(response.data).toBeTruthy()
34+
expect(response.error).toBeNull()
35+
})
36+
37+
it('should be able to delete a database', async () => {
38+
const deleteResponse = await client.deleteDatabase(DATABASE_NAME)
39+
const deleteCopyResponse = await client.deleteDatabase(DATABASE_NAME + '_upload')
40+
expect(deleteResponse.data).toBeDefined()
41+
expect(deleteResponse.error).toBeNull()
42+
expect(deleteCopyResponse.data).toBeDefined()
43+
expect(deleteCopyResponse.error).toBeNull()
44+
})
45+
})

src/packages/weblite/WebliteClient.ts

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export class WebliteClient {
3131
try {
3232
let _sql = ''
3333
if (Array.isArray(sql) && 'raw' in sql) { // check raw property?
34+
_sql = this._defaultDatabase ? `USE DATABASE ${this._defaultDatabase}; ` : '';
3435
sql.forEach((string, i) => {
3536
// TemplateStringsArray splits the string before each variable
3637
// used in the template. Add the question mark
@@ -52,7 +53,7 @@ export class WebliteClient {
5253
if (!response.ok) {
5354
throw new SQLiteCloudError(`Failed to execute sql: ${response.statusText}`)
5455
}
55-
return await response.json()
56+
return { error: null, ...(await response.json()) }
5657
} catch (error) {
5758
return { data: null, error }
5859
}
@@ -61,12 +62,17 @@ export class WebliteClient {
6162
get defaultDatabase() {
6263
return this._defaultDatabase
6364
}
64-
65+
// Set default database for .sql() calls
6566
useDatabase(name: string) {
6667
this._defaultDatabase = name
6768
return this
6869
}
6970

71+
72+
async createDatabase(filename: string) {
73+
return await this.sql`CREATE DATABASE ${filename}`;
74+
}
75+
7076
async uploadDatabase(
7177
filename: string,
7278
database: File | Buffer | Blob | string,
@@ -88,6 +94,7 @@ export class WebliteClient {
8894
}
8995

9096
const headers = {
97+
'Content-Type': 'application/octet-stream',
9198
...(opts.headers ?? {}),
9299
...this.headers,
93100
...DEFAULT_HEADERS,
@@ -100,7 +107,8 @@ export class WebliteClient {
100107
if (!response.ok) {
101108
throw new SQLiteCloudError(`Failed to upload database: ${response.statusText}`)
102109
}
103-
return await response.json()
110+
111+
return { error: null, ...(await response.json()) }
104112
} catch (error) {
105113
return { data: null, error }
106114
}
@@ -116,8 +124,10 @@ export class WebliteClient {
116124
if (!response.ok) {
117125
throw new SQLiteCloudError(`Failed to download database: ${response.statusText}`)
118126
}
127+
119128
const isNode = typeof window === 'undefined'
120-
return isNode ? await response.arrayBuffer() : await response.blob()
129+
const data = isNode ? await response.arrayBuffer() : await response.blob()
130+
return { error: null, data }
121131
} catch (error) {
122132
return { data: null, error }
123133
}
@@ -137,7 +147,7 @@ export class WebliteClient {
137147
if (!response.ok) {
138148
throw new SQLiteCloudError(`Failed to delete database: ${response.statusText}`)
139149
}
140-
return await response.json()
150+
return { error: null, ...(await response.json()) }
141151
} catch (error) {
142152
return { data: null, error }
143153
}
@@ -150,19 +160,7 @@ export class WebliteClient {
150160
if (!response.ok) {
151161
throw new SQLiteCloudError(`Failed to list databases: ${response.statusText}`)
152162
}
153-
return await response.json()
154-
} catch (error) {
155-
return { data: null, error }
156-
}
157-
}
158-
159-
async createDatabase(filename: string) {
160-
try {
161-
const response = await this.sql`CREATE DATABASE ${filename}`
162-
if (!response.ok) {
163-
throw new SQLiteCloudError(`Failed to create database: ${response.statusText}`)
164-
}
165-
return await response.json()
163+
return { error: null, ...(await response.json()) }
166164
} catch (error) {
167165
return { data: null, error }
168166
}

0 commit comments

Comments
 (0)