Skip to content

Commit 160aef4

Browse files
committed
add test in browser WebSQL
1 parent 99a9a8b commit 160aef4

File tree

6 files changed

+114
-37
lines changed

6 files changed

+114
-37
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"homepage": "https://github.com/fernandocode/ionic-database-builder#readme",
4747
"dependencies": {
4848
"@angular/core": ">=7.0.0",
49-
"database-builder": ">=0.1.0-rc.11"
49+
"database-builder": ">=0.1.0-rc.13"
5050
},
5151
"devDependencies": {
5252
"@angular-devkit/build-angular": "~0.10.0",

src/test/factory/database-browser.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { Injectable } from '@angular/core';
2+
import { DatabaseBaseTransaction, DatabaseConfig, DatabaseCreatorContract, DatabaseObject, DatabaseResult } from 'database-builder';
3+
4+
@Injectable()
5+
export class DatabaseBrowserProvider implements DatabaseCreatorContract {
6+
7+
create(config: DatabaseConfig): Promise<DatabaseObject> {
8+
console.log("Database WebSQL! \\o/");
9+
return new Promise<DatabaseObject>((resolve, reject) => {
10+
// o método OpenDatabase precisa de 4 parametros; o nome do banco de dados, a versão, a descrição e o tamanho estimado (em bytes)
11+
const db = (window as any).openDatabase(config.name, "1.0", config.name, 200000);
12+
13+
// de qualquer forma, sempre teste que o objeto foi instanciado direito antes de usá-lo
14+
if (!db) {
15+
reject("Não foi possivel iniciar o banco de dados no Browser!");
16+
}
17+
resolve(<DatabaseObject>{
18+
executeSql: (statement: string, params: any): Promise<DatabaseResult> => {
19+
return new Promise<DatabaseResult>((resolve, reject) => {
20+
if (
21+
statement.toUpperCase().indexOf("TRANSACTION") > -1
22+
||
23+
statement.toUpperCase().indexOf("COMMIT") > -1
24+
) {
25+
console.warn(`command sql ignored: '${statement}'`);
26+
resolve({} as DatabaseResult);
27+
return;
28+
}
29+
db.transaction((transaction: any) => {
30+
transaction.executeSql(statement, Array.isArray(params) ? params : [],
31+
(s: any, r: any) => resolve(r),
32+
(e: any, err: any) => {
33+
reject(err)
34+
});
35+
});
36+
});
37+
},
38+
transaction:
39+
(fn: (transaction: DatabaseBaseTransaction) => void): Promise<any> => {
40+
return db.transaction((transiction: any) => {
41+
fn({
42+
executeSql: (sql: string, values: any): Promise<DatabaseResult> => {
43+
return new Promise<DatabaseResult>((resolve, reject) => {
44+
transiction.executeSql(sql, Array.isArray(values) ? values : [],
45+
(s: any, r: any) => {
46+
resolve(r)
47+
},
48+
(e: any, err: any) => {
49+
reject(err)
50+
});
51+
});
52+
}
53+
});
54+
});
55+
}
56+
});
57+
});
58+
}
59+
60+
61+
62+
}

src/test/mapper.spec.ts

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { DatabaseMigrationService } from './provider/database-migration-service'
1111
import { DatabaseSettingsFactory } from './factory/database-settings-factory';
1212
import { TableMapper } from './mapper/table-mapper';
1313
import { DatabaseCreatorFake } from './factory/database-creator-fake';
14+
import { DatabaseBrowserProvider } from './factory/database-browser';
1415

1516
describe('Mapper', () => {
1617

@@ -32,7 +33,8 @@ describe('Mapper', () => {
3233
// useValue: true
3334
},
3435
{
35-
useClass: DatabaseCreatorFake
36+
useClass: DatabaseBrowserProvider
37+
// useClass: DatabaseCreatorFake
3638
// useClass: SQLite
3739
},
3840
{
@@ -77,7 +79,7 @@ describe('Mapper', () => {
7779

7880
const clienteToSave = {
7981
codeImport: 1,
80-
razaoSocial: 'Razão',
82+
razaoSocial: void 0,
8183
apelido: 'Apelido',
8284
cidade: {
8385
codeImport: 2,
@@ -102,39 +104,46 @@ describe('Mapper', () => {
102104
desativo: false
103105
} as Cliente;
104106

105-
it('Test mapper insert T', async(() => {
107+
it('Test mapper insert T', async () => {
106108
const database: Database = TestBed.get(Database);
107-
database.crud().then(crud => {
109+
const crud = await database.crud();
110+
const insert = crud.insert(Cliente, clienteToSave);
111+
const result = insert.compile();
112+
expect(result[0].params.toString()).toEqual([
113+
clienteToSave.codeImport, clienteToSave.razaoSocial, clienteToSave.apelido,
114+
clienteToSave.desativo, clienteToSave.cidade.codeImport, clienteToSave.classificacao.codeImport
115+
].toString());
116+
expect(result[0].query).toEqual('INSERT INTO Cliente (codeImport, razaoSocial, apelido, desativo, cidade_codeImport, classificacao_codeImport) VALUES (?, ?, ?, ?, ?, ?)');
117+
118+
const insertResult = await insert.execute();
119+
console.log(insertResult);
120+
121+
const queryResultNull = await crud.query(Cliente)
122+
.where(where => where.isNull(x => x.razaoSocial))
123+
.toList();
124+
125+
expect(queryResultNull.length).toEqual(1);
126+
});
127+
128+
it('Test transaction mapper insert T', async () => {
129+
const database: Database = TestBed.get(Database);
130+
let rollback = () => {
131+
database.rollbackTransaction().then().catch();
132+
}
133+
const crud = await database.beginTransaction()
134+
try {
108135
const result = crud.insert(Cliente, clienteToSave).compile();
109136
expect(result[0].params.toString()).toEqual([
110137
clienteToSave.codeImport, clienteToSave.razaoSocial, clienteToSave.apelido,
111138
clienteToSave.desativo, clienteToSave.cidade.codeImport, clienteToSave.classificacao.codeImport
112139
].toString());
113140
expect(result[0].query).toEqual('INSERT INTO Cliente (codeImport, razaoSocial, apelido, desativo, cidade_codeImport, classificacao_codeImport) VALUES (?, ?, ?, ?, ?, ?)');
114-
});
115-
}));
116-
117-
it('Test transaction mapper insert T', async(() => {
118-
const database: Database = TestBed.get(Database);
119-
let rollback = () => {
120-
database.rollbackTransaction().then().catch();
141+
const commitResult = await database.commitTransaction()
142+
expect(commitResult).toEqual(true);
121143
}
122-
database.beginTransaction().then(crud => {
123-
try {
124-
const result = crud.insert(Cliente, clienteToSave).compile();
125-
expect(result[0].params.toString()).toEqual([
126-
clienteToSave.codeImport, clienteToSave.razaoSocial, clienteToSave.apelido,
127-
clienteToSave.desativo, clienteToSave.cidade.codeImport, clienteToSave.classificacao.codeImport
128-
].toString());
129-
expect(result[0].query).toEqual('INSERT INTO Cliente (codeImport, razaoSocial, apelido, desativo, cidade_codeImport, classificacao_codeImport) VALUES (?, ?, ?, ?, ?, ?)');
130-
database.commitTransaction().then(x => {
131-
expect(x).toEqual(true);
132-
}).catch(rollback);
133-
}
134-
catch (e) {
135-
rollback();
136-
}
137-
});
138-
}));
144+
catch (e) {
145+
rollback();
146+
}
147+
});
139148

140149
});

src/test/mapper/table-mapper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class TableMapper extends MapperBase {
2828
this.autoMapper(TestClazz, x => x.id, PrimaryKeyType.AutoIncrement);
2929
this.autoMapper(Regiao, x => x.codeImport, PrimaryKeyType.AutoIncrement);
3030
this.autoMapper(SubRegiao, x => x.codeImport, PrimaryKeyType.AutoIncrement);
31-
this.autoMapper(Uf, x => x.codeImport, PrimaryKeyType.AutoIncrement);
31+
this.autoMapper(Uf, x => x.codeImport, PrimaryKeyType.Guid);
3232
this.autoMapper(Cidade, x => x.codeImport, PrimaryKeyType.AutoIncrement);
3333
this.autoMapper(Classificacao, x => x.codeImport, PrimaryKeyType.AutoIncrement);
3434
this.autoMapper(Cliente, x => x.internalKey, PrimaryKeyType.AutoIncrement);

src/test/provider/database-migration-service.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,19 @@ import { Injectable } from '@angular/core';
33
import { DatabaseTransaction } from 'database-builder';
44
import { DatabaseMigrationContract, Version } from '../..';
55
import { Observable } from 'rxjs';
6+
import { DatabaseResettableContract } from '../../providers/database-resettable-contract';
67

78
@Injectable()
89
export class DatabaseMigrationService extends DatabaseMigrationContract {
910

10-
public to(version: Version, transation: DatabaseTransaction, mappers: GetMapper): Observable<any>[] {
11+
public to(version: Version, transation: DatabaseTransaction, mappers: GetMapper, resettable: DatabaseResettableContract): Observable<any>[] {
1112
const observablesNested: Observable<any>[] = [];
1213

14+
if (!(window as any)._resetCalled) {
15+
resettable.reset(transation);
16+
(window as any)._resetCalled = true;
17+
}
18+
1319
// if (version.oldVersion < 2.0) {
1420
// observablesNested.push(this.migration_v2_0(transation, version, mappers));
1521
// }

0 commit comments

Comments
 (0)