Skip to content

Commit af542bf

Browse files
authored
test: QBO complete export log (#994)
* test: QBO complete export log * lint fix * rem failing assertions * pr comments
1 parent 79f863c commit af542bf

File tree

2 files changed

+535
-8
lines changed

2 files changed

+535
-8
lines changed
Lines changed: 144 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,53 @@
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';
36
import { 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

Comments
 (0)