33use NaimSolong \DataExtractor \Builder \CsvBuilder ;
44
55it ('can build CSV output with headers ' , function () {
6- $ builder = new CsvBuilder () ;
6+ $ builder = new CsvBuilder ;
77 $ builder ->setSchemaName ('test_table ' );
88 $ builder ->setColumns (['id ' , 'name ' , 'email ' ]);
99 $ builder ->setData ([
1010 'id ' => 1 ,
1111 'name ' => 'John Doe ' ,
1212 'email ' => 'john@example.com ' ,
1313 ]);
14-
14+
1515 $ result = $ builder ->build ();
16-
16+
1717 expect ($ result )->toBeString ();
1818 expect ($ result )->toBe ("id,name,email \n1, \"John Doe \", \"john@example.com \"\n" );
1919});
2020
2121it ('can handle single row data ' , function () {
22- $ builder = new CsvBuilder () ;
22+ $ builder = new CsvBuilder ;
2323 $ builder ->setSchemaName ('users ' );
2424 $ builder ->setColumns (['id ' , 'name ' ]);
2525 $ builder ->setData ([
2626 'id ' => 1 ,
2727 'name ' => 'User 1 ' ,
2828 ]);
29-
29+
3030 $ result = $ builder ->build ();
31-
31+
3232 expect ($ result )->toBeString ();
3333 expect ($ result )->toBe ("id,name \n1, \"User 1 \"\n" );
3434});
3535
3636it ('can handle values with commas ' , function () {
37- $ builder = new CsvBuilder () ;
37+ $ builder = new CsvBuilder ;
3838 $ builder ->setSchemaName ('test_table ' );
3939 $ builder ->setColumns (['id ' , 'description ' ]);
4040 $ builder ->setData ([
4141 'id ' => 1 ,
4242 'description ' => 'This is a description, with commas ' ,
4343 ]);
44-
44+
4545 $ result = $ builder ->build ();
46-
46+
4747 expect ($ result )->toContain ('"This is a description, with commas" ' );
4848});
4949
5050it ('can handle values with quotes ' , function () {
51- $ builder = new CsvBuilder () ;
51+ $ builder = new CsvBuilder ;
5252 $ builder ->setSchemaName ('test_table ' );
5353 $ builder ->setColumns (['id ' , 'quote_test ' ]);
5454 $ builder ->setData ([
5555 'id ' => 1 ,
5656 'quote_test ' => 'He said "Hello World" ' ,
5757 ]);
58-
58+
5959 $ result = $ builder ->build ();
60-
60+
6161 expect ($ result )->toContain ('"He said ""Hello World""" ' );
6262});
6363
6464it ('can handle NULL values ' , function () {
65- $ builder = new CsvBuilder () ;
65+ $ builder = new CsvBuilder ;
6666 $ builder ->setSchemaName ('test_table ' );
6767 $ builder ->setColumns (['id ' , 'name ' , 'bio ' ]);
6868 $ builder ->setData ([
6969 'id ' => 1 ,
7070 'name ' => 'John Doe ' ,
7171 'bio ' => null ,
7272 ]);
73-
73+
7474 $ result = $ builder ->build ();
75-
75+
7676 expect ($ result )->toContain ('"John Doe","" ' );
7777});
7878
7979it ('can handle boolean values ' , function () {
80- $ builder = new CsvBuilder () ;
80+ $ builder = new CsvBuilder ;
8181 $ builder ->setSchemaName ('test_table ' );
8282 $ builder ->setColumns (['id ' , 'is_active ' , 'is_admin ' ]);
8383 $ builder ->setData ([
8484 'id ' => 1 ,
8585 'is_active ' => true ,
8686 'is_admin ' => false ,
8787 ]);
88-
88+
8989 $ result = $ builder ->build ();
90-
90+
9191 expect ($ result )->toContain ('1, \'1 \', \'0 \'' );
9292});
9393
9494it ('can handle array values as JSON strings ' , function () {
95- $ builder = new CsvBuilder () ;
95+ $ builder = new CsvBuilder ;
9696 $ builder ->setSchemaName ('test_table ' );
9797 $ builder ->setColumns (['id ' , 'metadata ' ]);
9898 $ builder ->setData ([
9999 'id ' => 1 ,
100100 'metadata ' => ['key ' => 'value ' , 'count ' => 5 ],
101101 ]);
102-
102+
103103 $ result = $ builder ->build ();
104-
104+
105105 expect ($ result )->toContain ('{"key":"value","count":5} ' );
106106});
107107
108108it ('can handle missing columns ' , function () {
109- $ builder = new CsvBuilder () ;
109+ $ builder = new CsvBuilder ;
110110 $ builder ->setSchemaName ('test_table ' );
111111 $ builder ->setColumns (['id ' , 'name ' , 'email ' ]);
112112 $ builder ->setData ([
113113 'id ' => 1 ,
114114 'name ' => 'John Doe ' ,
115115 // email is missing
116116 ]);
117-
117+
118118 $ result = $ builder ->build ();
119-
119+
120120 expect ($ result )->toContain ("'*****' " );
121121});
122122
123123it ('can handle empty data array ' , function () {
124- $ builder = new CsvBuilder () ;
124+ $ builder = new CsvBuilder ;
125125 $ builder ->setSchemaName ('test_table ' );
126126 $ builder ->setColumns (['id ' , 'name ' , 'email ' ]);
127127 $ builder ->setData ([]);
128-
128+
129129 $ result = $ builder ->build ();
130-
130+
131131 expect ($ result )->toBe ("id,name,email \n'*****','*****','*****' \n" );
132132});
133133
134134it ('can handle DateTime objects ' , function () {
135- $ builder = new CsvBuilder () ;
135+ $ builder = new CsvBuilder ;
136136 $ builder ->setSchemaName ('test_table ' );
137137 $ builder ->setColumns (['id ' , 'created_at ' ]);
138138 $ builder ->setData ([
139139 'id ' => 1 ,
140140 'created_at ' => new DateTime ('2023-01-01 12:00:00 ' ),
141141 ]);
142-
142+
143143 $ result = $ builder ->build ();
144-
144+
145145 expect ($ result )->toContain ('2023-01-01 12:00:00 ' );
146- });
146+ });
0 commit comments