@@ -121,4 +121,186 @@ describe("Get functions", () => {
121121 assert . equal ( result [ 3 ] . index , 2 ) ;
122122 } ) ;
123123 } ) ;
124+
125+ describe ( "get.email_subject" , ( ) => {
126+ it ( "returns empty string when no subject element found" , ( ) => {
127+ // Mock returns null - test behavior, not implementation
128+ global . document . querySelector = ( ) => null ;
129+ const subject = gmail . get . email_subject ( ) ;
130+ assert . strictEqual ( subject , '' ) ;
131+ } ) ;
132+
133+ it ( "handles alternative subject selector as fallback" , ( ) => {
134+ // Test fallback behavior exists
135+ global . document . querySelector = ( selector ) => {
136+ if ( selector === '.nH .ha h2' ) {
137+ return { textContent : 'Fallback Subject' } ;
138+ }
139+ return null ;
140+ } ;
141+ const subject = gmail . get . email_subject ( ) ;
142+ assert . strictEqual ( subject , 'Fallback Subject' ) ;
143+ } ) ;
144+ } ) ;
145+
146+ describe ( "get.email_ids" , ( ) => {
147+ it ( "returns array of email IDs" , ( ) => {
148+ // Test return type - behavior focused
149+ const ids = gmail . get . email_ids ( ) ;
150+ assert ( Array . isArray ( ids ) ) ;
151+ } ) ;
152+
153+ it ( "returns empty array when no emails found" , ( ) => {
154+ // Test edge case behavior
155+ global . document . getElementsByClassName = ( ) => [ ] ;
156+ const ids = gmail . get . email_ids ( ) ;
157+ assert ( Array . isArray ( ids ) ) ;
158+ assert . strictEqual ( ids . length , 0 ) ;
159+ } ) ;
160+
161+ it ( "handles null elements gracefully" , ( ) => {
162+ // Test error handling
163+ global . document . getElementsByClassName = ( ) => [ null , undefined ] ;
164+ const ids = gmail . get . email_ids ( ) ;
165+ assert ( Array . isArray ( ids ) ) ;
166+ } ) ;
167+ } ) ;
168+
169+ describe ( "get.compose_ids" , ( ) => {
170+ it ( "returns array of compose window IDs" , ( ) => {
171+ // Test return type
172+ const ids = gmail . get . compose_ids ( ) ;
173+ assert ( Array . isArray ( ids ) ) ;
174+ } ) ;
175+
176+ it ( "returns empty array when no compose windows" , ( ) => {
177+ // Test edge case
178+ global . document . querySelectorAll = ( ) => [ ] ;
179+ const ids = gmail . get . compose_ids ( ) ;
180+ assert ( Array . isArray ( ids ) ) ;
181+ assert . strictEqual ( ids . length , 0 ) ;
182+ } ) ;
183+ } ) ;
184+
185+ describe ( "get.thread_id" , ( ) => {
186+ it ( "extracts thread ID from URL hash" , ( ) => {
187+ // Test basic functionality
188+ global . window . location . hash = "#inbox/1234567890abcdef" ;
189+ const threadId = gmail . get . thread_id ( ) ;
190+ assert . strictEqual ( threadId , '1234567890abcdef' ) ;
191+ } ) ;
192+
193+ it ( "returns null when no thread ID in hash" , ( ) => {
194+ // Test null case
195+ global . window . location . hash = "#inbox" ;
196+ const threadId = gmail . get . thread_id ( ) ;
197+ assert . strictEqual ( threadId , null ) ;
198+ } ) ;
199+
200+ it ( "handles empty hash" , ( ) => {
201+ // Test edge case
202+ global . window . location . hash = "" ;
203+ const threadId = gmail . get . thread_id ( ) ;
204+ assert . strictEqual ( threadId , null ) ;
205+ } ) ;
206+ } ) ;
207+
208+ describe ( "get.email_id" , ( ) => {
209+ it ( "returns thread ID (alias test)" , ( ) => {
210+ // Test that email_id is an alias for thread_id
211+ global . window . location . hash = "#inbox/1234567890abcdef" ;
212+ const emailId = gmail . get . email_id ( ) ;
213+ const threadId = gmail . get . thread_id ( ) ;
214+ assert . strictEqual ( emailId , threadId ) ;
215+ } ) ;
216+ } ) ;
217+
218+ describe ( "get.visible_emails" , ( ) => {
219+ it ( "returns array of visible email objects" , ( ) => {
220+ // Test return type
221+ const emails = gmail . get . visible_emails ( ) ;
222+ assert ( Array . isArray ( emails ) ) ;
223+ } ) ;
224+
225+ it ( "returns empty array when no visible emails" , ( ) => {
226+ // Test edge case
227+ global . document . querySelectorAll = ( ) => [ ] ;
228+ const emails = gmail . get . visible_emails ( ) ;
229+ assert ( Array . isArray ( emails ) ) ;
230+ assert . strictEqual ( emails . length , 0 ) ;
231+ } ) ;
232+ } ) ;
233+
234+ describe ( "get.selected_emails_data" , ( ) => {
235+ it ( "returns array of selected email data" , ( ) => {
236+ // Test return type
237+ const data = gmail . get . selected_emails_data ( ) ;
238+ assert ( Array . isArray ( data ) ) ;
239+ } ) ;
240+
241+ it ( "returns empty array when no emails selected" , ( ) => {
242+ // Test edge case
243+ global . document . querySelectorAll = ( ) => [ ] ;
244+ const data = gmail . get . selected_emails_data ( ) ;
245+ assert ( Array . isArray ( data ) ) ;
246+ assert . strictEqual ( data . length , 0 ) ;
247+ } ) ;
248+ } ) ;
249+
250+ describe ( "get.search_query" , ( ) => {
251+ it ( "extracts search query from URL hash" , ( ) => {
252+ // Test basic functionality
253+ global . window . location . hash = "#search/test+query" ;
254+ const query = gmail . get . search_query ( ) ;
255+ assert . strictEqual ( query , 'test query' ) ;
256+ } ) ;
257+
258+ it ( "returns empty string when not in search" , ( ) => {
259+ // Test non-search case
260+ global . window . location . hash = "#inbox" ;
261+ const query = gmail . get . search_query ( ) ;
262+ assert . strictEqual ( query , '' ) ;
263+ } ) ;
264+
265+ it ( "handles empty search" , ( ) => {
266+ // Test edge case
267+ global . window . location . hash = "#search/" ;
268+ const query = gmail . get . search_query ( ) ;
269+ assert . strictEqual ( query , '' ) ;
270+ } ) ;
271+ } ) ;
272+
273+ describe ( "get.unread_emails" , ( ) => {
274+ it ( "returns object with unread email counts" , ( ) => {
275+ // Test return type
276+ const unread = gmail . get . unread_emails ( ) ;
277+ assert ( typeof unread === 'object' ) ;
278+ } ) ;
279+ } ) ;
280+
281+ describe ( "Error handling" , ( ) => {
282+ it ( "handles null document gracefully" , ( ) => {
283+ // Test robustness
284+ global . document = null ;
285+ assert . doesNotThrow ( ( ) => {
286+ gmail . get . email_subject ( ) ;
287+ } ) ;
288+ } ) ;
289+
290+ it ( "handles missing window.location" , ( ) => {
291+ // Test robustness
292+ delete global . window . location ;
293+ assert . doesNotThrow ( ( ) => {
294+ gmail . get . thread_id ( ) ;
295+ } ) ;
296+ } ) ;
297+
298+ it ( "handles malformed hash values" , ( ) => {
299+ // Test error handling
300+ global . window . location . hash = "###invalid###" ;
301+ assert . doesNotThrow ( ( ) => {
302+ gmail . get . thread_id ( ) ;
303+ } ) ;
304+ } ) ;
305+ } ) ;
124306} ) ;
0 commit comments