1+ import { Database , DataClass , KeyPath , Index } from "../index" ;
2+
3+ // Test entities for coverage improvement
4+ @DataClass ( )
5+ class CoverageUser {
6+ @KeyPath ( )
7+ id ! : string ;
8+
9+ @Index ( )
10+ age ! : number ;
11+
12+ @Index ( )
13+ status ! : string ;
14+
15+ @Index ( )
16+ score ! : number ;
17+
18+ constructor ( id : string , age : number , status : string , score : number ) {
19+ this . id = id ;
20+ this . age = age ;
21+ this . status = status ;
22+ this . score = score ;
23+ }
24+ }
25+
26+ describe ( 'Coverage Improvement Tests' , ( ) => {
27+ let db : any ;
28+
29+ beforeEach ( async ( ) => {
30+ // Use unique database names to avoid conflicts
31+ const dbName = `coverage-test-${ Date . now ( ) } -${ Math . random ( ) } ` ;
32+
33+ // Clear any existing database
34+ const deleteRequest = indexedDB . deleteDatabase ( dbName ) ;
35+ await new Promise < void > ( ( resolve ) => {
36+ deleteRequest . onsuccess = ( ) => resolve ( ) ;
37+ deleteRequest . onerror = ( ) => resolve ( ) ; // Continue even if deletion fails
38+ } ) ;
39+
40+ db = await Database . build ( dbName , [ CoverageUser ] ) ;
41+ } ) ;
42+
43+ describe ( 'QueryBuilder Coverage' , ( ) => {
44+ beforeEach ( async ( ) => {
45+ // Clear and add test data
46+ await db . CoverageUser . clear ( ) ;
47+ await db . CoverageUser . create ( new CoverageUser ( 'u1' , 25 , 'active' , 85 ) ) ;
48+ await db . CoverageUser . create ( new CoverageUser ( 'u2' , 30 , 'inactive' , 75 ) ) ;
49+ await db . CoverageUser . create ( new CoverageUser ( 'u3' , 35 , 'active' , 95 ) ) ;
50+ await db . CoverageUser . create ( new CoverageUser ( 'u4' , 20 , 'pending' , 65 ) ) ;
51+ } ) ;
52+
53+ it ( 'should test lte method in QueryBuilder' , async ( ) => {
54+ // Test lte method (line 62-65)
55+ const results = await db . CoverageUser . query ( )
56+ . where ( 'age' )
57+ . lte ( 30 )
58+ . execute ( ) ;
59+
60+ expect ( results ) . toHaveLength ( 3 ) ;
61+ expect ( results . map ( ( u : any ) => u . id ) ) . toEqual ( expect . arrayContaining ( [ 'u1' , 'u2' , 'u4' ] ) ) ;
62+ } ) ;
63+
64+ it ( 'should test lte comparison in query execution' , async ( ) => {
65+ // Test lte comparison (line 129)
66+ const results = await db . CoverageUser . query ( )
67+ . where ( 'score' )
68+ . lte ( 80 )
69+ . execute ( ) ;
70+
71+ expect ( results ) . toHaveLength ( 2 ) ;
72+ expect ( results . map ( ( u : any ) => u . id ) ) . toEqual ( expect . arrayContaining ( [ 'u2' , 'u4' ] ) ) ;
73+ } ) ;
74+
75+ it ( 'should test descending order sorting' , async ( ) => {
76+ // Test descending order (line 142)
77+ const results = await db . CoverageUser . query ( )
78+ . where ( 'status' )
79+ . equals ( 'active' )
80+ . orderBy ( 'age' , 'desc' )
81+ . execute ( ) ;
82+
83+ expect ( results ) . toHaveLength ( 2 ) ;
84+ expect ( results [ 0 ] . age ) . toBe ( 35 ) ; // u3 should be first
85+ expect ( results [ 1 ] . age ) . toBe ( 25 ) ; // u1 should be second
86+ } ) ;
87+
88+ it ( 'should test query with only lower bound' , async ( ) => {
89+ // Test lowerBound only (line 109)
90+ const results = await db . CoverageUser . query ( )
91+ . where ( 'age' )
92+ . gte ( 30 )
93+ . execute ( ) ;
94+
95+ expect ( results ) . toHaveLength ( 2 ) ;
96+ expect ( results . map ( ( u : any ) => u . id ) ) . toEqual ( expect . arrayContaining ( [ 'u2' , 'u3' ] ) ) ;
97+ } ) ;
98+
99+ it ( 'should test query with only upper bound' , async ( ) => {
100+ // Test upperBound only (line 110)
101+ const results = await db . CoverageUser . query ( )
102+ . where ( 'age' )
103+ . lte ( 30 )
104+ . execute ( ) ;
105+
106+ expect ( results ) . toHaveLength ( 3 ) ;
107+ expect ( results . map ( ( u : any ) => u . id ) ) . toEqual ( expect . arrayContaining ( [ 'u1' , 'u2' , 'u4' ] ) ) ;
108+ } ) ;
109+
110+ it ( 'should test query with both bounds' , async ( ) => {
111+ // Test bound (both lower and upper) (line 107)
112+ const results = await db . CoverageUser . query ( )
113+ . where ( 'age' )
114+ . gte ( 25 )
115+ . where ( 'age' )
116+ . lte ( 30 )
117+ . execute ( ) ;
118+
119+ expect ( results ) . toHaveLength ( 2 ) ;
120+ expect ( results . map ( ( u : any ) => u . id ) ) . toEqual ( expect . arrayContaining ( [ 'u1' , 'u2' ] ) ) ;
121+ } ) ;
122+ } ) ;
123+
124+ describe ( 'Repository Methods Coverage' , ( ) => {
125+ it ( 'should test count method' , async ( ) => {
126+ // Clear and add test data
127+ await db . CoverageUser . clear ( ) ;
128+ await db . CoverageUser . create ( new CoverageUser ( 'u1' , 25 , 'active' , 85 ) ) ;
129+ await db . CoverageUser . create ( new CoverageUser ( 'u2' , 30 , 'inactive' , 75 ) ) ;
130+
131+ // Test count method (lines 579-585)
132+ const count = await db . CoverageUser . count ( ) ;
133+ expect ( count ) . toBe ( 2 ) ;
134+ } ) ;
135+
136+ it ( 'should test exists method' , async ( ) => {
137+ // Clear and add test data
138+ await db . CoverageUser . clear ( ) ;
139+ await db . CoverageUser . create ( new CoverageUser ( 'u1' , 25 , 'active' , 85 ) ) ;
140+
141+ // Test exists method (lines 587-597)
142+ const exists1 = await db . CoverageUser . exists ( 'u1' ) ;
143+ expect ( exists1 ) . toBe ( true ) ;
144+
145+ const exists2 = await db . CoverageUser . exists ( 'nonexistent' ) ;
146+ expect ( exists2 ) . toBe ( false ) ;
147+ } ) ;
148+
149+ it ( 'should test clear method' , async ( ) => {
150+ // Add test data
151+ await db . CoverageUser . create ( new CoverageUser ( 'u1' , 25 , 'active' , 85 ) ) ;
152+ await db . CoverageUser . create ( new CoverageUser ( 'u2' , 30 , 'inactive' , 75 ) ) ;
153+
154+ // Verify data exists
155+ let count = await db . CoverageUser . count ( ) ;
156+ expect ( count ) . toBe ( 2 ) ;
157+
158+ // Test clear method (lines 599-609)
159+ await db . CoverageUser . clear ( ) ;
160+
161+ // Verify data is cleared
162+ count = await db . CoverageUser . count ( ) ;
163+ expect ( count ) . toBe ( 0 ) ;
164+ } ) ;
165+ } ) ;
166+
167+ describe ( 'Error Handling Coverage' , ( ) => {
168+ it ( 'should test database not initialized error' , async ( ) => {
169+ // Test performOperation when database is not initialized (line 627)
170+ const DatabaseClass = require ( '../index' ) . Database ;
171+ const uninitializedDb = new DatabaseClass ( 'testDb' , [ CoverageUser ] ) ;
172+ uninitializedDb . db = null ; // Force uninitialized state
173+
174+ try {
175+ await uninitializedDb . performOperation ( 'test' , 'readonly' , ( ) => { } ) ;
176+ fail ( 'Should have thrown an error' ) ;
177+ } catch ( error : any ) {
178+ expect ( error . message ) . toBe ( 'Database not initialized.' ) ;
179+ }
180+ } ) ;
181+ } ) ;
182+ } ) ;
0 commit comments