1- import { ComponentFixture , TestBed } from '@angular/core/testing' ;
2-
1+ /* eslint-disable max-lines */
2+ /* eslint-disable dot-notation */
3+ import { ComponentFixture , TestBed , fakeAsync , tick } from '@angular/core/testing' ;
4+ import { FormBuilder , ReactiveFormsModule } from '@angular/forms' ;
5+ import { of } from 'rxjs' ;
36import { QboCompleteExportLogComponent } from './qbo-complete-export-log.component' ;
7+ import { ExportLogService } from 'src/app/core/services/common/export-log.service' ;
8+ import { PaginatorService } from 'src/app/core/services/common/paginator.service' ;
9+ import { WindowService } from 'src/app/core/services/common/window.service' ;
10+ import { UserService } from 'src/app/core/services/misc/user.service' ;
11+ import { AppName , PaginatorPage , TaskLogState } from 'src/app/core/models/enum/enum.model' ;
12+ import { AccountingExportModel } from 'src/app/core/models/db/accounting-export.model' ;
13+ import { mockExpenseGroupResponse , mockPageSize , mockUser } from 'src/app/integrations/qbo/qbo.fixture' ;
414
5- xdescribe ( 'QboCompleteExportLogComponent' , ( ) => {
15+ describe ( 'QboCompleteExportLogComponent' , ( ) => {
616 let component : QboCompleteExportLogComponent ;
717 let fixture : ComponentFixture < QboCompleteExportLogComponent > ;
18+ let exportLogService : jasmine . SpyObj < ExportLogService > ;
19+ let paginatorService : jasmine . SpyObj < PaginatorService > ;
20+ let windowService : jasmine . SpyObj < WindowService > ;
21+ let userService : jasmine . SpyObj < UserService > ;
822
923 beforeEach ( async ( ) => {
24+ const exportLogServiceSpy = jasmine . createSpyObj ( 'ExportLogService' , [ 'getExpenseGroups' ] ) ;
25+ const paginatorServiceSpy = jasmine . createSpyObj ( 'PaginatorService' , [ 'storePageSize' , 'getPageSize' ] ) ;
26+ const windowServiceSpy = jasmine . createSpyObj ( 'WindowService' , [ 'openInNewTab' ] ) ;
27+ const userServiceSpy = jasmine . createSpyObj ( 'UserService' , [ 'getUserProfile' ] ) ;
28+
1029 await TestBed . configureTestingModule ( {
11- declarations : [ QboCompleteExportLogComponent ]
12- } )
13- . compileComponents ( ) ;
30+ declarations : [ QboCompleteExportLogComponent ] ,
31+ imports : [ ReactiveFormsModule ] ,
32+ providers : [
33+ FormBuilder ,
34+ { provide : ExportLogService , useValue : exportLogServiceSpy } ,
35+ { provide : PaginatorService , useValue : paginatorServiceSpy } ,
36+ { provide : WindowService , useValue : windowServiceSpy } ,
37+ { provide : UserService , useValue : userServiceSpy }
38+ ]
39+ } ) . compileComponents ( ) ;
40+
41+ exportLogService = TestBed . inject ( ExportLogService ) as jasmine . SpyObj < ExportLogService > ;
42+ paginatorService = TestBed . inject ( PaginatorService ) as jasmine . SpyObj < PaginatorService > ;
43+ windowService = TestBed . inject ( WindowService ) as jasmine . SpyObj < WindowService > ;
44+ userService = TestBed . inject ( UserService ) as jasmine . SpyObj < UserService > ;
45+ } ) ;
46+
47+ beforeEach ( ( ) => {
48+ userService . getUserProfile . and . returnValue ( mockUser ) ;
49+ paginatorService . getPageSize . and . returnValue ( mockPageSize ) ;
50+ exportLogService . getExpenseGroups . and . returnValue ( of ( ) ) ;
1451
1552 fixture = TestBed . createComponent ( QboCompleteExportLogComponent ) ;
1653 component = fixture . componentInstance ;
@@ -20,4 +57,104 @@ xdescribe('QboCompleteExportLogComponent', () => {
2057 it ( 'should create' , ( ) => {
2158 expect ( component ) . toBeTruthy ( ) ;
2259 } ) ;
23- } ) ;
60+
61+ it ( 'should initialize with correct default values' , ( ) => {
62+ expect ( component . appName ) . toBe ( AppName . QBO ) ;
63+ expect ( component . totalCount ) . toBe ( 0 ) ;
64+ expect ( component . offset ) . toBe ( 0 ) ;
65+ expect ( component . currentPage ) . toBe ( 1 ) ;
66+ expect ( component . isDateSelected ) . toBeFalse ( ) ;
67+ expect ( component [ 'org_id' ] ) . toBe ( mockUser . org_id ) ;
68+ } ) ;
69+
70+ it ( 'should open expense in Fyle' , ( ) => {
71+ const expenseId = 'txGDE32dCf' ;
72+ component . openExpenseinFyle ( expenseId ) ;
73+ expect ( windowService . openInNewTab ) . toHaveBeenCalledWith (
74+ AccountingExportModel . getFyleExpenseUrl ( expenseId )
75+ ) ;
76+ } ) ;
77+
78+ it ( 'should handle simple search' , fakeAsync ( ( ) => {
79+ const query = 'test query' ;
80+ component . handleSimpleSearch ( query ) ;
81+ tick ( 1000 ) ;
82+ expect ( component . searchQuery ) . toBe ( query ) ;
83+ expect ( component . offset ) . toBe ( 0 ) ;
84+ expect ( component . currentPage ) . toBe ( 1 ) ;
85+ expect ( exportLogService . getExpenseGroups ) . toHaveBeenCalled ( ) ;
86+ } ) ) ;
87+
88+ it ( 'should handle page size changes' , ( ) => {
89+ const newLimit = 20 ;
90+ component . pageSizeChanges ( newLimit ) ;
91+ expect ( component . isLoading ) . toBeTrue ( ) ;
92+ expect ( component . currentPage ) . toBe ( 1 ) ;
93+ expect ( component . limit ) . toBe ( newLimit ) ;
94+ expect ( paginatorService . storePageSize ) . toHaveBeenCalledWith ( PaginatorPage . EXPORT_LOG , newLimit ) ;
95+ expect ( exportLogService . getExpenseGroups ) . toHaveBeenCalled ( ) ;
96+ } ) ;
97+
98+ it ( 'should handle page changes' , ( ) => {
99+ const newOffset = 10 ;
100+ component . pageChanges ( newOffset ) ;
101+ expect ( component . isLoading ) . toBeTrue ( ) ;
102+ expect ( component . offset ) . toBe ( newOffset ) ;
103+ expect ( component . currentPage ) . toBe ( 2 ) ;
104+ expect ( exportLogService . getExpenseGroups ) . toHaveBeenCalled ( ) ;
105+ } ) ;
106+
107+ it ( 'should setup form correctly' , ( ) => {
108+ expect ( component . exportLogForm ) . toBeDefined ( ) ;
109+ expect ( component . exportLogForm . get ( 'searchOption' ) ) . toBeDefined ( ) ;
110+ expect ( component . exportLogForm . get ( 'dateRange' ) ) . toBeDefined ( ) ;
111+ expect ( component . exportLogForm . get ( 'start' ) ) . toBeDefined ( ) ;
112+ expect ( component . exportLogForm . get ( 'end' ) ) . toBeDefined ( ) ;
113+ } ) ;
114+
115+ it ( 'should handle date range changes' , fakeAsync ( ( ) => {
116+ const dateRange = [ new Date ( ) , new Date ( ) ] ;
117+ component . exportLogForm . get ( 'start' ) ?. setValue ( dateRange ) ;
118+ tick ( 10 ) ;
119+ expect ( component . selectedDateFilter ) . toBeDefined ( ) ;
120+ expect ( component . isDateSelected ) . toBeTrue ( ) ;
121+ expect ( exportLogService . getExpenseGroups ) . toHaveBeenCalled ( ) ;
122+ } ) ) ;
123+
124+ it ( 'should handle null date range' , fakeAsync ( ( ) => {
125+ component . exportLogForm . get ( 'start' ) ?. setValue ( null ) ;
126+ tick ( ) ;
127+ expect ( component . selectedDateFilter ) . toBeNull ( ) ;
128+ expect ( component . isDateSelected ) . toBeFalse ( ) ;
129+ expect ( exportLogService . getExpenseGroups ) . toHaveBeenCalled ( ) ;
130+ } ) ) ;
131+
132+ it ( 'should parse expense group API response correctly' , ( ) => {
133+ exportLogService . getExpenseGroups . and . returnValue ( of ( mockExpenseGroupResponse ) ) ;
134+ component [ 'getAccountingExports' ] ( 10 , 0 ) ;
135+
136+ expect ( component . totalCount ) . toBe ( mockExpenseGroupResponse . count ) ;
137+ expect ( component . filteredAccountingExports . length ) . toBe ( mockExpenseGroupResponse . results . length ) ;
138+ expect ( component . accountingExports . length ) . toBe ( mockExpenseGroupResponse . results . length ) ;
139+
140+ // Check if the first expense group is parsed correctly
141+ const firstExpenseGroup = mockExpenseGroupResponse . results [ 0 ] ;
142+ expect ( firstExpenseGroup . expenses . length ) . toBe ( component . filteredAccountingExports [ 0 ] . expenses . length ) ;
143+
144+ // Check if the expense details are parsed correctly
145+ const firstExpense = firstExpenseGroup . expenses [ 0 ] ;
146+ expect ( firstExpense . expense_number ) . toBe ( mockExpenseGroupResponse . results [ 0 ] . expenses [ 0 ] . expense_number ) ;
147+ expect ( firstExpense . amount ) . toBe ( mockExpenseGroupResponse . results [ 0 ] . expenses [ 0 ] . amount ) ;
148+ expect ( firstExpense . currency ) . toBe ( mockExpenseGroupResponse . results [ 0 ] . expenses [ 0 ] . currency ) ;
149+ expect ( firstExpense . category ) . toBe ( mockExpenseGroupResponse . results [ 0 ] . expenses [ 0 ] . category ) ;
150+ expect ( firstExpense . expense_id ) . toBe ( mockExpenseGroupResponse . results [ 0 ] . expenses [ 0 ] . expense_id ) ;
151+
152+ // Check if the response logs are parsed correctly
153+ expect ( firstExpenseGroup . response_logs ) . toEqual ( mockExpenseGroupResponse . results [ 0 ] . response_logs ) ;
154+
155+ // Check if the dates are parsed correctly
156+ expect ( firstExpenseGroup . created_at ) . toEqual ( new Date ( mockExpenseGroupResponse . results [ 0 ] . created_at ) ) ;
157+ expect ( firstExpenseGroup . exported_at ) . toEqual ( new Date ( mockExpenseGroupResponse . results [ 0 ] . exported_at ) ) ;
158+ expect ( firstExpenseGroup . updated_at ) . toEqual ( new Date ( mockExpenseGroupResponse . results [ 0 ] . updated_at ) ) ;
159+ } ) ;
160+ } ) ;
0 commit comments